From 7a6ef6b9350ff1a2a70ff3b6f1695f921927992d Mon Sep 17 00:00:00 2001 From: shuff57 <62350898+shuff57@users.noreply.github.com> Date: Sun, 11 Oct 2026 21:14:20 -0700 Subject: [PATCH] Add equaSHion: the equation editor as five crates (math, font, layout, render, egui) Extracted from WordCraft and shared by WordCraft and DeckCraft. Keeps the equashion-* names; assets, test corpus and goldens sit at the repo root so the crates' relative paths are unchanged. Co-Authored-By: Claude Sonnet 5.5 --- ATTRIBUTION.md | 14 +- Cargo.lock | 392 ++- Cargo.toml | 18 + README.md | 3 +- assets/fonts/Inter-Regular.ttf | Bin 0 -> 411640 bytes assets/fonts/OFL-Inter.txt | 92 + assets/fonts/OFL-STIXTwoMath.txt | 92 + assets/fonts/OFL-SourceSerif4.txt | 93 + assets/fonts/STIXTwoMath-Regular.otf | Bin 0 -> 838652 bytes assets/fonts/SourceSerif4-Bold.ttf | Bin 0 -> 271568 bytes assets/fonts/SourceSerif4-BoldIt.ttf | Bin 0 -> 191832 bytes assets/fonts/SourceSerif4-It.ttf | Bin 0 -> 187808 bytes assets/fonts/SourceSerif4-Regular.ttf | Bin 0 -> 261868 bytes corpus/equations.tsv | 45 + corpus/latex.tsv | 92 + corpus/omml/deckcraft_pptx_roundtrip_frac.xml | 1 + .../deckcraft_pptx_roundtrip_frac_rpr.xml | 1 + corpus/omml/wordcraft_docx_fixture_ssup.xml | 1 + .../wordcraft_docx_roundtrip_display_rad.xml | 1 + ...wordcraft_docx_roundtrip_foreign_attrs.xml | 1 + corpus/omml/wordcraft_docx_roundtrip_frac.xml | 1 + crates/equashion-egui/Cargo.toml | 34 + crates/equashion-egui/examples/widget.rs | 85 + crates/equashion-egui/src/gallery.rs | 169 ++ crates/equashion-egui/src/lib.rs | 800 ++++++ crates/equashion-egui/src/palette.rs | 150 ++ crates/equashion-egui/src/tests.rs | 644 +++++ crates/equashion-egui/tests/shared_context.rs | 116 + crates/equashion-font/Cargo.toml | 33 + crates/equashion-font/src/fontdb.rs | 862 +++++++ crates/equashion-font/src/lib.rs | 262 ++ crates/equashion-layout/Cargo.toml | 29 + crates/equashion-layout/src/lib.rs | 54 + crates/equashion-layout/src/math.rs | 2165 +++++++++++++++++ crates/equashion-layout/src/scene.rs | 37 + crates/equashion-layout/src/tests.rs | 101 + crates/equashion-layout/tests/corpus.rs | 130 + crates/equashion-math/Cargo.toml | 25 + .../equashion-math/examples/latex_corpus.rs | 8 + crates/equashion-math/examples/typed.rs | 11 + crates/equashion-math/src/edit.rs | 1993 +++++++++++++++ crates/equashion-math/src/edit/tests.rs | 955 ++++++++ crates/equashion-math/src/funcs.rs | 35 + crates/equashion-math/src/gallery.json | 1 + crates/equashion-math/src/gallery.rs | 140 ++ crates/equashion-math/src/latex.rs | 620 +++++ crates/equashion-math/src/lib.rs | 167 ++ crates/equashion-math/src/linear.rs | 1736 +++++++++++++ crates/equashion-math/src/mathml.rs | 1103 +++++++++ crates/equashion-math/src/omml.rs | 757 ++++++ crates/equashion-math/src/templates.rs | 132 + crates/equashion-math/src/tests.rs | 1236 ++++++++++ crates/equashion-math/src/xml.rs | 491 ++++ crates/equashion-math/tests/corpus.rs | 92 + crates/equashion-math/tests/latex_corpus.rs | 19 + crates/equashion-math/tests/mathml_corpus.rs | 171 ++ crates/equashion-render/Cargo.toml | 34 + crates/equashion-render/examples/bench.rs | 20 + crates/equashion-render/src/lib.rs | 250 ++ crates/equashion-render/src/svg.rs | 150 ++ crates/equashion-render/tests/golden.rs | 159 ++ docs/equashion/DIVERGENCE.md | 87 + docs/equashion/PROVENANCE.md | 224 ++ docs/equashion/README.md | 22 + tests/golden/abs_tall.json | 11 + tests/golden/abs_tall.svg | 11 + tests/golden/accent_bar.json | 11 + tests/golden/accent_bar.svg | 20 + tests/golden/accent_hat.json | 11 + tests/golden/accent_hat.svg | 17 + tests/golden/accent_vec.json | 11 + tests/golden/accent_vec.svg | 17 + tests/golden/angle.json | 11 + tests/golden/angle.svg | 17 + tests/golden/binom.json | 11 + tests/golden/binom.svg | 44 + tests/golden/bmatrix.json | 11 + tests/golden/bmatrix.svg | 35 + tests/golden/boxed.json | 11 + tests/golden/boxed.svg | 21 + tests/golden/cases.json | 11 + tests/golden/cases.svg | 38 + tests/golden/cfrac.json | 11 + tests/golden/cfrac.svg | 47 + tests/golden/delims_tall.json | 11 + tests/golden/delims_tall.svg | 27 + tests/golden/euler.json | 11 + tests/golden/euler.svg | 23 + tests/golden/floor_ceil.json | 11 + tests/golden/floor_ceil.svg | 23 + tests/golden/frac_nested.json | 11 + tests/golden/frac_nested.svg | 19 + tests/golden/frac_nested_inline.json | 11 + tests/golden/frac_nested_inline.svg | 13 + tests/golden/frac_simple.json | 11 + tests/golden/frac_simple.svg | 9 + tests/golden/func.json | 11 + tests/golden/func.svg | 33 + tests/golden/greek.json | 11 + tests/golden/greek.svg | 17 + tests/golden/int_display.json | 11 + tests/golden/int_display.svg | 23 + tests/golden/int_inline.json | 11 + tests/golden/int_inline.svg | 23 + tests/golden/lim_display.json | 11 + tests/golden/lim_display.svg | 32 + tests/golden/lim_inline.json | 11 + tests/golden/lim_inline.svg | 38 + tests/golden/long_wrap.json | 11 + tests/golden/long_wrap.svg | 242 ++ tests/golden/maxwell_ampere.json | 11 + tests/golden/maxwell_ampere.svg | 51 + tests/golden/maxwell_faraday.json | 11 + tests/golden/maxwell_faraday.svg | 30 + tests/golden/maxwell_gauss.json | 11 + tests/golden/maxwell_gauss.svg | 24 + tests/golden/oint.json | 11 + tests/golden/oint.svg | 17 + .../omml_deckcraft_pptx_roundtrip_frac.json | 11 + .../omml_deckcraft_pptx_roundtrip_frac.svg | 9 + ...mml_deckcraft_pptx_roundtrip_frac_rpr.json | 11 + ...omml_deckcraft_pptx_roundtrip_frac_rpr.svg | 9 + .../omml_wordcraft_docx_fixture_ssup.json | 11 + .../omml_wordcraft_docx_fixture_ssup.svg | 8 + ..._wordcraft_docx_roundtrip_display_rad.json | 11 + ...l_wordcraft_docx_roundtrip_display_rad.svg | 6 + ...ordcraft_docx_roundtrip_foreign_attrs.json | 11 + ...wordcraft_docx_roundtrip_foreign_attrs.svg | 5 + .../omml_wordcraft_docx_roundtrip_frac.json | 11 + .../omml_wordcraft_docx_roundtrip_frac.svg | 15 + tests/golden/overbrace.json | 11 + tests/golden/overbrace.svg | 21 + tests/golden/overline.json | 11 + tests/golden/overline.svg | 9 + tests/golden/overrightarrow.json | 11 + tests/golden/overrightarrow.svg | 9 + tests/golden/pmatrix.json | 11 + tests/golden/pmatrix.svg | 16 + tests/golden/prod_display.json | 11 + tests/golden/prod_display.svg | 18 + tests/golden/quadratic.json | 11 + tests/golden/quadratic.svg | 43 + tests/golden/script_both.json | 11 + tests/golden/script_both.svg | 11 + tests/golden/script_nested.json | 11 + tests/golden/script_nested.svg | 14 + tests/golden/script_sub.json | 11 + tests/golden/script_sub.svg | 8 + tests/golden/script_sup.json | 11 + tests/golden/script_sup.svg | 8 + tests/golden/sqrt.json | 11 + tests/golden/sqrt.svg | 18 + tests/golden/sqrt_degree.json | 11 + tests/golden/sqrt_degree.svg | 15 + tests/golden/sqrt_nested.json | 11 + tests/golden/sqrt_nested.svg | 20 + tests/golden/sum_display.json | 11 + tests/golden/sum_display.svg | 21 + tests/golden/sum_inline.json | 11 + tests/golden/sum_inline.svg | 21 + tests/golden/underbrace.json | 11 + tests/golden/underbrace.svg | 27 + tests/golden/wide_matrix.json | 11 + tests/golden/wide_matrix.svg | 152 ++ 164 files changed, 19083 insertions(+), 17 deletions(-) create mode 100644 assets/fonts/Inter-Regular.ttf create mode 100644 assets/fonts/OFL-Inter.txt create mode 100644 assets/fonts/OFL-STIXTwoMath.txt create mode 100644 assets/fonts/OFL-SourceSerif4.txt create mode 100644 assets/fonts/STIXTwoMath-Regular.otf create mode 100644 assets/fonts/SourceSerif4-Bold.ttf create mode 100644 assets/fonts/SourceSerif4-BoldIt.ttf create mode 100644 assets/fonts/SourceSerif4-It.ttf create mode 100644 assets/fonts/SourceSerif4-Regular.ttf create mode 100644 corpus/equations.tsv create mode 100644 corpus/latex.tsv create mode 100644 corpus/omml/deckcraft_pptx_roundtrip_frac.xml create mode 100644 corpus/omml/deckcraft_pptx_roundtrip_frac_rpr.xml create mode 100644 corpus/omml/wordcraft_docx_fixture_ssup.xml create mode 100644 corpus/omml/wordcraft_docx_roundtrip_display_rad.xml create mode 100644 corpus/omml/wordcraft_docx_roundtrip_foreign_attrs.xml create mode 100644 corpus/omml/wordcraft_docx_roundtrip_frac.xml create mode 100644 crates/equashion-egui/Cargo.toml create mode 100644 crates/equashion-egui/examples/widget.rs create mode 100644 crates/equashion-egui/src/gallery.rs create mode 100644 crates/equashion-egui/src/lib.rs create mode 100644 crates/equashion-egui/src/palette.rs create mode 100644 crates/equashion-egui/src/tests.rs create mode 100644 crates/equashion-egui/tests/shared_context.rs create mode 100644 crates/equashion-font/Cargo.toml create mode 100644 crates/equashion-font/src/fontdb.rs create mode 100644 crates/equashion-font/src/lib.rs create mode 100644 crates/equashion-layout/Cargo.toml create mode 100644 crates/equashion-layout/src/lib.rs create mode 100644 crates/equashion-layout/src/math.rs create mode 100644 crates/equashion-layout/src/scene.rs create mode 100644 crates/equashion-layout/src/tests.rs create mode 100644 crates/equashion-layout/tests/corpus.rs create mode 100644 crates/equashion-math/Cargo.toml create mode 100644 crates/equashion-math/examples/latex_corpus.rs create mode 100644 crates/equashion-math/examples/typed.rs create mode 100644 crates/equashion-math/src/edit.rs create mode 100644 crates/equashion-math/src/edit/tests.rs create mode 100644 crates/equashion-math/src/funcs.rs create mode 100644 crates/equashion-math/src/gallery.json create mode 100644 crates/equashion-math/src/gallery.rs create mode 100644 crates/equashion-math/src/latex.rs create mode 100644 crates/equashion-math/src/lib.rs create mode 100644 crates/equashion-math/src/linear.rs create mode 100644 crates/equashion-math/src/mathml.rs create mode 100644 crates/equashion-math/src/omml.rs create mode 100644 crates/equashion-math/src/templates.rs create mode 100644 crates/equashion-math/src/tests.rs create mode 100644 crates/equashion-math/src/xml.rs create mode 100644 crates/equashion-math/tests/corpus.rs create mode 100644 crates/equashion-math/tests/latex_corpus.rs create mode 100644 crates/equashion-math/tests/mathml_corpus.rs create mode 100644 crates/equashion-render/Cargo.toml create mode 100644 crates/equashion-render/examples/bench.rs create mode 100644 crates/equashion-render/src/lib.rs create mode 100644 crates/equashion-render/src/svg.rs create mode 100644 crates/equashion-render/tests/golden.rs create mode 100644 docs/equashion/DIVERGENCE.md create mode 100644 docs/equashion/PROVENANCE.md create mode 100644 docs/equashion/README.md create mode 100644 tests/golden/abs_tall.json create mode 100644 tests/golden/abs_tall.svg create mode 100644 tests/golden/accent_bar.json create mode 100644 tests/golden/accent_bar.svg create mode 100644 tests/golden/accent_hat.json create mode 100644 tests/golden/accent_hat.svg create mode 100644 tests/golden/accent_vec.json create mode 100644 tests/golden/accent_vec.svg create mode 100644 tests/golden/angle.json create mode 100644 tests/golden/angle.svg create mode 100644 tests/golden/binom.json create mode 100644 tests/golden/binom.svg create mode 100644 tests/golden/bmatrix.json create mode 100644 tests/golden/bmatrix.svg create mode 100644 tests/golden/boxed.json create mode 100644 tests/golden/boxed.svg create mode 100644 tests/golden/cases.json create mode 100644 tests/golden/cases.svg create mode 100644 tests/golden/cfrac.json create mode 100644 tests/golden/cfrac.svg create mode 100644 tests/golden/delims_tall.json create mode 100644 tests/golden/delims_tall.svg create mode 100644 tests/golden/euler.json create mode 100644 tests/golden/euler.svg create mode 100644 tests/golden/floor_ceil.json create mode 100644 tests/golden/floor_ceil.svg create mode 100644 tests/golden/frac_nested.json create mode 100644 tests/golden/frac_nested.svg create mode 100644 tests/golden/frac_nested_inline.json create mode 100644 tests/golden/frac_nested_inline.svg create mode 100644 tests/golden/frac_simple.json create mode 100644 tests/golden/frac_simple.svg create mode 100644 tests/golden/func.json create mode 100644 tests/golden/func.svg create mode 100644 tests/golden/greek.json create mode 100644 tests/golden/greek.svg create mode 100644 tests/golden/int_display.json create mode 100644 tests/golden/int_display.svg create mode 100644 tests/golden/int_inline.json create mode 100644 tests/golden/int_inline.svg create mode 100644 tests/golden/lim_display.json create mode 100644 tests/golden/lim_display.svg create mode 100644 tests/golden/lim_inline.json create mode 100644 tests/golden/lim_inline.svg create mode 100644 tests/golden/long_wrap.json create mode 100644 tests/golden/long_wrap.svg create mode 100644 tests/golden/maxwell_ampere.json create mode 100644 tests/golden/maxwell_ampere.svg create mode 100644 tests/golden/maxwell_faraday.json create mode 100644 tests/golden/maxwell_faraday.svg create mode 100644 tests/golden/maxwell_gauss.json create mode 100644 tests/golden/maxwell_gauss.svg create mode 100644 tests/golden/oint.json create mode 100644 tests/golden/oint.svg create mode 100644 tests/golden/omml_deckcraft_pptx_roundtrip_frac.json create mode 100644 tests/golden/omml_deckcraft_pptx_roundtrip_frac.svg create mode 100644 tests/golden/omml_deckcraft_pptx_roundtrip_frac_rpr.json create mode 100644 tests/golden/omml_deckcraft_pptx_roundtrip_frac_rpr.svg create mode 100644 tests/golden/omml_wordcraft_docx_fixture_ssup.json create mode 100644 tests/golden/omml_wordcraft_docx_fixture_ssup.svg create mode 100644 tests/golden/omml_wordcraft_docx_roundtrip_display_rad.json create mode 100644 tests/golden/omml_wordcraft_docx_roundtrip_display_rad.svg create mode 100644 tests/golden/omml_wordcraft_docx_roundtrip_foreign_attrs.json create mode 100644 tests/golden/omml_wordcraft_docx_roundtrip_foreign_attrs.svg create mode 100644 tests/golden/omml_wordcraft_docx_roundtrip_frac.json create mode 100644 tests/golden/omml_wordcraft_docx_roundtrip_frac.svg create mode 100644 tests/golden/overbrace.json create mode 100644 tests/golden/overbrace.svg create mode 100644 tests/golden/overline.json create mode 100644 tests/golden/overline.svg create mode 100644 tests/golden/overrightarrow.json create mode 100644 tests/golden/overrightarrow.svg create mode 100644 tests/golden/pmatrix.json create mode 100644 tests/golden/pmatrix.svg create mode 100644 tests/golden/prod_display.json create mode 100644 tests/golden/prod_display.svg create mode 100644 tests/golden/quadratic.json create mode 100644 tests/golden/quadratic.svg create mode 100644 tests/golden/script_both.json create mode 100644 tests/golden/script_both.svg create mode 100644 tests/golden/script_nested.json create mode 100644 tests/golden/script_nested.svg create mode 100644 tests/golden/script_sub.json create mode 100644 tests/golden/script_sub.svg create mode 100644 tests/golden/script_sup.json create mode 100644 tests/golden/script_sup.svg create mode 100644 tests/golden/sqrt.json create mode 100644 tests/golden/sqrt.svg create mode 100644 tests/golden/sqrt_degree.json create mode 100644 tests/golden/sqrt_degree.svg create mode 100644 tests/golden/sqrt_nested.json create mode 100644 tests/golden/sqrt_nested.svg create mode 100644 tests/golden/sum_display.json create mode 100644 tests/golden/sum_display.svg create mode 100644 tests/golden/sum_inline.json create mode 100644 tests/golden/sum_inline.svg create mode 100644 tests/golden/underbrace.json create mode 100644 tests/golden/underbrace.svg create mode 100644 tests/golden/wide_matrix.json create mode 100644 tests/golden/wide_matrix.svg diff --git a/ATTRIBUTION.md b/ATTRIBUTION.md index 841832ed..fff200de 100644 --- a/ATTRIBUTION.md +++ b/ATTRIBUTION.md @@ -4,4 +4,16 @@ Third-party assets bundled in this repository (fonts, icons, images, test data), author, source and license. Library code and original assets are under the repository license (MIT OR Apache-2.0, see [NOTICE](NOTICE)). -None yet. +| Asset | Author | Source | License | Notes | +|---|---|---|---|---| +| `assets/fonts/SourceSerif4-Regular.ttf` | Frank Grießhammer, Adobe | https://github.com/adobe-fonts/source-serif | OFL-1.1 (`assets/fonts/OFL-SourceSerif4.txt`) | Default equation family (`equashion-font`) | +| `assets/fonts/SourceSerif4-It.ttf` | Frank Grießhammer, Adobe | https://github.com/adobe-fonts/source-serif | OFL-1.1 (`assets/fonts/OFL-SourceSerif4.txt`) | Math italic (`equashion-font`) | +| `assets/fonts/SourceSerif4-Bold.ttf` | Frank Grießhammer, Adobe | https://github.com/adobe-fonts/source-serif | OFL-1.1 (`assets/fonts/OFL-SourceSerif4.txt`) | Bold math (`equashion-font`) | +| `assets/fonts/SourceSerif4-BoldIt.ttf` | Frank Grießhammer, Adobe | https://github.com/adobe-fonts/source-serif | OFL-1.1 (`assets/fonts/OFL-SourceSerif4.txt`) | Bold italic math (`equashion-font`) | +| `assets/fonts/Inter-Regular.ttf` | Rasmus Andersson / The Inter Project Authors | https://github.com/rsms/inter | OFL-1.1 (`assets/fonts/OFL-Inter.txt`) | Second bundled family; the layout unit tests use it (`equashion-font`) | +| `assets/fonts/STIXTwoMath-Regular.otf` | The STIX Fonts Project Authors | https://github.com/stipub/stixfonts (copied unmodified from Fedora's `stix-fonts-2.13b171` package) | OFL-1.1 (`assets/fonts/OFL-STIXTwoMath.txt`) | Math symbol fallback; not subset (838 KB) (`equashion-font`) | +| `assets/fonts/OFL-*.txt` | (license texts) | upstream projects | | | + +The OMML samples in `corpus/omml/` are copied from the WordCraft and DeckCraft test suites +(MIT OR Apache-2.0, like the code). The typed equations in `corpus/equations.tsv` and the generated +files in `tests/golden/` are original to equaSHion. diff --git a/Cargo.lock b/Cargo.lock index 97fa16be..3fe66acf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -34,6 +34,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", + "getrandom 0.3.4", "once_cell", "version_check", "zerocopy", @@ -111,6 +112,12 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" +[[package]] +name = "as-raw-xcb-connection" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" + [[package]] name = "ash" version = "0.38.0+1.3.281" @@ -247,6 +254,18 @@ dependencies = [ "tracing", ] +[[package]] +name = "calloop-wayland-source" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" +dependencies = [ + "calloop 0.13.0", + "rustix 0.38.44", + "wayland-backend", + "wayland-client", +] + [[package]] name = "calloop-wayland-source" version = "0.4.1" @@ -283,6 +302,15 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" +[[package]] +name = "cgl" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" +dependencies = [ + "libc", +] + [[package]] name = "clipboard-win" version = "5.4.1" @@ -492,6 +520,10 @@ dependencies = [ "egui", "egui-wgpu", "egui-winit", + "egui_glow", + "glow", + "glutin", + "glutin-winit", "image", "js-sys", "log", @@ -587,6 +619,20 @@ dependencies = [ "resvg", ] +[[package]] +name = "egui_glow" +version = "0.36.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "606ed4167daf341e5753d703285c4c1d562324b2c07aa8f405cd7d066fe58f3b" +dependencies = [ + "bytemuck", + "egui", + "glow", + "log", + "profiling", + "winit", +] + [[package]] name = "egui_kittest" version = "0.36.2" @@ -652,17 +698,17 @@ dependencies = [ "emath", "epaint_default_fonts", "font-types", - "harfrust", + "harfrust 0.12.0", "log", "nohash-hasher", "parking_lot", "profiling", "self_cell", - "skrifa", + "skrifa 0.44.0", "smallvec", "unicode-general-category", "unicode-segmentation", - "vello_cpu", + "vello_cpu 0.1.0", ] [[package]] @@ -671,6 +717,57 @@ version = "0.36.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773fa9c96dd0dbef887e39d0ed6177f141cce4d68e6041df77570aa3702dfa13" +[[package]] +name = "equashion-egui" +version = "0.1.0" +dependencies = [ + "eframe", + "egui", + "egui_kittest", + "equashion-layout", + "equashion-math", + "equashion-render", +] + +[[package]] +name = "equashion-font" +version = "0.1.0" +dependencies = [ + "harfrust 0.13.3", + "kurbo 0.13.1", + "log", + "skrifa 0.47.0", + "unicode-bidi", +] + +[[package]] +name = "equashion-layout" +version = "0.1.0" +dependencies = [ + "equashion-font", + "equashion-math", + "kurbo 0.13.1", +] + +[[package]] +name = "equashion-math" +version = "0.1.0" +dependencies = [ + "quick-xml 0.38.4", + "serde", + "serde_json", +] + +[[package]] +name = "equashion-render" +version = "0.1.0" +dependencies = [ + "equashion-layout", + "equashion-math", + "kurbo 0.13.1", + "vello_cpu 0.2.0", +] + [[package]] name = "equivalent" version = "1.0.2" @@ -828,6 +925,18 @@ dependencies = [ "windows-link", ] +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi 5.3.0", + "wasip2", +] + [[package]] name = "getrandom" version = "0.4.3" @@ -836,7 +945,7 @@ checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "libc", - "r-efi", + "r-efi 6.0.0", ] [[package]] @@ -861,9 +970,26 @@ dependencies = [ "hashbrown 0.17.1", "log", "peniko", - "skrifa", + "skrifa 0.44.0", "smallvec", - "vello_common", + "vello_common 0.1.0", +] + +[[package]] +name = "glifo" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282a26c1e23de04bdab3e34a21b6f877a479b96737792516b9b8b8f69b6661be" +dependencies = [ + "bytemuck", + "foldhash", + "hashbrown 0.17.1", + "log", + "peniko", + "png 0.18.1", + "skrifa 0.44.0", + "smallvec", + "vello_common 0.2.0", ] [[package]] @@ -878,6 +1004,63 @@ dependencies = [ "web-sys", ] +[[package]] +name = "glutin" +version = "0.32.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12124de845cacfebedff80e877bb37b5b75c34c5a4c89e47e1cdd67fb6041325" +dependencies = [ + "bitflags 2.13.2", + "cfg_aliases", + "cgl", + "dispatch2", + "glutin_egl_sys", + "glutin_glx_sys", + "glutin_wgl_sys", + "libloading", + "objc2 0.6.5", + "objc2-app-kit 0.3.2", + "objc2-core-foundation", + "objc2-foundation 0.3.2", + "once_cell", + "raw-window-handle", + "wayland-sys", + "windows-sys 0.52.0", + "x11-dl", +] + +[[package]] +name = "glutin-winit" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85edca7075f8fc728f28cb8fbb111a96c3b89e930574369e3e9c27eb75d3788f" +dependencies = [ + "cfg_aliases", + "glutin", + "raw-window-handle", + "winit", +] + +[[package]] +name = "glutin_egl_sys" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c4680ba6195f424febdc3ba46e7a42a0e58743f2edb115297b86d7f8ecc02d2" +dependencies = [ + "gl_generator", + "windows-sys 0.52.0", +] + +[[package]] +name = "glutin_glx_sys" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7bb2938045a88b612499fbcba375a77198e01306f52272e692f8c1f3751185" +dependencies = [ + "gl_generator", + "x11-dl", +] + [[package]] name = "glutin_wgl_sys" version = "0.6.1" @@ -930,7 +1113,20 @@ checksum = "c03d949a14aa089bbb282f7dd76a498a7f684428e4257202efc119ec010376f9" dependencies = [ "bitflags 2.13.2", "bytemuck", - "read-fonts", + "read-fonts 0.41.0", + "smallvec", +] + +[[package]] +name = "harfrust" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "948d0741125ba89cd3e1c23e5642415b6ade7e1d29d67ba25fb925b533e989d6" +dependencies = [ + "bitflags 2.13.2", + "bytemuck", + "once_cell", + "read-fonts 0.43.3", "smallvec", ] @@ -1069,7 +1265,7 @@ version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" dependencies = [ - "getrandom", + "getrandom 0.4.3", "libc", ] @@ -1131,6 +1327,7 @@ dependencies = [ "arrayvec", "euclid", "polycool", + "serde", "smallvec", ] @@ -1407,6 +1604,7 @@ checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ "bitflags 2.13.2", "objc2 0.6.5", + "objc2-core-foundation", "objc2-core-graphics", "objc2-foundation 0.3.2", ] @@ -1890,6 +2088,15 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" +[[package]] +name = "quick-xml" +version = "0.38.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c" +dependencies = [ + "memchr", +] + [[package]] name = "quick-xml" version = "0.41.0" @@ -1908,6 +2115,12 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + [[package]] name = "r-efi" version = "6.0.0" @@ -1949,6 +2162,28 @@ dependencies = [ "once_cell", ] +[[package]] +name = "read-fonts" +version = "0.43.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "005c8acf251756c478b0bf402885bfd88a1476020c4c7e6060edc1aa68da38ea" +dependencies = [ + "bytemuck", + "font-types", + "once_cell", +] + +[[package]] +name = "read-fonts" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5a0cf4bb6cbce4c29756270d189a5e400ac05e91192161d83a0bcb6e68492e8" +dependencies = [ + "bytemuck", + "font-types", + "once_cell", +] + [[package]] name = "redox_syscall" version = "0.4.1" @@ -2199,7 +2434,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "819ab7d62b1d3e72d9d9dea5650bac30424f9111364bb94928dbf5ecad1baa68" dependencies = [ "bytemuck", - "read-fonts", + "read-fonts 0.41.0", +] + +[[package]] +name = "skrifa" +version = "0.47.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "526e654b303ff4ad73a5a40b25de2b3ce3d039c5e3b6da5f89ae6e57004cb40f" +dependencies = [ + "bytemuck", + "read-fonts 0.44.0", ] [[package]] @@ -2222,6 +2467,34 @@ name = "smallvec" version = "1.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9395f0f0eee849a9b707b2f06bb92a6a422090e2123bb2ef8e87a0e61892a8e" +dependencies = [ + "serde", +] + +[[package]] +name = "smithay-client-toolkit" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" +dependencies = [ + "bitflags 2.13.2", + "calloop 0.13.0", + "calloop-wayland-source 0.3.0", + "cursor-icon", + "libc", + "log", + "memmap2", + "rustix 0.38.44", + "thiserror 1.0.69", + "wayland-backend", + "wayland-client", + "wayland-csd-frame", + "wayland-cursor", + "wayland-protocols", + "wayland-protocols-wlr", + "wayland-scanner", + "xkeysym", +] [[package]] name = "smithay-client-toolkit" @@ -2231,7 +2504,7 @@ checksum = "0512da38f5e2b31201a93524adb8d3136276fa4fe4aafab4e1f727a82b534cc0" dependencies = [ "bitflags 2.13.2", "calloop 0.14.5", - "calloop-wayland-source", + "calloop-wayland-source 0.4.1", "cursor-icon", "libc", "log", @@ -2257,7 +2530,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71704c03f739f7745053bde45fa203a46c58d25bc5c4efba1d9a60e9dba81226" dependencies = [ "libc", - "smithay-client-toolkit", + "smithay-client-toolkit 0.20.0", "wayland-backend", ] @@ -2333,7 +2606,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom", + "getrandom 0.4.3", "once_cell", "rustix 1.1.5", "windows-sys 0.61.2", @@ -2506,6 +2779,12 @@ dependencies = [ "rustc-hash 2.1.3", ] +[[package]] +name = "unicode-bidi" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" + [[package]] name = "unicode-general-category" version = "1.1.0" @@ -2573,6 +2852,22 @@ dependencies = [ "thiserror 2.0.21", ] +[[package]] +name = "vello_common" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb2141a2bca6e6d598e471fd4d1d7eed8e020aad6a28187edda07f091a325dd" +dependencies = [ + "bytemuck", + "fearless_simd", + "guillotiere", + "log", + "peniko", + "png 0.18.1", + "smallvec", + "thiserror 2.0.21", +] + [[package]] name = "vello_cpu" version = "0.1.0" @@ -2580,9 +2875,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac7349e1f55f6b801c7c277958df4ea53e7f20f21e8014910ad888b2ecda93ea" dependencies = [ "bytemuck", - "glifo", + "glifo 0.2.0", "hashbrown 0.17.1", - "vello_common", + "vello_common 0.1.0", +] + +[[package]] +name = "vello_cpu" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace506ca414548966fcf3c283be94eb1cad8254de488791ee698bf438b0890a9" +dependencies = [ + "bytemuck", + "glifo 0.3.0", + "hashbrown 0.17.1", + "png 0.18.1", + "vello_common 0.2.0", ] [[package]] @@ -2601,6 +2909,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "wasip2" +version = "1.0.4+wasi-0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" +dependencies = [ + "wit-bindgen", +] + [[package]] name = "wasm-bindgen" version = "0.2.129" @@ -2743,6 +3060,19 @@ dependencies = [ "wayland-scanner", ] +[[package]] +name = "wayland-protocols-plasma" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b6d8cf1eb2c1c31ed1f5643c88a6e53538129d4af80030c8cabd1f9fa884d91" +dependencies = [ + "bitflags 2.13.2", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", +] + [[package]] name = "wayland-protocols-wlr" version = "0.3.12" @@ -2763,7 +3093,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "338e30461b3a2b67d70eb30a6d89f8e0c93a833e07d2ae89085cd070c4a00ac0" dependencies = [ "proc-macro2", - "quick-xml", + "quick-xml 0.41.0", "quote", ] @@ -3278,10 +3608,12 @@ version = "0.30.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6755fa58a9f8350bd1e472d4c3fcc25f824ec358933bba33306d0b63df5978d" dependencies = [ + "ahash", "android-activity", "atomic-waker", "bitflags 2.13.2", "block2 0.5.1", + "bytemuck", "calloop 0.13.0", "cfg_aliases", "concurrent-queue", @@ -3291,24 +3623,33 @@ dependencies = [ "dpi", "js-sys", "libc", + "memmap2", "ndk", "objc2 0.5.3", "objc2-app-kit 0.2.2", "objc2-foundation 0.2.2", "objc2-ui-kit 0.2.2", "orbclient", + "percent-encoding", "pin-project", "raw-window-handle", "redox_syscall 0.4.1", "rustix 0.38.44", + "smithay-client-toolkit 0.19.2", "smol_str", "tracing", "unicode-segmentation", "wasm-bindgen", "wasm-bindgen-futures", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-protocols-plasma", "web-sys", "web-time", "windows-sys 0.52.0", + "x11-dl", + "x11rb", "xkbcommon-dl", ] @@ -3321,13 +3662,34 @@ dependencies = [ "memchr", ] +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + [[package]] name = "x11rb" version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" dependencies = [ + "as-raw-xcb-connection", "gethostname", + "libc", + "libloading", + "once_cell", "rustix 1.1.5", "x11rb-protocol", ] diff --git a/Cargo.toml b/Cargo.toml index 6880b4f8..7c883caf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,8 +13,26 @@ repository = "https://github.com/storytold/craft-libs" # internal: add each crate here as `craft- = { path = "crates/" }` craft-print = { path = "crates/print" } craft-ui = { path = "crates/ui" } +equashion-math = { path = "crates/equashion-math" } +equashion-font = { path = "crates/equashion-font", default-features = false } +equashion-layout = { path = "crates/equashion-layout", default-features = false } +equashion-render = { path = "crates/equashion-render", default-features = false } +equashion-egui = { path = "crates/equashion-egui" } egui = { version = "0.36", default-features = false } +# equaSHion (the equation editor) +kurbo = { version = "0.13", features = ["serde"] } +serde = { version = "1", features = ["derive", "rc"] } +serde_json = { version = "1", features = ["float_roundtrip"] } +log = "0.4" +unicode-bidi = "0.3" +skrifa = "0.47" +harfrust = "0.13" +vello_cpu = "0.2" +quick-xml = "0.38" +eframe = { version = "0.36", default-features = false } +egui_kittest = "0.36" + [workspace.lints.rust] unsafe_code = "forbid" diff --git a/README.md b/README.md index d5b69650..1f64ae97 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ If any libraries grow beyond Craft App usage, eg. RAW format support, they may b ## Layout A Cargo workspace (edition 2024, resolver 3). Each library is a crate under `crates/`, named -`craft-`, with `version`, `edition`, `license` and `repository` inherited from the workspace +`craft-` (the equaSHion crates keep their own `equashion-*` names), with `version`, `edition`, `license` and `repository` inherited from the workspace (`license.workspace = true`, and so on) and `[lints] workspace = true`. Register each crate in `[workspace.dependencies]` in the root `Cargo.toml`. @@ -28,6 +28,7 @@ craft- = { git = "https://github.com/storytold/craft-libs", rev = "9zw7&AJOH9?r( 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 literal 0 HcmV?d00001 diff --git a/assets/fonts/OFL-Inter.txt b/assets/fonts/OFL-Inter.txt new file mode 100644 index 00000000..9b2ca37b --- /dev/null +++ b/assets/fonts/OFL-Inter.txt @@ -0,0 +1,92 @@ +Copyright (c) 2016 The Inter Project Authors (https://github.com/rsms/inter) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION AND CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/assets/fonts/OFL-STIXTwoMath.txt b/assets/fonts/OFL-STIXTwoMath.txt new file mode 100644 index 00000000..11b7b8e8 --- /dev/null +++ b/assets/fonts/OFL-STIXTwoMath.txt @@ -0,0 +1,92 @@ +Copyright 2001-2021 The STIX Fonts Project Authors (https://github.com/stipub/stixfonts), with Reserved Font Name "TM Math". STIX Fonts™ is a trademark of The Institute of Electrical and Electronics Engineers, Inc. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/assets/fonts/OFL-SourceSerif4.txt b/assets/fonts/OFL-SourceSerif4.txt new file mode 100644 index 00000000..5871e1f3 --- /dev/null +++ b/assets/fonts/OFL-SourceSerif4.txt @@ -0,0 +1,93 @@ +Copyright 2014 - 2023 Adobe (http://www.adobe.com/), with Reserved Font Name ‘Source’. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. + +This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/assets/fonts/STIXTwoMath-Regular.otf b/assets/fonts/STIXTwoMath-Regular.otf new file mode 100644 index 0000000000000000000000000000000000000000..29aa3b941578bd5afe71682724370e62f5879e55 GIT binary patch literal 838652 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
    P{= ztH%*Q`xSru+<*=D5oxjNG?8|wG8XOlOANKK+or^5cR&Tb4w`~|fT{jAx&oQ~HJH89 z0Wux8qDQlf{k{y=s>l`e@+Jyu@Gh${*Z}DC{PMjA2Pmaytmn?1ah_i7GB_ag|H?<= zgP_igrgD|Jd7?8RHLeGpfEI!iR&Mo6s_Zg|&(VqRZo@91pY&+$F?wn_n%Ob+H`dT& zPj1j_0iuYDsfzIT#!uchea^J3@e7A;!3bdfP^UHHnWD;CbFrv0k|t=F*1O`9{7Ax^dZ z`ql@Vp6sPI)zJUZ@bsx$hk>Ie@C`xR0{KQ>CAT(gN6y$0bd2oNNzD3;;}ZG- z*uz(P#p>+`6RKgeI~;@E!K^QyTXJ2(YHUD#DCS=_f=E`~CSr>aMGmtjkU!=-S(hN? zdHCv?b7t!1&0o4~zH#I>pLOF_$4sfFefa%v!MB30k5Dh0xok$b6I+G2)lFF7B5sV> zLWV8W7~b3K$$2AHvmsD-+@0R3HPwz&qci2|>uG7Y9wvy3X#v~>v71}#5-XG&6za_H z(yO6Uv-7_eKq;P9q1-01zrt7b+KbhX&XGpxsfjo;A!#&N+3sjqCM?`C!CtYe((SW( zw^thGj)@&Pf6V-G3q4_na8K|`w>ZK0Lm4-eMVfYQ<9f|AtUJN&59_I7wWOGo>FWa3 zjys=db|0Sr3GyX4!lYx`=N06BoYY@{Bh(tzn0*IhXyxfm8?mZR%=o0^U(*a&_3WF4 zku8QmcDoYYSo8GcAJkw6B)5%kKT&lj8?_lgZIiC{$?mvGjUL~w+HyM=l)jVQ{69$P zSu`i53NCFML>ksyTXFyKwk6vVoQ}k$FHM7)pu&a7{Lx!H)Zjddu8H*e!i#r14RgCM z?$q6>|C0W3ZiYttN8b7a>hy$?7T_nYWwf>sEafgV;a^P{-`>}rdSvYn4j-st^#&nD zWL$)SEuIP|2{*RUNt^A-j?++tT$wt>pd4B>n>B6$LFb3U_tx)W+E};?d5GL-w^JF- z89;OBuQ$B;_3v1xZP=16T~E!Q!pNaKFS#lq+eKC6VhGp`dj>>~)(m1R`(|m4xS!Rm z?|#+{4*W_T~;O4NV@V4=oYFJ4%m%$b?+=;Ft=(*4RE{B<&+Oa>_S3S@f zXI>-HUUSaXHBEc4LMi7uRDsRVw~KJ=*T$*wrC)ErK$ITM#fASD^T%DA`D4Q^xYmR4 zrk)tNfABgrI()Ef!sZuv5&RV$aR+LRgzz0&dxqc*s0^G&WE6(7FC4*0UW>*c?M567}Tuu`#D%vc=)MzxCP=(YrIY9^0Ow-ne?>mJPafYZk|>FeZ#z>*4N%WH~L6 z3Tn>6uT1af4fOp6a@s(W4VwMr^ZgF^f$7-{uG=q0qy}<+caihEe9rGiw5=U%s1w`O z6xSfG&ygbh;JnjL+A9@g2aWbp1-4w@WtfM{Tv$RYlv-V({HT^RZ$otaT(#pCa6PWi zPe)$B*B|OzM&EN!12dC**hG3R3<+b9ltG86Qg+iiw}^vcw(02_^c{pPSZ1p%jB4Tr z?spTG+2D+3jVfEGJg%36_*|OQ`VBDdl$p+LsGb=G{^GvjNK>`-7^y>VLhY5z*zKc!$ zoZ<#A88pnP`5v!lSX&^%2b#qHVZL>^qkU-|W|OK|{XsCmuEy97gu!q+d=Xoz*0Mz` z6r5}ZWlT{kd%^pDw(-7O?`>w?<%uAgp>ecE{r^FF+LvCbZSJs|o7A#Txye^~TXIW6 zYTGK*i6XXv8|oJ0Ky;sS>uy6en~nS@^ef)af9wBm+MA5MVFxyG8u(wCnU}Ie`YH5U zk3$pGj-I6!-`%f?%0=(invSVZg_d%^dz|~VnK7teT&uX=86Dq-^JT`Zzt}DP zk#1vjPc~n<{1OBgxjtmqXz;na;B%$6UUm^LSWCv~3s9zyfnB#}!sLrtVB9uByAusU z>p5mrUz<($bgt83*n08KdQjoW+|9Gs&rv&`mGA3+r>e+mW>1|@NhNPJa@VT(#37+} zB_$eOj55?fvFs-?cxiR5icdC4X;&Ph|1}D4kt0;qjy!mkd$Ru}jncZrK~sMJHOhDM zqN%cfi9sXRt9m#fF@U|)DD}u*kDo__c1-jSoI2ibf8fECz1;5|-tzBxkH@KMaZf!J zBfnQ_;GRj7CWTJ$-c#-zPyICV9`q|uBP4xI-V2&42qBQp&hdP zZifG)-T4IM;HygB3HH{ivPx;FXA$o(N~N^}&C)w66ZH5`ZAxT~d;sBB8{uqXy2cTn zd>$6N^ZVt)`|aiJL{ffc(7>Lf{rY-^ZrvVX9El@@dY6+e{xF)wf$n=QUpsN=O6soY zX*-O^z4DlS?pSri&OLLIbyu$CexaJbB#nhT=sv1#xn!|BTQtkQD3U%)-6KOx*pszI zV6C56FCFVJutwb&W3KAv)?^Ek5p|>CIKbOiM;%X-c+If?ujFk#_4JdWtHTM`U4q3 zGxr#qvF5@>)h*Hrp@&ZgozQ*EA;-t7u-|I~=p;ngoj*wPvu&M@*7$oS?Hda(Xm{3F z+~GTMi(koeeZdXgfg>S78AdiZo0^JKQqyJ})_usOZ=ax-t9TIfow=ldJA3ws^zXeM z2jLye%6qsRo<#|Wfp!CN@3yk{^QCfbfq>-4*ztHg3o+4>&tyA3{VYiDX_mxl&@;d1O7}gAwB)DmUuuYq?gto zm9~1cr`6|ZWr95%7G6p%ZSbLA<7l)z_mmPXERpoKucsodqyuOZ%;RLdm{y;I< zU;zI^Jj;O}F|+lmqo0J>t=krErPccAIm?l+;1jJ7h9M46gpk(1$Avz8&?QSWx>J`2 z`&f(~I7`YhTxpZ)SB~a*6ZHmtnUDzLCYf;V@{)$uWYb#y>^Pvkz-O-+Uq6bWhttAS zZ4VIB5~1pDdw{;952cPYQd4)P5qJ4c+~#MSI{xquW=`@uVFXJ`a-}2;GRZ_qO|voA z6t6+J54AkAxQ|Brxp)U8+z%x|dVjV6q~y38^s^IxRcsW5uzgjLpS6@&JO`i77-ZBc zr${A497vwM_aABkGM#(rrUY$F2r~Xo!w_<+Cu<|5|2jBxxDBDY#aa4$*LCSAko2u=HiTDo&mo9Me`;tc(PbWUU~OMjNFwshNSYn_eh*qZWiI39$3iTQssQI+=c2)O4b(92>DNTNuTN0tKW#wfq0@OI1T-A@>$`h z9+ypCL9-@JHu`ywYCFn9JuM=1rkAeo*n`*eGm`R+@&p9|F0_jLp1hLaY}-I1Z;+by zW8Zs1{r_20^CTIEB2f>tG4;-VK4Db4JA59+YMjM!Rj~ZJLu!vUP845WrteZoCF?aQ z<^&#OY@0=n(rd#oxceaZR-$&u(OE+?d+M~)dyW|E6=7tpOcbEfdK^v8%r$7kP9GfW zwbV!f8}%$e)L!=r7(3jc9Xi4{^Jtur1t2+?N_*35bMDydI_=Qwr!$Wt=uvI`HVmHv zs5?#4zA6LMQq=A(1N5P%$G-rj9zDnby($AViFxv&e)n8MC-OD2o!s{lPCDDcoAlpz zln;U%7{EPPQFeOdjlC30VsC?8NlTPaMV^{^hI;dEWq?5bh)S zTZCq*0;h%hj&~ZLFmdlR1Do!u(gwSsUtfy+DZC)He>r?-vD zR`0w#NcuRW>s_YR!9?4+?oi{FXyL|{Gug08Q^o6JI$z?C)$Y9f-d_Gqj*-|@*^y0A z9QlcX`p5+P3tJ;lBP7Erh5NN`p|x1*regJwZSWUb!;cP3MI)q7_*YF@y?Sw94Z7A| zDWw$~>e^?rx4ctowK{BB%-Yy()h9j`v^V`*#Y~HyJ0-4q+XaRFgf+3NVrC;|)%>_v zLwN5S8Nv!gRbQ)HyK>ROwZVCf2njNzn71M zBPAz%MM`cVncYbj6A#%XK?e#7;GK7PmxBT@$YB z@7}MoQTu(hUg@Lq_v6SIJVDQ?{l(>RI7P#%m(8TMO04WE_mI4TBO@p1rc8@Zh%!d( zS-5fWQ8jf{E!rEqd+uiS?ipbl{dK*^4(a4_WaO3HBl|BV7`2sZE~eJf)Z zPnjP*)=67s6Dwx@qy>xO7R)!ynHx24rfy77iX}hs;L&}F(}Rp;h>|i^?%0;BJGg$< znAMz4uCFK0^^5i{LOhuv8J@>KocwTH`}&MrAp1(|#js_OEB8D7B_4}C`>Stoc<2&r7E^T>WfDwU=0vE*upoU1^%!pZkg;kE+q$NW%we{DYP-a>cnx8wg zaPgD=2X;Qh;RkCyy07$yeLorwBxCq-h_#t(cP4CCpEWG zS8DFqun`aAPV|n5B^#X9?bx+v-_{8K!08j_z~lRFbohuxLCA$#RN+!zY1gz3;bGI~ zgoSMmOWM74H&2xpq(`tLGs_V#aPeoph54yqph$uA2%ANUz#f|DjA{@UY+_vztH5>> zW{mGpg)c#R3~{)gt&4I&i&ETK3fpC(U64_Bx#BA&n^GVV25U-3P9sXTBX}u>k6Y{w z1TRUTGz(j+vR#cfv#zR#6a4UH#xFN_Xi05|NTq0%eL+MYEIO7P(C5pq_#pHgt)Ar{%5ET7)6!X= z&DQIc+mOZi4|>!`gS0GtM8ri3!D*#Xp`R$9- zN)q+O3pKXNy?B8e57;K_BX$=fy__4czEUdvhFe&F)#!LbU z4g_zAyiy>+Cg{@MYpe}{EkaHV#1Qc(^tJVAZNzqJ`rxqrHz9I?-R>eiPIiR=3uPdM z$^%Q{HAQ-MkpCWp--GbGv}Q?n$iK>Ky{m}+g3(_n`lD5JNLnWYfd}n5v;u{iDp`dIN*^fU)iq#;GI3b7@&8GjcM9Wsf@N zqwWlLS}&l5r;EYs_T;A@oZjz$di0JVqs#sl4d6Q4KyyqQ{TI{cGGW;%a;WxhGufRv z@>G3P9NDY=xYkjRX+*W5supaV5H~kw$vg;4Cu@;2grzvR{8Vdz-~hwCTdF6Dr>^~$ z`eajUHnLi->KOv@EM2>1$r{K?pcPjhpUu@mPT*oMvbBNm{Flc4!M@F@u})1D#lP0l z4`(yp0HSvE;I^#7xLWhoG|pYr1~N~v=878WeV(hm#LNct!%(uDuVxj+TCuF^uj3j4 z>V?PTaQMqgHS@|AwaMfu{r$+^ut|bEwNVjsTG0}r0B6)R)G#!*cTWTE@G3xeqe{$ zWoitnpd+jnrj3oM&k3gOJ+f-Zhg>AqwarDUAvh{k^=tx%rQ(%mk%Pb%XVFd($z&S> zL??k-fa%Pk5fG9vX04}HUlYt%6n}?i<_I$gmqi>1srG;-(}0)4RUBpPR!E~U0WEPb zqlonuqD5NFG)>tufi*GFk1Fl9&avvq2PBwc*iTml#}X$!ea38X2rQ1z zL>#NkXCjWi5okDmk|PHZ$20=@c(5qhq-RlVuZi}y%z7$%$fCsR-Jp8cg?})<1B?wE zIv~8^L`HxoD0CRCYbD9Y7SOJXW7sF5z#yrAp42r^S&1tBQuyt_1`Eb z$^#Ht)|7##WkdNIP&Ob88=k-+oQa?)59Y&h*6?2An4`dkbDY276C6jC1#Ix+OcV!{ zDapc;C`v^7)mlIu5qfH4vRiOf6W>xhQH4@YP{y4~{?yBP?0MN<%&}$;MW3}xu>Qco zYox2$$h3{w0s~71vB;O%f247~BgTzDEGWukops&24Cp!DxNV-0nVOxRO;w{<26fWi zzJKFlDz;Hyq1KYCfpL{_X3nJdLbrpK~kbq;o)Nz zLtfz&_#dabS+LjlUw4SFY+b^%W*u zxox`EPtW#4W*ZB$hI0Xk#xJ~(&prK-MYA#g>MTiKtViUKf9Mc0aTy(Qvcxl`K_1MH z(_y^0d;Itv-nx22nPaQ@#)GPxn+{s8>ryfU0#6xP?JTgOh=a+I2X*iBzkFP2WH)Fh z9{EkGcLRVYh2JS1>!7xe541O4M5zAD^s@kpiXx$aqCu$xm_N$`^@50!nQ<6i#^KC? zujz5`Mj;2uLKPqA0>IsLEya9w#bD+GR(Xy_2$Kq)w0eM%)*(bQY25WNRr}XSpOucZ znOvQd??Fz!ejaQPC*M+f{Yt)$U&%M>|KCXcReTaNMXJk*yl!`a>f-g+MNj_HWhC9g zi|$vvdIzl{HUP@Dg@va+!1<6~;-nhRESw^+nL2Uz3@~cg7P&%L| z^fLtg3@%*(%RvW@vR}mR2pSwwh3{EHtc}w67&GaceK=&iiB;g#v;5;>I0ySZ60V7C zWV=M@EZtRsu!?*Drv)V)XWveSnSV3Fiw6uH&>NbL+g1Y9Sh`4TI)*Gd(%S7t9fk0o-*3#Kyz%ID5`LZ9kjiCsn{4 zu=RMV6fuOY6xn860*TGw&8#hcg5lul^Si7GFBLeW;&<89bF>7pqld`TC8j+~+A{)~ zln{wIx(k1aj`87g7-qsY4XF@7{E)Ae-6yAAIN*1dzT;4jvTsw6_j%Q4PILZGkCHbg zVgeh)-cW6!mq-s;^(jzzpJ(556poXlAFSr_H92~L&Brq@%tR^;5F)6VG^!Q+E`p z76ijRdDJu>buAi%!XETrSg<%vPv$dAZDJbz%&%OR*VV~*XZvhsvDX#7hAq-eN8*N3 zogBwCTk_5S>@oDVq znNNcd9{o|ZvoM{L`NR0w-uuPi z{Pt>gj`m0s)*p@+N+(xpxvI&QmV3#W9&-eLWCiuoo1Y)>uzDvkrQe&ue|nCuQ?0#s zH}}Bd>P})>_UWVN57l6sIJ)0bHdQ=LRrXM&wbj|lTxmzl&e-kqLt-XJ2g2e8g#X|O zBaKJvEO6#mfnLZnW&RB;={xz8-H7^W-HUB)r;0FUbA>=Y&AsUlY5)(3h$!#(Bl8-%YMsO?%Eg1M@lj^ zxDg&MhagVhT?D==M8vnDs=+)?UnK7e1~)O-i$W%Vy$2{(5B{Nh0Wiw zbJ4D{czrWwE?XXHq(O2wfts0_R@K&3f=h5Sp-1ZEd-t8l4rZx3hOf9#aF)H?5uiMn zE)4Pcl9*E#BGgT>uqkqHnqp>CR35I9(tEmC(&^tA%jePNS5<#jS6DSQY(=P!ophy> zs?D1hFWhJZb9E6|QxpB5azo03T-AAGFhB@rY74(*guf%ZLGK$wi|(xiNmye|gn|jF zE}flNMLx<(2FH@V8p=fQ-n;hnCzQZc-5mmOsEI-qSKAk>o=w$vQx|=(vQ&~?cZpQ# z2~?qWtYT~40m7d=)7z#w8`Dg=aM89XdDuMSwr#epc9?D2R2)!tpLN&BH?4Cp-J@9* zfoTyIkyW_~<*UZeIH8`vYV#P(+RQS^b2^tiKQ;k<7C_l2YONIVY_sgekmoS36ZU+s2{|bY}>EIdyHw zEku|?)33rnQ$d_N6R8AkIinJ`ui3cc0Fs{c=@K%gAy0tw)@#pLTSBmiy$j;QlFAd{@Qy~q z`h6Oz5a`UE5kZBGJI{Rw{((UqEYyh?h#br}RM~{{#Fb4vwzP%55zE;FqW3r=hOO1uYRcSnS=W@N zxGD8yH>k1r^*TA(77H+iIbNf^7TSBwF01TfoL*_cE%Y9#z( zk!gd~jl>Pn#J=bWtchL;@2f%4G&4eVt(@Zptp?oTgfGP5I z{WWWaYvc62{3X_W7WkGUYpsL-UUhP$=Ch0z1eMr~GYO8=T1Tyk7dP7s<915%8V$A} zi`ZPvsFM<0SUm*KGhqd{oNn#5WSlWz2j(upiNjsU7{1%o&8b^hZ_nWd1k_lBy5u2b zqDS%Xst(gH;F;t4d zZZa0*oQv=IE*dt!YKGrlUtizgabx!d9XpnED6PC^4>Q%YPs#69fPT=_vAot@4$T-hxhHvNZmgfmWfhOuK%gv=~Cf86Q-bSnlZ)Tm+amdCw`;*9Sk}buuZ*k zUd*x>-Q?(LVYAoF-V|fpKmF>`JbyR;K8u59s%OlNoiWR4`sSI5>*80eTxZy|;n1b? z$?7hXM)*5T**kg{Ik+S|Fd5E1V4eyOw2~z9p*h1KO%~thx>q1I4RmtZ^wkXQ)ypseYqsI-EX% zs7g;x zy)$(0wqDlDLnL;O@J}Uw$L^J1E8i6l<=1yh@82!IE^BQac3W@VfTqR6=$>_$s(7da zuI}QBS2(VhtH^C7W?>e=su8WjiZv25lZEgnOhCvNGydV1U{wQ3v8X};R5kQBYi*&! z;7;k?G~7Xn(u+Iji-%c%MZYYaeU?&!lO|4_96ZryPe@wop1r9C$2fiAH7=LsVImjP z`Ci2xu2G(d+wx6*A1M@jvGdAeS9vjV(l{a(BO!a_T@*Ex2~FO)(l&*z$%KGtSIY{j zUS->4xtAidZP2Oqiql_#wsR15(>V5isNvUxX&m(Om*FjN*@CZereg5TaiZfxjg6V{ zQe_G0`WNg(KxW)O_uU1B(N&IHXPb3Je{Nvvr6_zLaN{!}TnSofi=A0VNO*B44OfJt?Fgt+Su~CNU)rW073A?| zrG^R;9IOxLKvFdN!}#n^*6R>U{)DF=t_9v%Hiw zd(N9d#ATv<g;ASiAF=nQiyk+1 zj|vJNJ?d>~(|w?a2^*Hux?U8XZb_$byYpoi_OiiCqHq(^w2UX@(qZA?rtgq<1>fVz zuB^zhrL2eIZOk)!8CR(F5_=Ej%QG26JIiWY*nRlqVjRg_c936~?UH4zZXOdana9LC zh&Xo;bVKBU1Y?VE-0Dy=4T8xFGuqj%5l)fy5`(BOt4+08pS^18#X~Dv5cBXb_T|BZ z%%po54~g=Hz1Pe3vQERcN=o&j{eqiHsa~>QxT~U0_^gtrI15#Uk1-T`7g|F^uv#bhvvk5gCpf!Q zH57*+6t^c1k-oK~Z{J$qzC{qS_|sC+RFP5{5*xD>EERua*jYo#)VD>;MINGwM$%&Z z>jld|Uqi`q=*sNbuEMVvSocUS#UUyLE#NRZ;U9-t)nE;ADfSlG7`QGV`7xPjC?wRe z2Eae^Z|Hn<4NI1*5I}=NSd4!hVqZhi@`feTM0S=|u+fxCD+u^e3PLd}&Kig-3!o9j z5wE&bAIiddP*bMikk5B^kLWvl7%kRI$-zmJ{DYCRH!1L7a?;*pye##r!>w>BJY;pU zry_EakfpETvZb9V78aTMaWFc>A#p>ruo!Xeqxp}x#R&dbzcY(n7AH7HU@}z}!kmUe zIdu{)BzLU!*C2>L1qu{^2=|D`PQjy3VER_Dm9%2?XbNJ%0t+%xpbAIA15b>GJKS=N z1~%|lY>>Pb-nm`j@j}bnTRYh0TIBm!r<>a2wNNr!gZBY5>uGuMasJ8(Z7)3&*$%Yc z0iEXak`wxonG&ATK;%~gOSg4kZDL`c^_Zq`^e8XV7i+AQfx|IGV8tJRAEQhNmYH}T z^J2z-;&1ecVoh=7e;1cIMwWTWM#D??AaliX;?9wqLS?MH%~(zm*s3?LIf&U$WIs%# z9|n?r^S{*yYTuAGFtdQo%tvieZ6=?q@EB^y56u44@_eYoaH|gm%pxDPNi~c4xUv9- zhU$B&=YJy~5?8aaDi>JA=QtE4_rhk;a)a+pZ2NnvkC$|Y=o^}na%lI#R3ja;uuN6A z!GpSV%jtU${BIG(jSMJTm3CiXz1tg*;z z=qVf#kont+n2+2Upgn|+_7;3yc4e0t0$TE~4kiRo)3Xk)__}7MYhVL$@| zgfcfW*vVbVs8rL)F)O5W|2=+wexY7odxO)D?n#CqWvhY1g$6cPPhkkkcGNG?-_Ji} zyzib#N7Iv%j$%Rjhrzsj+}YujeNlIY0a5RU-QfWoaGDBxD7AlUlk+r?ARVK5Z7ax2zM zX$4t``iJf5c5#?=wH%#hP-vs0;8ZBsj`ha5C1^l&*`&VHF_vph*HQp@M+YTeiq}#Mn5OSEKHH!YpuV z=qbuQkOia%o5U|I)&^zu=z)dephX@lXXy_?;S5!8FN)GzS358$kJ+BVtm$0HBuFqq z@%e}e)DG{WvL@L3F`q3g_S#E*R!eH%j;i>v+sG;8z?!aOd(MMYdvWbDl*|-AfI7#h zxj~7F%;W@rNu(Y?@e>+rXWgrwP)UUhMw)FE)WOY>2b=GoJq!NIS0;WoVb8n zext`t7%}Mvg;g7-YRfh-^{>o%GW(wEjNirnJ^fGL2~1tB_3ow{Td#uh`(EttvmZ>W z%L=OHsQ!dj*52p6o4I*)whUfszwQ{hE@;*MRS5pJ7end9u{jZ8M@UO#H7t;Z+^u_o zIUG^L%ZKd7|2g5@%sH>QRWA{Uo;7(`;jx6~G6#A|HjS+4C&A@wHo4D2GYGYu7GYyL{d9>b9wg z4d;S8W@iOg>tj>(?L1a(8dHrtO0}weI!fY>FKg5m5gO{vt@b{nbGFGiT<=KpJm{x; zi`Sb!b-xohxj{8kfXj&foz%U>6PGWax_Q`>)vY!(V5GP22&j|yA5BZi*xQc!Q0$I{VGG938#xoRGn6NFv!mZ_mgEgm$Av%7Y8tHmTYQ%E zYV+gOK&ADnU$(SJQqvO;Rv^|+ZvsU*U>xa9LfH%U6PbT#BHmN&{`Me;z%C5 zh)gP66^djr-^wTSicz@=Z+EV6Y-pnI|D{j0smRPY0&TVOTh-q=g*=L(~;KAB?c z^PYT_sd!KITxDc`vsDf-(GXjo%}n%DS)Wjg+jO*4K;aTpchnkaTnB61f^C~k$p|!U zDlH3CT4pRWC|ArZPK2^=kP6C1w#Ah~(b>R;Hoas1Tf8B+Xv*-pA<0;}rgEKES>uJp zvYu^srD?@T73}tp30~lgXb=TqTNxx2*i7(BrO}#6-%WHSmnH5Mr#7R6Zd!-A0ju;5LIth zPe>f^xpVvseNsw9*kPpf>4#o!z`8v-^F&A{dXZb`X&8)9Gn$km@W6(E>%S40F(m~E z4E&0~DH{T4D))v>Y6g2}J2lZ$H_0b4$rB^!ZW}>e4ts|;U>}+umI~PY(ZNly_Q{zi zgE{Q$axlVy?}C`{GE|b`g<&-Pj_un}RYNw9{Rg=yV<0Jh$FjMXi;DIN6a@X*&^N!6 z7gfj+Snn2a^Qh0%dBQT$@w$sX7b1`Vk&exWJ?A^bF@z0BV0&2#)fAwlBqwt_HU=pC z3E}MwZI#+E@7nHsrvm}KH|!zJFH$3_>?Sx~FLO=-YFbbEC3hWpEf(UnxDCz%9M2lP z;pUBl2c21jV$b@)>{_)gTP*PObxq*fF%BB$9C)J~sV0ZyEW0532qLUawC$s*%!kb}(H!ofvd6;qz(d931P0K~)?ufX0u5}! zJzxZK#sK;Vj)Q6-$j#u=KRc+dE8Eisx>1s>p$iVhA$p~Ve>%#DyH1tu-lN{g(m#8Q zFkUJS*3-4BUq2mXEsfWFrpl;jFHbM+CzvLqJ7tj48(*b0P>f3Uav0qxMrcITz?X~~ z_;RH6C-hZvDS|~<$HTRKV|~4-{eVj$*eJyrZtmEyk*f#ic#70q_Th-FB z6Sh2Du=Zg^>o*#yp@lWX)vTH%utqv|+C;}yf8A;QGxXn~W}wAqs=paFc8lEMLC5>r zEroJp1a4v3@a;HAqTEqz6xpS9S;s6!Q`&>}(C0g?8*MTw9aLJxKP#I<3(YLBza$UU zvza$dEWmP$W~#bHx%;-)u|}>~xukva8vYBFTfSmH@)Tb$VA9FwKtJ=WVp>_Attta{ z+(f65mG`Ud@@GV1s>a$GONUnmdyYyzNv|QR{WJY?#R7W^a%|Da=a~JEn0;tH+hlR? zpg*#4l+GTf3ff3n#T)4l>&CLL?BWN-4@AfGjTZW7wzJ@qGfa7b)KN9uT{!49Z0j(t zAhxf`oQ7>1mh5S4{0sDGIcEg_V>#1vb>#E~2G;6lrk@EoYQ!Pm71FeQ(J84;f84+G zM@mZcw7rHjZ)wNmc>jq`KX>W)v#;;^?UUhtEG#kGowZm8TkMOzuPV0@l{T_QX`^Ta zrHyDsYQEyZbVo&>=mLFWNLP3kx>fC?B@u;|DyQURZ6?h@sB;=7Yq@q~xS|zq$~@_@ zP1o|Z>JziA@+n^V!T(xWPNt?%yRezop$F`q-?OJ1)}hh?Hlw7)y`m~0-3iuf2kl<} zW>1f;*QA3i#+iBl=InqR3Cyj?lw$YpcYAtQWRg;qs)c@xdH`OpiolfUQr7+ zBLD?96lgeb7!Dkq*?b_dmBnyKHXO(sNO%JY=c4t%U>RF75k)p6C>U4-0}E&CUZ60W zt(}0PQYUfnRHai%3z~5N_b0IHr4!MUrAnBA z_LvEZIfxQBrElp(^i%3dn1QyK30lJ4zPl)AODAH8vQ@$iw8Bi#+QTSmRNT=v4>Y1! zD`EW2F%Pu$2uf`5`84bU`~aF!)S^>~?Llz(d=^px-=AVI2S8zdIeb0|#{hpKEx{B3 zh4tm|`5c@E{0X!cGXNC!mc!>Wa1QXjX)A^g6iy(iG8+|6g%-OrIH~&WM~QMQ3@2b% zAre597tt4#effyjX^x38$3U0A%Tu1~7u<#lveI6vfGop0s`7U$R%stBQR(e1`@`jZ<|;@fBBz

    K5o$9TYBLRLGZ|{r2(_6EwP}Rf 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

    S8pQe`G{B^~LQ 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 GSN{clp+vX< literal 0 HcmV?d00001 diff --git a/assets/fonts/SourceSerif4-It.ttf b/assets/fonts/SourceSerif4-It.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e818087d0c75997a38189f6cf578c468df175062 GIT binary patch literal 187808 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 literal 0 HcmV?d00001 diff --git a/assets/fonts/SourceSerif4-Regular.ttf b/assets/fonts/SourceSerif4-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..964a2bf8934182485cf4e2348c8443091739334f GIT binary patch literal 261868 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
    DwT0y_Z*ryQh!0U($n>Nn@}WY%%sa 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 IlrIPHU%8J)L;wH) literal 0 HcmV?d00001 diff --git a/corpus/equations.tsv b/corpus/equations.tsv new file mode 100644 index 00000000..12fea277 --- /dev/null +++ b/corpus/equations.tsv @@ -0,0 +1,45 @@ +# id linear display (1 = display style, 0 = inline) +frac_simple \frac{a}{b} 0 +frac_nested \frac{1}{1+\frac{1}{x}} 1 +frac_nested_inline \frac{a}{\frac{b}{c}} 0 +cfrac a_0+\cfrac{1}{a_1+\cfrac{1}{a_2+\cfrac{1}{a_3}}} 1 +sqrt \sqrt{x^2+y^2} 0 +sqrt_degree \sqrt[3]{x+1} 0 +sqrt_nested \sqrt{1+\sqrt{1+\sqrt{x}}} 1 +script_sup x^2 0 +script_sub a_n 0 +script_both x_i^2 0 +script_nested e^{-x^{2}} 0 +sum_display \sum_{i=1}^{n} i^2 1 +sum_inline \sum_{i=1}^{n} i^2 0 +prod_display \prod_{k=1}^{n} k 1 +int_display \int_0^1 x^2\,dx 1 +int_inline \int_0^1 x^2\,dx 0 +oint \oint_C f\,dz 1 +lim_display \lim_{x\to0}\frac{\sin x}{x}=1 1 +lim_inline \lim_{n\to\infty}\left(1+\frac{1}{n}\right)^n=e 0 +pmatrix \begin{pmatrix}a&b\\c&d\end{pmatrix} 1 +bmatrix \begin{bmatrix}1&0&0\\0&1&0\\0&0&1\end{bmatrix} 1 +cases |x|=\begin{cases}x&x\geq0\\-x&x<0\end{cases} 1 +accent_hat \hat{x}+\hat{y} 0 +accent_vec \vec{v}\cdot\vec{w} 0 +accent_bar \bar{z}z=|z|^2 0 +overline \overline{AB} 0 +overbrace \overbrace{a+b+c}^{3} 1 +underbrace \underbrace{x+x+x+x}_{n} 1 +overrightarrow \overrightarrow{AB} 0 +quadratic x=\frac{-b\pm\sqrt{b^2-4ac}}{2a} 1 +euler e^{i\pi}+1=0 1 +maxwell_gauss \nabla\cdot E=\frac{\rho}{\varepsilon_0} 1 +maxwell_faraday \nabla\times E=-\frac{\partial B}{\partial t} 1 +maxwell_ampere \nabla\times B=\mu_0J+\mu_0\varepsilon_0\frac{\partial E}{\partial t} 1 +binom \binom{n}{k}=\frac{n!}{k!(n-k)!} 1 +delims_tall \left[\frac{a}{b}\right]+\left\{\frac{c}{d}\right\} 1 +floor_ceil ⌊x⌋+⌈y⌉ 0 +abs_tall \left|\frac{a}{b}\right| 0 +angle ⟨u,v⟩ 0 +greek \alpha+\beta=\gamma 0 +func \sin^2\theta+\cos^2\theta=1 0 +boxed \boxed{E=mc^2} 0 +wide_matrix \begin{matrix}a_0&a_1&a_2&a_3&a_4&a_5&a_6&a_7&a_8&a_9&a_{10}&a_{11}&a_{12}&a_{13}&a_{14}&a_{15}&a_{16}&a_{17}&a_{18}&a_{19}\end{matrix} 1 +long_wrap (a+b)^{6}=a^{6}+6a^5b+15a^4b^2+20a^3b^3+15a^2b^4+6ab^5+b^{6}+c^{6}+6c^5d+15c^4d^2+20c^3d^3+15c^2d^4+6cd^5+d^{6} 0 diff --git a/corpus/latex.tsv b/corpus/latex.tsv new file mode 100644 index 00000000..f708914e --- /dev/null +++ b/corpus/latex.tsv @@ -0,0 +1,92 @@ +# input (MathLive-style LaTeX) to_latex(from_linear(input)) +x^2 x^2 +x^{2} x^2 +x^{2+1} x^{2+1} +x^{n^{2}} x^{n^2} +x^2+3x-2 x^2+3x-2 +2x 2x +3x^2+2x-1 3x^2+2x-1 +\frac{1}{x} \frac{1}{x} +\frac{x+1}{x-1} \frac{x+1}{x-1} +\frac{\frac{1}{2}}{3} \frac{\frac{1}{2}}{3} +\frac{x^{2}}{3} \frac{x^2}{3} +\sqrt{x} \sqrt{x} +\sqrt{x+1} \sqrt{x+1} +\sqrt[3]{x} \sqrt[3]{x} +\sqrt{\sqrt{x}} \sqrt{\sqrt{x}} +\sin(x) \sin\left(x\right) +\sin x \sin\left(x\right) +\sin{x} \sin\left(x\right) +\cos\left(x\right) \cos\left(x\right) +\sin\left(2x\right)+\cos(x) \sin\left(2x\right)+\cos\left(x\right) +\tan(x) \tan\left(x\right) +\arcsin(x) \arcsin\left(x\right) +\sinh(x) \sinh\left(x\right) +\ln(x) \ln\left(x\right) +\ln x \ln\left(x\right) +\log(x) \log\left(x\right) +\exp(x) \exp\left(x\right) +\abs{x} \left|x\right| +|x| \left|x\right| +|x-1|+|x+1| \left|x-1\right|+\left|x+1\right| +2\pi x 2\pi x +\sin(\pi x) \sin\left(\pi x\right) +\theta \theta +1+\cos\theta 1+\cos\left(\theta\right) +\infty \infty +\mathrm{e}^{x} \mathrm{e}^x +x_1+x_{12} x_1+x_{12} +2\cdot3 2\cdot3 +2\times3 2\times3 +4\div2 4\div2 +x\pm1 x\pm1 +(x+1)(x-1) \left(x+1\right)\left(x-1\right) +(x+1)2 \left(x+1\right)2 +2(x+1) 2\left(x+1\right) +x^2+y^2-1 x^2+y^2-1 +x--1 x--1 +x++1 x++1 +3\sqrt{x} 3\sqrt{x} +e^{-x^2} e^{-x^2} +\frac{\sin(x)}{x} \frac{\sin\left(x\right)}{x} +\left|x\right| \left|x\right| +\cot(x)\sec(x)\csc(x) \cot\left(x\right)\sec\left(x\right)\csc\left(x\right) +2\sin(3x) 2\sin\left(3x\right) +\sin^{2}(x) \sin^2\left(x\right) +\sqrt[n]{x+1} \sqrt[n]{x+1} +a b a b +\frac{1}{2}x \frac{1}{2}x +x^{\frac{1}{2}} x^{\frac{1}{2}} +\sin\theta \sin\left(\theta\right) +10x 10x +2.5x 2.5x +(2)(3)(4) \left(2\right)\left(3\right)\left(4\right) +\operatorname{abs}(x) \operatorname{abs}\left(x\right) +\frac{1}{} \frac{1}{} +\arctan(x)^{2} {\arctan\left(x\right)}^2 +\cosh x \cosh\left(x\right) +\tanh(x) \tanh\left(x\right) +x^{2}_{3} x_3^2 +x^2+y^2=25 x^2+y^2=25 +y=\frac{x^2-1}{x+1} y=\frac{x^2-1}{x+1} +y=\sqrt{4-x^2} y=\sqrt{4-x^2} +r=1+\cos\theta r=1+\cos\left(\theta\right) +\left(x-2\right)^2+\left(y+1\right)^2=9 \left(x-2\right)^2+\left(y+1\right)^2=9 +y=\left|x-3\right|+2 y=\left|x-3\right|+2 +y=\sin\left(2x\right)\cos\left(x\right) y=\sin\left(2x\right)\cos\left(x\right) +y=\frac{1}{2}x+\frac{3}{4} y=\frac{1}{2}x+\frac{3}{4} +y=e^{x} y=e^x +y=\ln\left(x+1\right) y=\ln\left(x+1\right) +y=\sqrt[3]{x^2} y=\sqrt[3]{x^2} +f\left(x\right)=ax^2+bx+c f\left(x\right)=ax^2+bx+c +\frac{d}{dx}x^2 \frac{d}{dx}x^2 +y=2^{x} y=2^x +y=x^{\frac{2}{3}} y=x^{\frac{2}{3}} +x^{2}+y^{2}\le 4 x^2+y^2\le 4 +y=\sin^{2}\left(x\right) y=\sin^2\left(x\right) +\left(1,2\right) \left(1,2\right) +\left[1,2,3\right] \left[1,2,3\right] +a=\frac{-b\pm\sqrt{b^{2}-4ac}}{2a} a=\frac{-b\pm\sqrt{b^2-4ac}}{2a} +y=\left\{x<0:-x,x\right\} y=\left\{x<0:-x,x\right\} +\sum_{n=1}^{5}n^2 \sum_{n=1}^5n^2 +\pi r^{2} \pi r^2 diff --git a/corpus/omml/deckcraft_pptx_roundtrip_frac.xml b/corpus/omml/deckcraft_pptx_roundtrip_frac.xml new file mode 100644 index 00000000..5e104a6d --- /dev/null +++ b/corpus/omml/deckcraft_pptx_roundtrip_frac.xml @@ -0,0 +1 @@ +ab diff --git a/corpus/omml/deckcraft_pptx_roundtrip_frac_rpr.xml b/corpus/omml/deckcraft_pptx_roundtrip_frac_rpr.xml new file mode 100644 index 00000000..ca4636ab --- /dev/null +++ b/corpus/omml/deckcraft_pptx_roundtrip_frac_rpr.xml @@ -0,0 +1 @@ +x2 diff --git a/corpus/omml/wordcraft_docx_fixture_ssup.xml b/corpus/omml/wordcraft_docx_fixture_ssup.xml new file mode 100644 index 00000000..de1ea3b3 --- /dev/null +++ b/corpus/omml/wordcraft_docx_fixture_ssup.xml @@ -0,0 +1 @@ +x2 diff --git a/corpus/omml/wordcraft_docx_roundtrip_display_rad.xml b/corpus/omml/wordcraft_docx_roundtrip_display_rad.xml new file mode 100644 index 00000000..38a71f37 --- /dev/null +++ b/corpus/omml/wordcraft_docx_roundtrip_display_rad.xml @@ -0,0 +1 @@ +x diff --git a/corpus/omml/wordcraft_docx_roundtrip_foreign_attrs.xml b/corpus/omml/wordcraft_docx_roundtrip_foreign_attrs.xml new file mode 100644 index 00000000..270088e0 --- /dev/null +++ b/corpus/omml/wordcraft_docx_roundtrip_foreign_attrs.xml @@ -0,0 +1 @@ +x diff --git a/corpus/omml/wordcraft_docx_roundtrip_frac.xml b/corpus/omml/wordcraft_docx_roundtrip_frac.xml new file mode 100644 index 00000000..e13045b5 --- /dev/null +++ b/corpus/omml/wordcraft_docx_roundtrip_frac.xml @@ -0,0 +1 @@ +ab+1 diff --git a/crates/equashion-egui/Cargo.toml b/crates/equashion-egui/Cargo.toml new file mode 100644 index 00000000..5d578c57 --- /dev/null +++ b/crates/equashion-egui/Cargo.toml @@ -0,0 +1,34 @@ +[package] +name = "equashion-egui" +version.workspace = true +edition.workspace = true +license.workspace = true +description = "equaSHion egui widget: the equation editor (canvas, palette, linear field) with no host types" + +[lints.rust] +unsafe_code = "forbid" + +[lints.clippy] +dbg_macro = "warn" +todo = "warn" +too_many_arguments = "allow" +type_complexity = "allow" +unwrap_used = "deny" +expect_used = "deny" +panic = "deny" +unimplemented = "deny" +unreachable = "deny" + +[dependencies] +equashion-math = { workspace = true } +equashion-layout = { workspace = true, features = ["extra-fonts"] } +equashion-render = { workspace = true, features = ["raster", "extra-fonts"] } +egui = { workspace = true } + +[dev-dependencies] +egui_kittest = { workspace = true } +# The native example only (glow keeps the build small; no wgpu). +eframe = { workspace = true, features = ["default_fonts", "glow", "x11", "wayland"] } + +[[example]] +name = "widget" diff --git a/crates/equashion-egui/examples/widget.rs b/crates/equashion-egui/examples/widget.rs new file mode 100644 index 00000000..05271dce --- /dev/null +++ b/crates/equashion-egui/examples/widget.rs @@ -0,0 +1,85 @@ +//! The equation editor widget in a native eframe window, with live linear and OMML readouts. +//! +//! `cargo run -p equashion-egui --example widget` (add `-- --light` for the light theme). +//! `EQUASHION_SCREENSHOT=` saves one frame and exits (for headless checks under xvfb). + +use equashion_egui::EquationEditor; + +struct Demo { + editor: EquationEditor, + last: String, + screenshot: Option, + frames: u32, +} + +impl eframe::App for Demo { + fn ui(&mut self, ui: &mut egui::Ui, _frame: &mut eframe::Frame) { + egui::CentralPanel::default().show(ui, |ui| { + ui.heading("equaSHion"); + let r = self.editor.show(ui); + if r.committed { + self.last = format!("committed: {}", self.editor.linear()); + } + if r.cancelled { + self.editor.revert(); + self.last = "cancelled (reverted)".into(); + } + ui.separator(); + ui.label(egui::RichText::new("Linear").strong()); + let mut lin = self.editor.linear(); + ui.add(egui::TextEdit::singleline(&mut lin).interactive(false).desired_width(f32::INFINITY).font(egui::FontId::monospace(13.0))); + ui.label(egui::RichText::new("OMML").strong()); + let mut omml = self.editor.omml(); + egui::ScrollArea::vertical().max_height(160.0).show(ui, |ui| { + ui.add(egui::TextEdit::multiline(&mut omml).interactive(false).desired_width(f32::INFINITY).font(egui::FontId::monospace(12.0))); + }); + if !self.last.is_empty() { + ui.label(&self.last); + } + }); + if let Some(path) = &self.screenshot { + self.frames += 1; + if self.frames == 5 { + ui.ctx().send_viewport_cmd(egui::ViewportCommand::Screenshot(Default::default())); + } + let shot = ui + .ctx() + .input(|i| i.events.iter().find_map(|e| if let egui::Event::Screenshot { image, .. } = e { Some(image.clone()) } else { None })); + if let Some(img) = shot { + let ok = write_ppm(path, &img); + eprintln!("widget: screenshot {} -> {}", if ok { "saved" } else { "FAILED" }, path.display()); + ui.ctx().send_viewport_cmd(egui::ViewportCommand::Close); + } + ui.ctx().request_repaint(); + } + } +} + +/// A binary PPM (no image crate here); `.png` paths get `.ppm` appended. +fn write_ppm(path: &std::path::Path, img: &egui::ColorImage) -> bool { + let mut out = format!("P6\n{} {}\n255\n", img.size[0], img.size[1]).into_bytes(); + for p in &img.pixels { + out.extend_from_slice(&[p.r(), p.g(), p.b()]); + } + std::fs::write(path, out).is_ok() +} + +fn main() -> eframe::Result { + let light = std::env::args().any(|a| a == "--light"); + let screenshot = std::env::var_os("EQUASHION_SCREENSHOT").map(std::path::PathBuf::from); + let options = eframe::NativeOptions { viewport: egui::ViewportBuilder::default().with_inner_size([760.0, 720.0]), ..Default::default() }; + eframe::run_native( + "equaSHion widget", + options, + Box::new(move |cc| { + // The host, not the widget, decides the theme. + cc.egui_ctx.set_theme(if light { egui::Theme::Light } else { egui::Theme::Dark }); + Ok(Box::new(Demo { + editor: EquationEditor::with_linear(r"x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}"), + last: String::new(), + screenshot, + frames: 0, + })) + }), + ) +} diff --git a/crates/equashion-egui/src/gallery.rs b/crates/equashion-egui/src/gallery.rs new file mode 100644 index 00000000..caf8edab --- /dev/null +++ b/crates/equashion-egui/src/gallery.rs @@ -0,0 +1,169 @@ +//! The Equation tab's galleries for a host's ribbon: structure galleries, symbol sets and +//! ready-made equations, drawn with the same bundled-font faces as the palette and inserted +//! into this editor. The host owns the buttons and menus; it calls these inside them: +//! +//! ```ignore +//! ui.menu_button("Fraction", |ui| { +//! if editor.gallery_ui(ui, "fraction") { ui.close(); } +//! }); +//! ``` +//! +//! Data: [`equashion_math::galleries`]. + +use egui::{Ui, vec2}; +use equashion_math::{Editor, Math, Node, galleries}; + +use crate::{EquationEditor, palette}; + +/// Faces per row in a gallery menu. +const COLUMNS_W: f32 = 340.0; + +impl EquationEditor { + /// A rendered face of `math` at `pt` points: its texture and size in points (cached per + /// `key` and pixel density). The face is white on transparent; paint it with the colour you + /// want as the tint. For hosts that draw their own tiles and buttons. + pub fn face(&mut self, ui: &Ui, key: &str, math: &Math, pt: f64) -> Option<(egui::TextureId, egui::Vec2)> { + let sym = self.symbol(ui, key, math, pt)?; + Some((sym.texture_id(), sym.size())) + } + + /// Insert a gallery template at the caret (a script or fraction takes the term before it) + /// and keep typing in the canvas. + pub fn insert_gallery_template(&mut self, ui: &Ui, template: &Math) { + self.palette_insert(ui, Some(template.clone()), None); + } + + /// Insert a symbol at the caret and keep typing in the canvas. + pub fn insert_gallery_symbol(&mut self, ui: &Ui, c: char) { + self.palette_insert(ui, None, Some(c)); + } + + /// Replace the whole equation (a ready-made one) and keep typing in the canvas. Unlike + /// [`EquationEditor::set_math`] this is an edit: Esc would discard it. + pub fn replace_equation(&mut self, ui: &Ui, m: Math) { + let (para, jc) = (self.ed.math().para, self.ed.math().jc.clone()); + let mut m = m; + m.para = para; + m.jc = jc; + self.ed.set_math(m); + self.wants_canvas = true; + let id = self.canvas_id(); + ui.memory_mut(|mem| mem.request_focus(id)); + self.tree_edited(); + self.touched = ui.input(|i| i.time); + } + + /// The equation is a display equation (on a line of its own). + pub fn is_display(&self) -> bool { + self.ed.math().para + } + + /// Show the equation on a line of its own (`true`) or in the line of text. + pub fn set_display(&mut self, display: bool) { + if self.ed.math().para != display { + self.ed.math_mut().para = display; + self.tree_edited(); + } + } + + /// The display equation's justification (`left`, `right`, `center`, `centerGroup`). + pub fn justification(&self) -> Option<&str> { + self.ed.math().jc.as_deref() + } + + /// Justify a display equation; `None` is the default (centred as group). + pub fn set_justification(&mut self, jc: Option<&str>) { + let jc = jc.map(str::to_string); + if self.ed.math().jc != jc { + self.ed.math_mut().jc = jc; + self.tree_edited(); + } + } + + /// A gallery's representative face (its first template, empty places as boxes) at `pt` + /// points, as a texture and its size in points, for a host that draws its own button. + /// Paint it with the button's text colour as the tint. + pub fn gallery_face(&mut self, ui: &Ui, gallery_id: &str, pt: f64) -> Option<(egui::TextureId, egui::Vec2)> { + let t = galleries().structure(gallery_id)?.sections.first()?.templates.first()?; + let face = Editor::new(t.math.clone()).display_math(); + let sym = self.symbol(ui, &format!("face/{gallery_id}"), &face, pt)?; + Some((sym.texture_id(), sym.size())) + } + + /// One structure gallery (`"fraction"`, `"script"`, `"radical"`, `"integral"`, + /// `"largeOperator"`, `"bracket"`, `"function"`, `"accent"`, `"limitLog"`, `"operator"`, + /// `"matrix"`): its sections, each a heading over a wrapped run of template faces. Inserts + /// the chosen template at the caret; true when one was. + pub fn gallery_ui(&mut self, ui: &mut Ui, gallery_id: &str) -> bool { + let Some(g) = galleries().structure(gallery_id) else { return false }; + let mut chosen: Option = None; + ui.set_max_width(COLUMNS_W); + for s in &g.sections { + ui.label(egui::RichText::new(&s.name).size(11.0).strong().color(ui.visuals().weak_text_color())); + ui.horizontal_wrapped(|ui| { + ui.spacing_mut().item_spacing = vec2(3.0, 3.0); + for t in &s.templates { + // The template with its empty places shown as boxes. + let face = Editor::new(t.math.clone()).display_math(); + let Some(sym) = self.symbol(ui, &format!("gallery/{}", t.id), &face, 14.0) else { continue }; + let hover = format!("{} ({})", t.label, t.linear); + if palette::button(ui, sym, vec2(34.0, 30.0), 24.0, &t.label, &hover).clicked() { + chosen = Some(t.math.clone()); + } + } + }); + ui.add_space(4.0); + } + let hit = chosen.is_some(); + self.palette_insert(ui, chosen, None); + hit + } + + /// The names of the symbol sets, in order (index them with [`EquationEditor::symbols_ui`]). + pub fn symbol_set_names() -> Vec<&'static str> { + galleries().symbols.iter().map(|s| s.name.as_str()).collect() + } + + /// One symbol set as a wrapped run of faces. Inserts the chosen symbol at the caret; true + /// when one was. + pub fn symbols_ui(&mut self, ui: &mut Ui, set: usize) -> bool { + let Some(s) = galleries().symbols.get(set) else { return false }; + let mut chosen: Option = None; + ui.set_max_width(COLUMNS_W); + ui.horizontal_wrapped(|ui| { + ui.spacing_mut().item_spacing = vec2(3.0, 3.0); + for c in s.chars.chars() { + let text = c.to_string(); + let face = Math::new(vec![Node::Text(text.clone())]); + let Some(sym) = self.symbol(ui, &format!("sym-{}", c as u32), &face, 15.0) else { continue }; + let hover = format!("U+{:04X}", c as u32); + if palette::button(ui, sym, vec2(28.0, 28.0), 22.0, &text, &hover).clicked() { + chosen = Some(c); + } + } + }); + let hit = chosen.is_some(); + self.palette_insert(ui, None, chosen); + hit + } + + /// The ready-made equations as a list (face and description). Replaces the equation with + /// the chosen one; true when one was. + pub fn builtins_ui(&mut self, ui: &mut Ui) -> bool { + let mut chosen: Option = None; + for t in &galleries().builtins { + let Some(sym) = self.symbol(ui, &format!("builtin/{}", t.id), &t.math, 15.0) else { continue }; + if palette::button(ui, sym, vec2(220.0, 34.0), 30.0, &t.label, &t.label).clicked() { + chosen = Some(t.math.clone()); + } + } + let hit = chosen.is_some(); + if let Some(m) = chosen { + self.set_math(m); + self.wants_canvas = true; + let id = self.canvas_id(); + ui.memory_mut(|mem| mem.request_focus(id)); + } + hit + } +} diff --git a/crates/equashion-egui/src/lib.rs b/crates/equashion-egui/src/lib.rs new file mode 100644 index 00000000..343ad882 --- /dev/null +++ b/crates/equashion-egui/src/lib.rs @@ -0,0 +1,800 @@ +//! equaSHion egui widget: an equation editor you type the formatted equation straight into. +//! +//! [`EquationEditor`] draws a template palette, a canvas with the laid-out equation and a caret +//! inside it, and a linear-text field. Typing `x`, `^`, `2` raises the 2 at once and leaves the +//! caret in the exponent; `/` makes a fraction, `sqrt` a root, Greek names become symbols, the +//! arrow keys and Tab walk the tree, a click places the caret and a drag or shift-click selects. +//! Ctrl+Z / Ctrl+Shift+Z / Ctrl+Y undo and redo, Ctrl+C / Ctrl+X copy and cut the selection as +//! linear text, Ctrl+A selects all, Enter commits and Esc cancels (asking first when there are +//! unsaved changes). The editing itself is `equashion_math::Editor`; this crate only draws it +//! and turns egui input into editor calls. +//! +//! The widget is safe on an `egui::Context` that other code also uses: +//! - it never calls `Context::set_fonts`, `set_visuals` or `set_style`, and only uses +//! `FontId::proportional` / `FontId::monospace` (always bound) for its own text; +//! - equation glyphs, including every palette symbol, are rasterised by `equashion-render` from +//! the bundled fonts, so nothing depends on the host's egui fonts having math operators; +//! - its colours come from `ui.visuals()`, so it follows a light or dark host; +//! - its egui ids derive from the widget's own [`egui::Id`] and its texture names start with +//! `equashion/`; +//! - it only reads keyboard input while its canvas has focus, and only takes focus back when +//! no other widget holds it. +//! +//! ```no_run +//! # fn ui(ui: &mut egui::Ui, editor: &mut equashion_egui::EquationEditor) { +//! let r = editor.show(ui); +//! if r.committed { +//! println!("{}", editor.omml()); +//! } +//! # } +//! ``` +#![deny(clippy::unwrap_used, clippy::expect_used, clippy::panic, clippy::unimplemented, clippy::todo, clippy::unreachable)] +#![forbid(unsafe_code)] + +mod gallery; +mod palette; + +use std::collections::HashMap; +use std::sync::atomic::{AtomicU64, Ordering}; +use std::sync::{Arc, OnceLock}; + +use egui::{FontId, Key, Pos2, Sense, TextureHandle, TextureOptions, Ui, pos2, vec2}; +use equashion_layout::{DEFAULT_FAMILY, EqLayout, FontDb, Rgb, layout_equation}; +use equashion_math::{Caret, Editor, Key as MKey, Math, from_linear, from_omml, to_linear, to_omml}; + +pub use equashion_math; + +/// Font size of the equation on the canvas, points. +pub const DEFAULT_FONT_SIZE: f64 = 28.0; +/// Default height of the canvas, points. +pub const DEFAULT_CANVAS_HEIGHT: f32 = 120.0; +/// Space around the equation inside the canvas layout, points. +const EQ_PAD: f64 = 8.0; +/// Largest render scale of the canvas texture (pixels per point). +const MAX_SCALE: f64 = 4.0; +/// Largest side of the canvas texture, pixels (egui's guaranteed minimum is 2048). +const MAX_TEXTURE: f64 = 2000.0; +/// Gap between the canvas edge and the equation, points. +const VIEW_MARGIN: f32 = 10.0; +/// Smallest scale a long equation is shrunk to before the canvas scrolls instead. +const MIN_SCALE: f32 = 0.5; +/// Seconds per half blink of the caret. +const BLINK: f64 = 0.5; +/// The message shown after a first Esc with unsaved changes. +pub const DISCARD_PROMPT: &str = "Press Esc again to discard this equation, or Enter to keep it."; + +/// The bundled fonts (Source Serif 4, Inter and the math fallback), loaded once per process. +pub fn bundled_fonts() -> Arc { + static DB: OnceLock> = OnceLock::new(); + DB.get_or_init(|| Arc::new(FontDb::bundled_only())).clone() +} + +/// What happened in one [`EquationEditor::show`] call. +#[derive(Debug)] +pub struct EditorResponse { + /// The equation (tree or display flag) changed this frame. + pub changed: bool, + /// Enter was pressed in the canvas or the linear field: the host should keep the equation. + pub committed: bool, + /// Esc was pressed and confirmed (at once when nothing changed since the last load or + /// commit, otherwise on the second press): the host should drop the edit. The widget + /// keeps its content; call [`EquationEditor::revert`] to go back to the loaded equation. + pub cancelled: bool, + /// The canvas: focus, hover and the rectangle typing goes to. + pub response: egui::Response, + /// The whole widget (palette, canvas, linear field, message line). + pub rect: egui::Rect, +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +enum Tab { + Structures, + Greek, + Operators, +} + +/// The equation as drawn: the tree it was drawn from, its layout and the texture. +struct Canvas { + shown: Math, + layout: EqLayout, + tex: TextureHandle, + /// The render scale asked for (pixels per point; the texture may be smaller for size). + want: f64, +} + +/// The equation editor widget. Keep one per edited equation across frames and call +/// [`EquationEditor::show`] every frame. +pub struct EquationEditor { + id: egui::Id, + fonts: Arc, + family: String, + font_size: f64, + canvas_height: f32, + show_palette: bool, + show_linear: bool, + /// Just the equation: no palette, linear field or message line, no background, sized to the + /// equation, for editing in place on the host's page. + inline: bool, + /// Lay the equation out in display style (large operators, limits above and below) or text + /// style, as the host's own drawing of it is. Default display, as a dialog shows it. + display_style: bool, + /// With `inline`: the host draws the equation itself (it is the document's own); the widget + /// draws only the caret, selection and active place over it. + overlay: bool, + /// The idle caret blinks (off for hosts that honour reduced motion). + caret_blink: bool, + ed: Editor, + /// Text of the linear field. + linear: String, + /// The equation as last loaded or committed, to tell whether Esc would lose work. + initial: Math, + tab: Tab, + /// Status line (the discard prompt). + message: Option, + canvas: Option, + palette: HashMap, + /// Frames left in which the canvas asks for the keyboard. + auto_focus: u8, + /// Typing goes to the canvas: it takes the keyboard back while no widget holds it, so a + /// click on a palette button does not leave typing dead. + wants_canvas: bool, + /// The canvas or the linear field had the keyboard at the end of the last frame. + focus_within: bool, + /// Time of the last edit, so the caret stays solid while typing. + touched: f64, + /// True while the mouse button that started in the canvas is held. + dragging: bool, + /// Where the mouse press (or the shift-click's fixed end) is: selections run from here. + origin: Caret, + /// Esc was pressed once with unsaved work: the next one cancels. + discard_armed: bool, + /// Where the canvas was drawn last frame: top-left of the equation and points per layout point. + view: (Pos2, f32), +} + +impl std::fmt::Debug for EquationEditor { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("EquationEditor").field("id", &self.id).field("linear", &self.linear).field("caret", self.ed.caret()).finish_non_exhaustive() + } +} + +impl Default for EquationEditor { + fn default() -> Self { + Self::new() + } +} + +impl EquationEditor { + /// A blank editor using the bundled fonts. Its [`egui::Id`] is unique to this instance; + /// use [`EquationEditor::id_salt`] for a stable one. + pub fn new() -> Self { + static NEXT: AtomicU64 = AtomicU64::new(0); + let n = NEXT.fetch_add(1, Ordering::Relaxed); + EquationEditor { + id: egui::Id::new(("equashion-editor", n)), + fonts: bundled_fonts(), + family: DEFAULT_FAMILY.to_string(), + font_size: DEFAULT_FONT_SIZE, + canvas_height: DEFAULT_CANVAS_HEIGHT, + show_palette: true, + show_linear: true, + inline: false, + overlay: false, + display_style: true, + caret_blink: true, + ed: Editor::new(Math::default()), + linear: String::new(), + initial: Math::default(), + tab: Tab::Structures, + message: None, + canvas: None, + palette: HashMap::new(), + auto_focus: 4, + wants_canvas: true, + focus_within: false, + touched: 0.0, + dragging: false, + origin: Caret::default(), + discard_armed: false, + view: (pos2(0.0, 0.0), 1.0), + } + } + + /// An editor on the equation typed as linear text (`x^2`, `\frac{a}{b}`, `sqrt(x)`). + pub fn with_linear(s: &str) -> Self { + let mut e = Self::new(); + e.set_linear(s); + e + } + + /// An editor on an OMML equation (`m:oMath` or `m:oMathPara`). OMML import never fails: + /// unknown elements are kept verbatim and broken input gives what could be read. + pub fn with_omml(xml: &str) -> Self { + let mut e = Self::new(); + e.set_math(from_omml(xml)); + e + } + + /// Derive the widget's egui ids from `salt` instead of a per-instance counter. + pub fn id_salt(mut self, salt: impl std::hash::Hash + std::fmt::Debug) -> Self { + self.id = egui::Id::new(("equashion-editor", salt)); + self.canvas = None; + self + } + + /// Lay out with these fonts instead of [`bundled_fonts`]. + pub fn fonts(mut self, fonts: Arc) -> Self { + self.fonts = fonts; + self.canvas = None; + self.palette.clear(); + self + } + + /// The font family of the equation (default [`DEFAULT_FAMILY`], "Source Serif 4"). + pub fn family(mut self, family: &str) -> Self { + self.family = family.to_string(); + self.canvas = None; + self + } + + /// The equation's font size on the canvas, points (default 28). + pub fn font_size(mut self, pt: f64) -> Self { + self.font_size = if pt.is_finite() { pt.clamp(6.0, 200.0) } else { DEFAULT_FONT_SIZE }; + self.canvas = None; + self + } + + /// The canvas height, points (default 120). + pub fn canvas_height(mut self, h: f32) -> Self { + self.canvas_height = if h.is_finite() { h.clamp(40.0, 2000.0) } else { DEFAULT_CANVAS_HEIGHT }; + self + } + + /// Edit in place: only the canvas, no background, as large as the equation. The host puts it + /// where the equation sits (see [`EquationEditor::inline_pad`]) and draws what is behind it. + pub fn inline(mut self, on: bool) -> Self { + self.inline = on; + self + } + + /// Display style (the default) or text style, to match how the host draws the equation. + pub fn display_style(mut self, display: bool) -> Self { + self.display_style = display; + self + } + + /// [`EquationEditor::display_style`] on an existing editor: the next frame lays out again. + pub fn set_display_style(&mut self, display: bool) { + if self.display_style != display { + self.display_style = display; + self.canvas = None; + } + } + + /// With [`EquationEditor::inline`]: do not draw the equation, only the caret, selection and + /// active place. The host draws the same equation underneath (same fonts, size and place), so + /// typing reads as typing in the text itself. + pub fn overlay(mut self, on: bool) -> Self { + self.overlay = on; + self + } + + /// Where the baseline sits, points from the top of an inline canvas. + pub fn inline_baseline(&self) -> Option { + self.canvas.as_ref().map(|c| c.layout.baseline() as f32) + } + + /// Space between an inline canvas's left / top edge and the equation's own left / top edge, + /// in points at the editor's scale: place the canvas at the equation's position minus this. + pub fn inline_pad() -> egui::Vec2 { + vec2(VIEW_MARGIN + EQ_PAD as f32, EQ_PAD as f32) + } + + /// The size of the laid-out equation in points (the canvas it last drew), if it has drawn. + pub fn content_size(&self) -> Option { + self.canvas.as_ref().map(|c| vec2(c.layout.width() as f32, c.layout.height() as f32)) + } + + /// Change the font size (points); the next frame lays the equation out again. + pub fn set_font_size(&mut self, pt: f64) { + if (self.font_size - pt).abs() > f64::EPSILON { + self.font_size = pt; + self.canvas = None; + } + } + + /// Show the template palette (default on). + pub fn show_palette(mut self, on: bool) -> Self { + self.show_palette = on; + self + } + + /// Show the linear-text field and the display toggle (default on). + pub fn show_linear_field(mut self, on: bool) -> Self { + self.show_linear = on; + self + } + + /// Blink the caret while idle (default on). Off keeps it solid, for hosts that honour + /// a reduced-motion preference. + pub fn caret_blink(mut self, on: bool) -> Self { + self.caret_blink = on; + self + } + + /// [`EquationEditor::caret_blink`] on an existing editor. + pub fn set_caret_blink(&mut self, on: bool) { + self.caret_blink = on; + } + + /// Take the keyboard in the first frames after creation (default on). + pub fn auto_focus(mut self, on: bool) -> Self { + self.auto_focus = if on { 4 } else { 0 }; + self.wants_canvas = on; + self + } + + /// The widget's id; the canvas and the linear field use ids derived from it. + pub fn id(&self) -> egui::Id { + self.id + } + + /// The id of the canvas (the focus target typing goes to). + pub fn canvas_id(&self) -> egui::Id { + self.id.with("canvas") + } + + /// The id of the linear-text field. + pub fn linear_id(&self) -> egui::Id { + self.id.with("linear") + } + + /// The equation in linear form (canonical: `to_linear` of the tree, not the field text). + pub fn linear(&self) -> String { + to_linear(self.ed.math()) + } + + /// The equation as OMML. + pub fn omml(&self) -> String { + to_omml(self.ed.math()) + } + + /// The equation tree. + pub fn math(&self) -> &Math { + self.ed.math() + } + + /// The edit model (caret, selection, undo). + pub fn editor(&self) -> &Editor { + &self.ed + } + + /// The edit model, mutable. Call [`EquationEditor::sync_linear`] after changing the tree. + pub fn editor_mut(&mut self) -> &mut Editor { + &mut self.ed + } + + /// Backslash commands of the linear field that the parser did not know. + pub fn unknown_commands(&self) -> Vec { + equashion_math::unknown_commands(self.ed.math()) + } + + /// Load the equation typed as linear text. This is a load: Esc compares against it. + pub fn set_linear(&mut self, s: &str) { + self.set_math(from_linear(s)); + self.linear = s.to_string(); + } + + /// Load the equation from OMML. This is a load: Esc compares against it. + pub fn set_omml(&mut self, xml: &str) { + self.set_math(from_omml(xml)); + } + + /// Load an equation tree. This is a load: Esc compares against it. + pub fn set_math(&mut self, m: Math) { + self.ed = Editor::new(m); + self.linear = to_linear(self.ed.math()); + self.initial = self.ed.math().clone(); + self.message = None; + self.discard_armed = false; + } + + /// Go back to the equation as last loaded or committed. + pub fn revert(&mut self) { + let m = self.initial.clone(); + self.set_math(m); + } + + /// True when the equation differs from the one last loaded or committed. + pub fn is_dirty(&self) -> bool { + self.ed.math() != &self.initial + } + + /// Accept the current equation as the new baseline (what Enter does). + pub fn mark_clean(&mut self) { + self.ed.flush(); + self.initial = self.ed.math().clone(); + self.discard_armed = false; + self.message = None; + } + + /// Refresh the linear field from the tree (after [`EquationEditor::editor_mut`]). + pub fn sync_linear(&mut self) { + self.linear = to_linear(self.ed.math()); + } + + /// The status message (the discard prompt), if any. + pub fn message(&self) -> Option<&str> { + self.message.as_deref() + } + + /// The text of the linear field changed: rebuild the tree from it. + fn linear_edited(&mut self) { + let para = self.ed.math().para; + let mut m = from_linear(&self.linear); + m.para = para; + self.ed.set_math(m); + } + + /// The tree changed through the canvas or the palette: show it in the linear field. + fn tree_edited(&mut self) { + self.linear = to_linear(self.ed.math()); + self.message = None; + self.discard_armed = false; + } + + /// Esc: the first press with unsaved work only warns, the second cancels. True when the + /// edit is cancelled. + fn escape(&mut self) -> bool { + if !self.is_dirty() || self.discard_armed { + self.discard_armed = false; + self.message = None; + return true; + } + self.discard_armed = true; + self.message = Some(DISCARD_PROMPT.to_string()); + false + } + + fn commit(&mut self) { + self.mark_clean(); + } + + /// Draw the widget: palette, canvas, linear field and message line. + pub fn show(&mut self, ui: &mut Ui) -> EditorResponse { + let before = self.ed.math().clone(); + let esc = self.focus_within && ui.input(|i| i.key_pressed(Key::Escape)); + let mut committed = false; + let id = self.id; + let inner = ui.push_id(id, |ui| { + if self.show_palette && !self.inline { + self.palette_ui(ui); + ui.add_space(4.0); + } + let canvas = self.canvas_ui(ui, &mut committed); + if !self.inline { + ui.add_space(4.0); + if self.show_linear { + self.linear_ui(ui, &mut committed); + } + self.message_ui(ui); + } + canvas + }); + let mut cancelled = false; + if esc { + cancelled = self.escape(); + } + if committed { + self.commit(); + } + let (c, l) = (self.canvas_id(), self.linear_id()); + self.focus_within = ui.memory(|m| m.has_focus(c) || m.has_focus(l)); + EditorResponse { changed: before != *self.ed.math(), committed, cancelled, response: inner.inner, rect: inner.response.rect } + } + + /// Egui input to editor calls. True when the tree or the caret changed. + fn handle_input(&mut self, ui: &Ui, committed: &mut bool) -> bool { + let events = ui.input(|i| i.events.clone()); + if events.is_empty() { + return false; + } + let before = (self.ed.math().clone(), self.ed.caret().clone(), self.ed.selection()); + // Platforms that send Copy / Cut events also send the key; act on one of them only. + let clipboard_events = events.iter().any(|e| matches!(e, egui::Event::Copy | egui::Event::Cut)); + for ev in &events { + match ev { + egui::Event::Text(t) => self.ed.type_str(t), + egui::Event::Paste(t) => self.ed.type_str(t), + egui::Event::Copy => self.copy(ui), + egui::Event::Cut => self.cut(ui), + egui::Event::Key { key, pressed: true, modifiers, .. } => { + let nav = match key { + Key::ArrowLeft => Some(MKey::Left), + Key::ArrowRight => Some(MKey::Right), + Key::ArrowUp => Some(MKey::Up), + Key::ArrowDown => Some(MKey::Down), + Key::Home => Some(MKey::Home), + Key::End => Some(MKey::End), + Key::Backspace => Some(MKey::Backspace), + Key::Delete => Some(MKey::Delete), + Key::Tab => Some(MKey::Tab), + Key::Enter => { + *committed = true; + None + } + Key::Z if modifiers.command => Some(if modifiers.shift { MKey::Redo } else { MKey::Undo }), + Key::Y if modifiers.command => Some(MKey::Redo), + _ => None, + }; + if let Some(k) = nav { + self.ed.key(k, modifiers.shift); + } else if *key == Key::A && modifiers.command { + self.ed.select_all(); + } else if *key == Key::C && modifiers.command && !clipboard_events { + self.copy(ui); + } else if *key == Key::X && modifiers.command && !clipboard_events { + self.cut(ui); + } + } + _ => {} + } + } + let tree = before.0 != *self.ed.math(); + if tree { + self.tree_edited(); + } + tree || before.1 != *self.ed.caret() || before.2 != self.ed.selection() + } + + fn copy(&mut self, ui: &Ui) { + if let Some(t) = self.ed.selected_linear() { + ui.ctx().copy_text(t); + } + } + + fn cut(&mut self, ui: &Ui) { + if let Some(t) = self.ed.cut() { + ui.ctx().copy_text(t); + } + } + + /// Lay the current tree out and render it, unless the last canvas already shows it. + fn refresh_canvas(&mut self, ui: &Ui) { + let shown = self.ed.display_math(); + let ppp = f64::from(ui.ctx().pixels_per_point()).max(1.0); + let want = (ppp * 2.0).min(MAX_SCALE); + if self.canvas.as_ref().is_some_and(|c| c.shown == shown && c.want == want) { + return; + } + // Ink in white on transparent; the painter tints it with the theme's text colour. + let layout = layout_equation(&*self.fonts, &shown, &self.family, self.font_size, self.display_style, Rgb::WHITE, EQ_PAD); + // Never beyond the largest texture the GPU takes, however wide the equation grows. + let scale = (MAX_TEXTURE / layout.width().max(layout.height()).max(1.0)).min(want); + let img = equashion_render::render_scene(&layout.scene, &*self.fonts, scale, None); + let ci = egui::ColorImage::from_rgba_premultiplied([img.width as usize, img.height as usize], &img.pixels); + let tex = match self.canvas.take() { + Some(mut c) => { + c.tex.set(ci, TextureOptions::LINEAR); + c.tex + } + None => ui.ctx().load_texture(format!("equashion/editor/{:?}/canvas", self.id), ci, TextureOptions::LINEAR), + }; + self.canvas = Some(Canvas { shown, layout, tex, want }); + } + + /// Keyboard focus: the canvas takes it in the first frames and whenever nothing holds it + /// while typing belongs to it; it never takes it from another widget. + fn manage_focus(&mut self, ui: &Ui) { + let canvas = self.canvas_id(); + if self.auto_focus > 0 { + self.auto_focus -= 1; + ui.memory_mut(|m| m.request_focus(canvas)); + return; + } + match ui.memory(|m| m.focused()) { + Some(f) if f == canvas => {} + Some(_) => self.wants_canvas = false, + None if self.wants_canvas => ui.memory_mut(|m| m.request_focus(canvas)), + None => {} + } + } + + /// The editing canvas: the rendered equation, selection, caret, placeholders and mouse. + fn canvas_ui(&mut self, ui: &mut Ui, committed: &mut bool) -> egui::Response { + let id = self.canvas_id(); + self.manage_focus(ui); + // Keys the editor uses must not move the focus away; Esc is the editor's too. + let filter = egui::EventFilter { tab: true, horizontal_arrows: true, vertical_arrows: true, escape: true }; + ui.memory_mut(|m| m.set_focus_lock_filter(id, filter)); + + let (width, height) = if self.inline { + // As large as the equation (what it drew last frame; a default the first time). + let (w, h) = self + .canvas + .as_ref() + .map_or((120.0, self.font_size as f32 * 2.0), |c| (c.layout.width() as f32 + 2.0 * VIEW_MARGIN, c.layout.height() as f32)); + if self.canvas.is_some() { (w.max(2.0 * VIEW_MARGIN + 8.0), h) } else { (w.max(48.0), h.max(self.font_size as f32 * 1.4)) } + } else { + (ui.available_width().max(160.0), self.canvas_height) + }; + let (rect, _) = ui.allocate_exact_size(vec2(width, height), Sense::hover()); + let resp = ui.interact(rect, id, Sense::click_and_drag()).on_hover_cursor(egui::CursorIcon::Text); + resp.widget_info(|| egui::WidgetInfo::labeled(egui::WidgetType::Other, ui.is_enabled(), "Equation")); + let focused = resp.has_focus(); + let now = ui.input(|i| i.time); + + if focused && self.handle_input(ui, committed) { + self.touched = now; + } + self.refresh_canvas(ui); + let Some(cv) = self.canvas.as_ref() else { return resp }; + + // Where the equation sits: left-aligned so it grows to the right as you type, vertically + // centred, shrunk (to at most half size) to fit, then scrolled to keep the caret in view. + let (w, h) = (cv.layout.width() as f32, cv.layout.height() as f32); + let room = width - 2.0 * VIEW_MARGIN; + let k = (room / w.max(1.0)).max(MIN_SCALE).min(height / h.max(1.0)).min(1.0); + let size = vec2(w * k, h * k); + let caret_x = cv.layout.caret_rect(self.ed.caret()).map_or(0.0, |r| r.x1 as f32 * k); + let scroll = if size.x > room { (caret_x - room * 0.85).clamp(0.0, size.x - room) } else { 0.0 }; + let origin = pos2(rect.min.x + VIEW_MARGIN - scroll, rect.center().y - size.y / 2.0); + self.view = (origin, k); + let to_layout = |p: Pos2| ((p.x - origin.x) / k.max(1e-3), (p.y - origin.y) / k.max(1e-3)); + + // Mouse: press places the caret, dragging or shift-click selects (across rows too). + let (pressed, down, pointer, shift) = + ui.input(|i| (i.pointer.primary_pressed(), i.pointer.primary_down(), i.pointer.interact_pos(), i.modifiers.shift)); + if let Some(p) = pointer { + let (x, y) = to_layout(p); + if pressed && rect.contains(p) && resp.hovered() { + ui.memory_mut(|m| m.request_focus(id)); + self.wants_canvas = true; + let hit = cv.layout.hit(f64::from(x), f64::from(y)); + if shift { + // Shift-click: extend from the fixed end of the current selection. + self.origin = self.ed.anchor_caret(); + self.ed.select_between(&self.origin, &hit); + } else { + self.ed.set_caret(hit.clone()); + self.origin = hit; + } + self.dragging = true; + self.touched = now; + } else if self.dragging && down { + let hit = cv.layout.hit(f64::from(x), f64::from(y)); + self.ed.select_between(&self.origin, &hit); + } + } + if !down { + self.dragging = false; + } + + let v = ui.visuals(); + let accent = v.selection.stroke.color; + let ink = v.strong_text_color(); + let painter = ui.painter_at(rect); + // The host's control corner radius, so the canvas matches its other inputs. + let corner = v.widgets.inactive.corner_radius; + if !self.inline { + painter.rect_filled(rect, corner, v.extreme_bg_color); + } + let to_screen = |r: equashion_layout::Rect| { + egui::Rect::from_min_max( + pos2(origin.x + r.x0 as f32 * k, origin.y + r.y0 as f32 * k), + pos2(origin.x + r.x1 as f32 * k, origin.y + r.y1 as f32 * k), + ) + }; + // The active place, tinted like MathLive's active placeholder: empty slots become a + // visible box, filled ones a soft band behind their content. The top level stays plain. + if !self.ed.caret().path.is_empty() + && let Some(r) = cv.layout.row_rect(&self.ed.caret().path) + { + let r = to_screen(r).expand2(vec2(2.5, 1.0)); + painter.rect_filled(r, 2.5, accent.gamma_multiply(0.13)); + painter.rect_stroke(r, 2.5, egui::Stroke::new(1.0, accent.gamma_multiply(0.45)), egui::StrokeKind::Inside); + } + // Selection under the glyphs. + if let Some((a, b)) = self.ed.selection() + && let Some(r) = cv.layout.span_rect(&self.ed.caret().path, a, b) + { + painter.rect_filled(to_screen(r), 1.0, v.selection.bg_fill.gamma_multiply(0.7)); + } + if !(self.inline && self.overlay) { + painter.image(cv.tex.id(), egui::Rect::from_min_size(origin, size), egui::Rect::from_min_max(pos2(0.0, 0.0), pos2(1.0, 1.0)), ink); + } + let dim = v.weak_text_color(); + if self.ed.is_blank() && !self.inline { + painter.text( + pos2(rect.min.x + 14.0, rect.center().y), + egui::Align2::LEFT_CENTER, + "Type here: x^2, a/b, \\frac, \\sqrt, \\alpha", + FontId::proportional(13.0), + dim, + ); + } + // The caret: solid while editing, blinking when idle. + if focused { + let on = !self.caret_blink || now - self.touched < BLINK || (((now - self.touched) / BLINK) as u64).is_multiple_of(2); + if on && let Some(r) = cv.layout.caret_rect(self.ed.caret()) { + let mut r = to_screen(r); + // Keep the caret off a radical's bar or a bracket at the start of a place. + if self.ed.caret().pos == 0 && !self.ed.caret().path.is_empty() { + r = r.translate(vec2(2.0 * k.max(0.5), 0.0)); + } + painter.line_segment([pos2(r.min.x, r.min.y), pos2(r.min.x, r.max.y)], egui::Stroke::new(1.6, accent)); + } + if self.caret_blink { + ui.ctx().request_repaint_after(std::time::Duration::from_millis(500)); + } + } else if !self.inline { + painter.text(pos2(rect.max.x - 8.0, rect.min.y + 6.0), egui::Align2::RIGHT_TOP, "Click here to type", FontId::proportional(11.0), dim); + } + let stroke = if focused { egui::Stroke::new(2.0, accent) } else { egui::Stroke::new(1.0, v.widgets.noninteractive.bg_stroke.color) }; + if !(self.inline && self.overlay) { + painter.rect_stroke(rect, if self.inline { 3.into() } else { corner }, stroke, egui::StrokeKind::Inside); + } + resp + } + + /// Linear text, the secondary way in, and the display toggle. + fn linear_ui(&mut self, ui: &mut Ui, committed: &mut bool) { + let id = self.linear_id(); + ui.horizontal(|ui| { + ui.label("Linear"); + let r = ui.add( + egui::TextEdit::singleline(&mut self.linear) + .id(id) + .desired_width(f32::INFINITY) + .font(FontId::monospace(14.0)) + .hint_text("a^2+b^2=c^2, x=(-b+-sqrt(b^2-4ac))/2a"), + ); + if r.lost_focus() && ui.input(|i| i.key_pressed(Key::Enter)) { + *committed = true; + } + if r.has_focus() || r.gained_focus() { + self.wants_canvas = false; + } + if r.changed() { + self.linear_edited(); + self.message = None; + self.discard_armed = false; + } + }); + let mut display = self.ed.math().para; + if ui.checkbox(&mut display, "Display on its own line").changed() { + self.ed.math_mut().para = display; + } + } + + /// One line is always reserved for the message, so showing it does not move what follows. + fn message_ui(&mut self, ui: &mut Ui) { + let w = ui.available_width(); + ui.allocate_ui_with_layout(vec2(w, 18.0), egui::Layout::left_to_right(egui::Align::Center), |ui| { + if let Some(m) = &self.message { + ui.colored_label(ui.visuals().warn_fg_color, m); + } + }); + } + + /// Insert a palette template or symbol at the caret, keeping typing in the canvas. + fn palette_insert(&mut self, ui: &Ui, tpl: Option, sym: Option) { + if tpl.is_none() && sym.is_none() { + return; + } + if let Some(t) = tpl { + self.ed.insert_template(&t); + } + if let Some(c) = sym { + self.ed.insert_symbol(c); + } + self.wants_canvas = true; + let id = self.canvas_id(); + ui.memory_mut(|m| m.request_focus(id)); + self.tree_edited(); + self.touched = ui.input(|i| i.time); + } +} + +#[cfg(test)] +mod tests; diff --git a/crates/equashion-egui/src/palette.rs b/crates/equashion-egui/src/palette.rs new file mode 100644 index 00000000..4e8f19f1 --- /dev/null +++ b/crates/equashion-egui/src/palette.rs @@ -0,0 +1,150 @@ +//! The template palette. Every button face (structures, Greek letters, operators) is a small +//! equation laid out and rasterised by equashion-render from the bundled fonts, so the palette +//! never depends on the host's egui fonts having the symbols. + +use egui::{Sense, TextureHandle, TextureOptions, Ui, Vec2, pos2, vec2}; +use equashion_layout::{Rgb, layout_equation}; +use equashion_math::{Editor, Math, Node, templates, to_linear}; + +use crate::{EquationEditor, Tab}; + +/// Palette symbols: Greek letters and operators (WordCraft's sets). +pub const GREEK_LOWER: &str = "αβγδεζηθικλμνξοπρστυφχψω"; +pub const GREEK_UPPER: &str = "ΓΔΘΛΞΠΣΦΨΩ"; +pub const OPERATORS: &str = "±∓×÷·∘∗≠≈≡≅∼∝≤≥≪≫≺≻∞∂∇∅∈∉⊂⊃⊆⊇∪∩∧∨¬∀∃→←↔⇒⇔↦∴∵…⋯°′″"; + +/// The template groups, in palette order. +const GROUPS: [&str; 8] = ["Fractions", "Scripts", "Radicals", "Large operators", "Brackets", "Matrices", "Functions", "Accents"]; + +/// A rendered button face. +pub(crate) struct Symbol { + tex: TextureHandle, + /// Size of the face in points. + size: Vec2, +} + +impl Symbol { + pub(crate) fn texture_id(&self) -> egui::TextureId { + self.tex.id() + } + + pub(crate) fn size(&self) -> Vec2 { + self.size + } +} + +/// The short accessible label of a structure's palette button (WordCraft's button faces). +pub fn label(id: &str) -> Option<&'static str> { + Some(match id { + "frac" => "a/b", + "sup" => "x^n", + "sub" => "x_n", + "subsup" => "x_n^m", + "sqrt" => "\u{221A}", + "root" => "n\u{221A}", + "sum" => "\u{2211}", + "prod" => "\u{220F}", + "int" => "\u{222B}", + "intlim" => "\u{222B}ab", + "paren" => "( )", + "bracket" => "[ ]", + "brace" => "{ }", + "abs" => "| |", + "matrix2" => "2\u{00D7}2", + "matrix3" => "3\u{00D7}3", + "bmatrix2" => "[2\u{00D7}2]", + "bmatrix3" => "[3\u{00D7}3]", + "cases" => "{ cases", + "overline" => "over", + "underline" => "under", + "overbrace" => "brace", + _ => return None, + }) +} + +/// A palette button: the rendered face tinted with the widget text colour, the egui button +/// frame, and an accessible label. +pub(crate) fn button(ui: &mut Ui, sym: &Symbol, min: Vec2, max_face_h: f32, label: &str, hover: &str) -> egui::Response { + let k = (max_face_h / sym.size.y.max(1.0)).min(1.0); + let face = sym.size * k; + let pad = vec2(6.0, 3.0); + let size = vec2((face.x + 2.0 * pad.x).max(min.x), min.y.max(face.y + 2.0 * pad.y)); + // Clickable but not focusable: a click must not take the keyboard from the canvas. + let (rect, resp) = ui.allocate_exact_size(size, Sense::CLICK); + resp.widget_info(|| egui::WidgetInfo::labeled(egui::WidgetType::Button, ui.is_enabled(), label)); + if ui.is_rect_visible(rect) { + let vis = ui.style().interact(&resp); + ui.painter().rect(rect.expand(vis.expansion), vis.corner_radius, vis.weak_bg_fill, vis.bg_stroke, egui::StrokeKind::Inside); + let r = egui::Rect::from_center_size(rect.center(), face); + ui.painter().image(sym.tex.id(), r, egui::Rect::from_min_max(pos2(0.0, 0.0), pos2(1.0, 1.0)), vis.text_color()); + } + resp.on_hover_text(hover) +} + +impl EquationEditor { + /// The face of `math` at `pt` points, rendered once per pixel density and cached. + pub(crate) fn symbol(&mut self, ui: &Ui, key: &str, math: &Math, pt: f64) -> Option<&Symbol> { + let ppp = ui.ctx().pixels_per_point(); + let ck = format!("{key}@{ppp}"); + if !self.palette.contains_key(&ck) { + let l = layout_equation(&*self.fonts, math, &self.family, pt, false, Rgb::WHITE, 1.0); + let scale = f64::from(ppp.max(1.0)) * 2.0; + let img = equashion_render::render_scene(&l.scene, &*self.fonts, scale, None); + let ci = egui::ColorImage::from_rgba_premultiplied([img.width as usize, img.height as usize], &img.pixels); + let tex = ui.ctx().load_texture(format!("equashion/palette/{key}"), ci, TextureOptions::LINEAR); + self.palette.insert(ck.clone(), Symbol { tex, size: vec2(l.width() as f32, l.height() as f32) }); + } + self.palette.get(&ck) + } + + pub(crate) fn palette_ui(&mut self, ui: &mut Ui) { + ui.horizontal(|ui| { + for (tab, name) in [(Tab::Structures, "Structures"), (Tab::Greek, "Greek"), (Tab::Operators, "Operators")] { + if ui.selectable_label(self.tab == tab, name).clicked() { + self.tab = tab; + } + } + }); + let mut chosen_template: Option = None; + let mut chosen_symbol: Option = None; + match self.tab { + Tab::Structures => { + // Every group at once, compact buttons in one flow; the full name is the tooltip. + let all = templates(); + for g in GROUPS { + ui.horizontal_wrapped(|ui| { + let dim = ui.visuals().weak_text_color(); + ui.add_sized(vec2(92.0, 26.0), egui::Label::new(egui::RichText::new(g).size(11.0).strong().color(dim))); + for tpl in all.iter().filter(|t| t.group == g) { + // The template with its empty places shown as boxes. + let face = Editor::new(tpl.math.clone()).display_math(); + let Some(sym) = self.symbol(ui, tpl.id, &face, 13.0) else { continue }; + let name = label(tpl.id).unwrap_or(tpl.label); + let hover = format!("{} ({})", tpl.label, to_linear(&tpl.math)); + if button(ui, sym, vec2(30.0, 28.0), 22.0, name, &hover).clicked() { + chosen_template = Some(tpl.math.clone()); + } + } + }); + } + } + Tab::Greek | Tab::Operators => { + let sets: &[&str] = if self.tab == Tab::Greek { &[GREEK_LOWER, GREEK_UPPER] } else { &[OPERATORS] }; + for chars in sets { + ui.horizontal_wrapped(|ui| { + for c in chars.chars() { + let s = c.to_string(); + let face = Math::new(vec![Node::Text(s.clone())]); + let Some(sym) = self.symbol(ui, &format!("sym-{}", c as u32), &face, 15.0) else { continue }; + let hover = format!("U+{:04X}", c as u32); + if button(ui, sym, vec2(28.0, 28.0), 22.0, &s, &hover).clicked() { + chosen_symbol = Some(c); + } + } + }); + } + } + } + self.palette_insert(ui, chosen_template, chosen_symbol); + } +} diff --git a/crates/equashion-egui/src/tests.rs b/crates/equashion-egui/src/tests.rs new file mode 100644 index 00000000..ca1984ea --- /dev/null +++ b/crates/equashion-egui/src/tests.rs @@ -0,0 +1,644 @@ +//! Widget-level tests, ported from WordCraft's `eqdialog.rs` kittest tests (those that do not +//! need the document) plus DeckCraft's clipboard keys and checks for a shared context. + +use egui::{Key, Modifiers, pos2, vec2}; +use egui_kittest::Harness; +use egui_kittest::kittest::Queryable; +use equashion_math::{Caret, Node, to_linear, units}; + +use super::*; + +/// The host: one editor (optionally a second one and a host text field), counting what the +/// responses reported. +struct App { + ed: EquationEditor, + other: Option, + host_text: Option, + committed: u32, + cancelled: u32, + changed: u32, + /// Ask for a second (discarded) pass every frame. + discard: bool, +} + +impl App { + fn new(ed: EquationEditor) -> Self { + App { ed, other: None, host_text: None, committed: 0, cancelled: 0, changed: 0, discard: false } + } +} + +fn harness(app: App) -> Harness<'static, App> { + Harness::builder().with_size(vec2(820.0, 760.0)).build_ui_state( + |ui, a: &mut App| { + if a.discard && ui.ctx().current_pass_index() == 0 { + ui.ctx().request_discard("test: a second pass"); + } + if let Some(t) = a.host_text.as_mut() { + ui.add(egui::TextEdit::singleline(t).id(egui::Id::new("host-field"))); + } + let r = a.ed.show(ui); + a.committed += u32::from(r.committed); + a.cancelled += u32::from(r.cancelled); + a.changed += u32::from(r.changed); + if let Some(o) = a.other.as_mut() { + o.show(ui); + } + }, + app, + ) +} + +fn opened() -> Harness<'static, App> { + let mut h = harness(App::new(EquationEditor::new())); + h.run(); + h.run(); + h +} + +fn ed<'a>(h: &'a Harness<'static, App>) -> &'a EquationEditor { + &h.state().ed +} + +fn typ(h: &mut Harness<'static, App>, text: &str) { + h.event(egui::Event::Text(text.into())); + h.run(); +} + +fn press(h: &mut Harness<'static, App>, key: Key) { + h.key_press(key); + h.run(); +} + +fn press_mod(h: &mut Harness<'static, App>, m: Modifiers, key: Key) { + h.key_press_modifiers(m, key); + h.run(); +} + +fn click(h: &mut Harness<'static, App>, label: &str) { + h.get_by_label(label).click_accesskit(); + h.run(); + h.run(); +} + +fn lin(h: &Harness<'static, App>) -> String { + to_linear(ed(h).math()).replace(' ', "").replace(['(', ')'], "") +} + +fn canvas_focused(h: &Harness<'static, App>) -> bool { + let id = ed(h).canvas_id(); + h.ctx.memory(|m| m.has_focus(id)) +} + +/// Screen position of the caret `c` (its vertical middle; `left` at its left edge, else centre). +fn caret_pos(h: &Harness<'static, App>, c: &Caret) -> egui::Pos2 { + let e = ed(h); + let cv = e.canvas.as_ref().expect("canvas"); + let r = cv.layout.caret_rect(c).expect("caret rect"); + let (o, k) = e.view; + pos2(o.x + ((r.x0 + r.x1) / 2.0) as f32 * k, o.y + ((r.y0 + r.y1) / 2.0) as f32 * k) +} + +fn mouse(h: &mut Harness<'static, App>, p: egui::Pos2, pressed: bool, m: Modifiers) { + h.event_modifiers(egui::Event::PointerButton { pos: p, button: egui::PointerButton::Primary, pressed, modifiers: m }, m); + h.run(); +} + +#[test] +fn typing_x_caret_2_raises_the_exponent_at_once() { + let mut h = opened(); + assert!(canvas_focused(&h), "the canvas takes the keyboard when it opens"); + typ(&mut h, "x"); + typ(&mut h, "^"); + assert_eq!(ed(&h).editor().caret().path.len(), 1); + typ(&mut h, "2"); + assert_eq!(lin(&h), "x^2"); + let e = ed(&h); + assert!(matches!(e.math().body.first(), Some(Node::Script { sup: Some(_), .. })), "{:?}", e.math().body); + let cv = e.canvas.as_ref().expect("canvas"); + let sup = cv.layout.caret_rect(e.editor().caret()).expect("sup caret"); + let base = cv.layout.caret_rect(&Caret { path: vec![], pos: 0 }).expect("base caret"); + assert!(sup.y0 < base.y0, "{sup:?} {base:?}"); + assert!(cv.tex.size()[0] > 1); + press(&mut h, Key::ArrowRight); + assert!(ed(&h).editor().caret().path.is_empty()); + typ(&mut h, "+1"); + assert_eq!(lin(&h), "x^2+1"); + assert_eq!(ed(&h).linear.replace(' ', ""), "x^2+1", "the linear field follows"); + assert_eq!(ed(&h).linear().replace(' ', ""), "x^2+1"); + assert!(ed(&h).omml().contains(""), "{}", ed(&h).omml()); + assert!(h.state().changed >= 3); +} + +#[test] +fn underscore_slash_sqrt_and_greek_names() { + let mut h = opened(); + typ(&mut h, "a_1"); + assert_eq!(lin(&h), "a_1"); + press(&mut h, Key::ArrowRight); + typ(&mut h, "/"); + assert!(matches!(ed(&h).math().body.first(), Some(Node::Frac { .. }))); + assert_eq!(ed(&h).editor().caret().path, vec![(0, 1)]); + typ(&mut h, "sqrt"); + typ(&mut h, "alpha"); + let l = lin(&h); + assert!(l.contains('\u{221A}') && l.contains('\u{3B1}'), "{l}"); +} + +#[test] +fn arrows_and_backspace_edit_the_tree() { + let mut h = opened(); + typ(&mut h, "a/b"); + press(&mut h, Key::ArrowUp); + assert_eq!(ed(&h).editor().caret().path, vec![(0, 0)], "Up goes to the numerator"); + press(&mut h, Key::ArrowDown); + assert_eq!(ed(&h).editor().caret().path, vec![(0, 1)]); + press(&mut h, Key::ArrowLeft); + press(&mut h, Key::ArrowLeft); + assert_eq!(ed(&h).editor().caret().path, vec![(0, 0)], "Left crosses into the numerator"); + press(&mut h, Key::Home); + press(&mut h, Key::Backspace); + assert_eq!(lin(&h), "ab", "Backspace at the start unwraps the fraction"); + press(&mut h, Key::Delete); + assert_eq!(lin(&h), "b"); + press(&mut h, Key::End); + press(&mut h, Key::Backspace); + assert!(ed(&h).editor().is_blank()); + assert!(canvas_focused(&h), "the arrow keys did not move the focus away"); +} + +#[test] +fn ctrl_z_and_ctrl_shift_z_undo_and_redo() { + let mut h = opened(); + typ(&mut h, "x+a/b"); + press(&mut h, Key::ArrowRight); + press(&mut h, Key::Backspace); + assert_eq!(lin(&h), "x+a/b", "the first Backspace only steps inside"); + press(&mut h, Key::Backspace); + assert_eq!(lin(&h), "x+a/"); + press_mod(&mut h, Modifiers::COMMAND, Key::Z); + assert_eq!(lin(&h), "x+a/b", "Ctrl+Z brings the atom back"); + press_mod(&mut h, Modifiers::COMMAND | Modifiers::SHIFT, Key::Z); + assert_eq!(lin(&h), "x+a/"); + press_mod(&mut h, Modifiers::COMMAND, Key::Z); + press_mod(&mut h, Modifiers::COMMAND, Key::Y); + assert_eq!(lin(&h), "x+a/", "Ctrl+Y redoes too"); +} + +fn copied(h: &Harness<'static, App>) -> Option { + h.output().platform_output.commands.iter().rev().find_map(|c| match c { + egui::OutputCommand::CopyText(t) => Some(t.clone()), + _ => None, + }) +} + +/// Events delivered together in one frame; returns the text that frame copied. +fn frame_with(h: &mut Harness<'static, App>, events: Vec) -> Option { + h.input_mut().events.extend(events); + h.step(); + let c = copied(h); + h.run(); + c +} + +fn cmd(key: Key) -> egui::Event { + egui::Event::Key { key, pressed: true, modifiers: Modifiers::COMMAND, repeat: false, physical_key: None } +} + +#[test] +fn ctrl_c_copies_and_ctrl_x_cuts_the_selection_as_linear_text() { + let mut h = opened(); + typ(&mut h, "a+b"); + press_mod(&mut h, Modifiers::SHIFT, Key::ArrowLeft); + assert_eq!(frame_with(&mut h, vec![cmd(Key::C)]).as_deref(), Some("b")); + assert_eq!(lin(&h), "a+b", "copy leaves the equation alone"); + press_mod(&mut h, Modifiers::COMMAND, Key::A); + assert_eq!(frame_with(&mut h, vec![cmd(Key::X)]).map(|s| s.replace(' ', "")).as_deref(), Some("a+b")); + assert!(ed(&h).editor().is_blank(), "cut removed it"); + // A platform Cut event and the key in the same frame cut once. + typ(&mut h, "xyz"); + press_mod(&mut h, Modifiers::SHIFT, Key::ArrowLeft); + assert_eq!(frame_with(&mut h, vec![egui::Event::Cut, cmd(Key::X)]).as_deref(), Some("z")); + assert_eq!(lin(&h), "xy", "one cut, not two"); + press_mod(&mut h, Modifiers::COMMAND, Key::Z); + assert_eq!(lin(&h), "xyz", "a cut undoes"); +} + +#[test] +fn tab_stays_in_the_canvas_and_moves_between_places() { + let mut h = opened(); + typ(&mut h, "a/b"); + press(&mut h, Key::ArrowUp); + press(&mut h, Key::Tab); + assert_eq!(ed(&h).editor().caret().path, vec![(0, 1)]); + assert!(canvas_focused(&h), "Tab did not move the focus to another widget"); + typ(&mut h, "c"); + assert_eq!(lin(&h), "a/cb", "typing after Tab goes to the tree, not the linear field"); + press_mod(&mut h, Modifiers::SHIFT, Key::Tab); + assert_eq!(ed(&h).editor().caret().path, vec![(0, 0)], "Shift+Tab goes back"); +} + +#[test] +fn escape_with_unsaved_work_asks_before_discarding() { + let mut h = opened(); + typ(&mut h, "x^2"); + press(&mut h, Key::Escape); + assert_eq!(h.state().cancelled, 0, "the first Escape only warns"); + assert_eq!(ed(&h).message(), Some(DISCARD_PROMPT)); + assert!(canvas_focused(&h), "Escape does not drop the canvas focus"); + h.get_by_label(DISCARD_PROMPT); + press(&mut h, Key::Escape); + assert_eq!(h.state().cancelled, 1, "the second Escape cancels"); + assert!(ed(&h).message().is_none()); + h.state_mut().ed.revert(); + assert!(ed(&h).editor().is_blank()); + + // Typing after the warning disarms it. + typ(&mut h, "y"); + press(&mut h, Key::Escape); + typ(&mut h, "z"); + press(&mut h, Key::Escape); + assert_eq!(h.state().cancelled, 1, "the warning starts over after an edit"); + + let mut h = opened(); + press(&mut h, Key::Escape); + assert_eq!(h.state().cancelled, 1, "nothing typed: cancels at once"); +} + +#[test] +fn enter_commits_and_resets_the_baseline() { + let mut h = opened(); + typ(&mut h, "x^2"); + press(&mut h, Key::Enter); + assert_eq!(h.state().committed, 1); + assert!(!ed(&h).is_dirty()); + press(&mut h, Key::Escape); + assert_eq!(h.state().cancelled, 1, "after a commit nothing is lost: Esc cancels at once"); +} + +#[test] +fn shift_arrows_select_and_a_palette_click_wraps_the_selection() { + let mut h = opened(); + typ(&mut h, "xy"); + press_mod(&mut h, Modifiers::SHIFT, Key::ArrowLeft); + press_mod(&mut h, Modifiers::SHIFT, Key::ArrowLeft); + assert_eq!(ed(&h).editor().selection(), Some((0, 2))); + click(&mut h, "\u{221A}"); + assert!(matches!(ed(&h).math().body.first(), Some(Node::Rad { body, .. }) if units(body) == 2), "{:?}", ed(&h).math().body); + typ(&mut h, "z"); + assert_eq!(lin(&h), "\u{221A}xyz"); +} + +#[test] +fn the_quadratic_formula_types_straight_through() { + let mut h = opened(); + typ(&mut h, "x=(-b+-sqrt(b^2"); + press(&mut h, Key::ArrowRight); + typ(&mut h, "-4ac))/2a"); + let l = lin(&h); + assert!(l.contains('\u{B1}') && l.contains('\u{221A}') && l.ends_with("/2a"), "{l}"); + assert!(matches!(ed(&h).math().body.last(), Some(Node::Frac { .. }))); +} + +#[test] +fn the_caret_and_typing_survive_a_palette_click() { + let mut h = opened(); + click(&mut h, "a/b"); + assert!(canvas_focused(&h), "the canvas keeps the keyboard after a palette click"); + let e = ed(&h); + let cv = e.canvas.as_ref().expect("canvas"); + assert_eq!(e.editor().caret().path, vec![(0, 0)], "the caret is in the new numerator"); + assert!(cv.layout.caret_rect(e.editor().caret()).is_some(), "and it has a rectangle to draw"); + click(&mut h, "x^n"); + typ(&mut h, "2"); + assert!(lin(&h).contains('2'), "{}", lin(&h)); +} + +#[test] +fn palette_structures_insert_at_the_caret() { + let mut h = opened(); + typ(&mut h, "b"); + click(&mut h, "x^n"); + typ(&mut h, "2"); + assert_eq!(lin(&h), "b^2"); + press(&mut h, Key::ArrowRight); + click(&mut h, "a/b"); + assert!(matches!(ed(&h).math().body.last(), Some(Node::Frac { .. })), "{:?}", ed(&h).math().body); +} + +#[test] +fn greek_and_operator_tabs_insert_symbols() { + let mut h = opened(); + h.get_by_label("Greek").click(); + h.run(); + click(&mut h, "\u{3B8}"); + h.get_by_label("Operators").click(); + h.run(); + click(&mut h, "\u{2207}"); + click(&mut h, "\u{2264}"); + assert_eq!(lin(&h), "\u{3B8}\u{2207}\u{2264}"); + assert!(canvas_focused(&h)); +} + +#[test] +fn empty_places_show_boxes_and_the_caret_has_a_rect() { + let mut h = opened(); + typ(&mut h, "a/"); + let e = ed(&h); + assert!(to_linear(&e.editor().display_math()).contains('\u{25A1}')); + assert!(!to_linear(e.math()).contains('\u{25A1}')); + let cv = e.canvas.as_ref().expect("canvas"); + assert!(cv.layout.caret_rect(e.editor().caret()).is_some(), "caret has a rectangle inside the empty denominator"); +} + +#[test] +fn clicking_the_canvas_places_the_caret() { + let mut h = opened(); + typ(&mut h, "ab+cd"); + let e = ed(&h); + let r = e.canvas.as_ref().and_then(|c| c.layout.caret_rect(&Caret { path: vec![], pos: 1 })).expect("rect"); + let (o, k) = e.view; + let hit = pos2(o.x + r.x0 as f32 * k, o.y + (r.y0 + r.y1) as f32 * 0.5 * k); + h.event(egui::Event::PointerMoved(hit)); + mouse(&mut h, hit, true, Modifiers::NONE); + mouse(&mut h, hit, false, Modifiers::NONE); + assert_eq!(ed(&h).editor().caret().pos, 1, "caret between a and b"); + typ(&mut h, "x"); + assert_eq!(lin(&h), "axb+cd"); +} + +#[test] +fn shift_click_extends_the_selection() { + let mut h = opened(); + typ(&mut h, "abcd"); + let p1 = caret_pos(&h, &Caret { path: vec![], pos: 1 }); + let p3 = caret_pos(&h, &Caret { path: vec![], pos: 3 }); + h.event(egui::Event::PointerMoved(p1)); + h.run(); + mouse(&mut h, p1, true, Modifiers::NONE); + mouse(&mut h, p1, false, Modifiers::NONE); + h.event(egui::Event::PointerMoved(p3)); + h.run(); + mouse(&mut h, p3, true, Modifiers::SHIFT); + mouse(&mut h, p3, false, Modifiers::SHIFT); + assert_eq!(ed(&h).editor().selection(), Some((1, 3)), "{:?}", ed(&h)); +} + +#[test] +fn a_drag_from_a_numerator_to_the_top_row_selects_whole_structures() { + let mut h = opened(); + typ(&mut h, "a/b"); + press(&mut h, Key::ArrowRight); + typ(&mut h, "+c"); + assert_eq!(lin(&h), "a/b+c"); + let from = Caret { path: vec![(0, 0)], pos: 0 }; + let to = Caret { path: vec![], pos: units(&ed(&h).math().body) }; + let (p0, p1) = (caret_pos(&h, &from), caret_pos(&h, &to)); + // What the edit model says such a drag selects. + let mut want = ed(&h).editor().clone(); + want.select_between(&from, &to); + h.event(egui::Event::PointerMoved(p0)); + h.run(); + mouse(&mut h, p0, true, Modifiers::NONE); + assert_eq!(ed(&h).editor().caret().path, vec![(0, 0)], "the press lands in the numerator"); + for t in [0.3, 0.6, 1.0] { + h.event(egui::Event::PointerMoved(p0 + (p1 - p0) * t)); + h.run(); + } + mouse(&mut h, p1, false, Modifiers::NONE); + let e = ed(&h).editor(); + assert!(e.caret().path.is_empty(), "the selection moved up to the row holding both ends: {:?}", e.caret()); + assert_eq!(e.selection(), want.selection()); + let (a, b) = e.selection().expect("a selection"); + assert!(a == 0 && b >= 3, "the whole fraction and what follows: {a}..{b}"); +} + +#[test] +fn linear_field_is_still_a_way_in() { + let mut h = opened(); + h.get_by_role(egui::accesskit::Role::TextInput).click(); + h.run(); + typ(&mut h, "x^2+1"); + assert_eq!(lin(&h), "x^2+1"); + assert!(ed(&h).canvas.as_ref().is_some_and(|c| c.shown.body.len() >= 2), "the canvas follows the linear field"); + assert!(!canvas_focused(&h), "the field keeps the keyboard"); + press(&mut h, Key::Enter); + assert_eq!(h.state().committed, 1, "Enter in the field commits"); +} + +#[test] +fn typing_once_types_once() { + // A host whose frames take two passes (request_discard) must not see each key twice. + let mut app = App::new(EquationEditor::new()); + app.discard = true; + let mut h = harness(app); + h.run(); + h.run(); + typ(&mut h, "ab"); + typ(&mut h, "c"); + assert_eq!(lin(&h), "abc"); + // Two editors on one context: only the focused one types. + let mut app = App::new(EquationEditor::new()); + app.other = Some(EquationEditor::new().auto_focus(false)); + let mut h = harness(app); + h.run(); + h.run(); + typ(&mut h, "q"); + assert_eq!(lin(&h), "q"); + assert!(h.state().other.as_ref().is_some_and(|o| o.editor().is_blank()), "the other editor got nothing"); +} + +#[test] +fn hostile_input_does_not_panic() { + let mut h = opened(); + let keys = [Key::ArrowLeft, Key::ArrowRight, Key::ArrowUp, Key::ArrowDown, Key::Home, Key::End, Key::Backspace, Key::Delete, Key::Tab]; + let texts = ["x^", "_", "/", "sqrt", "pi", "(", "2", "^^^", "\\frac{", "}", "\\langle"]; + for i in 0..60usize { + typ(&mut h, texts[i % texts.len()]); + press(&mut h, keys[(i * 5 + 3) % keys.len()]); + } + assert!(ed(&h).editor().is_valid()); +} + +#[test] +fn typed_latex_works_in_the_canvas() { + let mut h = opened(); + typ(&mut h, "\\alpha"); + assert_eq!(lin(&h), "\u{3b1}"); + typ(&mut h, "+\\frac{1}{2}"); + assert_eq!(lin(&h), "\u{3b1}+1/2"); + typ(&mut h, "\\sqrt{x}"); + assert!(lin(&h).ends_with('x'), "{}", lin(&h)); + assert!(ed(&h).math().body.iter().any(|n| matches!(n.bare(), Node::Rad { .. }))); +} + +#[test] +fn typing_lim_with_a_subscript_leaves_no_empty_box() { + let mut h = opened(); + typ(&mut h, "lim_x"); + assert!(!ed(&h).linear.contains("()_"), "{}", ed(&h).linear); + let mut h = opened(); + typ(&mut h, "\\lim_{x\\to0}"); + assert!(!ed(&h).linear.contains("()_"), "{}", ed(&h).linear); +} + +#[test] +fn the_widget_leaves_a_host_field_alone() { + let mut app = App::new(EquationEditor::new().auto_focus(false)); + app.host_text = Some(String::new()); + let mut h = harness(app); + h.run(); + let host = egui::Id::new("host-field"); + h.ctx.memory_mut(|m| m.request_focus(host)); + h.run(); + h.run(); + typ(&mut h, "hi"); + assert!(h.ctx.memory(|m| m.has_focus(host)), "the editor did not take the keyboard"); + assert_eq!(h.state().host_text.as_deref(), Some("hi")); + assert!(ed(&h).editor().is_blank()); + press(&mut h, Key::Escape); + assert_eq!(h.state().cancelled, 0, "Esc in a host widget is not the editor's"); +} + +#[test] +fn textures_are_namespaced() { + let mut h = opened(); + typ(&mut h, "x"); + let names: Vec = h.ctx.tex_manager().read().allocated().map(|(_, m)| m.name.clone()).collect(); + let ours: Vec<&String> = names.iter().filter(|n| n.starts_with("equashion/")).collect(); + assert!(ours.len() > 10, "canvas and palette textures: {names:?}"); + assert!(names.iter().all(|n| n.starts_with("equashion/") || n.starts_with("egui")), "{names:?}"); +} + +#[test] +fn set_linear_with_omml_and_revert() { + let mut e = EquationEditor::with_linear(r"\frac{a}{b}"); + assert!(matches!(e.math().body.first(), Some(Node::Frac { .. }))); + let l = e.linear(); + e.set_linear(&l); + assert_eq!(e.linear(), l, "linear round trip"); + let o = e.omml(); + let e2 = EquationEditor::with_omml(&o); + assert_eq!(e2.omml(), o, "OMML round trip"); + e.editor_mut().type_str("+c"); + e.sync_linear(); + assert!(e.is_dirty()); + e.revert(); + assert_eq!(e.linear(), l); + assert!(EquationEditor::with_linear(r"\foo x").unknown_commands().iter().any(|c| c.contains("foo"))); +} + +#[test] +fn every_palette_face_is_drawn_from_the_bundled_fonts() { + use equashion_layout::{DEFAULT_FAMILY, Prim, Rgb, layout_equation}; + let fonts = bundled_fonts(); + let mut faces: Vec<(String, equashion_math::Math)> = + equashion_math::templates().into_iter().map(|t| (t.id.to_string(), equashion_math::Editor::new(t.math).display_math())).collect(); + for c in [palette::GREEK_LOWER, palette::GREEK_UPPER, palette::OPERATORS].concat().chars() { + faces.push((c.to_string(), equashion_math::Math::new(vec![Node::Text(c.to_string())]))); + } + for (name, m) in faces { + let l = layout_equation(&*fonts, &m, DEFAULT_FAMILY, 15.0, false, Rgb::WHITE, 1.0); + let notdef = l.scene.items.iter().any(|p| matches!(p, Prim::Glyphs { glyphs, .. } if glyphs.iter().any(|g| g.0 == 0))); + assert!(!notdef, "palette face {name} has a missing glyph"); + } +} + +/// The galleries a host puts in its ribbon insert into the editor they are called on. +#[test] +fn a_gallery_template_inserts_at_the_caret() { + let mut h = Harness::builder().with_size(vec2(500.0, 600.0)).build_ui_state( + |ui, ed: &mut EquationEditor| { + ed.show(ui); + ed.gallery_ui(ui, "fraction"); + }, + EquationEditor::new().show_palette(false).id_salt("gallery-test"), + ); + h.run(); + h.get_by_label("Stacked Fraction").click(); + h.run(); + assert!(matches!(h.state().math().body.first().map(Node::bare), Some(Node::Frac { .. })), "{:?}", h.state().math()); +} + +#[test] +fn a_gallery_symbol_inserts_at_the_caret() { + let mut h = Harness::builder().with_size(vec2(500.0, 600.0)).build_ui_state( + |ui, ed: &mut EquationEditor| { + ed.show(ui); + ed.symbols_ui(ui, 1); + }, + EquationEditor::new().show_palette(false).id_salt("symbol-test"), + ); + h.run(); + h.get_by_label("π").click(); + h.run(); + assert_eq!(h.state().linear(), "π"); +} + +#[test] +fn a_ready_made_equation_replaces_the_equation() { + let mut h = Harness::builder().with_size(vec2(500.0, 700.0)).build_ui_state( + |ui, ed: &mut EquationEditor| { + ed.show(ui); + ed.builtins_ui(ui); + }, + EquationEditor::new().show_palette(false).id_salt("builtin-test"), + ); + h.run(); + h.get_by_label("Euler's identity").click(); + h.run(); + assert_eq!(h.state().linear(), "e^(iπ)+1=0"); +} + +/// Inline mode is only the equation: it sizes itself to what was typed and has no palette. +#[test] +fn inline_mode_is_sized_to_the_equation() { + let mut h = Harness::builder().with_size(vec2(600.0, 300.0)).build_ui_state( + |ui, ed: &mut EquationEditor| { + ed.show(ui); + }, + EquationEditor::with_linear("x").inline(true).font_size(20.0).id_salt("inline-test"), + ); + h.run_steps(3); + let small = h.state().content_size().expect("drew"); + assert!(h.query_by_label("Fractions").is_none() && h.query_by_label("Greek").is_none(), "no palette"); + h.state_mut().set_linear("a^2+b^2=c^2+d^2+e^2"); + h.run_steps(3); + let big = h.state().content_size().expect("drew"); + assert!(big.x > small.x * 3.0, "{small:?} -> {big:?}"); + h.state_mut().set_font_size(40.0); + h.run_steps(3); + assert!(h.state().content_size().expect("drew").y > big.y * 1.5); +} + +/// An overlay canvas is exactly the equation's size and says where its baseline is, so a host +/// can lay it over its own drawing of the same equation. +#[test] +fn overlay_canvas_reports_its_baseline() { + let mut h = Harness::builder().with_size(vec2(600.0, 300.0)).build_ui_state( + |ui, ed: &mut EquationEditor| { + ed.show(ui); + }, + EquationEditor::with_linear("a/b").inline(true).overlay(true).font_size(24.0).id_salt("overlay-test"), + ); + h.run_steps(4); + let (size, base) = (h.state().content_size().unwrap(), h.state().inline_baseline().unwrap()); + assert!(base > 0.0 && base < size.y, "baseline {base} inside height {}", size.y); +} + +/// Display and text style lay out differently (a sum's limits go above and below in display +/// style), so a host can match how it draws the equation. +#[test] +fn display_style_follows_the_host() { + let mk = |display: bool| { + let mut h = Harness::builder().with_size(vec2(600.0, 300.0)).build_ui_state( + |ui, ed: &mut EquationEditor| { + ed.show(ui); + }, + EquationEditor::with_linear("sum_(i=1)^n i").inline(true).font_size(24.0).display_style(display).id_salt("style-test"), + ); + h.run_steps(3); + h.state().content_size().expect("drew") + }; + let (text, display) = (mk(false), mk(true)); + assert!(display.y > text.y + 1.0, "limits stack in display style: {text:?} vs {display:?}"); +} diff --git a/crates/equashion-egui/tests/shared_context.rs b/crates/equashion-egui/tests/shared_context.rs new file mode 100644 index 00000000..f8c9c224 --- /dev/null +++ b/crates/equashion-egui/tests/shared_context.rs @@ -0,0 +1,116 @@ +//! The widget on a context it shares with a host: it must not depend on, or change, the +//! host's fonts and style. WordCraft's dialog used `FontFamily::Name("semibold")`, which panics +//! on any context that never registered that family; the widget must work with and without it. + +use egui::{FontFamily, FontId, Key, vec2}; +use egui_kittest::Harness; +use egui_kittest::kittest::Queryable; +use equashion_egui::EquationEditor; + +const SEMIBOLD: &str = "semibold"; + +struct Host { + editor: EquationEditor, + /// Install fonts with a `semibold` family in the first frame (as WordCraft's theme does). + register: bool, + frames: u32, + dark: bool, +} + +/// Both themes' styles and the active theme (what `set_style` / `set_visuals` would change). +fn styles(ctx: &egui::Context) -> (egui::Style, egui::Style, egui::Theme) { + ((*ctx.style_of(egui::Theme::Dark)).clone(), (*ctx.style_of(egui::Theme::Light)).clone(), ctx.theme()) +} + +fn has_semibold(ctx: &egui::Context) -> bool { + ctx.fonts(|f| f.definitions().families.contains_key(&FontFamily::Name(SEMIBOLD.into()))) +} + +fn harness(register: bool, dark: bool) -> Harness<'static, Host> { + Harness::builder().with_size(vec2(820.0, 760.0)).build_ui_state( + |ui, h: &mut Host| { + h.frames += 1; + if h.frames == 1 { + ui.ctx().set_theme(if h.dark { egui::Theme::Dark } else { egui::Theme::Light }); + if h.register { + let mut defs = egui::FontDefinitions::default(); + let first = defs.families.get(&FontFamily::Proportional).and_then(|v| v.first().cloned()).unwrap_or_default(); + defs.families.insert(FontFamily::Name(SEMIBOLD.into()), vec![first]); + ui.ctx().set_fonts(defs); + } + return; + } + if h.register { + // The host's own text in its named family keeps working next to the widget. + ui.label(egui::RichText::new("Host heading").font(FontId::new(14.0, FontFamily::Name(SEMIBOLD.into())))); + } + h.editor.show(ui); + }, + Host { editor: EquationEditor::new(), register, frames: 0, dark }, + ) +} + +/// Every part of the widget: all palette tabs, typing, a palette insert, the linear field, +/// the discard prompt. +fn exercise(h: &mut Harness<'static, Host>) { + h.run(); + h.run(); + h.run(); + for tab in ["Greek", "Operators", "Structures"] { + h.get_by_label(tab).click(); + h.run(); + } + h.event(egui::Event::Text("x^2".into())); + h.run(); + h.get_by_label("a/b").click_accesskit(); + h.run(); + h.event(egui::Event::Text("\\nabla\\oint".into())); + h.run(); + h.key_press(Key::Escape); + h.run(); + assert!(h.state().editor.message().is_some(), "the discard prompt is drawn"); + h.get_by_role(egui::accesskit::Role::TextInput).click(); + h.run(); + h.event(egui::Event::Text("+1".into())); + h.run(); + assert!(h.state().editor.linear().contains('1'), "{}", h.state().editor.linear()); +} + +#[test] +fn works_on_a_context_that_never_registered_a_named_family() { + let mut h = harness(false, false); + h.run(); + assert!(!has_semibold(&h.ctx)); + let style = styles(&h.ctx); + let fonts = h.ctx.fonts(|f| f.definitions().clone()); + exercise(&mut h); + assert!(!has_semibold(&h.ctx), "the widget registered no font family"); + assert_eq!(styles(&h.ctx), style, "the widget did not change the style or visuals"); + assert!(h.ctx.fonts(|f| f.definitions() == &fonts), "the widget did not change the fonts"); +} + +#[test] +fn works_on_a_context_where_the_host_registered_a_named_family() { + let mut h = harness(true, true); + h.run(); + h.run(); + assert!(has_semibold(&h.ctx)); + let style = styles(&h.ctx); + let fonts = h.ctx.fonts(|f| f.definitions().clone()); + exercise(&mut h); + assert!(has_semibold(&h.ctx), "the host's family is still there"); + assert_eq!(styles(&h.ctx), style, "the widget did not change the style or visuals"); + assert!(h.ctx.fonts(|f| f.definitions() == &fonts), "the widget did not change the fonts"); + h.get_by_label("Host heading"); +} + +/// The control: what the test above guards against does panic. A widget that asks for a named +/// family the host never registered (as WordCraft's `theme::semibold` did) takes the app down. +#[test] +#[should_panic(expected = "not bound")] +fn a_named_family_the_host_never_registered_panics() { + let mut h = Harness::builder().with_size(vec2(400.0, 200.0)).build_ui(|ui| { + ui.label(egui::RichText::new("Fractions").font(FontId::new(11.0, FontFamily::Name(SEMIBOLD.into())))); + }); + h.run(); +} diff --git a/crates/equashion-font/Cargo.toml b/crates/equashion-font/Cargo.toml new file mode 100644 index 00000000..820c4bbd --- /dev/null +++ b/crates/equashion-font/Cargo.toml @@ -0,0 +1,33 @@ +[package] +name = "equashion-font" +version.workspace = true +edition.workspace = true +license.workspace = true +description = "equaSHion fonts: font database (bundled OFL + optional system fonts), metrics, glyph outlines, shaping" + +[lints.rust] +unsafe_code = "forbid" + +[lints.clippy] +dbg_macro = "warn" +todo = "warn" +too_many_arguments = "allow" +type_complexity = "allow" +unwrap_used = "deny" +expect_used = "deny" +panic = "deny" +unimplemented = "deny" +unreachable = "deny" + +[features] +default = ["extra-fonts"] +# Source Serif 4 Bold and Bold Italic, Inter and STIX Two Math. Without it only Source Serif 4 +# Regular and Italic are compiled in (a UI that loads the rest at run time with `add_font`). +extra-fonts = [] + +[dependencies] +kurbo = { workspace = true } +skrifa = { workspace = true } +harfrust = { workspace = true } +unicode-bidi = { workspace = true } +log = { workspace = true } diff --git a/crates/equashion-font/src/fontdb.rs b/crates/equashion-font/src/fontdb.rs new file mode 100644 index 00000000..2bb63e2a --- /dev/null +++ b/crates/equashion-font/src/fontdb.rs @@ -0,0 +1,862 @@ +//! Font database: bundled OFL fonts, user fonts, the installed system fonts (cataloged the first +//! time a lookup needs them, native only; never for [`FontDb::bundled_only`]), outline cache. + +use std::collections::HashMap; +use std::sync::atomic::{AtomicU32, Ordering}; +use std::sync::{Arc, Mutex, RwLock}; + +use kurbo::BezPath; +use skrifa::instance::{Location, LocationRef, Size}; +use skrifa::outline::{DrawSettings, OutlinePen}; +use skrifa::raw::FileRef; +use skrifa::string::StringId; +use skrifa::{GlyphId, MetadataProvider}; + +/// The family used when a requested family is unknown: the bundled default equation family. +pub const FALLBACK_FAMILY: &str = crate::DEFAULT_FAMILY; + +/// The bundled fonts (OFL), as font file bytes: Source Serif 4 in its four styles, Inter +/// Regular, then STIX Two Math Regular. STIX comes last so that it is only the fallback for +/// characters the text faces lack (`∇`, `∮`, `⌈⌉⌊⌋`, `⟨⟩`, ...): the fallback order is the +/// default family first, then load order. +pub fn bundled() -> &'static [&'static [u8]] { + BUNDLED +} + +#[cfg(not(feature = "extra-fonts"))] +static BUNDLED: &[&[u8]] = + &[include_bytes!("../../../assets/fonts/SourceSerif4-Regular.ttf"), include_bytes!("../../../assets/fonts/SourceSerif4-It.ttf")]; + +#[cfg(feature = "extra-fonts")] +static BUNDLED: &[&[u8]] = &[ + include_bytes!("../../../assets/fonts/SourceSerif4-Regular.ttf"), + include_bytes!("../../../assets/fonts/SourceSerif4-It.ttf"), + include_bytes!("../../../assets/fonts/SourceSerif4-Bold.ttf"), + include_bytes!("../../../assets/fonts/SourceSerif4-BoldIt.ttf"), + include_bytes!("../../../assets/fonts/Inter-Regular.ttf"), + include_bytes!("../../../assets/fonts/STIXTwoMath-Regular.otf"), +]; + +#[derive(Clone)] +enum FontBytes { + Static(&'static [u8]), + Owned(Arc>), +} + +/// One loaded font face. +pub struct FontFace { + id: u32, + /// Typographic family name (e.g. "Source Sans 3"). + pub family: String, + /// Typographic style name (e.g. "Semibold", "Italic"). + pub style: String, + /// usWeightClass-style weight (400 = regular). + pub weight: f32, + pub italic: bool, + bytes: FontBytes, + index: u32, + pub upem: f64, + /// Ascender in font units (positive = up). + pub ascent: f64, + /// Descender in font units (positive = down). + pub descent: f64, + /// Cap height and x height in font units (estimated from the ascent when the font has no OS/2 + /// values). + pub cap_height: f64, + pub x_height: f64, + pub shaper: harfrust::ShaperData, + /// Variable fonts: the named instance's axis settings (user units; empty = default instance), + /// the normalised location and the shaper's view of it. + pub coords: Vec<([u8; 4], f32)>, + location: Location, + pub instance: Option, + /// Basic Multilingual Plane coverage bitset, built on first use. + bmp: std::sync::OnceLock>, +} + +/// A plain, serialisable handle to a face loaded in a [`FontDb`] (its process-unique id). It +/// replaces WordCraft's leaked `FaceRef`: a scene names faces by id and the backend resolves them +/// with [`FontDb::face_by_id`]. +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)] +pub struct FaceId(pub u32); + +impl std::fmt::Debug for FontFace { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "FontFace({} {})", self.family, self.style) + } +} + +impl FontFace { + pub fn data(&self) -> &[u8] { + match &self.bytes { + FontBytes::Static(b) => b, + FontBytes::Owned(v) => v.as_slice(), + } + } + pub fn skrifa(&self) -> Option> { + skrifa::FontRef::from_index(self.data(), self.index).ok() + } + pub fn hb(&self) -> Option> { + harfrust::FontRef::from_index(self.data(), self.index).ok() + } + /// Where in the design space glyphs, metrics and outlines come from. + pub fn location(&self) -> LocationRef<'_> { + (&self.location).into() + } + /// Is this a named instance of a variable font? + pub fn is_variable(&self) -> bool { + !self.coords.is_empty() + } + /// Face index within the font file (collections); 0 for plain fonts. + pub fn index(&self) -> u32 { + self.index + } + /// Unique id of this face within the process. + pub fn id(&self) -> u32 { + self.id + } + /// [`FontFace::id`] as a [`FaceId`] handle. + pub fn face_id(&self) -> FaceId { + FaceId(self.id) + } + /// Does the face map `c` to a glyph? + pub fn covers(&self, c: char) -> bool { + let cp = c as u32; + if cp < 0x1_0000 { + let bits = self.bmp.get_or_init(|| { + let mut b = vec![0u64; 1024].into_boxed_slice(); + if let Some(f) = self.skrifa() { + for (cp, _) in f.charmap().mappings() { + if cp < 0x1_0000 { + b[(cp / 64) as usize] |= 1 << (cp % 64); + } + } + } + b + }); + return bits[(cp / 64) as usize] & (1 << (cp % 64)) != 0; + } + self.skrifa().is_some_and(|f| f.charmap().map(c).is_some()) + } + /// Units per em. + pub fn units_per_em(&self) -> f64 { + self.upem + } + /// (ascent, descent) in font units, both positive. + pub fn vertical_metrics(&self) -> (f64, f64) { + (self.ascent, self.descent) + } + /// Every mapped character and its glyph id, sorted by code point (the Glyphs panel). + pub fn chars(&self) -> Vec<(char, u32)> { + let Some(f) = self.skrifa() else { return vec![] }; + let mut v: Vec<(char, u32)> = f.charmap().mappings().filter_map(|(cp, g)| char::from_u32(cp).map(|c| (c, g.to_u32()))).collect(); + v.sort_unstable_by_key(|x| x.0); + v.dedup_by_key(|x| x.0); + v + } + /// Advance width of glyph `gid` in font units. + pub fn advance(&self, gid: u32) -> f64 { + self.skrifa() + .and_then(|f| f.glyph_metrics(Size::unscaled(), self.location()).advance_width(GlyphId::new(gid))) + .map(|a| a as f64) + .unwrap_or(self.upem * 0.5) + } + /// Glyph id for `c` (0 = .notdef). + pub fn glyph_for(&self, c: char) -> u32 { + self.skrifa().and_then(|f| f.charmap().map(c)).map(|g| g.to_u32()).unwrap_or(0) + } +} + +#[cfg(not(target_arch = "wasm32"))] +#[derive(Clone, Debug)] +struct CatalogEntry { + family: String, + style: String, + path: std::path::PathBuf, +} + +/// Process-wide font database. +pub struct FontDb { + faces: RwLock>>, + outlines: Mutex>>, + #[cfg(not(target_arch = "wasm32"))] + catalog: RwLock>, + /// The folders the system font scan reads (the platform's font folders for [`FontDb::global`]). + #[cfg_attr(target_arch = "wasm32", allow(dead_code))] + font_dirs: Vec, + /// Set once the font folders have been scanned. Lookups by family name wait for the first + /// scan, so what they find doesn't depend on what ran before them. + #[cfg(not(target_arch = "wasm32"))] + cataloged: std::sync::OnceLock<()>, + /// System fallback state: enabled, and characters no system font covers. + #[cfg(not(target_arch = "wasm32"))] + sys: Mutex, +} + +#[cfg(not(target_arch = "wasm32"))] +#[derive(Default)] +struct SysFallback { + enabled: bool, + misses: std::collections::HashSet, +} + +/// Families tried (when installed) for characters the loaded fonts lack: CJK, symbols, emoji. +#[cfg(not(target_arch = "wasm32"))] +const SYSTEM_FALLBACKS: &[&str] = &[ + "Helvetica Neue", + "Arial", + "Segoe UI", + "Noto Sans", + "DejaVu Sans", + "PingFang SC", + "Hiragino Sans", + "Hiragino Kaku Gothic ProN", + "Apple SD Gothic Neo", + "Heiti SC", + "STHeiti", + "Microsoft YaHei", + "Yu Gothic", + "Malgun Gothic", + "Noto Sans CJK SC", + "Noto Sans CJK JP", + "Arial Unicode MS", + "Apple Symbols", + "Segoe UI Symbol", + "Noto Sans Symbols", + "Noto Sans Symbols2", + "Noto Emoji", + "Segoe UI Emoji", + "Apple Color Emoji", + "Noto Color Emoji", +]; + +static NEXT_ID: AtomicU32 = AtomicU32::new(1); +const OUTLINE_CACHE_MAX: usize = 50_000; + +fn name(font: &skrifa::FontRef<'_>, ids: &[StringId]) -> Option { + ids.iter().find_map(|id| font.localized_strings(*id).english_or_first().map(|s| s.to_string()).filter(|s| !s.is_empty())) +} + +/// A face's family and style names (the default instance's style for a variable font). +fn face_names(f: &skrifa::FontRef<'_>) -> Option<(String, String)> { + let family = name(f, &[StringId::TYPOGRAPHIC_FAMILY_NAME, StringId::FAMILY_NAME])?; + let style = name(f, &[StringId::TYPOGRAPHIC_SUBFAMILY_NAME, StringId::SUBFAMILY_NAME]).unwrap_or_else(|| "Regular".into()); + Some((family, style)) +} + +/// (family, style) of every face in the font file at `path`, reading only its table directories +/// and `name` tables: a scan opens hundreds of font files, many of them megabytes long. A +/// variable font is cataloged under its default style; its named instances appear once it loads. +#[cfg(not(target_arch = "wasm32"))] +fn file_face_names(path: &std::path::Path) -> Vec<(String, String)> { + use std::io::{Read, Seek, SeekFrom}; + /// Caps on what a (possibly damaged) file can make the scan read. + const MAX_FACES: u32 = 256; + const MAX_NAME_TABLE: u32 = 1 << 20; + let Ok(mut file) = std::fs::File::open(path) else { return vec![] }; + let mut read_at = |offset: u64, len: usize| -> Option> { + let mut buf = vec![0; len]; + file.seek(SeekFrom::Start(offset)).ok()?; + file.read_exact(&mut buf).ok()?; + Some(buf) + }; + let be32 = |b: &[u8], at: usize| b.get(at..at + 4).and_then(|s| s.try_into().ok()).map(u32::from_be_bytes); + let Some(head) = read_at(0, 12) else { return vec![] }; + // A collection lists where each face's table directory starts. + let starts: Vec = if head.starts_with(b"ttcf") { + let n = be32(&head, 8).unwrap_or(0).min(MAX_FACES) as usize; + read_at(12, n * 4).map(|b| b.as_chunks::<4>().0.iter().map(|c| u32::from_be_bytes(*c)).collect()).unwrap_or_default() + } else { + vec![0] + }; + starts + .into_iter() + .filter_map(|start| { + let dir = read_at(start.into(), 12)?; + let tables = u16::from_be_bytes(dir.get(4..6)?.try_into().ok()?) as usize; + let records = read_at(u64::from(start) + 12, tables * 16)?; + let rec = records.as_chunks::<16>().0.iter().find(|r| r.starts_with(b"name"))?; + let (offset, len) = (be32(rec, 8)?, be32(rec, 12)?); + if len > MAX_NAME_TABLE { + return None; + } + let table = read_at(offset.into(), len as usize)?; + // A one-table font holding just the `name` table, to read it as the font itself would. + let mut font = Vec::with_capacity(28 + table.len()); + font.extend_from_slice(&0x0001_0000_u32.to_be_bytes()); + font.extend_from_slice(&[0, 1, 0, 16, 0, 0, 0, 0]); + font.extend_from_slice(b"name"); + for v in [0, 28, len] { + font.extend_from_slice(&u32::to_be_bytes(v)); + } + font.extend_from_slice(&table); + face_names(&skrifa::FontRef::new(&font).ok()?) + }) + .collect() +} + +/// The platform's font folders (the system's and the user's), scanned by [`FontDb::global`]. +/// Empty on wasm. +pub fn system_font_dirs() -> Vec { + let mut dirs: Vec = Vec::new(); + if cfg!(target_arch = "wasm32") { + return dirs; + } + let home = std::env::var_os("HOME").map(std::path::PathBuf::from); + if cfg!(target_os = "macos") { + dirs.extend(["/System/Library/Fonts", "/Library/Fonts"].map(Into::into)); + if let Some(h) = &home { + dirs.push(h.join("Library/Fonts")); + } + // Fonts macOS ships as assets (PingFang, Yu Mincho, …): com_apple_MobileAsset_Font. + for parent in ["/System/Library/AssetsV2", "/System/Library/AssetsV2/PreinstalledAssetsV2/InstallWithOs"] { + let Ok(entries) = std::fs::read_dir(parent) else { continue }; + for e in entries.flatten() { + if e.file_name().to_string_lossy().starts_with("com_apple_MobileAsset_Font") { + dirs.push(e.path()); + } + } + } + } else if cfg!(windows) { + let root = std::env::var_os("WINDIR").map(std::path::PathBuf::from).unwrap_or_else(|| "C:\\Windows".into()); + dirs.push(root.join("Fonts")); + if let Some(l) = std::env::var_os("LOCALAPPDATA") { + dirs.push(std::path::PathBuf::from(l).join("Microsoft\\Windows\\Fonts")); + } + } else { + dirs.extend(["/usr/share/fonts", "/usr/local/share/fonts"].map(Into::into)); + if let Some(h) = &home { + dirs.push(h.join(".fonts")); + dirs.push(h.join(".local/share/fonts")); + } + } + dirs +} + +/// One face found in a font file: index, family, style and (variable fonts) the named instance's +/// axis settings. +type Found = (u32, String, String, Vec<([u8; 4], f32)>); + +/// Parse every face in `data` (a font file or collection); a variable font yields one face per +/// named instance (InDesign lists them as styles). +fn enumerate_faces(data: &[u8]) -> Vec { + let count = match FileRef::new(data) { + Ok(FileRef::Font(_)) => 1, + Ok(FileRef::Collection(c)) => c.len(), + Err(_) => 0, + }; + let mut out = Vec::new(); + for i in 0..count { + let Ok(f) = skrifa::FontRef::from_index(data, i) else { continue }; + let Some((family, style)) = face_names(&f) else { continue }; + let axes = f.axes(); + let mut named = Vec::new(); + for ni in f.named_instances().iter() { + let Some(style) = name(&f, &[ni.subfamily_name_id()]) else { continue }; + if named.iter().any(|(_, s, _): &(u32, String, _)| s.eq_ignore_ascii_case(&style)) { + continue; + } + let coords: Vec<([u8; 4], f32)> = axes.iter().zip(ni.user_coords()).map(|(a, v)| (a.tag().to_be_bytes(), v)).collect(); + named.push((i, style, coords)); + } + if named.is_empty() { + out.push((i, family, style, Vec::new())); + } else { + out.extend(named.into_iter().map(|(i, s, c)| (i, family.clone(), s, c))); + } + } + out +} + +/// The compiled-in Source Serif 4 Regular, for a database that somehow has no faces at all. +pub(crate) fn last_resort_face() -> Arc { + static FACE: std::sync::OnceLock> = std::sync::OnceLock::new(); + FACE.get_or_init(|| { + // The font is compiled in (`include_bytes!`), so parsing it can't depend on input; the + // `last_resort_face_parses` test proves it on every run. + #[allow(clippy::expect_used)] + let face = make_face(FontBytes::Static(BUNDLED[0]), 0, FALLBACK_FAMILY.into(), "Regular".into(), Vec::new()) + .expect("the compiled-in Source Serif 4 Regular parses"); + Arc::new(face) + }) + .clone() +} + +fn make_face(bytes: FontBytes, index: u32, family: String, style: String, coords: Vec<([u8; 4], f32)>) -> Option { + let data: &[u8] = match &bytes { + FontBytes::Static(b) => b, + FontBytes::Owned(v) => v.as_slice(), + }; + let f = skrifa::FontRef::from_index(data, index).ok()?; + let settings: Vec<(skrifa::Tag, f32)> = coords.iter().map(|(t, v)| (skrifa::Tag::new(t), *v)).collect(); + let location = if coords.is_empty() { Location::default() } else { f.axes().location(settings.iter().copied()) }; + let m = f.metrics(Size::unscaled(), &location); + let a = f.attributes(); + let hb = harfrust::FontRef::from_index(data, index).ok()?; + let shaper = harfrust::ShaperData::new(&hb); + let instance = (!coords.is_empty()) + .then(|| harfrust::ShaperInstance::from_variations(&hb, settings.iter().map(|(t, v)| harfrust::Variation { tag: *t, value: *v }))); + let axis = |tag: &[u8; 4]| coords.iter().find(|(t, _)| t == tag).map(|(_, v)| *v); + let weight = axis(b"wght").unwrap_or(if coords.is_empty() { a.weight.value() } else { style_weight(&style) }); + let italic = axis(b"ital") + .map(|v| v >= 0.5) + .or(axis(b"slnt").map(|v| v.abs() > 0.1)) + .unwrap_or(!matches!(a.style, skrifa::attribute::Style::Normal) || style_italic(&style)); + Some(FontFace { + id: NEXT_ID.fetch_add(1, Ordering::Relaxed), + family, + style, + weight, + italic, + upem: m.units_per_em.max(1) as f64, + ascent: m.ascent as f64, + descent: -(m.descent as f64), + cap_height: m.cap_height.map(|v| v as f64).filter(|v| *v > 0.0).unwrap_or(m.ascent as f64 * 0.72), + x_height: m.x_height.map(|v| v as f64).filter(|v| *v > 0.0).unwrap_or(m.ascent as f64 * 0.5), + shaper, + coords, + location, + instance, + bytes, + index, + bmp: std::sync::OnceLock::new(), + }) +} + +/// The named style part of a style with axis settings (`Bold {wght:650}` → `Bold`). +pub fn base_style(style: &str) -> &str { + style.split('{').next().unwrap_or(style).trim() +} + +fn norm(s: &str) -> String { + s.chars().filter(|c| c.is_alphanumeric()).flat_map(|c| c.to_lowercase()).collect() +} + +/// Weight implied by a style name. +fn style_weight(style: &str) -> f32 { + let s = norm(style); + const TABLE: &[(&str, f32)] = &[ + ("extralight", 200.0), + ("ultralight", 200.0), + ("semibold", 600.0), + ("demibold", 600.0), + ("extrabold", 800.0), + ("ultrabold", 800.0), + ("hairline", 100.0), + ("thin", 100.0), + ("light", 300.0), + ("medium", 500.0), + ("bold", 700.0), + ("black", 900.0), + ("heavy", 900.0), + ]; + TABLE.iter().find(|(k, _)| s.contains(k)).map(|(_, w)| *w).unwrap_or(400.0) +} + +fn style_italic(style: &str) -> bool { + let s = norm(style); + s.contains("italic") || s.contains("oblique") || s == "it" +} + +impl FontDb { + /// A database holding the bundled fonts, whose system font scan reads `font_dirs`. + pub fn with_font_dirs(font_dirs: Vec) -> Self { + let mut faces = Vec::new(); + for data in BUNDLED.iter().copied() { + for (i, family, style, coords) in enumerate_faces(data) { + if let Some(f) = make_face(FontBytes::Static(data), i, family, style, coords) { + faces.push(Arc::new(f)); + } + } + } + Self { + faces: RwLock::new(faces), + outlines: Mutex::new(HashMap::new()), + #[cfg(not(target_arch = "wasm32"))] + catalog: RwLock::new(Vec::new()), + font_dirs, + #[cfg(not(target_arch = "wasm32"))] + cataloged: std::sync::OnceLock::new(), + #[cfg(not(target_arch = "wasm32"))] + sys: Mutex::new(SysFallback { enabled: true, ..Default::default() }), + } + } + + /// A database of the bundled fonts only: no font folders, no system fallback. Deterministic + /// and offline, so tests and goldens give the same result on every machine. + pub fn bundled_only() -> Self { + let db = FontDb::with_font_dirs(Vec::new()); + db.set_system_fallback(false); + db + } + + /// The loaded face with id `id` (see [`FontFace::face_id`]). + pub fn face_by_id(&self, id: FaceId) -> Option> { + self.read_faces().iter().find(|f| f.id == id.0).cloned() + } + + /// Enable or disable the lazy system-font fallback for characters the loaded fonts lack + /// (native only; on by default). + pub fn set_system_fallback(&self, on: bool) { + #[cfg(not(target_arch = "wasm32"))] + { + self.sys.lock().unwrap_or_else(|e| e.into_inner()).enabled = on; + } + #[cfg(target_arch = "wasm32")] + let _ = on; + } + + /// Process-wide database: the bundled fonts, then the installed system fonts, cataloged the + /// first time a lookup by family name needs them (or ahead of time by + /// [`FontDb::scan_in_background`]). + pub fn global() -> &'static FontDb { + static DB: std::sync::OnceLock = std::sync::OnceLock::new(); + DB.get_or_init(|| FontDb::with_font_dirs(system_font_dirs())) + } + + fn read_faces(&self) -> std::sync::RwLockReadGuard<'_, Vec>> { + self.faces.read().unwrap_or_else(|e| e.into_inner()) + } + + /// The system font catalog, scanned first if it hasn't been yet. + #[cfg(not(target_arch = "wasm32"))] + fn read_catalog(&self) -> std::sync::RwLockReadGuard<'_, Vec> { + self.ensure_catalog(); + self.catalog.read().unwrap_or_else(|e| e.into_inner()) + } + + /// Family names available (loaded plus cataloged system fonts), sorted and deduplicated. + pub fn families(&self) -> Vec { + let mut v: Vec = self.read_faces().iter().map(|f| f.family.clone()).collect(); + #[cfg(not(target_arch = "wasm32"))] + v.extend(self.read_catalog().iter().map(|c| c.family.clone())); + v.sort_by_key(|a| a.to_lowercase()); + v.dedup_by(|a, b| a.eq_ignore_ascii_case(b)); + v + } + + /// Style names available for `family` (Regular first, then by weight). + pub fn styles(&self, family: &str) -> Vec { + let mut v: Vec<(bool, f32, String)> = self + .read_faces() + .iter() + .filter(|f| f.family.eq_ignore_ascii_case(family) && !f.style.contains('{')) + .map(|f| (f.italic, f.weight, f.style.clone())) + .collect(); + #[cfg(not(target_arch = "wasm32"))] + for c in self.read_catalog().iter() { + if c.family.eq_ignore_ascii_case(family) && !v.iter().any(|(_, _, s)| s.eq_ignore_ascii_case(&c.style)) { + v.push((style_italic(&c.style), style_weight(&c.style), c.style.clone())); + } + } + v.sort_by(|a, b| a.0.cmp(&b.0).then(a.1.total_cmp(&b.1)).then(a.2.cmp(&b.2))); + v.dedup_by(|a, b| a.2 == b.2); + v.into_iter().map(|t| t.2).collect() + } + + /// Add a user font (TTF/OTF/TTC bytes). Returns the number of faces added (0 if unparseable or + /// every face was already present). + pub fn add_font(&self, bytes: Vec) -> usize { + let data = Arc::new(bytes); + let mut added = 0; + for (i, family, style, coords) in enumerate_faces(&data) { + if self.read_faces().iter().any(|f| f.family.eq_ignore_ascii_case(&family) && f.style.eq_ignore_ascii_case(&style)) { + continue; + } + if let Some(f) = make_face(FontBytes::Owned(data.clone()), i, family, style, coords) { + self.faces.write().unwrap_or_else(|e| e.into_inner()).push(Arc::new(f)); + added += 1; + } + } + added + } + + /// Catalog the installed fonts unless that has been done: the first caller scans the font + /// folders, any other waits for that scan to finish. + #[cfg(not(target_arch = "wasm32"))] + fn ensure_catalog(&self) { + self.cataloged.get_or_init(|| { + self.scan_font_dirs(); + }); + } + + /// Catalog the installed fonts on a background thread, so the first lookup by family name + /// (opening a file, the font menus) doesn't wait for the scan. A no-op once they are + /// cataloged, and on wasm. + pub fn scan_in_background(&'static self) { + #[cfg(not(target_arch = "wasm32"))] + if self.cataloged.get().is_none() { + // A failed spawn leaves the scan to the first lookup that needs it. + let _ = std::thread::Builder::new().name("font-scan".into()).spawn(move || self.ensure_catalog()); + } + } + + /// Scan the font folders again (fonts installed or removed since), cataloging the faces + /// found (native only). Font data is loaded when a cataloged family is first resolved. + /// Returns the number of faces cataloged. + #[cfg(not(target_arch = "wasm32"))] + pub fn load_system_fonts(&self) -> usize { + // The first scan, or a rescan once it is done (never both at once). + let mut first = None; + self.cataloged.get_or_init(|| first = Some(self.scan_font_dirs())); + first.unwrap_or_else(|| self.scan_font_dirs()) + } + + #[cfg(not(target_arch = "wasm32"))] + fn scan_font_dirs(&self) -> usize { + let mut found = Vec::new(); + let mut stack = self.font_dirs.clone(); + // Each folder once, however links lead back to it. + let mut visited = std::collections::HashSet::new(); + while let Some(d) = stack.pop() { + if !visited.insert(std::fs::canonicalize(&d).unwrap_or_else(|_| d.clone())) { + continue; + } + let Ok(rd) = std::fs::read_dir(&d) else { continue }; + for e in rd.flatten() { + let p = e.path(); + if p.is_dir() { + stack.push(p); + continue; + } + let ext = p.extension().and_then(|e| e.to_str()).map(|e| e.to_ascii_lowercase()); + if !matches!(ext.as_deref(), Some("ttf" | "otf" | "ttc" | "otc")) { + continue; + } + for (family, style) in file_face_names(&p) { + found.push(CatalogEntry { family, style, path: p.clone() }); + } + } + } + let n = found.len(); + log::debug!("cataloged {n} system font faces"); + *self.catalog.write().unwrap_or_else(|e| e.into_inner()) = found; + n + } + + /// Load the files of the installed `family`. Returns whether any face was added. + #[cfg(not(target_arch = "wasm32"))] + fn load_cataloged(&self, family: &str) -> bool { + let paths: Vec = { + let cat = self.read_catalog(); + let mut p: Vec<_> = cat.iter().filter(|c| c.family.eq_ignore_ascii_case(family)).map(|c| c.path.clone()).collect(); + p.sort(); + p.dedup(); + p + }; + let mut any = false; + for p in paths { + if let Ok(data) = std::fs::read(&p) { + any |= self.add_font(data) > 0; + } + } + any + } + + /// Resolve a family + style to a face, falling back to the closest style of the family, then to + /// [`FALLBACK_FAMILY`]. Installed system fonts are found by name whatever ran before. + pub fn face(&self, family: &str, style: &str) -> Arc { + if let Some(f) = self.find(family, style) { + return f; + } + #[cfg(not(target_arch = "wasm32"))] + if self.load_cataloged(family) + && let Some(f) = self.find(family, style) + { + return f; + } + self.find(FALLBACK_FAMILY, style) + .or_else(|| self.find(FALLBACK_FAMILY, "Regular")) + .or_else(|| self.read_faces().first().cloned()) + .unwrap_or_else(last_resort_face) + } + + /// Is `family` available (loaded, or installed on the system)? + pub fn has_family(&self, family: &str) -> bool { + if self.is_loaded(family) { + return true; + } + #[cfg(not(target_arch = "wasm32"))] + if self.read_catalog().iter().any(|c| c.family.eq_ignore_ascii_case(family)) { + return true; + } + false + } + + fn is_loaded(&self, family: &str) -> bool { + self.read_faces().iter().any(|f| f.family.eq_ignore_ascii_case(family)) + } + + /// A variable font's axes: (tag, name, min, default, max), empty for static fonts. + pub fn axes(&self, family: &str, style: &str) -> Vec<(String, String, f32, f32, f32)> { + let face = self.face(family, base_style(style)); + let Some(f) = face.skrifa() else { return vec![] }; + f.axes() + .iter() + .map(|a| { + let tag = String::from_utf8_lossy(&a.tag().to_be_bytes()).to_string(); + let name = f.localized_strings(a.name_id()).english_or_first().map(|s| s.to_string()).unwrap_or_else(|| tag.clone()); + (tag, name, a.min_value(), a.default_value(), a.max_value()) + }) + .collect() + } + + /// `Style {wght:650,wdth:90}`: the named style's font at those axis values, made on first use. + fn instance(&self, family: &str, style: &str) -> Option> { + let open = style.find('{')?; + let base = self.find(family, style[..open].trim())?; + if base.skrifa().is_none_or(|f| f.axes().is_empty()) { + return Some(base); + } + let mut coords = base.coords.clone(); + for kv in style[open + 1..].trim_end_matches('}').split(',') { + let (k, v) = kv.split_once(':')?; + let k = k.trim().as_bytes(); + let v: f32 = v.trim().parse().ok()?; + if k.len() != 4 { + return None; + } + let tag = [k[0], k[1], k[2], k[3]]; + match coords.iter_mut().find(|(t, _)| *t == tag) { + Some(c) => c.1 = v, + None => coords.push((tag, v)), + } + } + let f = make_face(base.bytes.clone(), base.index, base.family.clone(), style.to_string(), coords)?; + let f = Arc::new(f); + self.faces.write().unwrap_or_else(|e| e.into_inner()).push(f.clone()); + Some(f) + } + + fn find(&self, family: &str, style: &str) -> Option> { + if style.contains('{') { + { + let faces = self.read_faces(); + if let Some(f) = faces.iter().find(|f| f.family.eq_ignore_ascii_case(family) && f.style == style) { + return Some(f.clone()); + } + } + return self.instance(family, style); + } + let faces = self.read_faces(); + let cands: Vec<&Arc> = faces.iter().filter(|f| f.family.eq_ignore_ascii_case(family)).collect(); + if cands.is_empty() { + return None; + } + let ns = norm(style); + if let Some(f) = cands.iter().find(|f| norm(&f.style) == ns) { + return Some((*f).clone()); + } + let (tw, ti) = (style_weight(style), style_italic(style)); + cands + .iter() + .min_by(|a, b| { + let sa = (a.weight - tw).abs() + if a.italic != ti { 1000.0 } else { 0.0 }; + let sb = (b.weight - tw).abs() + if b.italic != ti { 1000.0 } else { 0.0 }; + sa.total_cmp(&sb) + }) + .map(|f| (*f).clone()) + } + + /// First face (fallback family first, then load order) that covers `c`; on native, system + /// fonts are cataloged and loaded lazily the first time no loaded face covers a character. + pub fn fallback_for(&self, c: char, exclude: u32) -> Option> { + if let Some(f) = self.loaded_fallback(c, exclude) { + return Some(f); + } + #[cfg(not(target_arch = "wasm32"))] + if self.system_fallback(c) { + return self.loaded_fallback(c, exclude); + } + None + } + + fn loaded_fallback(&self, c: char, exclude: u32) -> Option> { + let faces = self.read_faces(); + let mut order: Vec<&Arc> = faces.iter().filter(|f| f.id != exclude).collect(); + order.sort_by_key(|f| (!f.family.eq_ignore_ascii_case(FALLBACK_FAMILY), f.italic, (f.weight - 400.0).abs() as i32)); + order.into_iter().find(|f| f.covers(c)).cloned() + } + + /// Load a system font covering `c` (preferred fallback families first, then any cataloged + /// file under 40 MB). Returns true if one was loaded. Misses are remembered. + #[cfg(not(target_arch = "wasm32"))] + fn system_fallback(&self, c: char) -> bool { + if c.is_control() || c.is_whitespace() { + return false; + } + { + let sys = self.sys.lock().unwrap_or_else(|e| e.into_inner()); + if !sys.enabled || sys.misses.contains(&c) { + return false; + } + } + let covered = |db: &FontDb| db.read_faces().iter().any(|f| f.covers(c)); + let cataloged: Vec = self.read_catalog().iter().map(|e| e.family.clone()).collect(); + for fam in SYSTEM_FALLBACKS { + if !self.is_loaded(fam) && cataloged.iter().any(|f| f.eq_ignore_ascii_case(fam)) { + self.load_cataloged(fam); + if covered(self) { + return true; + } + } + } + let mut paths: Vec = self.catalog.read().unwrap_or_else(|e| e.into_inner()).iter().map(|e| e.path.clone()).collect(); + paths.sort(); + paths.dedup(); + for p in paths { + if std::fs::metadata(&p).map(|m| m.len() > 40 << 20).unwrap_or(true) { + continue; + } + let Ok(data) = std::fs::read(&p) else { continue }; + let hit = + enumerate_faces(&data).iter().any(|(i, _, _, _)| skrifa::FontRef::from_index(&data, *i).is_ok_and(|f| f.charmap().map(c).is_some())); + if hit && self.add_font(data) > 0 && covered(self) { + return true; + } + } + self.sys.lock().unwrap_or_else(|e| e.into_inner()).misses.insert(c); + false + } + + /// Glyph outline in font units, y-down (flipped), cached per (face, glyph). + pub fn outline(&self, face: &FontFace, gid: u32) -> Arc { + let key = (face.id, gid); + if let Some(p) = self.outlines.lock().unwrap_or_else(|e| e.into_inner()).get(&key) { + return p.clone(); + } + let mut pen = FlipPen(BezPath::new()); + if let Some(f) = face.skrifa() + && let Some(g) = f.outline_glyphs().get(GlyphId::new(gid)) + { + let _ = g.draw(DrawSettings::unhinted(Size::unscaled(), face.location()), &mut pen); + } + let p = Arc::new(pen.0); + let mut cache = self.outlines.lock().unwrap_or_else(|e| e.into_inner()); + if cache.len() >= OUTLINE_CACHE_MAX { + cache.clear(); + } + cache.insert(key, p.clone()); + p + } +} + +struct FlipPen(BezPath); + +impl OutlinePen for FlipPen { + fn move_to(&mut self, x: f32, y: f32) { + self.0.move_to((x as f64, -y as f64)); + } + fn line_to(&mut self, x: f32, y: f32) { + self.0.line_to((x as f64, -y as f64)); + } + fn quad_to(&mut self, cx0: f32, cy0: f32, x: f32, y: f32) { + self.0.quad_to((cx0 as f64, -cy0 as f64), (x as f64, -y as f64)); + } + fn curve_to(&mut self, cx0: f32, cy0: f32, cx1: f32, cy1: f32, x: f32, y: f32) { + self.0.curve_to((cx0 as f64, -cy0 as f64), (cx1 as f64, -cy1 as f64), (x as f64, -y as f64)); + } + fn close(&mut self) { + self.0.close_path(); + } +} diff --git a/crates/equashion-font/src/lib.rs b/crates/equashion-font/src/lib.rs new file mode 100644 index 00000000..e7a1a54d --- /dev/null +++ b/crates/equashion-font/src/lib.rs @@ -0,0 +1,262 @@ +//! equaSHion fonts: the font database (bundled OFL families + optional user/system fonts), +//! vertical metrics, glyph outlines and OpenType shaping. +//! +//! Shaping here is style-agnostic: [`shape`] turns a string in one face into glyph ids, clusters +//! and advances in font units; `equashion-layout` applies sizes on top. [`FontDb::bundled_only`] +//! is the offline database (no system fonts) used by tests and goldens. +#![deny(clippy::unwrap_used, clippy::expect_used, clippy::panic, clippy::unimplemented, clippy::todo, clippy::unreachable)] +#![forbid(unsafe_code)] + +mod fontdb; + +pub use fontdb::{FALLBACK_FAMILY, FaceId, FontDb, FontFace, base_style, bundled, system_font_dirs}; +pub use harfrust::Feature; +use harfrust::{Direction, ShapeOptions, Tag, UnicodeBuffer}; +pub use kurbo::BezPath; +use skrifa::MetadataProvider; +use skrifa::instance::Size; + +/// The default equation family: bundled in Regular, Italic, Bold and Bold Italic, so the four +/// math variants never fall back to a different family. +pub const DEFAULT_FAMILY: &str = "Source Serif 4"; + +/// One shaped glyph, in font units. +#[derive(Clone, Copy, Debug, PartialEq)] +pub struct ShapedGlyph { + pub gid: u32, + /// Byte offset (in the shaped string) of the cluster this glyph belongs to. + pub cluster: usize, + pub x_advance: i32, + pub x_offset: i32, + pub y_offset: i32, +} + +/// An OpenType feature setting: `"liga"`, `"-kern"`, `"ss01"`. +pub fn feature(tag: &str) -> Option { + let (on, t) = match tag.strip_prefix('-') { + Some(r) => (false, r), + None => (true, tag.strip_prefix('+').unwrap_or(tag)), + }; + let b = t.as_bytes(); + if b.len() != 4 { + return None; + } + Some(Feature::new(Tag::new(&[b[0], b[1], b[2], b[3]]), on as u32, ..)) +} + +/// A strong right-to-left character (Hebrew, Arabic, …)? +pub fn is_rtl(c: char) -> bool { + use unicode_bidi::BidiClass::{AL, R}; + matches!(unicode_bidi::bidi_class(c), R | AL) +} + +/// Maximal runs of one direction (neutrals join the run they're in): (byte range, right-to-left). +fn direction_runs(text: &str) -> Vec<(std::ops::Range, bool)> { + let mut runs: Vec<(std::ops::Range, bool)> = Vec::new(); + let mut cur: Option = None; + let mut start = 0; + for (i, c) in text.char_indices() { + let strong = if is_rtl(c) { + Some(true) + } else if unicode_bidi::bidi_class(c) == unicode_bidi::BidiClass::L { + Some(false) + } else { + None + }; + match (cur, strong) { + (None, Some(d)) => cur = Some(d), + (Some(a), Some(d)) if a != d => { + runs.push((start..i, a)); + start = i; + cur = Some(d); + } + _ => {} + } + } + runs.push((start..text.len(), cur.unwrap_or(false))); + runs +} + +/// Shape `text` with `face`. `chars` lets callers substitute characters (e.g. uppercase for All +/// Caps) while keeping clusters pointing into the original string. Glyphs come in logical +/// order: right-to-left runs are shaped right to left, then their clusters put back in text +/// order (each cluster's glyphs keep the shaper's order); line layout reorders them visually. +pub fn shape(face: &FontFace, text: &str, features: &[Feature], map: impl Fn(char) -> char) -> Vec { + if !text.chars().any(is_rtl) { + return shape_dir(face, text, features, &map, false); + } + let mut out = Vec::with_capacity(text.len()); + for (r, rtl) in direction_runs(text) { + let mut g = shape_dir(face, &text[r.clone()], features, &map, rtl); + for x in &mut g { + x.cluster += r.start; + } + if rtl { + // Visual (clusters descending) → logical, cluster by cluster. + let mut groups: Vec> = Vec::new(); + for x in g { + match groups.last_mut() { + Some(last) if last[0].cluster == x.cluster => last.push(x), + _ => groups.push(vec![x]), + } + } + groups.sort_by_key(|grp| grp[0].cluster); + g = groups.into_iter().flatten().collect(); + } + out.extend(g); + } + out +} + +fn shape_dir(face: &FontFace, text: &str, features: &[Feature], map: &impl Fn(char) -> char, rtl: bool) -> Vec { + let mut out = Vec::with_capacity(text.len()); + let shaped = face.hb().map(|hb| { + let shaper = face.shaper.shaper(&hb).instance(face.instance.as_ref()).build(); + let mut buf = UnicodeBuffer::new(); + for (i, c) in text.char_indices() { + buf.add(map(c), i as u32); + } + buf.guess_segment_properties(); + buf.set_direction(if rtl { Direction::RightToLeft } else { Direction::LeftToRight }); + let gb = shaper.shape(buf, ShapeOptions::new().features(features)); + for (info, pos) in gb.glyph_infos().iter().zip(gb.glyph_positions()) { + out.push(ShapedGlyph { + gid: info.glyph_id, + cluster: info.cluster as usize, + x_advance: pos.x_advance, + x_offset: pos.x_offset, + y_offset: pos.y_offset, + }); + } + }); + if shaped.is_none() + && let Some(f) = face.skrifa() + { + let cmap = f.charmap(); + let gm = f.glyph_metrics(Size::unscaled(), face.location()); + for (i, c) in text.char_indices() { + let g = cmap.map(map(c)).unwrap_or_default(); + let adv = gm.advance_width(g).unwrap_or(face.upem as f32 * 0.5); + out.push(ShapedGlyph { gid: g.to_u32(), cluster: i, x_advance: adv.round() as i32, x_offset: 0, y_offset: 0 }); + } + } + out +} + +/// Glyph id of the first of `chars` the face has (0 = .notdef). +pub fn first_glyph(face: &FontFace, chars: &[char]) -> u32 { + chars.iter().map(|c| face.glyph_for(*c)).find(|g| *g != 0).unwrap_or(0) +} + +#[cfg(test)] +mod tests { + use super::*; + + fn db() -> FontDb { + FontDb::bundled_only() + } + + #[test] + fn last_resort_face_parses() { + let f = fontdb::last_resort_face(); + assert_eq!(f.family, fontdb::FALLBACK_FAMILY); + assert!(f.upem > 0.0); + } + + #[test] + fn bundled_families_load_and_nothing_else() { + let db = db(); + assert_eq!(db.families(), vec!["Inter".to_string(), DEFAULT_FAMILY.to_string(), "STIX Two Math".to_string()]); + let styles = db.styles(DEFAULT_FAMILY); + for s in ["Regular", "Italic", "Bold", "Bold Italic"] { + assert!(styles.iter().any(|x| x == s), "{s} in {styles:?}"); + } + } + + #[test] + fn the_default_family_resolves_to_itself_in_every_math_style() { + let db = db(); + for (style, italic, bold) in [("Regular", false, false), ("Italic", true, false), ("Bold", false, true), ("Bold Italic", true, true)] { + let f = db.face(DEFAULT_FAMILY, style); + assert_eq!(f.family, DEFAULT_FAMILY, "{style}"); + assert_eq!(f.italic, italic, "{style}: {f:?}"); + assert_eq!(f.weight >= 600.0, bold, "{style}: {f:?}"); + } + } + + #[test] + fn an_unknown_family_falls_back_to_the_default_family() { + let db = db(); + assert!(!db.has_family("Cambria Math")); + assert_eq!(db.face("Cambria Math", "Regular").family, DEFAULT_FAMILY); + assert_eq!(FALLBACK_FAMILY, DEFAULT_FAMILY); + } + + #[test] + fn faces_are_found_by_id() { + let db = db(); + let f = db.face("Inter", "Regular"); + let back = db.face_by_id(f.face_id()).unwrap(); + assert!(std::sync::Arc::ptr_eq(&f, &back)); + assert!(db.face_by_id(FaceId(u32::MAX)).is_none()); + } + + #[test] + fn shaping_produces_clusters_and_advances() { + let face = db().face(DEFAULT_FAMILY, "Regular"); + let g = shape(&face, "Hello", &[], |c| c); + assert_eq!(g.len(), 5); + assert_eq!(g.iter().map(|g| g.cluster).collect::>(), vec![0, 1, 2, 3, 4]); + assert!(g.iter().all(|g| g.x_advance > 0 && g.gid != 0)); + } + + #[test] + fn ligatures_can_be_disabled() { + let face = db().face(DEFAULT_FAMILY, "Regular"); + let on = shape(&face, "office", &[], |c| c); + let off = shape(&face, "office", &[feature("-liga").unwrap()], |c| c); + assert!(on.len() <= off.len()); + assert_eq!(off.len(), 6); + } + + #[test] + fn mapping_keeps_clusters() { + let face = db().face(DEFAULT_FAMILY, "Regular"); + let g = shape(&face, "ab", &[], |c| c.to_ascii_uppercase()); + assert_eq!(g[0].gid, face.glyph_for('A')); + assert_eq!(g[1].cluster, 1); + } + + #[test] + fn right_to_left_runs_come_back_in_logical_order() { + // Neither bundled face covers Hebrew, so this only checks cluster order. + let face = db().face(DEFAULT_FAMILY, "Regular"); + let g = shape(&face, "a\u{5D0}\u{5D1}b", &[], |c| c); + let clusters: Vec = g.iter().map(|g| g.cluster).collect(); + let mut sorted = clusters.clone(); + sorted.sort_unstable(); + assert_eq!(clusters, sorted); + } + + #[test] + fn outlines_and_metrics() { + let db = db(); + let face = db.face(DEFAULT_FAMILY, "Bold"); + assert_eq!(face.style, "Bold"); + let o = db.outline(&face, face.glyph_for('O')); + assert!(!o.elements().is_empty()); + assert!(face.ascent > 0.0 && face.descent > 0.0 && face.cap_height > face.x_height); + assert!(feature("abc").is_none()); + } + + #[test] + fn fallback_finds_a_bundled_face_for_a_symbol() { + let db = db(); + let base = db.face(DEFAULT_FAMILY, "Regular"); + // Whatever covers it must be bundled; nothing is loaded from the system. + if let Some(f) = db.fallback_for('\u{2211}', base.id()) { + assert!(f.family == "Inter" || f.family == DEFAULT_FAMILY, "{f:?}"); + } + assert!(db.fallback_for('\u{8A9E}', base.id()).is_none(), "no bundled CJK font, no system fallback"); + } +} diff --git a/crates/equashion-layout/Cargo.toml b/crates/equashion-layout/Cargo.toml new file mode 100644 index 00000000..27402bc2 --- /dev/null +++ b/crates/equashion-layout/Cargo.toml @@ -0,0 +1,29 @@ +[package] +name = "equashion-layout" +version.workspace = true +edition.workspace = true +license.workspace = true +description = "equaSHion layout: TeX-style equation layout into a backend-neutral scene, caret geometry" + +[lints.rust] +unsafe_code = "forbid" + +[lints.clippy] +dbg_macro = "warn" +todo = "warn" +too_many_arguments = "allow" +type_complexity = "allow" +unwrap_used = "deny" +expect_used = "deny" +panic = "deny" +unimplemented = "deny" +unreachable = "deny" + +[features] +default = ["extra-fonts"] +extra-fonts = ["equashion-font/extra-fonts"] + +[dependencies] +equashion-math = { workspace = true } +equashion-font = { workspace = true } +kurbo = { workspace = true } diff --git a/crates/equashion-layout/src/lib.rs b/crates/equashion-layout/src/lib.rs new file mode 100644 index 00000000..669d0b3c --- /dev/null +++ b/crates/equashion-layout/src/lib.rs @@ -0,0 +1,54 @@ +//! equaSHion layout: TeX-style layout of equations into a backend-neutral [`Scene`], plus the +//! caret geometry an editor needs ([`EqLayout`]). +//! +//! Fonts come in through the [`MathFonts`] trait (implemented for +//! [`equashion_font::FontDb`]), never from a process-wide database, so a host chooses which +//! fonts it offers and tests stay deterministic with [`FontDb::bundled_only`]. +#![deny(clippy::unwrap_used, clippy::expect_used, clippy::panic, clippy::unimplemented, clippy::todo, clippy::unreachable)] +#![forbid(unsafe_code)] + +pub mod math; +mod scene; + +use std::sync::Arc; + +pub use equashion_font::{DEFAULT_FAMILY, FaceId, FontDb, FontFace}; +pub use kurbo::{BezPath, Rect}; +pub use math::{ + Cached, EqLayout, LayoutCache, MathBox, SeqGeo, Src, emit, hit_geo, layout_equation, layout_equation_wrapped, layout_math, layout_math_wrapped, + layout_src, +}; +pub use scene::{Prim, Rgb, Scene}; + +/// The fonts equation layout reads: faces by family and style, a fallback face for characters +/// a face lacks, and glyph outlines (in font units, y down). Backends also resolve the faces a +/// [`Scene`] names with [`MathFonts::face_by_id`]. +pub trait MathFonts { + /// The face for `family` and `style` ("Regular", "Italic", "Bold", "Bold Italic"), or the + /// closest one the implementation has. + fn face(&self, family: &str, style: &str) -> Arc; + /// A face that covers `c`, other than the face with id `exclude`. + fn fallback_for(&self, c: char, exclude: u32) -> Option>; + /// The outline of glyph `gid` of `f`, in font units, y down. + fn outline(&self, f: &FontFace, gid: u32) -> Arc; + /// The face a [`Prim::Glyphs`] names. + fn face_by_id(&self, id: FaceId) -> Option>; +} + +impl MathFonts for FontDb { + fn face(&self, family: &str, style: &str) -> Arc { + FontDb::face(self, family, style) + } + fn fallback_for(&self, c: char, exclude: u32) -> Option> { + FontDb::fallback_for(self, c, exclude) + } + fn outline(&self, f: &FontFace, gid: u32) -> Arc { + FontDb::outline(self, f, gid) + } + fn face_by_id(&self, id: FaceId) -> Option> { + FontDb::face_by_id(self, id) + } +} + +#[cfg(test)] +mod tests; diff --git a/crates/equashion-layout/src/math.rs b/crates/equashion-layout/src/math.rs new file mode 100644 index 00000000..275d7700 --- /dev/null +++ b/crates/equashion-layout/src/math.rs @@ -0,0 +1,2165 @@ +//! TeX-style layout of equations (`equashion_math::Math`) into positioned glyphs and rules. +//! +//! The result is a [`MathBox`]: a width, an ascent and a descent around a baseline, plus glyph +//! items and rules in box-local coordinates (x right, y down, baseline at y = 0). A host's +//! paragraph shaper can treat the box as one inline atom; [`emit`] turns it into backend-neutral +//! scene [`Prim`]itives. +//! +//! Metrics come from glyph outlines and the font's own vertical metrics, so layout works with +//! whatever face resolves (including the last-resort font when craft-fonts is absent). Radicals +//! and delimiters grow by scaling the glyph; fractions, radical bars, bars and borders are rules. +//! Recursion is bounded by `MAX_DEPTH` and the number of laid-out nodes by a budget. + +use std::collections::HashMap; +use std::sync::Arc; + +use equashion_font::FontFace; +use equashion_math::{MAX_DEPTH, Math, Node, Style as MStyle, from_omml}; +use kurbo::{Affine, BezPath, Rect, Shape as _}; + +use crate::MathFonts; +use crate::scene::{Prim, Rgb, Scene}; + +/// Most nodes laid out for one equation; the rest is dropped. +const NODE_BUDGET: usize = 20_000; +/// Most layouts a [`LayoutCache`] keeps before it starts over. +const CACHE_MAX: usize = 256; +/// Largest growth factor of a stretched delimiter or radical. +const MAX_STRETCH: f64 = 8.0; +/// Thickness of fraction bars and radical bars, em. +const RULE: f64 = 0.055; + +#[derive(Clone)] +pub(crate) struct GlyphItem { + pub face: Arc, + pub size: f64, + pub glyphs: Vec<(u32, f64, f64)>, + pub fake_bold: bool, + pub fake_italic: bool, +} + +#[derive(Clone)] +pub(crate) enum Item { + Glyphs(GlyphItem), + Rule(Rect), + /// A filled vector shape (radical sign, delimiter, big operator). + Path(BezPath), +} + +/// A laid-out equation (or part of one). +#[derive(Clone, Default)] +pub struct MathBox { + pub(crate) w: f64, + pub(crate) asc: f64, + pub(crate) desc: f64, + pub(crate) items: Vec, + /// Caret geometry of every row laid out inside this box (box-local). + pub(crate) geo: Vec, + /// Width of the last line when the equation was broken into several (inline equations then + /// sit with that line on the text baseline, so following text continues after it). + pub(crate) last_w: Option, +} + +/// Where the caret positions of one row (a child sequence of the math tree) sit. +#[derive(Clone, Debug, Default)] +pub struct SeqGeo { + /// Route to the row, as in `equashion_math::Path`. + pub path: Vec<(usize, usize)>, + /// x of each unit boundary: `units + 1` entries. + pub xs: Vec, + /// Vertical extent of the caret in this row (y down, baseline 0). + pub top: f64, + pub bottom: f64, +} + +impl MathBox { + /// Width, points. + pub fn width(&self) -> f64 { + self.w + } + /// Width of the last line of a broken-up inline equation; `None` for an equation on one line. + pub fn last_line_width(&self) -> Option { + self.last_w + } + /// Height above the baseline, points. + pub fn ascent(&self) -> f64 { + self.asc + } + /// Depth below the baseline, points. + pub fn descent(&self) -> f64 { + self.desc + } + fn space(w: f64) -> MathBox { + MathBox { w: w.max(0.0), ..Default::default() } + } + /// Add `o` with its origin at (dx, dy) (y down); grows the box to hold it. + fn put(&mut self, o: MathBox, dx: f64, dy: f64) { + self.w = self.w.max(dx + o.w); + self.asc = self.asc.max(o.asc - dy); + self.desc = self.desc.max(o.desc + dy); + for mut g in o.geo { + for x in &mut g.xs { + *x += dx; + } + g.top += dy; + g.bottom += dy; + self.geo.push(g); + } + for it in o.items { + self.items.push(match it { + Item::Glyphs(mut g) => { + for p in &mut g.glyphs { + p.1 += dx; + p.2 += dy; + } + Item::Glyphs(g) + } + Item::Rule(r) => Item::Rule(Rect::new(r.x0 + dx, r.y0 + dy, r.x1 + dx, r.y1 + dy)), + Item::Path(mut p) => { + p.apply_affine(Affine::translate((dx, dy))); + Item::Path(p) + } + }); + } + } + fn rule(&mut self, x0: f64, y0: f64, x1: f64, y1: f64) { + if x1 > x0 && y1 > y0 { + self.items.push(Item::Rule(Rect::new(x0, y0, x1, y1))); + self.asc = self.asc.max(-y0); + self.desc = self.desc.max(y1); + self.w = self.w.max(x1); + } + } + /// Add a filled shape; grows the box to hold it. + fn path(&mut self, p: BezPath) { + let b = p.bounding_box(); + if b.x1 > b.x0 && b.y1 > b.y0 && b.x0.is_finite() && b.y0.is_finite() && b.x1.is_finite() && b.y1.is_finite() { + self.asc = self.asc.max(-b.y0); + self.desc = self.desc.max(b.y1); + self.w = self.w.max(b.x1); + self.items.push(Item::Path(p)); + } + } + /// Boxes side by side on a common baseline. + fn row(parts: Vec) -> MathBox { + let mut out = MathBox::default(); + let mut x = 0.0; + for p in parts { + let w = p.w; + out.put(p, x, 0.0); + x += w; + } + out.w = x; + out + } + /// Number of glyph items (tests). + #[cfg(test)] + pub(crate) fn glyph_items(&self) -> usize { + self.items.iter().filter(|i| matches!(i, Item::Glyphs(_))).count() + } + /// Number of rules (tests). + #[cfg(test)] + pub(crate) fn rules(&self) -> usize { + self.items.iter().filter(|i| matches!(i, Item::Rule(_))).count() + } + /// Number of filled shapes (tests). + #[cfg(test)] + pub(crate) fn paths(&self) -> usize { + self.items.iter().filter(|i| matches!(i, Item::Path(_))).count() + } + /// Largest glyph size used (tests). + #[cfg(test)] + pub(crate) fn max_size(&self) -> f64 { + self.items.iter().filter_map(|i| if let Item::Glyphs(g) = i { Some(g.size) } else { None }).fold(0.0, f64::max) + } +} + +/// Style of the surrounding formula: display, text, script, script-script. +#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] +enum St { + Display, + Text, + Script, + ScriptScript, +} + +impl St { + fn factor(self) -> f64 { + match self { + St::Display | St::Text => 1.0, + St::Script => 0.72, + St::ScriptScript => 0.58, + } + } + fn script(self) -> St { + match self { + St::Display | St::Text => St::Script, + _ => St::ScriptScript, + } + } + /// Style of fraction numerators and denominators. + fn inner(self) -> St { + match self { + St::Display => St::Text, + St::Text => St::Script, + _ => St::ScriptScript, + } + } + fn is_script(self) -> bool { + self >= St::Script + } +} + +/// Caret unit mark: x lies at `f` between part boundaries `a` and `b`. +type Mark = (usize, usize, f64); + +#[derive(Clone, Copy, PartialEq, Eq)] +enum Var { + Italic, + Upright, + Bold, + BoldItalic, +} + +#[derive(Clone, Copy, PartialEq, Eq)] +enum Class { + None, + Ord, + Op, + Bin, + Rel, + Punct, + /// A built-up fraction: it takes a thin space from its neighbours (outside scripts). + Inner, +} + +/// Where a trailing differential (`dx`, `dt`...) starts in an operator's body: the last text +/// node ends in `d` and one letter, with something before it. +fn differential(s: &[Node]) -> Option<(usize, usize)> { + let i = s.len().checked_sub(1)?; + let Node::Text(t) = s.get(i)?.bare() else { return None }; + let chars: Vec = t.chars().collect(); + let n = chars.len(); + let d = n.checked_sub(2)?; + let (a, b) = (*chars.get(d)?, *chars.get(n - 1)?); + let before = (d > 0 || i > 0) && d.checked_sub(1).and_then(|k| chars.get(k)).is_none_or(|c| space_em(*c).is_none()); + (a == 'd' + && b.is_alphabetic() + && before + && (d.checked_sub(1).and_then(|k| chars.get(k)).is_none_or(|c| !c.is_alphabetic()) + || d.checked_sub(2).and_then(|k| chars.get(k)).is_none_or(|c| !c.is_alphabetic()))) + .then_some((i, d)) +} + +/// Width in em of the explicit space characters the typed-LaTeX parser produces: thin +/// (`\,`), medium (`\:`), thick (`\;`) and one em (`\quad`). +fn space_em(c: char) -> Option { + match c { + '\u{2009}' => Some(3.0 / 18.0), + '\u{2005}' => Some(4.0 / 18.0), + '\u{2004}' => Some(5.0 / 18.0), + '\u{2001}' => Some(1.0), + _ => None, + } +} + +fn classify(c: char) -> Class { + match c { + '=' | '<' | '>' | '\u{2264}' | '\u{2265}' | '\u{2260}' | '\u{2248}' | '\u{2261}' | '\u{223C}' | '\u{2245}' | '\u{2208}' | '\u{2209}' + | '\u{220B}' | '\u{2282}' | '\u{2283}' | '\u{2286}' | '\u{2287}' | '\u{2192}' | '\u{2190}' | '\u{2194}' | '\u{21D2}' | '\u{21D0}' + | '\u{21D4}' | '\u{221D}' | '\u{2225}' | '\u{22A5}' | '\u{226A}' | '\u{226B}' | '\u{27F6}' | '\u{21A6}' | '\u{2223}' | '\u{2243}' + | '\u{2250}' => Class::Rel, + '+' | '\u{2212}' | '-' | '\u{D7}' | '\u{F7}' | '\u{B7}' | '\u{B1}' | '\u{2213}' | '\u{2217}' | '\u{2218}' | '\u{222A}' | '\u{2229}' + | '\u{2227}' | '\u{2228}' | '\u{2295}' | '\u{2297}' | '\u{2216}' | '*' | '\u{22C5}' => Class::Bin, + ',' | ';' => Class::Punct, + _ => Class::Ord, + } +} + +/// Space (in em) between two adjacent atoms. +fn gap(prev: Class, next: Class, script: bool) -> f64 { + // A little tighter than TeX's 4/18 and 5/18 (the serif face has wide side bearings), and a + // small space kept in script size so "1+x" in a script-size denominator does not run together. + let med = if script { 3.5 / 18.0 } else { 5.0 / 18.0 }; + let thick = if script { 0.0 } else { 6.0 / 18.0 }; + let thin = 3.0 / 18.0; + match (prev, next) { + (Class::None, _) => 0.0, + (Class::Bin, _) | (_, Class::Bin) => med, + (Class::Rel, _) | (_, Class::Rel) => thick, + (Class::Punct, _) => { + if script { + 0.0 + } else { + thin + } + } + (Class::Op, _) | (_, Class::Op) => thin, + (Class::Inner, _) | (_, Class::Inner) => { + if script { + 0.0 + } else { + thin + } + } + _ => 0.0, + } +} + +/// Add a closed polygon to `p`, wound the same way whatever the order of `pts` (so overlapping +/// pieces of one shape never cancel under the non-zero rule). +fn add_poly(p: &mut BezPath, pts: &[(f64, f64)]) { + let n = pts.len(); + if n < 3 { + return; + } + let mut area = 0.0; + for i in 0..n { + let (a, b) = (pts.get(i).copied().unwrap_or_default(), pts.get((i + 1) % n).copied().unwrap_or_default()); + area += a.0 * b.1 - b.0 * a.1; + } + let ordered: Vec<(f64, f64)> = if area >= 0.0 { pts.to_vec() } else { pts.iter().rev().copied().collect() }; + for (i, pt) in ordered.iter().enumerate() { + if i == 0 { + p.move_to(*pt); + } else { + p.line_to(*pt); + } + } + p.close_path(); +} + +/// A straight stroke of perpendicular thickness `w` from `a` to `b`; `ext` lengthens it by half a +/// width at both ends so consecutive strokes overlap at their joints. +fn add_segment(p: &mut BezPath, a: (f64, f64), b: (f64, f64), w: f64, ext: bool) { + let (dx, dy) = (b.0 - a.0, b.1 - a.1); + let len = (dx * dx + dy * dy).sqrt(); + if !(len.is_finite() && len > 1e-9) { + return; + } + let (ux, uy) = (dx / len, dy / len); + let e = if ext { w / 2.0 } else { 0.0 }; + let (a, b) = ((a.0 - ux * e, a.1 - uy * e), (b.0 + ux * e, b.1 + uy * e)); + let (nx, ny) = (-uy * w / 2.0, ux * w / 2.0); + add_poly(p, &[(a.0 + nx, a.1 + ny), (b.0 + nx, b.1 + ny), (b.0 - nx, b.1 - ny), (a.0 - nx, a.1 - ny)]); +} + +/// Narrow a box made of one glyph run to its ink's right edge (plus a little), so scripts hang +/// by the glyph rather than by its side bearing. +fn trim_right(fonts: &dyn MathFonts, mut b: MathBox, sz: f64) -> MathBox { + let mut right: f64 = 0.0; + for it in &b.items { + if let Item::Glyphs(g) = it { + let k = g.size / g.face.upem.max(1.0); + for (gid, x, _) in &g.glyphs { + if let Some((_, _, x1, _)) = ink(fonts, &g.face, *gid) { + right = right.max(x + x1 * k); + } + } + } + } + if right > 0.0 && right + 0.03 * sz < b.w { + b.w = right + 0.03 * sz; + } + b +} + +/// A parenthesis from `top` to `bot` (y down): a crescent that is thickest in the middle and +/// never thinner than a hairline at the tips. `x` is the tip column; the belly bulges left for an +/// opening parenthesis and right for a closing one. +fn paren_path(open: bool, x: f64, top: f64, bot: f64, bulge: f64, thick: f64, tip: f64) -> BezPath { + let dir = if open { -1.0 } else { 1.0 }; + let h = bot - top; + let k = 4.0 / 3.0; // cubic control offset for a bulge of `b` at the middle + let curve = |p: &mut BezPath, x0: f64, b: f64, from_top: bool| { + let y1 = if from_top { bot } else { top }; + let cx = x0 + dir * b * k; + let (c1, c2) = if from_top { (top + h * 0.12, bot - h * 0.12) } else { (bot - h * 0.12, top + h * 0.12) }; + p.curve_to((cx, c1), (cx, c2), (x0, y1)); + }; + let mut p = BezPath::new(); + p.move_to((x, top)); + curve(&mut p, x, bulge, true); + let inner_x = x - dir * tip; + p.line_to((inner_x, bot)); + let inner_bulge = (bulge - thick + tip).max(0.0); + curve(&mut p, inner_x, inner_bulge, false); + p.close_path(); + p +} + +/// The four faces of the equation font family. +struct Faces { + regular: Arc, + italic: Arc, + bold: Arc, + bold_italic: Arc, +} + +impl Faces { + fn new(db: &dyn MathFonts, family: &str) -> Faces { + Faces { + regular: db.face(family, "Regular"), + italic: db.face(family, "Italic"), + bold: db.face(family, "Bold"), + bold_italic: db.face(family, "Bold Italic"), + } + } + fn get(&self, v: Var) -> &Arc { + match v { + Var::Upright => &self.regular, + Var::Italic => &self.italic, + Var::Bold => &self.bold, + Var::BoldItalic => &self.bold_italic, + } + } +} + +/// The layout engine for one equation: fonts, size and the state of the row being laid out. +struct Lay<'f> { + fonts: &'f dyn MathFonts, + faces: Faces, + /// Font size of the text style, points. + size: f64, + bold: bool, + budget: usize, + /// Route to the row being laid out (see `SeqGeo::path`). + path: Vec<(usize, usize)>, + /// Index, in its row, of the node being laid out. + cur: usize, + /// Widest the top-level row may be before it breaks into several lines, points. + wrap: f64, + /// Parts of the top-level row after which it may break (after a binary operator or relation). + brks: Vec, + /// The next row laid out is the body of a big operator (so a trailing `dx` takes a thin space). + nary_body: bool, + /// (node, character) in the row being laid out where a differential `dx` starts. + thin_at: Option<(usize, usize)>, +} + +/// Ink box of a glyph in font units, y down: (x0, y0, x1, y1). +fn ink(fonts: &dyn MathFonts, face: &FontFace, gid: u32) -> Option<(f64, f64, f64, f64)> { + let p = fonts.outline(face, gid); + if p.elements().is_empty() { + return None; + } + let b = p.bounding_box(); + if b.x0.is_finite() && b.y0.is_finite() && b.x1.is_finite() && b.y1.is_finite() && b.y1 > b.y0 { Some((b.x0, b.y0, b.x1, b.y1)) } else { None } +} + +fn is_upper_greek(c: char) -> bool { + ('\u{391}'..='\u{3A9}').contains(&c) +} + +impl Lay<'_> { + fn pick(&self, v: Var, c: char) -> Arc { + let base = self.faces.get(v); + if c.is_whitespace() || c.is_control() || base.covers(c) { + return base.clone(); + } + self.fonts.fallback_for(c, base.id()).unwrap_or_else(|| base.clone()) + } + + /// Ink box of a glyph in font units, y down (see [`ink`]). + fn ink(&self, face: &FontFace, gid: u32) -> Option<(f64, f64, f64, f64)> { + ink(self.fonts, face, gid) + } + + fn var_for(&self, c: char, v: Var) -> Var { + // Math italic applies to letters only; digits and symbols stay upright. + let italic_letter = !is_upper_greek(c) && (c.is_ascii_alphabetic() || ('\u{3B1}'..='\u{3C9}').contains(&c) || c == '\u{3D1}'); + match (v, self.bold) { + (Var::Italic, b) => match (italic_letter, b) { + (true, false) => Var::Italic, + (true, true) => Var::BoldItalic, + (false, false) => Var::Upright, + (false, true) => Var::Bold, + }, + (Var::Upright, true) => Var::Bold, + (other, _) => other, + } + } + + /// A string at `sz` points in variant `v` (per-character italic choice for `Var::Italic`). + fn text(&self, s: &str, v: Var, sz: f64) -> MathBox { + let mut out = MathBox::default(); + let mut x = 0.0; + let chars: Vec = s.chars().collect(); + let mut i = 0; + while i < chars.len() { + let c = chars.get(i).copied().unwrap_or(' '); + // Wide spaces are fixed gaps, not glyphs (the math fonts may lack them): column breaks. + let gap = match c { + '\u{2003}' => Some(1.0), + '\u{2002}' => Some(0.5), + c => space_em(c), + }; + if let Some(g) = gap { + x += g * sz; + i += 1; + continue; + } + let cv = self.var_for(c, v); + let face = self.pick(cv, c); + let mut j = i + 1; + while j < chars.len() { + let d = chars.get(j).copied().unwrap_or(' '); + let dv = self.var_for(d, v); + if matches!(d, '\u{2003}' | '\u{2002}') || space_em(d).is_some() || dv != cv || !Arc::ptr_eq(&self.pick(dv, d), &face) { + break; + } + j += 1; + } + let seg: String = chars.get(i..j).map(|s| s.iter().collect()).unwrap_or_default(); + let k = sz / face.upem.max(1.0); + let shaped = equashion_font::shape(&face, &seg, &[], |c| c); + let mut item = GlyphItem { + face: face.clone(), + size: sz, + glyphs: vec![], + fake_bold: matches!(cv, Var::Bold | Var::BoldItalic) && face.weight < 550.0, + fake_italic: matches!(cv, Var::Italic | Var::BoldItalic) && !face.italic, + }; + for g in shaped { + let gx = x + g.x_offset as f64 * k; + let gy = -(g.y_offset as f64) * k; + if let Some((_, y0, _, y1)) = self.ink(&face, g.gid) { + out.asc = out.asc.max(-y0 * k - gy); + out.desc = out.desc.max(y1 * k + gy); + } + item.glyphs.push((g.gid, gx, gy)); + x += g.x_advance as f64 * k; + } + if !item.glyphs.is_empty() { + out.items.push(Item::Glyphs(item)); + } + i = j; + } + out.w = x; + out.asc = out.asc.max(0.0); + out.desc = out.desc.max(0.0); + out + } + + fn x_height(&self, sz: f64) -> f64 { + let f = self.faces.get(Var::Upright); + let xh = f.x_height / f.upem.max(1.0) * sz; + if xh.is_finite() && xh > 0.0 { xh } else { 0.45 * sz } + } + + /// Ink extent (width, height) of a character in the upright face, in em; `None` if the face + /// has no outline for it (no fonts installed). + fn ink_em(&self, c: char) -> Option<(f64, f64)> { + let face = self.faces.get(Var::Upright); + let gid = face.glyph_for(c); + let (x0, y0, x1, y1) = (gid != 0).then(|| self.ink(face, gid)).flatten()?; + let u = face.upem.max(1.0); + let (w, h) = ((x1 - x0) / u, (y1 - y0) / u); + (w.is_finite() && h.is_finite() && w > 0.0 && h > 0.0).then_some((w, h)) + } + + /// Weight of horizontal rules (fraction bars, radical strokes): the thickness of the font's + /// own minus sign, so rules match the text. + fn hbar(&self, sz: f64) -> f64 { + let em = self.ink_em('\u{2212}').map(|(_, h)| h).unwrap_or(RULE); + em.clamp(0.048, 0.075) * sz + } + + /// Weight of vertical strokes (brackets, bars): the stem of the font's own `|`. + fn stem(&self, sz: f64) -> f64 { + let em = self.ink_em('|').map(|(w, _)| w).unwrap_or(RULE); + em.clamp(0.03, 0.08) * sz + } + + fn axis(&self, sz: f64) -> f64 { + 0.25 * sz + } + + /// One character grown so its ink is `target` tall (never smaller than `sz`), its ink centre + /// on the math axis. Falls back to the plain glyph when the font has no outline for it. + fn stretch(&self, c: char, target: f64, sz: f64) -> MathBox { + let face = self.pick(Var::Upright, c); + let gid = face.glyph_for(c); + let Some((_, y0, _, y1)) = (gid != 0).then(|| self.ink(&face, gid)).flatten() else { + return self.text(&c.to_string(), Var::Upright, sz); + }; + let upem = face.upem.max(1.0); + let natural = (y1 - y0) / upem; // ink height per point of size + let want = if target.is_finite() { target } else { 0.0 }; + let s = (want / natural).clamp(sz, sz * MAX_STRETCH); + let b = self.text(&c.to_string(), Var::Upright, s); + let centre = (y0 + y1) / 2.0 * s / upem; + let dy = -self.axis(sz) - centre; + let w = b.w; + let mut shifted = MathBox::default(); + shifted.put(b, 0.0, dy); + shifted.w = w; + shifted + } + + fn seq(&mut self, s: &[Node], st: St, depth: usize) -> MathBox { + let mut parts: Vec = vec![]; + let mut marks: Vec = vec![]; + let mut prev = Class::None; + let path = self.path.clone(); + let body_of_nary = std::mem::take(&mut self.nary_body); + let thin = if body_of_nary { differential(s) } else { None }; + for (i, n) in s.iter().enumerate() { + if self.budget == 0 { + break; + } + self.cur = i; + self.thin_at = thin; + self.node(n, st, depth, &mut prev, &mut parts, &mut marks); + } + // x of every part boundary, then of every caret unit. + let mut pre = vec![0.0]; + let mut x = 0.0; + for p in &parts { + x += p.w; + pre.push(x); + } + let at = |k: usize| pre.get(k).copied().unwrap_or(x); + let mut xs: Vec = marks.iter().map(|m| at(m.0) + m.2 * (at(m.1) - at(m.0))).collect(); + xs.push(x); + let sz = self.size * st.factor(); + if self.path.is_empty() && depth == 0 && x > self.wrap { + let brks = std::mem::take(&mut self.brks); + return self.wrapped(parts, &brks, sz, st != St::Display); + } + let mut row = MathBox::row(parts); + row.geo.push(SeqGeo { path, xs, top: (-row.asc).min(-0.72 * sz), bottom: row.desc.max(0.22 * sz) }); + row + } + + /// The top-level `parts` broken into lines of at most `self.wrap` points, stacked left-aligned. + fn wrapped(&self, parts: Vec, brks: &[usize], sz: f64, last_on_baseline: bool) -> MathBox { + let max = self.wrap.max(4.0 * sz); + // Choose where each line starts, by widths alone. + let mut starts = vec![0usize]; + let (mut x, mut start, mut last): (f64, usize, Option) = (0.0, 0, None); + for (i, p) in parts.iter().enumerate() { + if brks.binary_search(&i).is_ok() && i > start { + last = Some(i); + } + if x + p.w > max && i > start { + let at = last.filter(|b| *b > start && *b <= i).unwrap_or(i); + starts.push(at); + x = parts.get(at..i).map_or(0.0, |s| s.iter().map(|q| q.w).sum()); + start = at; + last = None; + } + x += p.w; + } + let mut rows: Vec = Vec::new(); + let mut it = parts.into_iter().enumerate().peekable(); + for r in 0..starts.len() { + let end = starts.get(r + 1).copied().unwrap_or(usize::MAX); + let mut line = Vec::new(); + while let Some((i, _)) = it.peek() { + if *i >= end { + break; + } + if let Some((_, p)) = it.next() { + // A line does not start with the space that followed the operator. + if r > 0 && line.is_empty() && p.items.is_empty() && p.geo.is_empty() { + continue; + } + line.push(p); + } + } + rows.push(MathBox::row(line)); + } + // Offset of each line's baseline from the first line's. + let mut offs = Vec::with_capacity(rows.len()); + let (mut dy, mut prev_desc) = (0.0, 0.0); + for (r, row) in rows.iter().enumerate() { + if r > 0 { + dy += prev_desc + row.asc + 0.25 * sz; + } + prev_desc = row.desc; + offs.push(dy); + } + // An inline equation puts its last line on the text baseline. + let lift = if last_on_baseline { dy } else { 0.0 }; + let last_w = (last_on_baseline && rows.len() > 1).then(|| rows.last().map_or(0.0, |r| r.w)); + let mut out = MathBox::default(); + for (row, off) in rows.into_iter().zip(offs) { + out.put(row, 0.0, off - lift); + } + out.last_w = last_w; + out + } + + fn push_gap(&self, parts: &mut Vec, prev: Class, next: Class, st: St) { + let g = gap(prev, next, st.is_script()) * self.size * st.factor(); + if g > 0.0 { + parts.push(MathBox::space(g)); + } + } + + fn node(&mut self, n: &Node, st: St, depth: usize, prev: &mut Class, parts: &mut Vec, marks: &mut Vec) { + self.budget = self.budget.saturating_sub(1); + let me = self.cur; + let sz = self.size * st.factor(); + match n.bare() { + Node::Text(t) => { + for (ci, c) in t.chars().enumerate() { + let before = parts.len(); + if self.thin_at == Some((me, ci)) { + // The `d` of a trailing differential: a thin space after the integrand. + parts.push(MathBox::space(3.0 / 18.0 * sz)); + *prev = Class::None; + } + if c == '\u{2003}' || c == '\u{2002}' { + // A column break (cases): a fixed wide gap, and what follows starts afresh. + marks.push((before, before, 0.0)); + parts.push(MathBox::space(if c == '\u{2003}' { sz * 1.3 } else { sz * 0.5 })); + *prev = Class::None; + continue; + } + if let Some(em) = space_em(c) { + // `\,` `\:` `\;` `\quad`: a fixed space; it separates, so what follows + // starts afresh. + marks.push((before, before, 0.0)); + parts.push(MathBox::space(em * sz)); + *prev = Class::None; + continue; + } + if c.is_whitespace() { + marks.push((before, before, 0.0)); + continue; + } + let mut k = classify(c); + if k == Class::Bin && matches!(*prev, Class::None | Class::Bin | Class::Rel | Class::Punct | Class::Op) { + k = Class::Ord; + } + self.push_gap(parts, *prev, k, st); + marks.push((before, parts.len(), 0.5)); + match self.arrow(c, sz) { + Some(a) => parts.push(a), + None => parts.push(self.text(&c.to_string(), Var::Italic, sz)), + } + if matches!(k, Class::Bin | Class::Rel) && self.path.is_empty() { + self.brks.push(parts.len()); + } + *prev = k; + } + } + Node::Styled { text, style } => { + let (v, keep_space) = match style { + MStyle::Plain => (Var::Upright, false), + MStyle::Bold => (Var::Bold, false), + MStyle::BoldItalic => (Var::BoldItalic, false), + MStyle::Normal => (Var::Upright, true), + }; + let s: String = if keep_space { text.clone() } else { text.chars().filter(|c| !c.is_whitespace()).collect() }; + self.push_gap(parts, *prev, Class::Ord, st); + // The characters share one box: spread their caret positions across it. + let n = text.chars().count().max(1); + for k in 0..n { + marks.push((parts.len(), parts.len() + 1, k as f64 / n as f64)); + } + parts.push(self.text(&s, v, sz)); + *prev = Class::Ord; + } + Node::Func { name, body } => { + if depth >= MAX_DEPTH { + return; + } + self.push_gap(parts, *prev, Class::Op, st); + marks.push((parts.len(), parts.len(), 0.0)); + let mut b = self.text(name, Var::Upright, sz); + b.w += 3.0 / 18.0 * sz; + parts.push(b); + *prev = Class::Op; + let inner = self.child(me, 0, body, st, depth + 1); + if inner.w > 0.0 { + parts.push(inner); + *prev = Class::Ord; + } + } + Node::Raw(_) => marks.push((parts.len(), parts.len(), 0.0)), + other => { + if depth >= MAX_DEPTH { + marks.push((parts.len(), parts.len(), 0.0)); + return; + } + let k = match other { + Node::Nary { .. } | Node::Limit { .. } => Class::Op, + Node::Frac { .. } => Class::Inner, + _ => Class::Ord, + }; + let before = parts.len(); + self.push_gap(parts, *prev, k, st); + marks.push((before, parts.len(), 0.5)); + let b = self.structure(other, st, depth + 1, me); + parts.push(b); + // `lim`, like `sin`, takes a thin space before what follows. + *prev = match other { + Node::Limit { .. } => Class::Op, + Node::Frac { .. } => Class::Inner, + _ => Class::Ord, + }; + } + } + } + + /// `seq` for a child at nesting `depth` (stops at the depth limit). + fn seq_in(&mut self, s: &[Node], st: St, depth: usize) -> MathBox { + if depth >= MAX_DEPTH { + return MathBox::default(); + } + self.seq(s, st, depth) + } + + /// Lay out child row `c` of the node at index `me` of the current row. + fn child(&mut self, me: usize, c: usize, s: &[Node], st: St, depth: usize) -> MathBox { + self.path.push((me, c)); + let b = self.seq_in(s, st, depth); + self.path.pop(); + b + } + + fn structure(&mut self, n: &Node, st: St, depth: usize, me: usize) -> MathBox { + let sz = self.size * st.factor(); + match n { + Node::Frac { num, den } => { + let ch = st.inner(); + let nb = self.child(me, 0, num, ch, depth); + let db = self.child(me, 1, den, ch, depth); + self.frac(nb, db, st, sz) + } + Node::Rad { deg, body } => { + let b = self.child(me, usize::from(deg.is_some()), body, st, depth); + let d = deg.as_ref().map(|d| self.child(me, 0, d, St::ScriptScript, depth)); + self.radical(b, d, sz) + } + Node::Script { base, sub, sup } => { + let is_char = base.iter().all(|n| matches!(n.bare(), Node::Text(_) | Node::Styled { .. })); + let b = self.child(me, 0, base, st, depth); + let sb = sub.as_ref().map(|s| self.child(me, 1, s, st.script(), depth)); + let sp = sup.as_ref().map(|s| self.child(me, 1 + usize::from(sub.is_some()), s, st.script(), depth)); + self.scripts(b, sb, sp, is_char, st) + } + Node::PreScript { sub, sup, base } => { + let b = self.child(me, 2, base, st, depth); + let sb = self.child(me, 0, sub, st.script(), depth); + let sp = self.child(me, 1, sup, st.script(), depth); + let pre = self.scripts(MathBox::default(), Some(sb), Some(sp), true, st); + MathBox::row(vec![pre, b]) + } + Node::Nary { op, sub, sup, body } => { + let display = st == St::Display; + let integral = matches!(*op, '\u{222B}'..='\u{2233}'); + let opsz = sz + * if !display { + 1.0 + } else if integral { + 2.5 + } else { + 1.75 + }; + let ob = self.big_op(*op, display, sz).unwrap_or_else(|| self.stretch(*op, opsz * 0.85, opsz)); + let ob = if integral { trim_right(self.fonts, ob, sz) } else { ob }; + let sb = sub.as_ref().map(|s| self.child(me, 0, s, st.script(), depth)); + let sp = sup.as_ref().map(|s| self.child(me, usize::from(sub.is_some()), s, st.script(), depth)); + self.nary_body = true; + let body_box = self.child(me, usize::from(sub.is_some()) + usize::from(sup.is_some()), body, st, depth); + self.nary_body = false; + let head = if integral || !display { + self.scripts_tucked(ob, sb, sp, false, st, if integral && display { 0.14 } else { 0.0 }) + } else { + self.limits(ob, sb, sp, sz) + }; + let mut parts = vec![head]; + if body_box.w > 0.0 { + parts.push(MathBox::space(3.0 / 18.0 * sz)); + parts.push(body_box); + } + MathBox::row(parts) + } + Node::Delim { open, close, sep, items } => { + let boxes: Vec = items.iter().enumerate().map(|(k, i)| self.child(me, k, i, st, depth)).collect(); + self.delimiters(open, close, sep, boxes, sz) + } + Node::Matrix { rows } => { + let cs = if st == St::Display { St::Text } else { st }; + let mut k = 0usize; + let mut cells: Vec> = vec![]; + for r in rows { + let mut row = vec![]; + for c in r { + row.push(self.child(me, k, c, cs, depth)); + k += 1; + } + cells.push(row); + } + self.matrix(cells, sz) + } + Node::EqArr { rows } => { + let cells: Vec> = rows.iter().enumerate().map(|(k, r)| vec![self.child(me, k, r, st, depth)]).collect(); + self.matrix(cells, sz) + } + Node::Accent { ch, body } => { + let b = self.child(me, 0, body, st, depth); + self.accent(*ch, b, sz) + } + Node::Limit { lower, base, lim } => { + let b = self.child(me, 0, base, st, depth); + let l = self.child(me, 1, lim, st.script(), depth); + if *lower { self.limits(b, Some(l), None, sz) } else { self.limits(b, None, Some(l), sz) } + } + Node::Bar { top, body } => { + let b = self.child(me, 0, body, st, depth); + let t = (0.05 * sz).max(0.4); + let (w, asc, desc) = (b.w, b.asc, b.desc); + let mut out = MathBox::default(); + out.put(b, 0.0, 0.0); + if *top { + let y = -(asc + 0.12 * sz); + out.rule(0.0, y - t, w, y); + } else { + let y = desc + 0.12 * sz; + out.rule(0.0, y, w, y + t); + } + out.w = w; + out + } + Node::GroupChr { ch, top, body } => { + let b = self.child(me, 0, body, st, depth); + let (w, asc, desc) = (b.w, b.asc, b.desc); + let gap = 0.1 * sz; + let mut out = MathBox::default(); + out.put(b, 0.0, 0.0); + if let Some(g) = self.group_shape(*ch, w, sz, *top) { + // The shape has its near edge at its origin and grows away from the text. + if *top { + out.put(g, 0.0, -(asc + gap)); + } else { + out.put(g, 0.0, desc + gap); + } + out.w = out.w.max(w); + return out; + } + let t = (0.05 * sz).max(0.4); + let g = self.text(&ch.to_string(), Var::Upright, sz * 0.8); + let gw = g.w; + if *top { + let y = -(asc + 0.12 * sz); + out.rule(0.0, y - t, w, y); + out.put(g, ((w - gw) / 2.0).max(0.0), y - t - 0.1 * sz); + } else { + let y = desc + 0.12 * sz; + out.rule(0.0, y, w, y + t); + let ga = g.asc; + out.put(g, ((w - gw) / 2.0).max(0.0), y + t + 0.1 * sz + ga); + } + out.w = out.w.max(w); + out + } + Node::Boxed { border, body } => { + let b = self.child(me, 0, body, st, depth); + if !border { + return b; + } + let pad = 0.12 * sz; + let t = (0.05 * sz).max(0.4); + let (w, asc, desc) = (b.w, b.asc, b.desc); + let mut out = MathBox::default(); + out.put(b, pad + t, 0.0); + let (x1, y0, y1) = (w + 2.0 * (pad + t), -(asc + pad + t), desc + pad + t); + out.rule(0.0, y0, x1, y0 + t); + out.rule(0.0, y1 - t, x1, y1); + out.rule(0.0, y0, t, y1); + out.rule(x1 - t, y0, x1, y1); + out.w = x1; + out + } + // Text-like nodes are handled by `node`. + _ => MathBox::default(), + } + } + + fn frac(&self, num: MathBox, den: MathBox, st: St, sz: f64) -> MathBox { + let t = self.hbar(sz); + let axis = self.axis(sz); + let display = st == St::Display; + // TeX keeps 3 rule widths between the bar and the nearest ink in every style, so a radical + // or a nested fraction in a numerator / denominator never touches the bar. + let gap_min = if display { (3.0 * t).max(0.16 * sz) } else { (3.5 * t).max(0.2 * sz) }; + let num_shift = if display { 0.677 } else { 0.394 } * sz; + let den_shift = if display { 0.686 } else { 0.345 } * sz; + let up = num_shift.max(axis + t / 2.0 + gap_min + num.desc); + let down = den_shift.max(den.asc + gap_min + t / 2.0 - axis); + let pad = 0.06 * sz; + let inner = num.w.max(den.w); + let (nw, dw) = (num.w, den.w); + let mut out = MathBox::default(); + out.put(num, pad + (inner - nw) / 2.0, -up); + out.put(den, pad + (inner - dw) / 2.0, down); + out.rule(pad, -axis - t / 2.0, pad + inner, -axis + t / 2.0); + out.w = inner + 2.0 * pad; + out + } + + fn radical(&self, body: MathBox, deg: Option, sz: f64) -> MathBox { + let t = self.hbar(sz); + // TeX clearance under the bar, so nested bars stay visibly apart. + let bar_top = body.asc + 0.32 * sz + t; + let bottom = body.desc + 0.05 * sz; + let total = bar_top + bottom; + let kern_in = 0.1 * sz; + let pre = deg.as_ref().map(|d| (d.w - 0.45 * sz).max(0.0) + kern_in).unwrap_or(0.0); + // The sign and its bar are one continuous stroke of the bar's own weight: a short tick, + // the down stroke, the up stroke and the vinculum, joined without seams. + let top = -bar_top; + let left = 0.04 * sz + t; + // The check mark grows with the root: its down stroke is about half the total height. + let tall = (0.6 * total).max(0.6 * sz).min(total * 0.8); + let hook_y = bottom - tall; + let c0 = (pre + left, hook_y + 0.05 * sz); + let c1 = (c0.0 + 0.09 * sz, hook_y); + let c2 = (c1.0 + 0.1 * sz + 0.16 * tall, bottom - t / 2.0); + let dxu = 0.3 * sz + 0.14 * (total - tall).clamp(0.0, 3.0 * sz); + let c3 = (c2.0 + dxu, top + t / 2.0); + let end_body = c3.0 + 0.1 * sz; + let bw = body.w; + let end = end_body + bw + 0.03 * sz; + // Thin tick, heavy down stroke, thin up stroke and bar: the contrast of a typeset radical. + let heavy = t * 1.7; + let c2 = (c2.0, c2.1 - heavy * 0.4); + let mut sign = BezPath::new(); + add_segment(&mut sign, c0, c1, t * 0.8, true); + add_segment(&mut sign, c1, c2, heavy, false); + add_segment(&mut sign, c2, c3, t, true); + add_segment(&mut sign, (c3.0 - t * 0.3, c3.1), (end, c3.1), t, false); + let mut out = MathBox::default(); + out.path(sign); + if let Some(d) = deg { + // The degree sits in the notch above the hook: its baseline just clear of the tick's + // top, its right edge a little past the tick's end. + let dx = (c1.0 - d.w + 0.05 * sz).max(0.0); + let dy = hook_y - 0.12 * sz - d.desc; + out.put(d, dx, dy); + } + out.put(body, end_body, 0.0); + out.w = end; + out + } + + fn scripts(&self, base: MathBox, sub: Option, sup: Option, is_char: bool, st: St) -> MathBox { + self.scripts_tucked(base, sub, sup, is_char, st, 0.0) + } + + /// [`scripts`](Self::scripts) with the scripts pulled `tuck` (a fraction of the base's height) + /// towards the base's middle: a tall slanted integral sign has its ink at the centre. + fn scripts_tucked(&self, base: MathBox, sub: Option, sup: Option, is_char: bool, st: St, tuck: f64) -> MathBox { + let sz = self.size * st.factor(); + let ssz = sz * 0.7; + let xh = self.x_height(sz); + let t = 0.06 * sz; + let bw = base.w; + let (basc, bdesc) = (base.asc, base.desc); + let mut out = MathBox::default(); + out.put(base, 0.0, 0.0); + out.w = bw; + let sup_min = if st == St::Display { 0.413 } else { 0.363 } * sz; + let mut u = if is_char { 0.0 } else { basc - 0.386 * ssz - tuck * basc }; + let mut v = if is_char { 0.0 } else { bdesc + 0.05 * ssz - tuck * bdesc }; + let x = bw + 0.02 * sz; + let mut width = bw; + match (sub, sup) { + (None, None) => {} + (None, Some(sp)) => { + u = u.max(sup_min).max(sp.desc + 0.25 * xh); + width = x + sp.w; + out.put(sp, x, -u); + } + (Some(sb), None) => { + v = v.max(0.15 * sz).max(sb.asc - 0.8 * xh); + width = x + sb.w; + out.put(sb, x, v); + } + (Some(sb), Some(sp)) => { + u = u.max(sup_min).max(sp.desc + 0.25 * xh); + v = v.max(0.247 * sz).max(sb.asc - 0.8 * xh); + let clear = (u - sp.desc) - (sb.asc - v); + if clear < 4.0 * t { + v += 4.0 * t - clear; + let psi = 0.8 * xh - (u - sp.desc); + if psi > 0.0 { + u += psi; + v -= psi; + } + } + width = x + sp.w.max(sb.w); + out.put(sp, x, -u); + out.put(sb, x, v); + } + } + out.w = width + 0.02 * sz; + out + } + + /// Limits centred over and under a base (display-style big operators, `limLow`/`limUpp`). + fn limits(&self, base: MathBox, below: Option, above: Option, sz: f64) -> MathBox { + // Big-operator spacing: the limits sit close to the operator's ink. + let gap = 0.12 * sz; + let w = base.w.max(below.as_ref().map(|b| b.w).unwrap_or(0.0)).max(above.as_ref().map(|b| b.w).unwrap_or(0.0)); + let (bw, basc, bdesc) = (base.w, base.asc, base.desc); + let mut out = MathBox::default(); + out.put(base, (w - bw) / 2.0, 0.0); + if let Some(a) = above { + let aw = a.w; + let dy = -(basc + gap + a.desc); + out.put(a, (w - aw) / 2.0, dy); + } + if let Some(b) = below { + let bwid = b.w; + let dy = bdesc + gap + b.asc; + out.put(b, (w - bwid) / 2.0, dy); + } + out.w = w + 0.1 * sz; + out + } + + /// A stretchy grouping mark drawn across `w`: a brace or an arrow. Its origin is the edge + /// nearest the text; it grows downward for an under-mark and upward for an over-mark. + fn group_shape(&self, ch: char, w: f64, sz: f64, top: bool) -> Option { + let t = (self.hbar(sz) * 1.1).max(0.045 * sz); + let w = w.max(0.5 * sz); + let mut b = MathBox::default(); + match ch { + '\u{23DE}' | '\u{23DF}' | '\u{23B4}' | '\u{23B5}' => { + let h = 0.4 * sz; + let r = (h / 2.0).min(w / 4.0 - t).max(0.02 * sz); + let (y0, ym) = (t / 2.0, t / 2.0 + r); + let hw = w / 2.0; + let mut cl = BezPath::new(); + let k = 0.5523 * r; + cl.move_to((t / 2.0, y0)); + cl.curve_to((t / 2.0, y0 + k), (t / 2.0 + r - k, ym), (t / 2.0 + r, ym)); + cl.line_to((hw - r, ym)); + cl.curve_to((hw - r + k, ym), (hw, ym + r - k), (hw, ym + r)); + cl.curve_to((hw, ym + r - k), (hw + r - k, ym), (hw + r, ym)); + cl.line_to((w - t / 2.0 - r, ym)); + cl.curve_to((w - t / 2.0 - r + k, ym), (w - t / 2.0, y0 + k), (w - t / 2.0, y0)); + let stroke = kurbo::Stroke::new(t).with_caps(kurbo::Cap::Butt).with_join(kurbo::Join::Round); + b.path(kurbo::stroke(cl.elements().iter().copied(), &stroke, &kurbo::StrokeOpts::default(), 0.05)); + // Keep the full height even if the stroke bounds are a hair smaller. + b.asc = 0.0; + b.desc = 2.0 * r + t; + b.w = w; + } + '\u{2192}' | '\u{2190}' | '\u{2194}' => { + let head = 0.26 * sz; + let y = 0.17 * sz + t; + let (x0, x1) = (0.02 * sz, w - 0.02 * sz); + let mut p = BezPath::new(); + add_segment(&mut p, (x0, y), (x1, y), t, false); + if ch != '\u{2190}' { + add_segment(&mut p, (x1, y), (x1 - head, y - 0.17 * sz), t, true); + add_segment(&mut p, (x1, y), (x1 - head, y + 0.17 * sz), t, true); + } + if ch != '\u{2192}' { + add_segment(&mut p, (x0, y), (x0 + head, y - 0.17 * sz), t, true); + add_segment(&mut p, (x0, y), (x0 + head, y + 0.17 * sz), t, true); + } + b.path(p); + b.asc = 0.0; + b.desc = 2.0 * y; + b.w = w; + } + _ => return None, + } + if top { + // Mirror about the near edge so the ends point down at the text. + for it in &mut b.items { + if let Item::Path(p) = it { + p.apply_affine(Affine::new([1.0, 0.0, 0.0, -1.0, 0.0, 0.0])); + } + } + std::mem::swap(&mut b.asc, &mut b.desc); + } + Some(b) + } + + /// Summation and product signs drawn as shapes, heavy and square like a typeset display + /// operator, centred on the math axis. `None` for other operators. + /// A right or left arrow drawn with a full-length shaft and a clear head (the text fonts' + /// own arrows are short and faint at script size). + fn arrow(&self, c: char, sz: f64) -> Option { + let dir = match c { + '\u{2192}' => 1.0, + '\u{2190}' => -1.0, + _ => return None, + }; + let t = (self.hbar(sz) * 0.9).max(0.035 * sz); + let w = 0.95 * sz; + let y = -self.axis(sz); + let (tail, tip) = if dir > 0.0 { (0.04 * sz, w - 0.02 * sz) } else { (w - 0.04 * sz, 0.02 * sz) }; + let head = 0.26 * sz; + let mut p = BezPath::new(); + add_segment(&mut p, (tail, y), (tip - dir * t, y), t, false); + add_segment(&mut p, (tip, y), (tip - dir * head, y - 0.17 * sz), t, true); + add_segment(&mut p, (tip, y), (tip - dir * head, y + 0.17 * sz), t, true); + let mut b = MathBox::default(); + b.path(p); + b.w = w; + Some(b) + } + + fn big_op(&self, c: char, display: bool, sz: f64) -> Option { + let h = if display { 1.7 * sz } else { 0.95 * sz }; + let top = -self.axis(sz) - h / 2.0; + let mut p = BezPath::new(); + let pad = 0.05 * sz; + let w; + match c { + '\u{2211}' => { + // Thin bars with small serifs, a thin upper diagonal and a heavy lower one. + w = 0.86 * h; + let tb = (self.hbar(sz) * 1.2).min(0.055 * h); + let at = |x: f64, y: f64| (pad + x, top + y); + let (sw, sh) = (0.045 * h, 0.11 * h); + add_poly(&mut p, &[at(0.0, 0.0), at(w, 0.0), at(w, sh), at(w - sw, sh), at(w - sw, tb), at(0.0, tb)]); + add_poly(&mut p, &[at(0.0, h), at(w, h), at(w, h - sh), at(w - sw, h - sh), at(w - sw, h - tb), at(0.0, h - tb)]); + let m = (0.56 * w, h / 2.0); + add_segment(&mut p, at(0.05 * w, tb * 0.5), at(m.0, m.1), 0.05 * h, true); + add_segment(&mut p, at(m.0, m.1), at(0.1 * w, h - tb * 0.5), 0.07 * h, true); + } + '\u{220F}' => { + w = 0.9 * h; + let (tb, lg) = (0.075 * h, 0.1 * h); + let at = |x: f64, y: f64| (pad + x, top + y); + add_poly(&mut p, &[at(0.0, 0.0), at(w, 0.0), at(w, tb), at(0.0, tb)]); + for x0 in [0.1 * w, 0.9 * w - lg] { + add_poly(&mut p, &[at(x0, 0.0), at(x0 + lg, 0.0), at(x0 + lg, h), at(x0, h)]); + } + add_poly( + &mut p, + &[at(0.04 * w, h - 0.07 * h), at(0.1 * w + lg + 0.05 * w, h - 0.07 * h), at(0.1 * w + lg + 0.05 * w, h), at(0.04 * w, h)], + ); + add_poly( + &mut p, + &[at(0.9 * w - lg - 0.05 * w, h - 0.07 * h), at(0.96 * w, h - 0.07 * h), at(0.96 * w, h), at(0.9 * w - lg - 0.05 * w, h)], + ); + } + _ => return None, + } + let mut b = MathBox::default(); + b.path(p); + b.w = w + 2.0 * pad; + Some(b) + } + + /// Parentheses, braces and angle brackets drawn as shapes of the requested height: matched + /// strokes at every size instead of a scaled text glyph. + fn path_delim(&self, c: char, target: f64, sz: f64) -> Option { + let (top, bot) = (-self.axis(sz) - target / 2.0, -self.axis(sz) + target / 2.0); + let pad = 0.06 * sz; + let mut b = MathBox::default(); + match c { + '(' | ')' => { + let open = c == '('; + // Proportions follow the font's own parenthesis: its width sets the belly, the + // stem of `|` the weight; taller shapes only deepen the belly slowly. + let (gw, gh) = self.ink_em('(').unwrap_or((0.2, 0.9)); + let grow = (target / (gh * sz).max(1e-6) - 1.0).clamp(0.0, 4.0); + let thick = self.stem(sz) * 2.1; + let tip = (thick * 0.25).max(0.4); + let bulge = ((gw * sz - tip).max(0.09 * sz) * (1.25 + 0.15 * grow)).min(0.34 * sz); + let wid = bulge + tip; + let x = if open { pad + wid } else { pad }; + b.path(paren_path(open, x, top, bot, bulge, thick, tip)); + b.w = 2.0 * pad + wid; + } + '{' | '}' => { + let open = c == '{'; + let sw = self.stem(sz) * 1.3; + let wid = 0.3 * sz; + let (mid, q) = ((top + bot) / 2.0, (target * 0.12).min(0.3 * sz).max(0.12 * sz)); + // Centre line in a box of width `wid`, drawn for `{` and mirrored for `}`. + let fx = |x: f64| if open { pad + sw / 2.0 + x } else { pad + wid - sw / 2.0 - x }; + let xs = 0.5 * wid; // stem column + let xt = wid - sw; // tip column (outer end of the arms) + let (t0, b0) = (top + sw / 2.0, bot - sw / 2.0); + let mut cl = BezPath::new(); + cl.move_to((fx(xt), t0)); + cl.curve_to((fx(xs), t0), (fx(xs), t0 + q * 0.2), (fx(xs), t0 + q)); + cl.line_to((fx(xs), mid - q)); + cl.curve_to((fx(xs), mid - q * 0.2), (fx(0.0), mid), (fx(0.0), mid)); + cl.curve_to((fx(xs), mid), (fx(xs), mid + q * 0.2), (fx(xs), mid + q)); + cl.line_to((fx(xs), b0 - q)); + cl.curve_to((fx(xs), b0 - q * 0.2), (fx(xs), b0), (fx(xt), b0)); + let st = kurbo::Stroke::new(sw).with_caps(kurbo::Cap::Butt).with_join(kurbo::Join::Round); + b.path(kurbo::stroke(cl.elements().iter().copied(), &st, &kurbo::StrokeOpts::default(), 0.05)); + b.w = 2.0 * pad + wid; + } + '\u{27E8}' | '\u{27E9}' | '\u{2329}' | '\u{232A}' => { + let open = matches!(c, '\u{27E8}' | '\u{2329}'); + let sw = self.stem(sz).max(0.4) * 1.4; + let wid = (0.12 * sz + 0.1 * target).min(0.4 * sz); + let (a, z) = if open { (pad + wid, pad) } else { (pad, pad + wid) }; + let mid = (top + bot) / 2.0; + let mut p = BezPath::new(); + add_segment(&mut p, (a, top), (z, mid), sw, true); + add_segment(&mut p, (z, mid), (a, bot), sw, true); + b.path(p); + b.w = 2.0 * pad + wid; + } + _ => return None, + } + Some(b) + } + + fn delimiters(&self, open: &str, close: &str, sep: &str, items: Vec, sz: f64) -> MathBox { + let axis = self.axis(sz); + let (mut asc, mut desc) = (0.0f64, 0.0f64); + for b in &items { + asc = asc.max(b.asc); + desc = desc.max(b.desc); + } + let half = (asc - axis).max(desc + axis).max(0.0); + // Brackets enclose their content: as tall as it, plus a hair of overshoot. + let target = (2.0 * half + 0.05 * sz).max(sz); + // Drawn (stretched) delimiters overshoot the content a little, like extensible ones. + let big = target + 0.16 * sz; + let make = |s: &str| -> Option { + let c = s.chars().find(|c| !c.is_whitespace())?; + // Around ordinary text a bracket is the font's own glyph, so it matches the text. + if matches!(c, '(' | ')' | '{' | '}') + && let Some((_, gh)) = self.ink_em(c) + && target <= gh * sz * 1.3 + { + return Some(self.stretch(c, target, sz)); + } + Some(self.rule_delim(c, big, sz).or_else(|| self.path_delim(c, big, sz)).unwrap_or_else(|| self.stretch(c, big, sz))) + }; + let mut parts = vec![]; + if let Some(o) = make(open) { + // A brace with nothing closing it (cases) keeps the rows a clear distance away. + let gap = if open.trim() == "{" && close.trim().is_empty() { 0.3 } else { 0.02 }; + parts.push(o); + parts.push(MathBox::space(gap * sz)); + } + let n = items.len(); + for (i, b) in items.into_iter().enumerate() { + parts.push(b); + if i + 1 < n { + parts.push(MathBox::space(0.1 * sz)); + // A bar separator stretches with the brackets; a comma or semicolon is plain text. + if sep.chars().all(|c| c.is_whitespace() || matches!(c, ',' | ';' | '\u{FF0C}')) { + parts.push(self.text(sep.trim(), Var::Upright, sz)); + } else if let Some(s) = make(sep) { + parts.push(s); + } + parts.push(MathBox::space(0.1 * sz)); + } + } + if let Some(c) = make(close) { + parts.push(MathBox::space(0.02 * sz)); + parts.push(c); + } + MathBox::row(parts) + } + + /// Delimiters drawn as rules (brackets, floors, ceilings, bars): crisp and as tall as asked. + fn rule_delim(&self, c: char, target: f64, sz: f64) -> Option { + let t = self.stem(sz) * 1.35; + let arm = 0.28 * sz; + let pad = 0.06 * sz; + let (top, bot) = (-self.axis(sz) - target / 2.0, -self.axis(sz) + target / 2.0); + let mut b = MathBox::default(); + match c { + '[' | '\u{230A}' | '\u{2308}' => { + b.rule(pad, top, pad + t, bot); + if c != '\u{230A}' { + b.rule(pad, top, pad + arm, top + t); + } + if c != '\u{2308}' { + b.rule(pad, bot - t, pad + arm, bot); + } + b.w = pad + arm + pad; + } + ']' | '\u{230B}' | '\u{2309}' => { + b.rule(pad + arm - t, top, pad + arm, bot); + if c != '\u{230B}' { + b.rule(pad, top, pad + arm, top + t); + } + if c != '\u{2309}' { + b.rule(pad, bot - t, pad + arm, bot); + } + b.w = pad + arm + pad; + } + '|' | '\u{2223}' => { + b.rule(pad, top, pad + t, bot); + b.w = 2.0 * pad + t; + } + '\u{2016}' | '\u{2225}' => { + b.rule(pad, top, pad + t, bot); + b.rule(pad + 2.0 * t, top, pad + 3.0 * t, bot); + b.w = 2.0 * pad + 3.0 * t; + } + _ => return None, + } + Some(b) + } + + fn matrix(&self, cells: Vec>, sz: f64) -> MathBox { + let axis = self.axis(sz); + let ncols = cells.iter().map(|r| r.len()).max().unwrap_or(0); + let mut col_w = vec![0.0f64; ncols]; + let mut row_h: Vec<(f64, f64)> = vec![]; + for r in &cells { + let (mut a, mut d) = (0.7 * sz, 0.3 * sz); + for (j, c) in r.iter().enumerate() { + if let Some(w) = col_w.get_mut(j) { + *w = w.max(c.w); + } + a = a.max(c.asc); + d = d.max(c.desc); + } + row_h.push((a, d)); + } + let col_gap = 1.0 * sz; + let row_gap = 0.2 * sz; + let total: f64 = row_h.iter().map(|(a, d)| a + d).sum::() + row_gap * row_h.len().saturating_sub(1) as f64; + let mut out = MathBox::default(); + let mut y_top = -(total / 2.0 + axis); + for (r, (a, d)) in cells.into_iter().zip(row_h) { + let base = y_top + a; + let mut x = 0.0; + for (j, c) in r.into_iter().enumerate() { + let cw = col_w.get(j).copied().unwrap_or(0.0); + let w = c.w; + out.put(c, x + (cw - w) / 2.0, base); + x += cw + col_gap; + } + y_top += a + d + row_gap; + } + out.asc = out.asc.max(total / 2.0 + axis); + out.desc = out.desc.max(total / 2.0 - axis); + out.w = col_w.iter().sum::() + col_gap * ncols.saturating_sub(1) as f64; + out + } + + fn accent(&self, ch: char, body: MathBox, sz: f64) -> MathBox { + let (w, asc, desc) = (body.w, body.asc, body.desc); + let t = (0.05 * sz).max(0.4); + let mut out = MathBox::default(); + let top = asc.max(self.x_height(sz)) + 0.05 * sz; + out.put(body, 0.0, 0.0); + let spacing = match ch { + '\u{302}' => Some('\u{2C6}'), + '\u{303}' => Some('\u{2DC}'), + '\u{307}' => Some('\u{2D9}'), + '\u{308}' => Some('\u{A8}'), + '\u{30C}' => Some('\u{2C7}'), + '\u{301}' => Some('\u{B4}'), + '\u{300}' => Some('`'), + '\u{306}' => Some('\u{2D8}'), + '\u{20D7}' => Some('\u{2192}'), + '\u{304}' | '\u{305}' => None, + c => Some(c), + }; + match spacing { + None => out.rule(0.0, -(top + t), w, -top), + Some(c) => { + let msz = sz * if c == '\u{2192}' { 0.7 } else { 1.0 }; + let g = self.text(&c.to_string(), Var::Upright, msz); + let face = self.pick(Var::Upright, c); + let gid = face.glyph_for(c); + let k = msz / face.upem.max(1.0); + // Ink bottom just above the body; the mark centred over it. + let bottom = self.ink(&face, gid).map(|(_, _, _, y1)| y1 * k).unwrap_or(-0.5 * sz); + let gw = g.w; + out.put(g, (w - gw) / 2.0, -top - bottom); + } + } + out.desc = out.desc.max(desc); + out.w = out.w.max(w); + out + } +} + +/// Lay out an equation at `size` points in `family` (bold when `bold`). +pub fn layout_math(fonts: &dyn MathFonts, m: &Math, family: &str, size: f64, bold: bool, display: bool) -> MathBox { + layout_math_wrapped(fonts, m, family, size, bold, display, f64::INFINITY) +} + +/// [`layout_math`], breaking the top-level row into lines no wider than `max_w` where it can +/// (after binary operators and relations first, between any two items when there is none). +pub fn layout_math_wrapped(fonts: &dyn MathFonts, m: &Math, family: &str, size: f64, bold: bool, display: bool, max_w: f64) -> MathBox { + let mut cur = size.clamp(0.5, 4000.0); + let floor = cur * 0.3; + let mut out = lay_once(fonts, m, family, cur, bold, display, max_w); + // Something unbreakable (a wide matrix) that still overflows the line: shrink it to fit, + // rather than letting the page clip it. + for _ in 0..3 { + if !(max_w.is_finite() && max_w > 0.0 && out.w > max_w * 1.001 && cur > floor) { + break; + } + cur = (cur * max_w / out.w * 0.98).max(floor); + out = lay_once(fonts, m, family, cur, bold, display, max_w); + } + out +} + +fn lay_once(fonts: &dyn MathFonts, m: &Math, family: &str, size: f64, bold: bool, display: bool, max_w: f64) -> MathBox { + let mut lay = Lay { + fonts, + faces: Faces::new(fonts, family), + size, + bold, + budget: NODE_BUDGET, + path: vec![], + cur: 0, + wrap: max_w, + brks: vec![], + nary_body: false, + thin_at: None, + }; + let st = if display { St::Display } else { St::Text }; + lay.seq(&m.body, st, 0) +} + +/// An equation laid out on its own (the equation editor's canvas), with the geometry that +/// carets, selections and mouse clicks need. Coordinates are points from the top-left corner. +pub struct EqLayout { + /// Glyphs, rules and shapes, ready for the renderers (its size is the canvas size). + pub scene: Scene, + geo: Vec, + baseline: f64, +} + +impl EqLayout { + /// Canvas width, points (padding included). + pub fn width(&self) -> f64 { + self.scene.width + } + + /// Canvas height, points (padding included). + pub fn height(&self) -> f64 { + self.scene.height + } + + /// The equation's baseline, points from the top of the canvas. + pub fn baseline(&self) -> f64 { + self.baseline + } + + fn row(&self, path: &[(usize, usize)]) -> Option<&SeqGeo> { + self.geo.iter().find(|g| g.path == path) + } + + /// The thin rectangle of the caret at `c`; `None` when the row was not laid out (too deep). + pub fn caret_rect(&self, c: &equashion_math::Caret) -> Option { + let g = self.row(&c.path)?; + let x = g.xs.get(c.pos).or(g.xs.last()).copied()?; + Some(Rect::new(x, g.top, x, g.bottom)) + } + + /// The box of the whole row at `path` (the active slot's highlight); `None` when the row was + /// not laid out. + pub fn row_rect(&self, path: &[(usize, usize)]) -> Option { + let g = self.row(path)?; + let (x0, x1) = (g.xs.first().copied()?, g.xs.last().copied()?); + Some(Rect::new(x0.min(x1), g.top, x0.max(x1), g.bottom)) + } + + /// The rectangle covering units `a..b` of the row at `path`. + pub fn span_rect(&self, path: &[(usize, usize)], a: usize, b: usize) -> Option { + let g = self.row(path)?; + let x0 = g.xs.get(a).or(g.xs.last()).copied()?; + let x1 = g.xs.get(b).or(g.xs.last()).copied()?; + Some(Rect::new(x0.min(x1), g.top, x0.max(x1), g.bottom)) + } + + /// Number of laid-out rows. + pub fn rows(&self) -> usize { + self.geo.len() + } + + /// The caret position nearest the point (x, y). + pub fn hit(&self, x: f64, y: f64) -> equashion_math::Caret { + hit_geo(&self.geo, x, y) + } +} + +/// The caret position nearest (x, y) among laid-out rows. +pub fn hit_geo(geo: &[SeqGeo], x: f64, y: f64) -> equashion_math::Caret { + const NEAR: f64 = 1.5; + let dist = |g: &SeqGeo| { + let (x0, x1) = (g.xs.first().copied().unwrap_or(0.0), g.xs.last().copied().unwrap_or(0.0)); + let dx = (x0 - x).max(x - x1).max(0.0); + let dy = (g.top - y).max(y - g.bottom).max(0.0); + dx.hypot(dy) + }; + let mut best: Option<(&SeqGeo, f64)> = None; + for g in geo { + let d = dist(g); + let better = match best { + None => true, + Some((b, bd)) => { + let (near, bnear) = (d <= NEAR, bd <= NEAR); + if near && bnear { + g.path.len() > b.path.len() + } else if near != bnear { + near + } else { + d < bd + } + } + }; + if better { + best = Some((g, d)); + } + } + let Some((g, _)) = best else { return equashion_math::Caret::default() }; + let pos = g.xs.iter().enumerate().min_by(|a, b| (a.1 - x).abs().total_cmp(&(b.1 - x).abs())).map_or(0, |(i, _)| i); + equashion_math::Caret { path: g.path.clone(), pos } +} + +/// Lay an equation out at `size` points in `family` with `pad` points around it, tall enough for +/// a caret even when it is empty. +pub fn layout_equation(fonts: &dyn MathFonts, m: &Math, family: &str, size: f64, display: bool, color: Rgb, pad: f64) -> EqLayout { + layout_equation_wrapped(fonts, m, family, size, display, color, pad, f64::INFINITY) +} + +/// [`layout_equation`], with the top-level row broken into lines no wider than `max_w` points +/// (and an unbreakable equation shrunk to fit), as [`layout_math_wrapped`] does. +pub fn layout_equation_wrapped( + fonts: &dyn MathFonts, + m: &Math, + family: &str, + size: f64, + display: bool, + color: Rgb, + pad: f64, + max_w: f64, +) -> EqLayout { + let b = layout_math_wrapped(fonts, m, family, size, false, display, max_w); + let sz = size.clamp(0.5, 4000.0); + // The canvas holds every caret too: a row's caret reaches a minimum depth below its baseline + // even when the row has no ink there (the `x` of a denominator), which WordCraft's canvas + // cut off by up to a point or two. + let geo_top = b.geo.iter().map(|g| -g.top).filter(|v| v.is_finite()).fold(0.0, f64::max); + let geo_bottom = b.geo.iter().map(|g| g.bottom).filter(|v| v.is_finite()).fold(0.0, f64::max); + let (asc, desc) = (b.asc.max(0.78 * sz).max(geo_top), b.desc.max(0.25 * sz).max(geo_bottom)); + let (ox, oy) = (pad, pad + asc); + let mut items = Vec::new(); + emit(&b, ox, oy, color, &mut items); + let geo = b + .geo + .iter() + .map(|g| SeqGeo { path: g.path.clone(), xs: g.xs.iter().map(|x| x + ox).collect(), top: g.top + oy, bottom: g.bottom + oy }) + .collect(); + EqLayout { scene: Scene { items, width: b.w + 2.0 * pad, height: asc + desc + 2.0 * pad }, geo, baseline: oy } +} + +type Key = (String, String, u64, bool, bool, u64); +/// A cached layout: the box, whether the equation is display math, and the justification of +/// display math (`left`, `right`, `center`, ...; from an `m:oMathPara` source). +pub type Cached = (Arc, bool, Option); + +/// What to lay out: stored OMML, or the typed linear form. +#[derive(Clone, Copy, Debug)] +pub enum Src<'a> { + Omml(&'a str), + Linear(&'a str), +} + +/// Laid-out equations by (source, family, size, weight, display, wrap width). WordCraft kept +/// this as a process-wide static; here the host owns one (or none) and passes it in. +#[derive(Default)] +pub struct LayoutCache { + map: HashMap, +} + +impl LayoutCache { + pub fn new() -> LayoutCache { + LayoutCache::default() + } + + /// Number of cached layouts. + pub fn len(&self) -> usize { + self.map.len() + } + + pub fn is_empty(&self) -> bool { + self.map.is_empty() + } + + /// Forget every cached layout (after the fonts change, say). + pub fn clear(&mut self) { + self.map.clear(); + } + + /// The laid-out box for an equation, cached by (source, family, size, weight). Returns the + /// box, whether the equation is display math (`solo` or an `m:oMathPara` source) and the + /// paragraph justification of display math (`left`, `right`, `center`, ...). + pub fn layout(&mut self, fonts: &dyn MathFonts, src: Src, family: &str, size: f64, bold: bool, solo: bool, max_w: f64) -> Cached { + let text = match src { + Src::Omml(x) => format!("O{x}"), + Src::Linear(x) => format!("L{x}"), + }; + let key: Key = (text, family.to_string(), size.to_bits(), bold, solo, max_w.to_bits()); + if let Some(hit) = self.map.get(&key) { + return hit.clone(); + } + let val = layout_src(fonts, src, family, size, bold, solo, max_w); + if self.map.len() >= CACHE_MAX { + self.map.clear(); + } + self.map.insert(key, val.clone()); + val + } +} + +/// [`LayoutCache::layout`] without a cache. +pub fn layout_src(fonts: &dyn MathFonts, src: Src, family: &str, size: f64, bold: bool, solo: bool, max_w: f64) -> Cached { + let m = match src { + Src::Omml(x) => from_omml(x), + Src::Linear(x) => equashion_math::from_linear(x), + }; + let display = m.para || solo; + (Arc::new(layout_math_wrapped(fonts, &m, family, size, bold, display, max_w)), display, m.jc.clone()) +} + +/// Emit a box with its origin at (x, baseline) as scene primitives. +pub fn emit(b: &MathBox, x: f64, baseline: f64, color: Rgb, out: &mut Vec) { + for it in &b.items { + match it { + Item::Glyphs(g) => out.push(Prim::Glyphs { + font: g.face.face_id(), + size: g.size as f32, + glyphs: g.glyphs.iter().map(|(id, gx, gy)| (*id, (x + gx) as f32, (baseline + gy) as f32)).collect(), + color, + synth_bold: g.fake_bold, + synth_italic: g.fake_italic, + }), + Item::Rule(r) => out.push(Prim::Rule(Rect::new(x + r.x0, baseline + r.y0, x + r.x1, baseline + r.y1), color)), + Item::Path(p) => { + let mut q = p.clone(); + q.apply_affine(Affine::translate((x, baseline))); + out.push(Prim::Path(q, color)); + } + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + use equashion_font::FontDb; + use equashion_math::from_linear; + + /// The bundled fonts only: no system fonts, so results do not depend on the machine. + fn fonts() -> &'static FontDb { + static DB: std::sync::OnceLock = std::sync::OnceLock::new(); + DB.get_or_init(FontDb::bundled_only) + } + + /// WordCraft's layout tests use Inter; so do these (Inter has only Regular bundled, so its + /// italic and bold are synthesised). + const FAMILY: &str = "Inter"; + + fn layout_math(m: &Math, _face: &str, size: f64, bold: bool, display: bool) -> MathBox { + super::layout_math(fonts(), m, FAMILY, size, bold, display) + } + + fn layout_math_wrapped(m: &Math, _face: &str, size: f64, bold: bool, display: bool, max_w: f64) -> MathBox { + super::layout_math_wrapped(fonts(), m, FAMILY, size, bold, display, max_w) + } + + fn face() -> &'static str { + FAMILY + } + + fn lay(lin: &str, display: bool) -> MathBox { + let m = from_linear(lin); + layout_math(&m, face(), 20.0, false, display) + } + + #[test] + fn plain_text_has_width_and_height() { + let b = lay("xy", false); + assert!(b.w > 0.0 && b.asc > 0.0); + assert!(b.glyph_items() >= 1); + } + + #[test] + fn a_trailing_differential_takes_a_thin_space() { + let with = lay("\\int_0^1 xdx", true); + let without = lay("\\int_0^1 xex", true); + assert!(with.w > without.w + 0.1 * 20.0, "dx is set off from the integrand"); + // Not an operator body: no space is added. + assert!((lay("xdx", false).w - lay("xex", false).w).abs() < 1.0); + } + + #[test] + fn cfrac_is_a_fraction_and_cases_keep_a_gap_after_the_brace() { + let f = lay("1+\\cfrac{1}{x}", false); + assert!(f.rules() >= 1, "cfrac draws a bar"); + let plain = lay("(x^2 & y)", false); + let cases = lay("\\begin{cases} x^2 & y \\\\ z & w \\end{cases}", false); + assert!(cases.w > plain.w + 0.5 * 20.0, "the brace and the columns are spaced"); + } + + #[test] + fn display_operators_are_large_and_the_root_degree_stays_by_the_hook() { + let d = lay("\\sum_{i=1}^n i", true); + let t = lay("\\sum_{i=1}^n i", false); + assert!(d.asc + d.desc > 1.5 * 20.0 * 1.6 / 1.4 * 0.9, "display sum is tall"); + assert!(d.asc + d.desc > t.asc + t.desc); + let r = lay("\\sqrt[3]{x}", false); + let r0 = lay("\\sqrt{x}", false); + assert!(r.asc < r0.asc + 0.9 * 20.0, "the degree does not float far above the bar"); + assert!(r.w > r0.w); + } + + #[test] + fn fraction_stacks_and_has_a_rule() { + let f = lay("a/b", false); + let flat = lay("ab", false); + assert!(f.rules() >= 1, "fraction bar"); + assert!(f.asc + f.desc > flat.asc + flat.desc); + assert!(f.w > 0.0); + } + + #[test] + fn scripts_raise_and_lower() { + let base = lay("x", false); + let sup = lay("x^2", false); + let sub = lay("x_2", false); + assert!(sup.w > base.w && sup.asc > base.asc); + assert!(sub.w > base.w && sub.desc > base.desc); + assert!(sup.max_size() >= 20.0 - 1e-9); + } + + #[test] + fn root_draws_a_bar_and_grows_with_content() { + let r = lay("sqrt(x)", false); + let tall = lay("sqrt(a/b)", false); + assert!(r.paths() >= 1, "radical sign and bar"); + assert!(tall.asc + tall.desc > r.asc + r.desc); + } + + #[test] + fn display_sum_puts_limits_above_and_below() { + let m = from_linear("sum_(i=1)^n i"); + let disp = layout_math(&m, face(), 20.0, false, true); + let text = layout_math(&m, face(), 20.0, false, false); + assert!(disp.asc + disp.desc > text.asc + text.desc, "display limits stack"); + assert!(disp.w > 0.0 && text.w > 0.0); + } + + #[test] + fn delimiters_grow_around_tall_content() { + let small = lay("(x)", false); + let big = lay("(a/b)", false); + assert_eq!(big.paths(), 2, "tall content gets drawn parentheses"); + assert!(small.paths() == 2 || small.paths() == 0, "text-height parentheses are glyphs or shapes"); + assert!(big.asc + big.desc > small.asc + small.desc); + } + + #[test] + fn matrix_is_taller_than_one_row() { + let m = lay("[a,b;c,d]", false); + let one = lay("[a,b]", false); + assert!(m.asc + m.desc > one.asc + one.desc); + assert!(m.w > 0.0); + } + + #[test] + fn tall_brackets_are_rules_that_enclose_the_content() { + let small = lay("[x]", false); + let big = lay("[a/b]", false); + assert!(small.rules() >= 6, "stem and two arms per bracket"); + assert!(big.rules() > small.rules(), "plus the fraction bar"); + let inner = lay("a/b", false); + assert!(big.asc + big.desc >= inner.asc + inner.desc); + } + + #[test] + fn delimiters_radicals_and_sums_are_drawn_shapes() { + let paren = lay("(x)", false); + assert_eq!(lay("(a/b)", false).paths(), 2, "one crescent per parenthesis"); + assert!(paren.paths() == 2 || paren.paths() == 0); + assert!(lay("sqrt(x)", false).paths() >= 1); + let sum = lay("sum_(i=1)^n i", true); + assert!(sum.paths() >= 1); + let o = "xy"; + let brace = layout_math(&from_omml(o), face(), 20.0, false, false); + assert!(brace.paths() >= 2); + // All shapes stay inside finite extents. + for b in [&paren, &sum, &brace] { + assert!(b.w.is_finite() && b.asc.is_finite() && b.desc.is_finite()); + } + } + + #[test] + fn parenthesis_matches_the_text_it_encloses() { + let m = layout_math(&from_linear("(12)"), face(), 24.0, false, false); + let digits = layout_math(&from_linear("12"), face(), 24.0, false, false); + assert!(m.asc + m.desc < (digits.asc + digits.desc) * 1.8, "no taller than needed"); + assert!(m.asc + m.desc > digits.asc + digits.desc, "still encloses the digits"); + } + + #[test] + fn script_size_operators_keep_a_space() { + let m = from_linear("a/(1+b)"); + let b = layout_math(&m, face(), 20.0, false, true); + let flat = layout_math(&from_linear("1b"), face(), 20.0, false, true); + assert!(b.w > flat.w); + } + + #[test] + fn deep_nesting_is_bounded() { + let s = format!("{}x{}", "(".repeat(5000), ")".repeat(5000)); + let b = lay(&s, false); + assert!(b.w.is_finite() && b.asc.is_finite()); + let s = "x^".repeat(3000); + let b = lay(&s, false); + assert!(b.w.is_finite()); + } + + #[test] + fn all_extents_are_finite_for_every_template() { + for t in equashion_math::templates() { + let b = layout_math(&t.math, face(), 18.0, false, true); + assert!(b.w.is_finite() && b.asc.is_finite() && b.desc.is_finite(), "{}", t.id); + assert!(b.w >= 0.0 && b.asc >= 0.0 && b.desc >= 0.0, "{}", t.id); + } + } + + #[test] + fn layout_cache_returns_the_same_box() { + let o = equashion_math::to_omml(&from_linear("a^2+b^2")); + let mut cache = LayoutCache::new(); + let a = cache.layout(fonts(), Src::Omml(&o), FAMILY, 24.0, false, false, f64::INFINITY).0; + let b = cache.layout(fonts(), Src::Omml(&o), FAMILY, 24.0, false, false, f64::INFINITY).0; + assert!(Arc::ptr_eq(&a, &b)); + assert_eq!(cache.len(), 1); + let c = cache.layout(fonts(), Src::Linear("a^2+b^2"), FAMILY, 24.0, false, false, f64::INFINITY).0; + assert_eq!(cache.len(), 2, "linear and OMML sources are cached apart"); + assert!((c.width() - a.width()).abs() < 1e-9, "the same equation either way"); + cache.clear(); + assert!(cache.is_empty()); + } + + #[test] + fn emit_places_glyphs_relative_to_origin() { + let b = lay("a/b", false); + let mut out = vec![]; + emit(&b, 100.0, 50.0, Rgb(0, 0, 0), &mut out); + assert!(out.iter().any(|d| matches!(d, Prim::Rule(..)))); + for d in &out { + match d { + Prim::Glyphs { glyphs, .. } => assert!(glyphs.iter().all(|g| g.1 >= 100.0 - 1e-3)), + Prim::Rule(rect, _) => assert!(rect.x0 >= 100.0 - 1e-3), + Prim::Path(..) => {} + } + } + } + + /// Every row path of a tree (the root included). + fn all_rows(seq: &[Node], path: &mut Vec<(usize, usize)>, out: &mut Vec>) { + out.push(path.clone()); + for (i, n) in seq.iter().enumerate() { + for (c, k) in equashion_math::children(n).into_iter().enumerate() { + path.push((i, c)); + all_rows(k, path, out); + path.pop(); + } + } + } + + fn eq(m: &Math) -> EqLayout { + layout_equation(fonts(), m, FAMILY, 28.0, false, Rgb(0, 0, 0), 6.0) + } + + #[test] + fn every_caret_position_of_every_template_has_a_rectangle() { + for t in equashion_math::templates() { + let mut ed = equashion_math::Editor::new(Math::default()); + ed.type_str("x+"); + ed.insert_template(&t.math); + ed.type_str("y"); + let shown = ed.display_math(); + let l = eq(&shown); + let mut rows = vec![]; + all_rows(&shown.body, &mut vec![], &mut rows); + for path in rows { + let Some(seq) = equashion_math::seq_at(&shown.body, &path) else { continue }; + let mut last_x = f64::MIN; + for pos in 0..=equashion_math::units(seq) { + let c = equashion_math::Caret { path: path.clone(), pos }; + let r = l.caret_rect(&c).unwrap_or_else(|| panic!("{}: no rect for {c:?}", t.id)); + assert!(r.x0.is_finite() && r.y1 > r.y0, "{}: {r:?}", t.id); + assert!( + r.x0 >= -0.5 && r.x0 <= l.width() + 0.5 && r.y0 >= -0.5 && r.y1 <= l.height() + 0.5, + "{}: {c:?} {r:?} in {}x{}", + t.id, + l.width(), + l.height() + ); + assert!(r.x0 >= last_x - 1e-6, "{}: carets run left to right in {path:?}", t.id); + last_x = r.x0; + } + } + } + } + + #[test] + fn script_carets_sit_higher_and_fraction_rows_stack() { + let mut ed = equashion_math::Editor::new(Math::default()); + ed.type_str("x^2"); + let l = eq(&ed.display_math()); + let sup = l.caret_rect(ed.caret()).unwrap_or_default(); + let base = l.caret_rect(&equashion_math::Caret { path: vec![], pos: 0 }).unwrap_or_default(); + assert!(sup.y0 <= base.y0 + 1e-6 && sup.y1 < base.y1 && sup.y1 - sup.y0 < base.y1 - base.y0, "{sup:?} {base:?}"); + let mut ed = equashion_math::Editor::new(Math::default()); + ed.type_str("a/b"); + let l = eq(&ed.display_math()); + let den = l.caret_rect(ed.caret()).unwrap_or_default(); + let num = l.caret_rect(&equashion_math::Caret { path: vec![(0, 0)], pos: 0 }).unwrap_or_default(); + assert!(num.y1 <= den.y0 + 1.0, "numerator above denominator: {num:?} {den:?}"); + } + + #[test] + fn clicking_a_caret_rectangle_returns_that_caret() { + let mut ed = equashion_math::Editor::new(Math::default()); + ed.type_str("1+x^2/sqrt"); + ed.type_str("y"); + let shown = ed.display_math(); + let l = eq(&shown); + let mut rows = vec![]; + all_rows(&shown.body, &mut vec![], &mut rows); + let mut checked = 0; + for path in rows { + let Some(seq) = equashion_math::seq_at(&shown.body, &path) else { continue }; + // Not the boundary shared by two neighbours; the middle of a row is unambiguous. + let n = equashion_math::units(seq); + for pos in 0..=n { + let c = equashion_math::Caret { path: path.clone(), pos }; + let Some(r) = l.caret_rect(&c) else { continue }; + let (cx, cy) = (r.x0, (r.y0 + r.y1) / 2.0); + let got = l.hit(cx, cy); + // The same place can be reached from two rows (end of one, start of the next); + // it must at least be at the same x. + let gr = l.caret_rect(&got).unwrap_or_default(); + assert!((gr.x0 - cx).abs() < 2.0, "{c:?} -> {got:?}"); + checked += 1; + } + } + assert!(checked > 8); + // Far outside lands on the nearest end of the top row. + assert_eq!(l.hit(-500.0, 0.0), equashion_math::Caret { path: vec![], pos: 0 }); + assert_eq!(l.hit(5000.0, 0.0).path, Vec::<(usize, usize)>::new()); + } + + #[test] + fn an_empty_equation_still_has_a_caret_row() { + let l = eq(&Math::default()); + assert_eq!(l.rows(), 1); + assert!(l.caret_rect(&equashion_math::Caret::default()).is_some()); + assert!(l.height() > 10.0); + } + + #[test] + fn layout_geometry_survives_deep_trees() { + let mut node = Node::Text("x".into()); + for _ in 0..(MAX_DEPTH * 3) { + node = Node::Bar { top: true, body: vec![node] }; + } + let l = eq(&Math::new(vec![node])); + assert!(l.rows() <= MAX_DEPTH + 2); + let _ = l.hit(10.0, 10.0); + } + + #[test] + fn explicit_spaces_have_their_widths() { + let plain = lay("ab", false).w; + let thin = lay(r"a\,b", false).w; + let quad = lay(r"a\quad b", false).w; + assert!(thin > plain + 1.0, "thin {thin} vs {plain}"); + assert!(quad > thin + 8.0, "quad {quad} vs {thin}"); + } + + #[test] + fn a_fraction_takes_a_thin_space_from_what_follows() { + let f = lay("a/b", false).w; + let x = lay("x", false).w; + let both = lay("a/b x", false).w; + assert!(both > f + x + 1.0, "{both} vs {f}+{x}"); + } + + #[test] + fn a_differential_after_a_thin_space_is_not_spaced_twice() { + let one = lay(r"\int f\,dx", false).w; + let none = lay(r"\int f dx", false).w; + assert!((one - none).abs() < 1.0, "{one} vs {none}"); + } + + #[test] + fn arrows_are_drawn_full_length() { + let a = lay("x->0", false); + assert!(a.paths() >= 1, "arrow is a shape"); + assert!(a.w > lay("x=0", false).w * 0.8); + } + + #[test] + fn a_broken_inline_equation_reports_its_last_line() { + let m = from_linear(&"a+b+c+d+e+f+".repeat(8)); + let b = layout_math_wrapped(&m, face(), 20.0, false, false, 120.0); + let lw = b.last_line_width().expect("wrapped"); + assert!(lw > 0.0 && lw <= b.w + 1e-9); + // The last line sits on the baseline: the lines above raise the box. + assert!(b.asc > 30.0); + let one = layout_math_wrapped(&m, face(), 20.0, false, false, f64::INFINITY); + assert!(one.last_line_width().is_none()); + } + + #[test] + fn braces_span_the_operand_and_the_label_is_centred() { + let body = lay("a+b+c+d", false); + let b = lay(r"\underbrace{a+b+c+d}_{n}", false); + assert_eq!(b.paths(), 1, "one drawn brace, no separate rule"); + assert_eq!(b.rules(), 0); + let brace = b.items.iter().find_map(|i| if let Item::Path(p) = i { Some(p.bounding_box()) } else { None }).expect("brace"); + assert!((brace.width() - body.w).abs() < 0.1 * body.w, "brace {} vs operand {}", brace.width(), body.w); + // The label sits below the brace, centred. + let label = b.items.iter().rev().find_map(|i| if let Item::Glyphs(g) = i { g.glyphs.first().copied() } else { None }).expect("label"); + assert!(label.2 > brace.y1 - 0.5, "label below the brace"); + assert!((label.1 - body.w / 2.0).abs() < 0.15 * body.w); + let o = lay(r"\overbrace{a+b}^{m}", false); + assert!(o.asc > lay("a+b", false).asc + 5.0, "label above the brace"); + } + + #[test] + fn arrows_over_a_base_span_the_whole_base() { + let b = lay(r"\overrightarrow{AB}", false); + let base = lay("AB", false); + let p = b.items.iter().find_map(|i| if let Item::Path(p) = i { Some(p.bounding_box()) } else { None }).expect("arrow"); + assert!(p.width() > 0.9 * base.w, "arrow {} vs base {}", p.width(), base.w); + } + + #[test] + fn a_wide_unbreakable_matrix_is_shrunk_to_the_line() { + let row = (0..30).map(|j| format!("a_{j}")).collect::>().join("&"); + let m = from_linear(&format!("matrix({row})")); + let free = layout_math_wrapped(&m, face(), 20.0, false, true, f64::INFINITY); + assert!(free.w > 468.0); + let fit = layout_math_wrapped(&m, face(), 20.0, false, true, 468.0); + assert!(fit.w <= 468.0 * 1.01, "{}", fit.w); + } + + #[test] + fn a_display_integral_is_about_two_em_and_hugs_its_limit() { + let b = lay(r"\oint_C f", true); + assert!(b.asc + b.desc < 2.9 * 20.0, "{}", b.asc + b.desc); + } +} diff --git a/crates/equashion-layout/src/scene.rs b/crates/equashion-layout/src/scene.rs new file mode 100644 index 00000000..512b28be --- /dev/null +++ b/crates/equashion-layout/src/scene.rs @@ -0,0 +1,37 @@ +//! The backend-neutral output of equation layout: a list of filled primitives in points, y down, +//! origin at the top-left corner. `equashion-render` turns it into pixels or SVG; a web or egui +//! host can draw it directly. + +use equashion_font::FaceId; + +/// An sRGB colour, 8 bits per channel (the layout's colour; WordCraft took it from its +/// document model). +#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)] +pub struct Rgb(pub u8, pub u8, pub u8); + +impl Rgb { + pub const BLACK: Rgb = Rgb(0, 0, 0); + pub const WHITE: Rgb = Rgb(255, 255, 255); +} + +/// A laid-out equation (or anything else drawn from these primitives). +#[derive(Clone, Debug, Default)] +pub struct Scene { + pub items: Vec, + /// Canvas size, points. + pub width: f64, + pub height: f64, +} + +/// One filled primitive. +#[derive(Clone, Debug)] +pub enum Prim { + /// Glyphs of one face at one size. Each glyph is `(glyph id, x, baseline y)` in points. + /// `synth_bold` asks the backend to embolden (stroke the outline as well as filling it), + /// `synth_italic` to slant it (the face has no real bold or italic). + Glyphs { font: FaceId, size: f32, glyphs: Vec<(u32, f32, f32)>, color: Rgb, synth_bold: bool, synth_italic: bool }, + /// A filled rectangle: fraction bars, overbars, box borders, bracket strokes. + Rule(kurbo::Rect, Rgb), + /// A filled shape (non-zero winding): radical signs, stretched delimiters, big operators. + Path(kurbo::BezPath, Rgb), +} diff --git a/crates/equashion-layout/src/tests.rs b/crates/equashion-layout/src/tests.rs new file mode 100644 index 00000000..4258eb5c --- /dev/null +++ b/crates/equashion-layout/src/tests.rs @@ -0,0 +1,101 @@ +//! Equation tests ported from WordCraft `crates/layout/src/tests.rs`. Upstream they put an +//! equation into a paragraph and inspected the paragraph layout; here they call +//! [`layout_equation`] and [`layout_math_wrapped`] directly. The paragraph-only checks +//! (centring a display equation on its line, justification of the line before it, line padding) +//! have no counterpart without a paragraph layout and were not ported (see PROVENANCE.md). + +use std::sync::OnceLock; + +use equashion_math::{Caret, Math, from_linear, from_omml}; + +use super::*; + +fn fonts() -> &'static FontDb { + static DB: OnceLock = OnceLock::new(); + DB.get_or_init(FontDb::bundled_only) +} + +/// WordCraft's default body text size, points. +const BODY: f64 = 11.0; + +fn eq(m: &Math, display: bool) -> EqLayout { + layout_equation(fonts(), m, DEFAULT_FAMILY, BODY, display, Rgb::BLACK, 0.0) +} + +#[test] +fn an_equation_is_taller_than_text_and_draws_glyphs_a_bar_and_a_radical() { + // Upstream: inline_equation_is_one_char_cluster_taller_than_text. + let plain = eq(&from_linear("ab"), false); + let l = eq(&from_linear("x^2/sqrt(y)"), false); + assert!(l.width() > 10.0, "{}", l.width()); + assert!(l.height() > plain.height(), "a fraction-with-root is taller than plain text"); + let items = &l.scene.items; + assert!(items.iter().any(|i| matches!(i, Prim::Glyphs { .. })), "glyphs"); + assert!(items.iter().any(|i| matches!(i, Prim::Rule(..))), "fraction bar"); + assert!(items.iter().any(|i| matches!(i, Prim::Path(..))), "radical"); + // Carets before and after the equation are its width apart. + let end = equashion_math::units(&from_linear("x^2/sqrt(y)").body); + let (a, b) = (l.caret_rect(&Caret { path: vec![], pos: 0 }).unwrap(), l.caret_rect(&Caret { path: vec![], pos: end }).unwrap()); + assert!((b.x0 - a.x0 - l.width()).abs() < 0.01, "{a:?} {b:?} {}", l.width()); +} + +#[test] +fn equations_from_broken_omml_or_hostile_text_lay_out() { + // Upstream: equations_from_omml_or_hostile_text_lay_out. + let broken = from_omml(""); + for m in [broken, from_linear(""), from_linear("((((((((("), from_linear(&"x^".repeat(5000)), from_linear("\u{0}\u{1}\u{FFFE}")] { + for display in [false, true] { + let l = eq(&m, display); + assert!(l.width().is_finite() && l.height().is_finite() && l.height() > 0.0); + assert!(l.caret_rect(&Caret::default()).is_some()); + } + } +} + +#[test] +fn a_long_inline_equation_breaks_at_operators_within_the_line() { + // Upstream: long_inline_equation_breaks_at_operators_within_the_line (a 6.5in line). + let line = 468.0; + let m = from_linear(&["abc"; 200].join("+")); + let b = layout_math_wrapped(fonts(), &m, DEFAULT_FAMILY, BODY, false, false, line); + assert!(b.width() <= line + 0.5, "{} wider than the line", b.width()); + assert!(b.ascent() + b.descent() > 4.0 * BODY, "several rows tall"); + assert!(b.last_line_width().is_some_and(|w| w > 0.0 && w <= b.width())); + // Every glyph of the scene stays inside the line. + let mut items = vec![]; + emit(&b, 0.0, b.ascent(), Rgb::BLACK, &mut items); + for it in &items { + if let Prim::Glyphs { glyphs, .. } = it { + for g in glyphs { + assert!(f64::from(g.1) < line, "glyph at {} beyond the line", g.1); + } + } + } + // An equation with no operator to break at still wraps between its items. + let m2 = from_linear(&"x^2 ".repeat(300)); + let b2 = layout_math_wrapped(fonts(), &m2, DEFAULT_FAMILY, BODY, false, false, line); + assert!(b2.width() < 500.0, "{}", b2.width()); +} + +#[test] +fn a_display_equation_is_laid_out_in_display_style() { + // What remains of display_equation_line_has_room_above_and_below without a paragraph: + // display style makes a fraction taller than inline style does. + let m = from_linear("x/y"); + let (inline, display) = (eq(&m, false), eq(&m, true)); + assert!(display.height() > inline.height(), "{} vs {}", display.height(), inline.height()); +} + +#[test] +fn the_default_family_is_used_and_named() { + let l = eq(&from_linear("x+1"), false); + let faces: Vec<_> = l + .scene + .items + .iter() + .filter_map(|i| if let Prim::Glyphs { font, .. } = i { fonts().face_by_id(*font) } else { None }) + .map(|f| f.family.clone()) + .collect(); + assert!(!faces.is_empty()); + assert!(faces.iter().all(|f| f == DEFAULT_FAMILY), "{faces:?}"); +} diff --git a/crates/equashion-layout/tests/corpus.rs b/crates/equashion-layout/tests/corpus.rs new file mode 100644 index 00000000..83742baf --- /dev/null +++ b/crates/equashion-layout/tests/corpus.rs @@ -0,0 +1,130 @@ +//! Property test over the shared corpus: every caret position of every corpus equation (linear +//! rows and OMML samples) has a finite caret rectangle inside the canvas, and clicking it comes +//! back to a caret at the same place. The same property over every template is the unit test +//! `every_caret_position_of_every_template_has_a_rectangle` in `src/math.rs`. +#![allow(clippy::unwrap_used, clippy::expect_used, clippy::panic)] + +use std::path::PathBuf; +use std::sync::OnceLock; + +use equashion_layout::{DEFAULT_FAMILY, EqLayout, FontDb, Rgb, layout_equation}; +use equashion_math::{Caret, Math, Node, children, from_linear, from_omml, seq_at, units}; + +fn fonts() -> &'static FontDb { + static DB: OnceLock = OnceLock::new(); + DB.get_or_init(FontDb::bundled_only) +} + +fn corpus_dir() -> PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../../corpus") +} + +fn corpus() -> Vec<(String, Math, bool)> { + let text = std::fs::read_to_string(corpus_dir().join("equations.tsv")).unwrap(); + let mut v: Vec<(String, Math, bool)> = text + .lines() + .filter(|l| !l.trim().is_empty() && !l.starts_with('#')) + .map(|l| { + let f: Vec<&str> = l.split('\t').collect(); + (f[0].to_string(), from_linear(f[1]), f[2].trim() == "1") + }) + .collect(); + let mut files: Vec<_> = std::fs::read_dir(corpus_dir().join("omml")).unwrap().flatten().map(|e| e.path()).collect(); + files.sort(); + for p in files { + let m = from_omml(&std::fs::read_to_string(&p).unwrap()); + let display = m.para; + v.push((p.file_name().unwrap().to_string_lossy().to_string(), m, display)); + } + v +} + +/// Every row path of a tree (the root included). +fn all_rows(seq: &[Node], path: &mut Vec<(usize, usize)>, out: &mut Vec>) { + out.push(path.clone()); + for (i, n) in seq.iter().enumerate() { + for (c, k) in children(n).into_iter().enumerate() { + path.push((i, c)); + all_rows(k, path, out); + path.pop(); + } + } +} + +fn check(id: &str, m: &Math, l: &EqLayout) -> usize { + let mut rows = vec![]; + all_rows(&m.body, &mut vec![], &mut rows); + let mut n = 0; + for path in rows { + let Some(seq) = seq_at(&m.body, &path) else { continue }; + for pos in 0..=units(seq) { + let c = Caret { path: path.clone(), pos }; + let r = l.caret_rect(&c).unwrap_or_else(|| panic!("{id}: no rect for {c:?}")); + assert!(r.x0.is_finite() && r.y0.is_finite() && r.y1.is_finite() && r.y1 > r.y0, "{id}: {c:?} {r:?}"); + assert!( + r.x0 >= -0.5 && r.x0 <= l.width() + 0.5 && r.y0 >= -0.5 && r.y1 <= l.height() + 0.5, + "{id}: {c:?} {r:?} outside {}x{}", + l.width(), + l.height() + ); + let got = l.hit(r.x0, (r.y0 + r.y1) / 2.0); + let gr = l.caret_rect(&got).unwrap_or_else(|| panic!("{id}: hit gave {got:?} with no rect")); + assert!((gr.x0 - r.x0).abs() < 2.0, "{id}: {c:?} -> {got:?}"); + n += 1; + } + } + n +} + +#[test] +fn every_caret_position_of_every_corpus_equation_has_a_finite_rect() { + let mut total = 0; + for (id, m, display) in corpus() { + for size in [11.0, 24.0] { + let l = layout_equation(fonts(), &m, DEFAULT_FAMILY, size, display, Rgb::BLACK, 4.0); + total += check(&id, &m, &l); + } + } + assert!(total > 500, "{total} caret positions checked"); +} + +/// Source Serif 4 and Inter lack these math symbols; the bundled STIX Two Math covers them, +/// so `bundled_only` (no system fallback) draws them from it. This used to be a pin of the gap +/// (.notdef boxes in the goldens) before STIX Two Math was bundled. +#[test] +fn symbols_the_text_faces_lack_resolve_to_stix_two_math() { + let db = fonts(); + let regular = db.face(DEFAULT_FAMILY, "Regular"); + for c in ['\u{2207}', '\u{222E}', '\u{2308}', '\u{2309}', '\u{230A}', '\u{230B}', '\u{27E8}', '\u{27E9}'] { + assert!(!regular.covers(c), "{c} is now in Source Serif 4: simplify this test"); + let f = db.fallback_for(c, regular.id()).unwrap_or_else(|| panic!("no face for {c}")); + assert_eq!(f.family, "STIX Two Math", "{c}"); + assert_ne!(f.glyph_for(c), 0, "{c}"); + } +} + +/// Every character of every corpus equation has a face, and no laid-out corpus equation draws a +/// .notdef glyph (glyph id 0). +#[test] +fn no_corpus_equation_draws_a_missing_glyph() { + let db = fonts(); + let regular = db.face(DEFAULT_FAMILY, "Regular"); + let mut missing: Vec = corpus() + .iter() + .flat_map(|(_, m, _)| equashion_math::to_linear(m).chars().collect::>()) + .filter(|c| !c.is_ascii() && !c.is_whitespace() && !regular.covers(*c) && db.fallback_for(*c, regular.id()).is_none()) + .collect(); + missing.sort_unstable(); + missing.dedup(); + assert_eq!(missing, Vec::::new(), "characters no bundled font covers"); + for (id, m, display) in corpus() { + let l = layout_equation(db, &m, DEFAULT_FAMILY, 24.0, display, Rgb::BLACK, 4.0); + let notdef: usize = l + .scene + .items + .iter() + .map(|p| if let equashion_layout::Prim::Glyphs { glyphs, .. } = p { glyphs.iter().filter(|g| g.0 == 0).count() } else { 0 }) + .sum(); + assert_eq!(notdef, 0, "{id}: .notdef glyphs drawn"); + } +} diff --git a/crates/equashion-math/Cargo.toml b/crates/equashion-math/Cargo.toml new file mode 100644 index 00000000..09aedf31 --- /dev/null +++ b/crates/equashion-math/Cargo.toml @@ -0,0 +1,25 @@ +[package] +name = "equashion-math" +version.workspace = true +edition.workspace = true +license.workspace = true +description = "equaSHion equations: math tree, OMML import/export, linear (typed) format, templates, edit model" + +[lints.rust] +unsafe_code = "forbid" + +[lints.clippy] +dbg_macro = "warn" +todo = "warn" +too_many_arguments = "allow" +type_complexity = "allow" +unwrap_used = "deny" +expect_used = "deny" +panic = "deny" +unimplemented = "deny" +unreachable = "deny" + +[dependencies] +serde = { workspace = true } +quick-xml = { workspace = true } +serde_json = { workspace = true } diff --git a/crates/equashion-math/examples/latex_corpus.rs b/crates/equashion-math/examples/latex_corpus.rs new file mode 100644 index 00000000..226176e3 --- /dev/null +++ b/crates/equashion-math/examples/latex_corpus.rs @@ -0,0 +1,8 @@ +//! Prints `inputto_latex(from_linear(input))` for each line of the file given as argument. +fn main() { + let path = std::env::args().nth(1).unwrap_or_default(); + let src = std::fs::read_to_string(&path).unwrap_or_default(); + for l in src.lines().filter(|l| !l.is_empty()) { + println!("{l}\t{}", equashion_math::to_latex(&equashion_math::from_linear(l))); + } +} diff --git a/crates/equashion-math/examples/typed.rs b/crates/equashion-math/examples/typed.rs new file mode 100644 index 00000000..e7dbaa20 --- /dev/null +++ b/crates/equashion-math/examples/typed.rs @@ -0,0 +1,11 @@ +//! `cargo run -p equashion-math --example typed -- 'sqrt(x)+1/2'`: type each argument into an +//! empty editor and print the resulting tree as linear text and LaTeX. +use equashion_math::{Editor, Math}; + +fn main() { + for s in std::env::args().skip(1) { + let mut e = Editor::new(Math::default()); + e.type_str(&s); + println!("{s:24} lin={} tex={}", equashion_math::to_linear(e.math()), e.latex()); + } +} diff --git a/crates/equashion-math/src/edit.rs b/crates/equashion-math/src/edit.rs new file mode 100644 index 00000000..78592680 --- /dev/null +++ b/crates/equashion-math/src/edit.rs @@ -0,0 +1,1993 @@ +//! Direct editing of a math tree: a caret that lives inside the tree, selection, typing with +//! structure keys (`^` `_` `/` `sqrt`), Greek names, arrow navigation in visual order, Backspace +//! that unwraps empty structures, and template insertion at the caret. +//! +//! The caret is a [`Path`] to a child sequence plus a position counted in *units*: one unit per +//! character of a text node and one per structure (a fraction is a single unit of its parent +//! sequence). Nothing here knows about layout or egui, and no input can make it panic: every +//! access is checked, nesting is capped at [`MAX_DEPTH`], and a stale caret is repaired on use. + +use crate::{MAX_DEPTH, Math, Node, Seq}; + +/// Route from the root sequence to a child sequence: at each step the index of a node in the +/// current sequence and the index of one of that node's child sequences (see [`children`]). +pub type Path = Vec<(usize, usize)>; + +/// A position in the tree: inside the sequence at `path`, after `pos` units. +#[derive(Debug, Clone, Default, PartialEq, Eq)] +pub struct Caret { + pub path: Path, + pub pos: usize, +} + +/// Navigation and deletion keys. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum Key { + Left, + Right, + Up, + Down, + Home, + End, + Backspace, + Delete, + /// Next place (cell, numerator, exponent, ...); with Shift the previous one. + Tab, + Undo, + Redo, +} + +impl Key { + /// A key from its name (`left`, `Backspace`, ... any case). + pub fn parse(name: &str) -> Option { + Some(match name.trim().to_ascii_lowercase().as_str() { + "left" => Key::Left, + "right" => Key::Right, + "up" => Key::Up, + "down" => Key::Down, + "home" => Key::Home, + "end" => Key::End, + "backspace" => Key::Backspace, + "delete" | "del" => Key::Delete, + "tab" => Key::Tab, + "undo" => Key::Undo, + "redo" => Key::Redo, + _ => return None, + }) + } +} + +/// The child sequences of a node in reading order. Layout and editing share this order: it is +/// what the second number of a [`Path`] step indexes. +pub fn children(n: &Node) -> Vec<&Seq> { + use std::iter::once; + match n { + Node::Frac { num, den } => vec![num, den], + Node::Rad { deg, body } => deg.iter().chain(once(body)).collect(), + Node::Script { base, sub, sup } => once(base).chain(sub.iter()).chain(sup.iter()).collect(), + Node::Nary { sub, sup, body, .. } => sub.iter().chain(sup.iter()).chain(once(body)).collect(), + Node::Delim { items, .. } => items.iter().collect(), + Node::Matrix { rows } => rows.iter().flatten().collect(), + Node::Func { body, .. } | Node::Accent { body, .. } | Node::Bar { body, .. } | Node::GroupChr { body, .. } | Node::Boxed { body, .. } => { + vec![body] + } + Node::Limit { base, lim, .. } => vec![base, lim], + Node::EqArr { rows } => rows.iter().collect(), + Node::PreScript { sub, sup, base } => vec![sub, sup, base], + Node::Props { node, .. } => children(node), + Node::Text(_) | Node::Styled { .. } | Node::Raw(_) => vec![], + } +} + +/// Mutable [`children`], same order. +pub fn children_mut(n: &mut Node) -> Vec<&mut Seq> { + use std::iter::once; + match n { + Node::Frac { num, den } => vec![num, den], + Node::Rad { deg, body } => deg.iter_mut().chain(once(body)).collect(), + Node::Script { base, sub, sup } => once(base).chain(sub.iter_mut()).chain(sup.iter_mut()).collect(), + Node::Nary { sub, sup, body, .. } => sub.iter_mut().chain(sup.iter_mut()).chain(once(body)).collect(), + Node::Delim { items, .. } => items.iter_mut().collect(), + Node::Matrix { rows } => rows.iter_mut().flatten().collect(), + Node::Func { body, .. } | Node::Accent { body, .. } | Node::Bar { body, .. } | Node::GroupChr { body, .. } | Node::Boxed { body, .. } => { + vec![body] + } + Node::Limit { base, lim, .. } => vec![base, lim], + Node::EqArr { rows } => rows.iter_mut().collect(), + Node::PreScript { sub, sup, base } => vec![sub, sup, base], + Node::Props { node, .. } => children_mut(node), + Node::Text(_) | Node::Styled { .. } | Node::Raw(_) => vec![], + } +} + +fn bare_mut(n: &mut Node) -> &mut Node { + match n { + Node::Props { node, .. } => bare_mut(node), + other => other, + } +} + +/// The text a node carries, if it is a text-like leaf. +fn text_of(n: &Node) -> Option<&str> { + match n.bare() { + Node::Text(t) => Some(t), + Node::Styled { text, .. } => Some(text), + _ => None, + } +} + +fn node_units(n: &Node) -> usize { + text_of(n).map_or(1, |t| t.chars().count()) +} + +/// A term that is one parenthesised group, as a fraction's numerator: the group's contents +/// (the fraction bar makes the parentheses redundant). +fn unwrap_paren(mut term: Vec) -> Vec { + if let [only] = term.as_mut_slice() + && let Node::Delim { open, close, items, .. } = bare_mut(only) + && open == "(" + && close == ")" + && items.len() == 1 + { + return items.pop().unwrap_or_default(); + } + term +} + +/// Number of units in a sequence. +pub fn units(seq: &[Node]) -> usize { + seq.iter().map(node_units).fold(0usize, usize::saturating_add) +} + +/// Units before node `idx`. +fn start_of(seq: &[Node], idx: usize) -> usize { + seq.iter().take(idx).map(node_units).fold(0usize, usize::saturating_add) +} + +/// The node holding the unit that starts at `pos`, and the unit's offset inside it. +fn locate(seq: &[Node], pos: usize) -> Option<(usize, usize)> { + let mut acc = 0usize; + for (i, n) in seq.iter().enumerate() { + let u = node_units(n); + if pos < acc.saturating_add(u) { + return Some((i, pos - acc)); + } + acc = acc.saturating_add(u); + } + None +} + +/// One entry per unit: the character of a text unit, `None` for a structure. +fn unit_chars(seq: &[Node]) -> Vec> { + let mut out = vec![]; + for n in seq { + match text_of(n) { + Some(t) => out.extend(t.chars().map(Some)), + None => out.push(None), + } + } + out +} + +/// The sequence at `path`. +pub fn seq_at<'a>(body: &'a Seq, path: &[(usize, usize)]) -> Option<&'a Seq> { + if path.len() > MAX_DEPTH { + return None; + } + let mut cur = body; + for &(i, c) in path { + cur = children(cur.get(i)?).get(c).copied()?; + } + Some(cur) +} + +/// The sequence at `path`, mutable. +pub fn seq_at_mut<'a>(body: &'a mut Seq, path: &[(usize, usize)]) -> Option<&'a mut Seq> { + if path.len() > MAX_DEPTH { + return None; + } + let mut cur = body; + for &(i, c) in path { + let n = cur.get_mut(i)?; + cur = children_mut(n).into_iter().nth(c)?; + } + Some(cur) +} + +fn split_chars(t: &str, off: usize) -> (String, String) { + (t.chars().take(off).collect(), t.chars().skip(off).collect()) +} + +/// Split a text-like node after `off` characters. +fn split_node(n: &Node, off: usize) -> Option<(Node, Node)> { + match n { + Node::Text(t) => { + let (a, b) = split_chars(t, off); + Some((Node::Text(a), Node::Text(b))) + } + Node::Styled { text, style } => { + let (a, b) = split_chars(text, off); + Some((Node::Styled { text: a, style: *style }, Node::Styled { text: b, style: *style })) + } + Node::Props { extra, node } => { + let (a, b) = split_node(node, off)?; + Some((Node::Props { extra: extra.clone(), node: Box::new(a) }, Node::Props { extra: extra.clone(), node: Box::new(b) })) + } + _ => None, + } +} + +/// Make unit position `pos` a boundary between nodes (splitting a text node if needed) and +/// return the index of the node that starts there. +fn boundary(seq: &mut Seq, pos: usize) -> usize { + let mut acc = 0usize; + let mut i = 0usize; + while i < seq.len() { + if acc >= pos { + return i; + } + let u = seq.get(i).map_or(0, node_units); + if acc.saturating_add(u) <= pos { + acc = acc.saturating_add(u); + i += 1; + continue; + } + let off = pos - acc; + if let Some((a, b)) = seq.get(i).and_then(|n| split_node(n, off)) { + if let Some(slot) = seq.get_mut(i) { + *slot = a; + } + seq.insert(i + 1, b); + return i + 1; + } + return i + 1; + } + seq.len() +} + +/// Join neighbouring plain text nodes and drop empty ones. +fn merge(seq: &mut Seq) { + let old = std::mem::take(seq); + for n in old { + match n { + Node::Text(t) if t.is_empty() => {} + Node::Text(t) => { + if let Some(Node::Text(prev)) = seq.last_mut() { + prev.push_str(&t); + } else { + seq.push(Node::Text(t)); + } + } + other => seq.push(other), + } + } +} + +/// Remove the blank text slots a template carries, so empty places are empty sequences. +fn strip_blanks(seq: &mut Seq, depth: usize) { + if depth > MAX_DEPTH { + return; + } + seq.retain(|n| !matches!(n, Node::Text(t) if t.is_empty())); + for n in seq.iter_mut() { + for child in children_mut(n) { + strip_blanks(child, depth + 1); + } + } +} + +/// Path (relative to `seq`) to the first empty child sequence, depth first. +fn first_empty(seq: &[Node], depth: usize) -> Option { + if depth > MAX_DEPTH { + return None; + } + for (i, n) in seq.iter().enumerate() { + for (c, child) in children(n).into_iter().enumerate() { + if units(child) == 0 { + return Some(vec![(i, c)]); + } + if let Some(mut rest) = first_empty(child, depth + 1) { + rest.insert(0, (i, c)); + return Some(rest); + } + } + } + None +} + +/// [`first_empty`], except that a leading script with an empty base (`ₙC_r`: the n before the +/// letter) is a place of its own: the caret goes to its script, not to its base. +fn first_empty_skipping_prescript(nodes: &[Node]) -> Option { + let lead = match nodes.first() { + Some(n @ Node::Script { base, sub, sup }) if nodes.len() > 1 && base.is_empty() && (sub.is_some() || sup.is_some()) => n, + _ => return first_empty(nodes, 0), + }; + if let Some(c) = children(lead).iter().enumerate().skip(1).find_map(|(c, ch)| (units(ch) == 0).then_some(c)) { + return Some(vec![(0, c)]); + } + let mut rest = first_empty(nodes.get(1..)?, 0)?; + if let Some(first) = rest.first_mut() { + first.0 += 1; + } + Some(rest) +} + +/// Where Up / Down goes from child `c` of `node`, if the structure stacks its children. +fn vertical_neighbor(node: &Node, c: usize, up: bool) -> Option { + match node.bare() { + Node::Frac { .. } => match (c, up) { + (0, false) => Some(1), + (1, true) => Some(0), + _ => None, + }, + Node::Script { sub, sup, .. } => { + let sub_i = sub.is_some().then_some(1usize); + let sup_i = sup.is_some().then_some(1 + usize::from(sub.is_some())); + if up { + if Some(c) == sup_i { + None + } else if Some(c) == sub_i { + sup_i.or(Some(0)) + } else { + sup_i + } + } else if Some(c) == sub_i { + None + } else if Some(c) == sup_i { + sub_i.or(Some(0)) + } else { + sub_i + } + } + Node::Nary { sub, sup, .. } => { + let sub_i = sub.is_some().then_some(0usize); + let sup_i = sup.is_some().then_some(usize::from(sub.is_some())); + if up { + if Some(c) == sup_i { None } else { sup_i } + } else if Some(c) == sub_i { + None + } else { + sub_i + } + } + Node::Limit { lower, .. } => match (c, up, *lower) { + (0, false, true) | (0, true, false) => Some(1), + (1, true, true) | (1, false, false) => Some(0), + _ => None, + }, + Node::Matrix { rows } => { + let mut idx = 0usize; + let mut at = None; + for (r, row) in rows.iter().enumerate() { + if c < idx + row.len() { + at = Some((r, c - idx)); + break; + } + idx += row.len(); + } + let (r, col) = at?; + let tr = if up { r.checked_sub(1)? } else { r + 1 }; + let target = rows.get(tr)?; + let tcol = col.min(target.len().checked_sub(1)?); + let before: usize = rows.iter().take(tr).map(Vec::len).sum(); + Some(before + tcol) + } + Node::EqArr { rows } => { + let t = if up { c.checked_sub(1)? } else { c + 1 }; + (t < rows.len()).then_some(t) + } + Node::Rad { deg: Some(_), .. } => match (c, up) { + (1, true) => Some(0), + (0, false) => Some(1), + _ => None, + }, + Node::PreScript { .. } => match (c, up) { + (0, true) | (2, true) => Some(1), + (1, false) | (2, false) => Some(0), + _ => None, + }, + _ => None, + } +} + +const GREEK: &[(&str, char)] = &[ + ("alpha", '\u{3B1}'), + ("beta", '\u{3B2}'), + ("gamma", '\u{3B3}'), + ("delta", '\u{3B4}'), + ("epsilon", '\u{3B5}'), + ("zeta", '\u{3B6}'), + ("eta", '\u{3B7}'), + ("theta", '\u{3B8}'), + ("iota", '\u{3B9}'), + ("kappa", '\u{3BA}'), + ("lambda", '\u{3BB}'), + ("mu", '\u{3BC}'), + ("nu", '\u{3BD}'), + ("xi", '\u{3BE}'), + ("omicron", '\u{3BF}'), + ("pi", '\u{3C0}'), + ("rho", '\u{3C1}'), + ("sigma", '\u{3C3}'), + ("tau", '\u{3C4}'), + ("upsilon", '\u{3C5}'), + ("phi", '\u{3C6}'), + ("chi", '\u{3C7}'), + ("psi", '\u{3C8}'), + ("omega", '\u{3C9}'), + ("Gamma", '\u{393}'), + ("Delta", '\u{394}'), + ("Theta", '\u{398}'), + ("Lambda", '\u{39B}'), + ("Xi", '\u{39E}'), + ("Pi", '\u{3A0}'), + ("Sigma", '\u{3A3}'), + ("Phi", '\u{3A6}'), + ("Psi", '\u{3A8}'), + ("Omega", '\u{3A9}'), + ("infty", '\u{221E}'), +]; + +/// Words that become a symbol when typed whole (the letters before the caret are exactly the +/// word). `pm` must not fire inside `bpm`, so there is no suffix matching for these. +const WORDS: &[(&str, char)] = &[ + ("pm", '\u{B1}'), + ("times", '\u{D7}'), + ("cdot", '\u{B7}'), + ("leq", '\u{2264}'), + ("geq", '\u{2265}'), + ("neq", '\u{2260}'), + ("approx", '\u{2248}'), + ("partial", '\u{2202}'), + ("nabla", '\u{2207}'), + ("forall", '\u{2200}'), + ("exists", '\u{2203}'), +]; + +/// Characters after which an unparenthesised function argument (`sin x`) is over. +const ARG_ENDERS: &str = "+\u{2212}=<>,\u{B1}\u{D7}\u{B7}"; + +/// Most characters one [`Editor::type_str`] call processes. +const MAX_TYPED: usize = 100_000; + +/// Most single steps one Tab takes looking for the next place. +const MAX_TAB_STEPS: usize = 10_000; + +/// What a typed `\name` becomes. +enum Cmd { + /// A symbol or letter. + Sym(char), + /// A node with no places to fill (an operator word). + Leaf(Node), + /// A structure with empty places, and the place the caret goes to. + Node(Node, usize), + /// Accepted and dropped (`\left`, `\right`). + Nothing, +} + +/// The meaning of a typed LaTeX command name. +fn latex_cmd(name: &str) -> Option { + use crate::linear; + let plain = |t: &str| Node::Styled { text: t.into(), style: crate::Style::Plain }; + Some(match name { + "frac" | "dfrac" | "tfrac" | "cfrac" => Cmd::Node(Node::Frac { num: vec![], den: vec![] }, 0), + "sqrt" => Cmd::Node(Node::Rad { deg: None, body: vec![] }, 0), + "left" | "right" => Cmd::Nothing, + "infty" => Cmd::Sym('\u{221E}'), + "lim" => Cmd::Node(Node::Limit { lower: true, base: vec![plain("lim")], lim: vec![] }, 1), + _ => { + if let Some((op, limits)) = linear::nary_op(name) { + Cmd::Node(Node::Nary { op, sub: limits.then(Vec::new), sup: limits.then(Vec::new), body: vec![] }, 0) + } else if linear::is_bare_func(name) { + Cmd::Node(Node::Func { name: name.into(), body: vec![] }, 0) + } else if linear::is_function_word(name) { + Cmd::Leaf(plain(name)) + } else if let Some(ch) = linear::accent(name) { + Cmd::Node(Node::Accent { ch, body: vec![] }, 0) + } else { + Cmd::Sym(linear::symbol(name)?) + } + } + }) +} + +/// True when some longer command name starts with `name` (`in` is also the start of `int`). +fn has_longer_cmd(name: &str) -> bool { + const EXTRA: [&str; 7] = ["frac", "dfrac", "tfrac", "cfrac", "sqrt", "left", "right"]; + crate::linear::command_names().chain(EXTRA).any(|n| n.len() > name.len() && n.starts_with(name)) +} + +/// A math tree being edited with a caret and an optional selection. +#[derive(Debug, Clone)] +pub struct Editor { + math: Math, + caret: Caret, + /// Other end of the selection, a position in the caret's own sequence. + anchor: Option, + undo: Vec, + redo: Vec, + /// A command or script just made a place: a `{` typed next opens its argument (LaTeX style). + expect_brace: bool, + /// Unclosed argument braces typed so far; a `}` closes the innermost one. + brace_depth: u32, + /// The radical's degree place was opened by a typed `[` after `\sqrt`, so a `]` closes it. + deg_typed: bool, +} + +/// Most edits kept for undo. +const MAX_HISTORY: usize = 200; + +/// A state to go back to. +#[derive(Debug, Clone)] +struct Snap { + math: Math, + caret: Caret, + anchor: Option, +} + +impl Editor { + /// Edit `math` with the caret at the end of the top row. + pub fn new(math: Math) -> Editor { + let mut e = + Editor { math, caret: Caret::default(), anchor: None, undo: vec![], redo: vec![], expect_brace: false, brace_depth: 0, deg_typed: false }; + e.caret.pos = units(&e.math.body); + e + } + + pub fn math(&self) -> &Math { + &self.math + } + + pub fn math_mut(&mut self) -> &mut Math { + &mut self.math + } + + pub fn into_math(self) -> Math { + self.math + } + + pub fn caret(&self) -> &Caret { + &self.caret + } + + /// Replace the whole equation (the caret goes to the end). + pub fn set_math(&mut self, m: Math) { + *self = Editor::new(m); + } + + /// The equation as LaTeX (see [`crate::to_latex`]). + pub fn latex(&self) -> String { + crate::to_latex(&self.math) + } + + /// Replace the whole equation from typed text or LaTeX. Like [`Editor::set_math`] the caret + /// goes to the end and the history starts over, so a host can load a value without leaving + /// an undo step behind. + pub fn set_latex(&mut self, src: &str) { + self.set_math(crate::from_linear(src)); + } + + /// True when the caret is at the very start of the equation (no enclosing slot, position 0). + /// A host uses this to hand an Up or Left key to the next field. + pub fn at_start(&self) -> bool { + self.caret.path.is_empty() && self.caret.pos == 0 + } + + /// True when the caret is at the very end of the top-level equation. + pub fn at_end(&self) -> bool { + self.caret.path.is_empty() && self.caret.pos >= units(&self.math.body) + } + + /// True when nothing has been typed. + pub fn is_blank(&self) -> bool { + units(&self.math.body) == 0 + } + + /// The selected range in the caret's sequence, if any. + pub fn selection(&self) -> Option<(usize, usize)> { + let a = self.anchor?; + (a != self.caret.pos).then(|| (a.min(self.caret.pos), a.max(self.caret.pos))) + } + + /// The sequence the caret is in. + pub fn seq(&self) -> &Seq { + seq_at(&self.math.body, &self.caret.path).unwrap_or(&self.math.body) + } + + fn seq_mut(&mut self) -> Option<&mut Seq> { + seq_at_mut(&mut self.math.body, &self.caret.path) + } + + fn len_here(&self) -> usize { + units(self.seq()) + } + + /// Repair a caret that no longer points into the tree. + fn fix(&mut self) { + if seq_at(&self.math.body, &self.caret.path).is_none() { + self.caret = Caret { path: vec![], pos: units(&self.math.body) }; + self.anchor = None; + } + let n = self.len_here(); + self.caret.pos = self.caret.pos.min(n); + self.anchor = self.anchor.map(|a| a.min(n)); + } + + /// Put the caret at `c` (clamped into the tree), dropping any selection. + pub fn set_caret(&mut self, c: Caret) { + self.expect_brace = false; + self.brace_depth = 0; + self.caret = c; + self.anchor = None; + self.fix(); + } + + /// Move the caret to `c` keeping the selection anchor, when `c` is in the same sequence + /// (a mouse drag). Otherwise the caret just moves there. + pub fn drag_caret(&mut self, c: Caret) { + self.fix(); + if c.path == self.caret.path { + let anchor = self.anchor.unwrap_or(self.caret.pos); + self.caret.pos = c.pos; + self.anchor = Some(anchor); + self.fix(); + } else { + self.set_caret(c); + } + } + + /// Finish a `\name` still being typed (`\in` waits for a longer name): call before reading + /// the result. + pub fn flush(&mut self) { + self.tracked(|e| e.flush_cmd()); + } + + /// The fixed end of the selection as a caret (the caret itself when nothing is selected). + pub fn anchor_caret(&self) -> Caret { + Caret { path: self.caret.path.clone(), pos: self.anchor.unwrap_or(self.caret.pos) } + } + + /// Select from caret `a` to caret `b`, wherever they are: when they are in different rows + /// the selection covers whole structures of the nearest row that holds both (a mouse drag + /// or a shift-click). + pub fn select_between(&mut self, a: &Caret, b: &Caret) { + self.expect_brace = false; + self.brace_depth = 0; + let k = a.path.iter().zip(&b.path).take_while(|(x, y)| x == y).count(); + let Some(seq) = a.path.get(..k).and_then(|p| seq_at(&self.math.body, p)) else { + self.set_caret(b.clone()); + return; + }; + let end = units(seq); + let spot = |c: &Caret| match c.path.get(k) { + Some(&(i, _)) => (start_of(seq, i).min(end), true), + None => (c.pos.min(end), false), + }; + let ((pa, na), (pb, nb)) = (spot(a), spot(b)); + let (anchor, caret) = if pa < pb || (pa == pb && nb) { (pa, pb + usize::from(nb)) } else { (pa + usize::from(na), pb) }; + self.caret = Caret { path: a.path.get(..k).map(<[_]>::to_vec).unwrap_or_default(), pos: caret }; + self.anchor = (anchor != caret).then_some(anchor); + self.fix(); + } + + /// Select the whole top row. + pub fn select_all(&mut self) { + self.caret = Caret { path: vec![], pos: units(&self.math.body) }; + self.anchor = Some(0); + } + + fn can_nest(&self) -> bool { + self.caret.path.len() + 8 < MAX_DEPTH + } + + // ---------- typing ---------- + + /// Type text: every character as if typed on the keyboard. + pub fn type_str(&mut self, s: &str) { + self.tracked(|e| { + for c in s.chars().take(MAX_TYPED) { + e.type_char_raw(c); + } + }); + } + + /// Type one character. + pub fn type_char(&mut self, c: char) { + self.tracked(|e| e.type_char_raw(c)); + } + + /// Run an edit and, when it changed the tree, make it one undo step. + fn tracked(&mut self, f: impl FnOnce(&mut Self)) { + let snap = Snap { math: self.math.clone(), caret: self.caret.clone(), anchor: self.anchor }; + f(self); + if snap.math != self.math { + self.undo.push(snap); + if self.undo.len() > MAX_HISTORY { + self.undo.remove(0); + } + self.redo.clear(); + } + } + + fn snap(&self) -> Snap { + Snap { math: self.math.clone(), caret: self.caret.clone(), anchor: self.anchor } + } + + fn restore(&mut self, s: Snap) { + self.math = s.math; + self.caret = s.caret; + self.anchor = s.anchor; + self.fix(); + } + + /// Step back one edit. False when there is nothing to undo. + pub fn undo(&mut self) -> bool { + let Some(prev) = self.undo.pop() else { return false }; + let cur = self.snap(); + self.redo.push(cur); + self.restore(prev); + true + } + + /// Redo an undone edit. False when there is nothing to redo. + pub fn redo(&mut self) -> bool { + let Some(next) = self.redo.pop() else { return false }; + let cur = self.snap(); + self.undo.push(cur); + self.restore(next); + true + } + + /// The selection as linear text (for Copy), or `None` with no selection. + pub fn selected_linear(&self) -> Option { + let (a, b) = self.selection()?; + let mut tmp = self.clone(); + let body = tmp.take_range(a, b); + let m = Math { body, ..Math::default() }; + Some(crate::to_linear(&m)) + } + + /// Cut: the selection as linear text, removed from the tree. + pub fn cut(&mut self) -> Option { + let t = self.selected_linear()?; + self.key(Key::Delete, false); + Some(t) + } + + fn type_char_raw(&mut self, c: char) { + self.fix(); + if !c.is_ascii_alphabetic() { + self.flush_cmd(); + } + let expect = std::mem::take(&mut self.expect_brace); + if c == '[' && expect && self.open_degree() { + return; + } + if c == ']' && self.deg_typed && self.in_degree() { + self.deg_typed = false; + self.leave_right(); + self.expect_brace = true; + return; + } + if c == '{' && expect { + self.brace_depth = self.brace_depth.saturating_add(1); + return; + } + if c == '}' && self.brace_depth > 0 && !self.in_brace_delim() { + self.brace_depth -= 1; + self.close_arg(); + return; + } + // `x^2` ends after its digits when anything but another digit, `.`, `^` or `_` follows + // (`mv^2/2` is a fraction of `mv^2`, `x^2sin x` is `x^2` times `sin x`). Ported from + // DeckCraft 7972cf5; not inside a typed LaTeX `{...}` argument. + if !(c.is_ascii_digit() || matches!(c, '.' | '^' | '_') || c.is_whitespace() || c.is_control()) + && self.brace_depth == 0 + && self.selection().is_none() + && self.script_slot_here() + && self.caret.pos == self.len_here() + && self.slot_is_digits() + { + self.exit_script_slot(); + } + match c { + '\\' => { + self.leave_func_arg(); + self.insert_char('\\'); + } + '^' => self.script(true), + '_' => self.script(false), + '/' => self.fraction(), + '(' => { + if !self.convert_call() { + self.open_delim("(", ")"); + } + } + '[' => self.open_delim("[", "]"), + '{' => self.open_delim("{", "}"), + ')' | ']' | '}' => { + if !self.close_delim(c) { + self.insert_char(c); + } + } + '-' => { + if !self.replace_prev(&[('+', '\u{B1}')]) { + self.leave_func_arg(); + self.insert_char('\u{2212}'); + } + } + '*' => { + self.leave_func_arg(); + self.insert_char('\u{B7}'); + } + '=' => { + if !self.replace_prev(&[('<', '\u{2264}'), ('>', '\u{2265}'), ('!', '\u{2260}'), ('~', '\u{2248}')]) { + self.leave_func_arg(); + self.insert_char('='); + } + } + '>' => { + if !self.replace_prev(&[('\u{2212}', '\u{2192}')]) { + self.leave_func_arg(); + self.insert_char('>'); + } + } + c if c.is_whitespace() => { + self.leave_nary_limit(false); + } + c if c.is_control() => {} + c if ARG_ENDERS.contains(c) => { + self.leave_func_arg(); + self.insert_char(c); + } + 'h' if self.extend_func_name() => {} + c => { + self.insert_char(c); + if c.is_ascii_alphabetic() && !self.latex_step() { + self.autoconvert(); + } + } + } + } + + // ---------- typed LaTeX commands ---------- + + /// The `\name` being typed right before the caret: where its backslash is and the name. + fn pending_cmd(&self) -> Option<(usize, String)> { + if self.selection().is_some() { + return None; + } + let cls = unit_chars(self.seq()); + let pos = self.caret.pos.min(cls.len()); + let mut s = pos; + while s > 0 && matches!(cls.get(s - 1), Some(Some(c)) if c.is_ascii_alphabetic()) { + s -= 1; + } + if s == pos || s == 0 || cls.get(s - 1) != Some(&Some('\\')) { + return None; + } + let name: String = cls.get(s..pos)?.iter().filter_map(|c| *c).collect(); + Some((s - 1, name)) + } + + /// After a letter of a `\name`: make it right away when nothing longer could be meant + /// (`\alpha`, `\frac`), else wait for the next character. True while a command is pending. + fn latex_step(&mut self) -> bool { + let Some((bs, name)) = self.pending_cmd() else { return false }; + if latex_cmd(&name).is_some() && !has_longer_cmd(&name) { + self.commit_cmd(bs, &name); + } + true + } + + /// A character that cannot continue a command name ends a pending one (`\in` then a space). + fn flush_cmd(&mut self) { + self.flush_word(true); + } + + /// [`Self::flush_cmd`], with or without turning a finished `inf` into the infinity sign. + fn flush_word(&mut self, inf: bool) { + if let Some((bs, name)) = self.pending_cmd() { + if latex_cmd(&name).is_some() { + self.commit_cmd(bs, &name); + } + } else if inf { + self.flush_inf(); + } + } + + /// The word `inf`, finished (by any other character, or by `flush`), becomes the infinity + /// sign. It waits that long because `infty` starts with it. + fn flush_inf(&mut self) { + if self.selection().is_some() { + return; + } + let cls = unit_chars(self.seq()); + let pos = self.caret.pos.min(cls.len()); + let mut s = pos; + while s > 0 && matches!(cls.get(s - 1), Some(Some(c)) if c.is_ascii_alphabetic()) { + s -= 1; + } + let run: String = cls.get(s..pos).unwrap_or(&[]).iter().filter_map(|c| *c).collect(); + if run == "inf" && (s == 0 || cls.get(s - 1) != Some(&Some('\\'))) { + self.delete_range(s, pos); + self.insert_char('\u{221E}'); + } + } + + /// A `[` typed right after `\sqrt`: the radical gets a degree place, which a `]` closes. + fn open_degree(&mut self) -> bool { + if self.selection().is_some() || self.len_here() != 0 { + return false; + } + let Some(&(i, c)) = self.caret.path.last() else { return false }; + let mut parent = self.caret.path.clone(); + parent.pop(); + let Some(Node::Rad { deg, body }) = seq_at_mut(&mut self.math.body, &parent).and_then(|s| s.get_mut(i)).map(bare_mut) else { + return false; + }; + if deg.is_some() || c != 0 || !body.is_empty() { + return false; + } + *deg = Some(vec![]); + self.deg_typed = true; + true + } + + /// The caret is in a radical's degree place. + fn in_degree(&self) -> bool { + let Some(&(i, c)) = self.caret.path.last() else { return false }; + let parent = self.caret.path.get(..self.caret.path.len() - 1).and_then(|p| seq_at(&self.math.body, p)); + c == 0 && matches!(parent.and_then(|s| s.get(i)).map(Node::bare), Some(Node::Rad { deg: Some(_), .. })) + } + + /// Replace the typed `\name` (from `bs` to the caret) by what it stands for. + fn commit_cmd(&mut self, bs: usize, name: &str) { + let Some(cmd) = latex_cmd(name) else { return }; + let pos = self.caret.pos; + if matches!(cmd, Cmd::Node(..)) && !self.can_nest() { + return; + } + self.delete_range(bs, pos); + match cmd { + Cmd::Sym(c) => self.insert_char(c), + Cmd::Nothing => {} + Cmd::Leaf(node) => { + if self.insert_nodes(vec![node]).is_some() { + self.caret.pos += 1; + } + } + Cmd::Node(node, child) => { + if let Some(i) = self.insert_nodes(vec![node]) { + self.caret.path.push((i, child)); + self.caret.pos = 0; + self.expect_brace = true; + } + } + } + } + + /// The innermost place is a `{ }` delimiter pair's content (so a `}` closes that). + fn in_brace_delim(&self) -> bool { + let Some(&(i, _)) = self.caret.path.last() else { return false }; + let parent = self.caret.path.get(..self.caret.path.len() - 1).and_then(|p| seq_at(&self.math.body, p)); + matches!(parent.and_then(|s| s.get(i)).map(Node::bare), Some(Node::Delim { close, .. }) if close == "}") + } + + /// A `}` that ends a LaTeX-style argument: on to the next place of a fraction, otherwise out + /// of the structure. A big operator's limit stays put so `\sum_{i=1}^{n}` can add the other. + fn close_arg(&mut self) { + self.anchor = None; + let Some(&(i, c)) = self.caret.path.last() else { return }; + let parent = self.caret.path.get(..self.caret.path.len() - 1).and_then(|p| seq_at(&self.math.body, p)); + match parent.and_then(|s| s.get(i)).map(Node::bare) { + // The other limit may still follow (`\sum_{i=1}^{n}`), but the last one is done. + Some(Node::Nary { sub, sup, .. }) if c + 1 < usize::from(sub.is_some()) + usize::from(sup.is_some()) => {} + Some(Node::Frac { .. }) if c == 0 => { + self.leave_right(); + self.expect_brace = true; + } + _ => self.leave_right(), + } + } + + /// The character just before the caret, when there is no selection. + fn prev_char(&self) -> Option { + if self.selection().is_some() { + return None; + } + let cls = unit_chars(self.seq()); + cls.get(self.caret.pos.checked_sub(1)?).copied().flatten() + } + + /// If the character before the caret is one of `pairs`' first members, replace it by the + /// second (`+` then `-` makes a plus-minus sign, `<` then `=` makes `<=` as one symbol). + fn replace_prev(&mut self, pairs: &[(char, char)]) -> bool { + let Some(p) = self.prev_char() else { return false }; + let Some(&(_, to)) = pairs.iter().find(|(from, _)| *from == p) else { return false }; + let pos = self.caret.pos; + self.delete_range(pos - 1, pos); + self.insert_char(to); + true + } + + /// The function node whose argument the caret is in. + fn func_here(&self) -> Option<(usize, usize)> { + let &(i, c) = self.caret.path.last()?; + let parent = seq_at(&self.math.body, self.caret.path.get(..self.caret.path.len() - 1)?)?; + matches!(parent.get(i)?.bare(), Node::Func { .. }).then_some((i, c)) + } + + /// The script node whose superscript or subscript the caret is in. + fn script_slot_here(&self) -> bool { + let Some(&(i, c)) = self.caret.path.last() else { return false }; + let Some(parent) = self.caret.path.get(..self.caret.path.len() - 1).and_then(|p| seq_at(&self.math.body, p)) else { + return false; + }; + c >= 1 && matches!(parent.get(i).map(Node::bare), Some(Node::Script { .. })) + } + + /// The script slot the caret is in holds only digits (`x^2`): the next term ends it. + fn slot_is_digits(&self) -> bool { + let cls = unit_chars(self.seq()); + !cls.is_empty() && cls.iter().all(|c| matches!(c, Some(d) if d.is_ascii_digit() || *d == '.')) + } + + /// Step out of the script slot the caret is in, to just after the script. + fn exit_script_slot(&mut self) { + if let Some((i, _)) = self.caret.path.pop() { + self.caret.pos = start_of(self.seq(), i) + 1; + } + } + + /// A filled, unbraced limit of a big operator is over at a space (any limit) or at an + /// operator (the upper limit only: `sum_i=1^n` keeps its `=`): the caret goes on to the + /// operand, so `sum_(i=1)^n i^2` does not pour the summand into the upper limit. True when + /// the caret moved. + fn leave_nary_limit(&mut self, operator: bool) -> bool { + if self.brace_depth > 0 || self.selection().is_some() { + return false; + } + let Some(&(i, c)) = self.caret.path.last() else { return false }; + if self.len_here() == 0 || self.caret.pos != self.len_here() { + return false; + } + let parent = self.caret.path.get(..self.caret.path.len() - 1).and_then(|p| seq_at(&self.math.body, p)); + let Some(Node::Nary { sub, sup, .. }) = parent.and_then(|s| s.get(i)).map(Node::bare) else { return false }; + let limits = usize::from(sub.is_some()) + usize::from(sup.is_some()); + let upper = sup.is_some() && c + 1 == limits; + if c >= limits || (operator && !upper) { + return false; + } + self.caret.path.pop(); + self.caret.path.push((i, limits)); + self.caret.pos = 0; + true + } + + /// Typing an operator ends an unparenthesised function argument (`sin x+1` is `sin x`, plus + /// 1) and leaves a filled exponent or subscript (`x^2+1` is `x` squared, plus 1). + fn leave_func_arg(&mut self) { + for _ in 0..MAX_DEPTH { + if self.selection().is_some() { + return; + } + let n = self.len_here(); + if n == 0 || self.caret.pos != n { + return; + } + if self.func_here().is_some() { + self.leave_right(); + } else if self.script_slot_here() { + // A digit exponent ends at the operator (`x^2+1`); a letter exponent keeps it + // (`x^n+1` is `x^(n+1)`), as in DeckCraft 7972cf5. + if !self.slot_is_digits() { + return; + } + self.exit_script_slot(); + } else { + self.leave_nary_limit(true); + return; + } + } + } + + /// `h` right after a trigonometric name (empty argument) makes its hyperbolic form: + /// `sinh`, `cosh`, `tanh`, `csch`, `sech`, `coth`, `arcsinh`, `arccosh`, `arctanh`. + fn extend_func_name(&mut self) -> bool { + if self.selection().is_some() || self.len_here() != 0 { + return false; + } + let Some((i, _)) = self.func_here() else { return false }; + let mut parent = self.caret.path.clone(); + parent.pop(); + let Some(Node::Func { name, .. }) = seq_at_mut(&mut self.math.body, &parent).and_then(|s| s.get_mut(i)).map(bare_mut) else { + return false; + }; + if matches!(name.as_str(), "sin" | "cos" | "tan" | "csc" | "sec" | "cot" | "arcsin" | "arccos" | "arctan") { + // `csc`, `sec` and `cot` take an `h` to become `csch`, `sech` and `coth`. + name.push('h'); + true + } else { + false + } + } + + /// `(` `[` `{`: a delimiter pair with the caret inside (around the selection, if any). + fn open_delim(&mut self, open: &str, close: &str) { + if !self.can_nest() { + self.insert_char(open.chars().next().unwrap_or('(')); + return; + } + let wrapped = self.selection(); + let items = match wrapped { + Some((a, b)) => self.take_range(a, b), + None => vec![], + }; + let node = Node::Delim { open: open.into(), close: close.into(), sep: "|".into(), items: vec![items] }; + let Some(i) = self.insert_nodes(vec![node]) else { return }; + self.anchor = None; + if wrapped.is_some() { + self.caret.pos += 1; + } else { + self.caret.path.push((i, 0)); + self.caret.pos = 0; + } + } + + /// `)` `]` `}`: step out past the delimiter pair that this character closes, when the caret + /// is at the end of its contents (possibly inside a root or script that ends there). + fn close_delim(&mut self, ch: char) -> bool { + if self.selection().is_some() { + return false; + } + let mut path = self.caret.path.clone(); + let mut pos = self.caret.pos; + for _ in 0..=MAX_DEPTH { + let Some(seq) = seq_at(&self.math.body, &path) else { return false }; + if pos != units(seq) { + return false; + } + let Some((i, c)) = path.pop() else { return false }; + let Some(parent) = seq_at(&self.math.body, &path) else { return false }; + let Some(node) = parent.get(i) else { return false }; + let after = start_of(parent, i) + 1; + if let Node::Delim { close, .. } = node.bare() + && close.chars().eq(std::iter::once(ch)) + { + self.caret = Caret { path, pos: after }; + self.anchor = None; + self.unwrap_frac_paren(); + return true; + } + if c + 1 != children(node).len() { + return false; + } + pos = after; + } + false + } + + /// A fraction's numerator or denominator, a radicand, a script or a limit that is just one + /// `( )` group shows no parentheses (the structure already groups): typing `(x-1)` in a + /// denominator reads like the numerator does, and `sqrt(b^2-4ac)` and `_(i=1)` match. + fn unwrap_frac_paren(&mut self) { + let Some(&(pi, _)) = self.caret.path.last() else { return }; + let Some(&(_, c)) = self.caret.path.last() else { return }; + let parent = self.caret.path.get(..self.caret.path.len() - 1).and_then(|p| seq_at(&self.math.body, p)); + let node = parent.and_then(|s| s.get(pi)).map(Node::bare); + let in_script = matches!(node, Some(Node::Script { .. })) && c >= 1; + let groups = match node { + Some(Node::Frac { .. } | Node::Rad { .. } | Node::Func { .. }) => true, + Some(Node::Script { .. }) => in_script, + Some(Node::Nary { sub, sup, .. }) => c < usize::from(sub.is_some()) + usize::from(sup.is_some()), + Some(Node::Limit { .. }) => c == 1, + _ => false, + }; + if !groups { + return; + } + let last = node.is_some_and(|n| c + 1 == children(n).len()); + let ends = matches!(node, Some(Node::Rad { .. } | Node::Func { .. } | Node::Frac { .. })) && last; + if let Some(seq) = self.seq_mut() { + let term = std::mem::take(seq); + *seq = unwrap_paren(term); + } + self.caret.pos = self.len_here(); + // `x^(n+1)`: the exponent is the group, so closing it also ends the exponent (DeckCraft + // 7972cf5). The same for the argument of `sin(..)`, a radicand (`sqrt(x)+1`) and a + // denominator (`1/(x-1)+2`): the closing parenthesis ends the structure, as in Desmos. + if in_script || ends { + self.exit_script_slot(); + } + } + + /// Insert a symbol from the palette, replacing the selection. No name conversion. + pub fn insert_symbol(&mut self, c: char) { + self.tracked(|e| { + e.fix(); + e.insert_char(c); + }); + } + + fn take_range(&mut self, a: usize, b: usize) -> Vec { + self.anchor = None; + let out = match self.seq_mut() { + Some(seq) => { + let i = boundary(seq, a); + let j = boundary(seq, b).min(seq.len()); + let i = i.min(j); + seq.drain(i..j).collect() + } + None => vec![], + }; + self.caret.pos = a; + out + } + + fn delete_range(&mut self, a: usize, b: usize) { + let _ = self.take_range(a, b); + if let Some(seq) = self.seq_mut() { + merge(seq); + } + } + + fn drop_selection(&mut self) { + if let Some((a, b)) = self.selection() { + self.delete_range(a, b); + } + self.anchor = None; + } + + /// Insert nodes at the caret; the index of the first one. + fn insert_nodes(&mut self, nodes: Vec) -> Option { + let pos = self.caret.pos; + let seq = self.seq_mut()?; + let i = boundary(seq, pos).min(seq.len()); + seq.splice(i..i, nodes); + Some(i) + } + + fn insert_char(&mut self, c: char) { + self.drop_selection(); + let pos = self.caret.pos; + let Some(seq) = self.seq_mut() else { return }; + let i = boundary(seq, pos).min(seq.len()); + let prev = i.checked_sub(1).and_then(|p| seq.get_mut(p)); + if let Some(Node::Text(t)) = prev { + t.push(c); + } else if let Some(Node::Text(t)) = seq.get_mut(i) { + t.insert(0, c); + } else { + seq.insert(i, Node::Text(c.to_string())); + } + self.caret.pos = pos + 1; + } + + /// Where the term before the caret starts: just the last atom (`atom`, for a script base) or + /// the whole run of letters, digits and structures (for a numerator). + fn term_start(&self, atom: bool) -> usize { + let cls = unit_chars(self.seq()); + let pos = self.caret.pos.min(cls.len()); + if pos == 0 { + return 0; + } + if atom { + return match cls.get(pos - 1) { + Some(Some(c)) if c.is_ascii_digit() => { + let mut s = pos - 1; + while s > 0 && matches!(cls.get(s - 1), Some(Some(d)) if d.is_ascii_digit() || *d == '.') { + s -= 1; + } + s + } + _ => pos - 1, + }; + } + let mut s = pos; + while s > 0 { + match cls.get(s - 1) { + Some(None) => s -= 1, + Some(Some(c)) if c.is_alphanumeric() || *c == '.' || *c == '\u{2032}' => s -= 1, + _ => break, + } + } + s + } + + /// `_` or `^` inside a big operator: in its empty body they add the limit (`int_0`), and + /// in the end of one limit they jump to the other (`sum_i^n`, `int_0^1`). + fn nary_limit(&mut self, sup: bool) -> bool { + if self.selection().is_some() { + return false; + } + let Some(&(i, c)) = self.caret.path.last() else { return false }; + let at_end = self.caret.pos == self.len_here(); + let empty = self.len_here() == 0; + let mut parent = self.caret.path.clone(); + parent.pop(); + let Some(Node::Nary { sub, sup: up, .. }) = seq_at_mut(&mut self.math.body, &parent).and_then(|s| s.get_mut(i)).map(bare_mut) else { + return false; + }; + let body_idx = usize::from(sub.is_some()) + usize::from(up.is_some()); + let in_sub = sub.is_some() && c == 0; + let in_sup = up.is_some() && c == usize::from(sub.is_some()); + let go = if c == body_idx && empty { + true + } else if sup { + in_sub && at_end + } else { + in_sup && at_end + }; + if !go { + return false; + } + let idx = if sup { + if up.is_none() { + *up = Some(vec![]); + } + usize::from(sub.is_some()) + } else { + if sub.is_none() { + *sub = Some(vec![]); + } + 0 + }; + self.caret.path.pop(); + self.caret.path.push((i, idx)); + self.caret.pos = self.len_here(); + true + } + + fn script(&mut self, sup: bool) { + self.script_raw(sup); + self.expect_brace = true; + } + + /// `_` right after `lim` (or `^` in an empty upper limit...): the place is already there, so + /// typing it must not nest a script with an empty base inside it. + fn redundant_script(&self, sup: bool) -> bool { + if self.selection().is_some() || self.len_here() != 0 { + return false; + } + let Some(&(i, c)) = self.caret.path.last() else { return false }; + let parent = self.caret.path.get(..self.caret.path.len() - 1).and_then(|p| seq_at(&self.math.body, p)); + match parent.and_then(|s| s.get(i)).map(Node::bare) { + Some(Node::Limit { lower, .. }) => c == 1 && *lower != sup, + Some(Node::Nary { sub, sup: up, .. }) => { + if sup { + up.is_some() && c == usize::from(sub.is_some()) + } else { + sub.is_some() && c == 0 + } + } + _ => false, + } + } + + fn script_raw(&mut self, sup: bool) { + if !self.can_nest() { + return; + } + if self.redundant_script(sup) || self.nary_limit(sup) { + return; + } + let base = if let Some((a, b)) = self.selection() { + self.take_range(a, b) + } else { + if self.extend_script_before(sup) { + return; + } + let (s, p) = (self.term_start(true), self.caret.pos); + self.take_range(s, p) + }; + let node = Node::Script { base, sub: (!sup).then(Vec::new), sup: sup.then(Vec::new) }; + let Some(i) = self.insert_nodes(vec![node]) else { return }; + self.caret.path.push((i, 1)); + self.caret.pos = 0; + self.anchor = None; + } + + /// The caret sits right after a script: add (or re-enter) the wanted part of it. + fn extend_script_before(&mut self, sup: bool) -> bool { + let pos = self.caret.pos; + let Some(seq) = self.seq_mut() else { return false }; + let i = boundary(seq, pos).min(seq.len()); + let Some(p) = i.checked_sub(1) else { return false }; + let Some(Node::Script { sub, sup: up, .. }) = seq.get_mut(p).map(bare_mut) else { return false }; + if sup && up.is_none() { + *up = Some(vec![]); + } else if !sup && sub.is_none() { + *sub = Some(vec![]); + } + let idx = if sup { 1 + usize::from(sub.is_some()) } else { 1 }; + self.caret.path.push((p, idx)); + self.caret.pos = self.len_here(); + self.anchor = None; + true + } + + fn fraction(&mut self) { + if !self.can_nest() { + return; + } + let num = if let Some((a, b)) = self.selection() { + self.take_range(a, b) + } else { + let (s, p) = (self.term_start(false), self.caret.pos); + unwrap_paren(self.take_range(s, p)) + }; + let filled = units(&num) > 0; + let Some(i) = self.insert_nodes(vec![Node::Frac { num, den: vec![] }]) else { return }; + self.caret.path.push((i, usize::from(filled))); + self.caret.pos = 0; + self.anchor = None; + } + + /// After a letter: turn a just-completed name (`alpha`, `sqrt`...) into its symbol. + fn autoconvert(&mut self) { + let cls = unit_chars(self.seq()); + let pos = self.caret.pos.min(cls.len()); + let mut s = pos; + while s > 0 && matches!(cls.get(s - 1), Some(Some(c)) if c.is_ascii_alphabetic()) { + s -= 1; + } + let run: String = cls.get(s..pos).unwrap_or(&[]).iter().filter_map(|c| *c).collect(); + if run.ends_with("sqrt") && self.can_nest() { + self.delete_range(pos - 4, pos); + if let Some(i) = self.insert_nodes(vec![Node::Rad { deg: None, body: vec![] }]) { + self.caret.path.push((i, 0)); + self.caret.pos = 0; + } + return; + } + if self.convert_word(&run, pos) { + return; + } + // `ipi` (as in `e^ipi`) is `i` then `pi` (DeckCraft 7972cf5); other short names only + // convert as whole words. + let short_ok = run.len() == 3 && run.ends_with("pi"); + let suffix = || GREEK.iter().filter(|(n, _)| (n.len() >= 4 || (short_ok && *n == "pi")) && run.ends_with(n)).max_by_key(|(n, _)| n.len()); + let exact = GREEK.iter().find(|(n, _)| *n == run); + if let Some((name, sym)) = exact.or_else(suffix) { + let n = name.chars().count(); + self.delete_range(pos - n, pos); + self.insert_char(*sym); + } + } + + /// `floor(`, `nCr(`: a function name typed just before `(` becomes a function node with the + /// caret in its argument, and the `(` is that argument's own. + fn convert_call(&mut self) -> bool { + if self.selection().is_some() || !self.can_nest() { + return false; + } + let cls = unit_chars(self.seq()); + let pos = self.caret.pos.min(cls.len()); + let mut s = pos; + while s > 0 && matches!(cls.get(s - 1), Some(Some(c)) if c.is_ascii_alphabetic()) { + s -= 1; + } + let run: String = cls.get(s..pos).unwrap_or(&[]).iter().filter_map(|c| *c).collect(); + if !crate::funcs::is_call_only(&run) { + return false; + } + self.delete_range(s, pos); + let Some(i) = self.insert_nodes(vec![Node::Func { name: run, body: vec![] }]) else { return true }; + self.caret.path.push((i, 0)); + self.caret.pos = 0; + true + } + + /// A whole typed word (`pm`, `sin`, `sum`, `lim`...) becomes its symbol or structure. + fn convert_word(&mut self, run: &str, pos: usize) -> bool { + let n = run.chars().count(); + if let Some((_, sym)) = WORDS.iter().find(|(w, _)| *w == run) { + self.delete_range(pos - n, pos); + self.insert_char(*sym); + return true; + } + let node = if crate::funcs::BARE.contains(&run) { + Some((Node::Func { name: run.to_string(), body: vec![] }, 0)) + } else if let Some(&(_, op, limits)) = + [("sum", '\u{2211}', true), ("prod", '\u{220F}', true), ("int", '\u{222B}', false)].iter().find(|(w, ..)| *w == run) + { + Some((Node::Nary { op, sub: limits.then(Vec::new), sup: limits.then(Vec::new), body: vec![] }, 0)) + } else if run == "lim" { + Some((Node::Limit { lower: true, base: vec![Node::Styled { text: "lim".into(), style: crate::Style::Plain }], lim: vec![] }, 1)) + } else { + None + }; + let Some((node, child)) = node else { return false }; + if !self.can_nest() { + return false; + } + self.delete_range(pos - n, pos); + let Some(i) = self.insert_nodes(vec![node]) else { return true }; + self.caret.path.push((i, child)); + self.caret.pos = 0; + true + } + + // ---------- templates ---------- + + /// Insert a palette structure at the caret. A script, fraction or accent takes the term + /// before the caret (or the selection) as its base; other structures wrap the selection + /// into their first blank. The caret lands in the first blank place. + pub fn insert_template(&mut self, t: &Math) { + self.tracked(|e| e.insert_template_raw(t)); + } + + fn insert_template_raw(&mut self, t: &Math) { + self.fix(); + if !self.can_nest() { + return; + } + let mut nodes = t.body.clone(); + strip_blanks(&mut nodes, 0); + if nodes.is_empty() { + return; + } + let single = nodes.len() == 1; + // The part that takes what is before the caret, if the structure has one. + let taker = match nodes.first().map(Node::bare) { + Some(Node::Script { base, .. }) if single && base.is_empty() => Some((true, false)), + Some(Node::Accent { body, .. } | Node::Bar { body, .. } | Node::GroupChr { body, .. }) if single && body.is_empty() => Some((true, true)), + Some(Node::Frac { num, den }) if single && num.is_empty() && den.is_empty() => Some((false, false)), + _ => None, + }; + if let Some((atom, close)) = taker { + let taken = if let Some((a, b)) = self.selection() { + self.take_range(a, b) + } else { + let (s, p) = (self.term_start(atom), self.caret.pos); + let t = self.take_range(s, p); + if atom { t } else { unwrap_paren(t) } + }; + let filled = units(&taken) > 0; + if let Some(n) = nodes.first_mut() + && let Some(first) = children_mut(bare_mut(n)).into_iter().next() + { + *first = taken; + } + let Some(i) = self.insert_nodes(nodes) else { return }; + if close && filled { + self.caret.pos += 1; + } else { + // First place still blank: scripts go to their script, a fraction to its + // denominator, an empty accent into its body. + let c = usize::from(!(close && !filled) && (filled || atom)); + self.caret.path.push((i, c)); + self.caret.pos = 0; + } + self.anchor = None; + return; + } + let selected = self.selection().map(|(a, b)| self.take_range(a, b)).unwrap_or_default(); + let target = first_empty_skipping_prescript(&nodes); + let mut land = units(&selected); + if let Some(rel) = &target + && !selected.is_empty() + && let Some(slot) = seq_at_mut(&mut nodes, rel) + { + *slot = selected; + } else { + land = 0; + } + let count = units(&nodes); + let Some(i) = self.insert_nodes(nodes) else { return }; + match target { + Some(mut rel) => { + if let Some(first) = rel.first_mut() { + first.0 += i; + } + self.caret.path.extend(rel); + self.caret.pos = land; + } + None => self.caret.pos += count, + } + self.anchor = None; + } + + // ---------- keys ---------- + + /// Press a navigation or deletion key; `shift` extends the selection (Left, Right, Home, End). + pub fn key(&mut self, key: Key, shift: bool) { + if !matches!(key, Key::Undo | Key::Redo) { + let inf = !matches!(key, Key::Backspace | Key::Delete); + self.tracked(|e| e.flush_word(inf)); + } + if !matches!(key, Key::Backspace | Key::Delete) { + self.expect_brace = false; + self.brace_depth = 0; + } + match key { + Key::Undo => { + let _ = self.undo(); + } + Key::Redo => { + let _ = self.redo(); + } + Key::Backspace | Key::Delete => self.tracked(|e| e.key_raw(key, shift)), + _ => self.key_raw(key, shift), + } + } + + fn key_raw(&mut self, key: Key, shift: bool) { + self.fix(); + match key { + Key::Undo | Key::Redo => {} + Key::Tab => { + self.anchor = None; + self.tab(shift); + } + Key::Backspace => self.backspace(), + Key::Delete => self.delete_forward(), + Key::Left | Key::Right | Key::Home | Key::End if shift => self.extend(key), + Key::Left | Key::Right => { + if let Some((a, b)) = self.selection() { + self.caret.pos = if key == Key::Left { a } else { b }; + self.anchor = None; + } else { + self.anchor = None; + if key == Key::Left { self.move_left() } else { self.move_right() } + } + } + Key::Up | Key::Down => { + self.anchor = None; + self.move_vertical(key == Key::Up); + } + Key::Home | Key::End => { + self.anchor = None; + let to_start = key == Key::Home; + let edge = if to_start { 0 } else { self.len_here() }; + if self.caret.pos == edge { + self.caret.path.clear(); + self.caret.pos = if to_start { 0 } else { units(&self.math.body) }; + } else { + self.caret.pos = edge; + } + } + } + self.fix(); + } + + /// Move to the next (or previous) place of the tree: the next cell, the denominator after the + /// numerator, out of the last place. Stays put at the ends. + fn tab(&mut self, back: bool) { + let start = self.caret.path.clone(); + let from_prescript = !back && self.in_prescript(); + for _ in 0..MAX_TAB_STEPS { + let before = self.caret.clone(); + if back { + self.move_left(); + } else { + self.move_right(); + } + if self.caret.path != start || self.caret == before { + break; + } + } + // Out of the n of `ₙC_r`: straight into the r. + if from_prescript + && self.caret.path.len() + 1 == start.len() + && let Some((i, false, kids, true)) = self.unit_info(self.caret.pos) + && kids >= 2 + && self.caret.path.len() < MAX_DEPTH + { + self.caret.path.push((i, 1)); + self.caret.pos = 0; + } + } + + /// The caret is in a script of a script node whose base is empty (the n of `ₙC_r`). + fn in_prescript(&self) -> bool { + let Some((&(i, c), parent)) = self.caret.path.split_last() else { return false }; + c > 0 + && seq_at(&self.math.body, parent) + .and_then(|s| s.get(i)) + .is_some_and(|n| matches!(n.bare(), Node::Script { base, .. } if base.is_empty())) + } + + fn extend(&mut self, key: Key) { + let len = self.len_here(); + let pos = self.caret.pos; + let to = match key { + Key::Left => pos.saturating_sub(1), + Key::Right => (pos + 1).min(len), + Key::Home => 0, + _ => len, + }; + if self.anchor.is_none() { + self.anchor = Some(pos); + } + self.caret.pos = to; + if self.anchor == Some(to) { + self.anchor = None; + } + } + + /// Facts about the unit at `pos`: (node index, is text, child count, is a script). + fn unit_info(&self, pos: usize) -> Option<(usize, bool, usize, bool)> { + let seq = self.seq(); + let (i, _) = locate(seq, pos)?; + let n = seq.get(i)?; + Some((i, text_of(n).is_some(), children(n).len(), matches!(n.bare(), Node::Script { .. }))) + } + + fn move_right(&mut self) { + let pos = self.caret.pos; + if pos < self.len_here() { + match self.unit_info(pos) { + Some((i, false, kids, script)) if kids > 0 && self.caret.path.len() < MAX_DEPTH => { + self.caret.path.push((i, 0)); + self.caret.pos = 0; + if script { + // Over the base letter, not in front of it (that is where we came from). + self.caret.pos = self.len_here().min(1); + } + self.enter_lone_grid(); + } + _ => self.caret.pos = pos + 1, + } + } else { + self.leave_right(); + } + } + + /// Caret at the start of a delimiter pair that holds only a grid: step into its first cell. + fn enter_lone_grid(&mut self) { + let grid = matches!(self.seq().as_slice(), [only] if matches!(only.bare(), Node::Matrix { .. } | Node::EqArr { .. })); + if grid && self.caret.pos == 0 && self.caret.path.len() < MAX_DEPTH { + self.caret.path.push((0, 0)); + } + } + + fn move_left(&mut self) { + let pos = self.caret.pos; + if pos > 0 { + match self.unit_info(pos - 1) { + Some((i, false, kids, _)) if kids > 0 && self.caret.path.len() < MAX_DEPTH => { + self.caret.path.push((i, kids - 1)); + self.caret.pos = self.len_here(); + if self.only_grid_in_delim() + && let Some(k) = self.seq().first().map(|n| children(n).len()).filter(|k| *k > 0) + { + self.caret.path.push((0, k - 1)); + self.caret.pos = self.len_here(); + } + } + _ => self.caret.pos = pos - 1, + } + } else { + self.leave_left(); + } + } + + /// True when the caret's sequence holds just one grid (matrix or equation array) inside a + /// delimiter pair, so the caret position before or after the grid looks the same as the + /// grid's own edge and is skipped. + fn only_grid_in_delim(&self) -> bool { + let seq = self.seq(); + let grid = matches!(seq.as_slice(), [only] if matches!(only.bare(), Node::Matrix { .. } | Node::EqArr { .. })); + let Some(&(i, _)) = self.caret.path.last() else { return false }; + let parent = self.caret.path.get(..self.caret.path.len() - 1).and_then(|p| seq_at(&self.math.body, p)); + grid && parent.and_then(|s| s.get(i)).is_some_and(|n| matches!(n.bare(), Node::Delim { .. })) + } + + fn leave_right(&mut self) { + let Some((i, c)) = self.caret.path.pop() else { return }; + let kids = self.seq().get(i).map_or(0, |n| children(n).len()); + if c + 1 < kids { + self.caret.path.push((i, c + 1)); + self.caret.pos = 0; + } else { + self.caret.pos = start_of(self.seq(), i) + 1; + if self.caret.pos == self.len_here() && self.only_grid_in_delim() { + self.leave_right(); + } + } + } + + fn leave_left(&mut self) { + let Some((i, c)) = self.caret.path.pop() else { return }; + if c > 0 { + self.caret.path.push((i, c - 1)); + self.caret.pos = self.len_here(); + } else { + self.caret.pos = start_of(self.seq(), i); + if self.caret.pos == 0 && self.only_grid_in_delim() { + self.leave_left(); + } + } + } + + fn move_vertical(&mut self, up: bool) { + let mut path = self.caret.path.clone(); + let pos = self.caret.pos; + while let Some((i, c)) = path.pop() { + let next = seq_at(&self.math.body, &path).and_then(|s| s.get(i)).and_then(|n| vertical_neighbor(n, c, up)); + if let Some(nc) = next { + path.push((i, nc)); + let n = seq_at(&self.math.body, &path).map_or(0, |s| units(s)); + self.caret = Caret { path, pos: pos.min(n) }; + return; + } + } + self.caret = Caret { path: vec![], pos: if up { 0 } else { units(&self.math.body) } }; + } + + fn backspace(&mut self) { + if let Some((a, b)) = self.selection() { + self.delete_range(a, b); + return; + } + self.anchor = None; + let pos = self.caret.pos; + if pos > 0 { + // Behind a structure with something in it: step inside first (the next Backspace + // deletes from its end), so one key never wipes a whole fraction. + if self.solid_structure(pos - 1) { + let script = self.unit_info(pos - 1).is_some_and(|u| u.3); + self.move_left(); + // A script has one visible tail, so the same key removes its last character + // (stepping in with no visible change reads as a dead key). + let n = self.len_here(); + if script && n > 0 && !self.solid_structure(n - 1) { + self.delete_range(n - 1, n); + } + } else { + self.delete_range(pos - 1, pos); + } + } else { + self.dissolve(); + } + } + + /// True when the unit at `pos` is a structure that holds something (so deleting it would + /// lose content). + fn solid_structure(&self, pos: usize) -> bool { + let Some((i, false, kids, _)) = self.unit_info(pos) else { return false }; + kids > 0 && self.caret.path.len() < MAX_DEPTH && self.seq().get(i).is_some_and(|n| children(n).iter().any(|k| units(k) > 0)) + } + + fn delete_forward(&mut self) { + if let Some((a, b)) = self.selection() { + self.delete_range(a, b); + return; + } + self.anchor = None; + let pos = self.caret.pos; + if pos < self.len_here() { + if self.solid_structure(pos) { + self.move_right(); + } else { + self.delete_range(pos, pos + 1); + } + } else { + let _ = self.remove_if_empty(); + } + } + + /// The structure the caret is in, when every one of its places is empty: remove it. + fn remove_if_empty(&mut self) -> bool { + let Some(&(i, _)) = self.caret.path.last() else { return false }; + let mut parent_path = self.caret.path.clone(); + parent_path.pop(); + let empty = seq_at(&self.math.body, &parent_path).and_then(|s| s.get(i)).is_some_and(|n| children(n).iter().all(|k| units(k) == 0)); + if !empty { + return false; + } + self.caret.path = parent_path; + let start = start_of(self.seq(), i); + if let Some(seq) = self.seq_mut() { + if i < seq.len() { + seq.remove(i); + } + merge(seq); + } + self.caret.pos = start; + true + } + + /// Backspace at the start of a place: remove an empty structure, drop an empty script part, + /// unwrap a structure into its contents, or step out to the left. + fn dissolve(&mut self) { + let Some(&(i, c)) = self.caret.path.last() else { return }; + if self.remove_if_empty() { + return; + } + let mut parent_path = self.caret.path.clone(); + parent_path.pop(); + let facts = seq_at(&self.math.body, &parent_path).and_then(|s| s.get(i)).map(|n| { + let kids = children(n); + (matches!(n.bare(), Node::Script { .. }), kids.get(c).is_none_or(|k| units(k) == 0), kids.iter().take(c).map(|k| units(k)).sum::()) + }); + let Some((script, this_empty, before)) = facts else { return }; + if script { + if c > 0 && this_empty { + self.drop_script_part(parent_path, i, c); + } else { + self.leave_left(); + } + } else if c == 0 || this_empty { + self.unwrap_node(parent_path, i, before); + } else { + self.leave_left(); + } + } + + fn drop_script_part(&mut self, parent_path: Path, i: usize, c: usize) { + let Some(seq) = seq_at_mut(&mut self.math.body, &parent_path) else { return }; + let Some(Node::Script { base, sub, sup }) = seq.get_mut(i).map(bare_mut) else { return }; + if sub.is_some() && c == 1 { + *sub = None; + } else { + *sup = None; + } + let base_units = units(base); + if sub.is_none() && sup.is_none() { + let flat = std::mem::take(base); + let start = start_of(seq, i); + seq.splice(i..=i, flat); + merge(seq); + self.caret = Caret { path: parent_path, pos: start + base_units }; + } else { + self.caret.path = parent_path; + self.caret.path.push((i, 0)); + self.caret.pos = base_units; + } + } + + fn unwrap_node(&mut self, parent_path: Path, i: usize, before: usize) { + let Some(seq) = seq_at_mut(&mut self.math.body, &parent_path) else { return }; + if i >= seq.len() { + return; + } + let mut node = seq.remove(i); + let mut flat: Vec = vec![]; + for k in children_mut(&mut node) { + flat.extend(std::mem::take(k)); + } + let start = start_of(seq, i); + seq.splice(i..i, flat); + merge(seq); + self.caret = Caret { path: parent_path, pos: start + before }; + } + + /// The tree for display: every empty place holds a box character so it can be seen and + /// clicked. The edited tree itself is untouched. + pub fn display_math(&self) -> Math { + fn fill(seq: &mut Seq, depth: usize) { + if depth > MAX_DEPTH { + return; + } + let len = seq.len(); + for (i, n) in seq.iter_mut().enumerate() { + // A script with nothing before it and something after (the n of `ₙC_r`) has no + // base to show: only its scripts are places. + let prescript = i + 1 < len && matches!(n, Node::Script { base, sub, sup } if base.is_empty() && (sub.is_some() || sup.is_some())); + for (c, child) in children_mut(n).into_iter().enumerate() { + if units(child) == 0 { + if !(prescript && c == 0) { + *child = vec![Node::Text("\u{25A1}".into())]; + } + } else { + fill(child, depth + 1); + } + } + } + } + let mut m = self.math.clone(); + fill(&mut m.body, 0); + m + } + + /// True when the caret points at a real place of the tree (tests, debug). + pub fn is_valid(&self) -> bool { + seq_at(&self.math.body, &self.caret.path).is_some_and(|s| self.caret.pos <= units(s)) + } +} + +#[cfg(test)] +mod tests; diff --git a/crates/equashion-math/src/edit/tests.rs b/crates/equashion-math/src/edit/tests.rs new file mode 100644 index 00000000..c1524d83 --- /dev/null +++ b/crates/equashion-math/src/edit/tests.rs @@ -0,0 +1,955 @@ +use super::*; +use crate::{from_linear, template, to_linear}; + +fn ed() -> Editor { + Editor::new(Math::default()) +} + +fn typed(s: &str) -> Editor { + let mut e = ed(); + e.type_str(s); + e +} + +fn lin(e: &Editor) -> String { + to_linear(e.math()).replace(' ', "") +} + +fn tpl(id: &str) -> Math { + template(id).map(|t| t.math).unwrap_or_default() +} + +#[test] +fn x_caret_2_builds_a_superscript_with_the_caret_inside() { + let e = typed("x^2"); + assert_eq!(lin(&e), "x^2"); + assert!(matches!(e.math().body.first(), Some(Node::Script { sup: Some(_), .. }))); + assert_eq!(e.caret().path.len(), 1, "caret is inside the superscript"); + assert_eq!(e.caret().pos, 1); +} + +#[test] +fn right_arrow_leaves_the_superscript() { + let mut e = typed("x^2"); + e.key(Key::Right, false); + assert!(e.caret().path.is_empty()); + e.type_str("+1"); + assert_eq!(lin(&e), "x^2+1"); +} + +#[test] +fn underscore_makes_a_subscript_and_both_parts_combine() { + let e = typed("a_1"); + assert_eq!(lin(&e), "a_1"); + let mut e = typed("x^2"); + e.key(Key::Right, false); + e.type_str("_i"); + assert!(matches!(e.math().body.first(), Some(Node::Script { sub: Some(_), sup: Some(_), .. })), "{:?}", e.math().body); + assert_eq!(e.math().body.len(), 1, "one script, not two"); +} + +#[test] +fn a_number_stays_together_as_the_base() { + let e = typed("12^3"); + assert!(matches!(e.math().body.first(), Some(Node::Script { base, .. }) if base.len() == 1)); + let e = typed("ab^2"); + assert_eq!(e.math().body.len(), 2, "only b takes the exponent"); +} + +#[test] +fn slash_turns_the_preceding_term_into_a_numerator() { + let mut e = typed("1+ab/"); + match e.math().body.get(1) { + Some(Node::Frac { num, den }) => { + assert_eq!(units(num), 2); + assert!(den.is_empty()); + } + other => panic!("{other:?}"), + } + assert_eq!(e.caret().path, vec![(1, 1)], "caret is in the denominator"); + e.type_str("c"); + e.key(Key::Right, false); + e.type_str("=2"); + assert_eq!(lin(&e).replace(['(', ')'], ""), "1+ab/c=2"); +} + +#[test] +fn slash_with_nothing_before_it_puts_the_caret_in_the_numerator() { + let e = typed("/"); + assert_eq!(e.caret().path, vec![(0, 0)]); +} + +#[test] +fn sqrt_typed_makes_a_root_with_the_caret_inside() { + let mut e = typed("sqrt"); + assert!(matches!(e.math().body.first(), Some(Node::Rad { deg: None, .. }))); + assert_eq!(e.caret().path, vec![(0, 0)]); + e.type_str("x+1"); + e.key(Key::Right, false); + e.type_str("y"); + assert!(lin(&e).contains('√') && lin(&e).ends_with('y'), "{}", lin(&e)); +} + +#[test] +fn greek_names_become_symbols() { + assert_eq!(lin(&typed("alpha")), "α"); + assert_eq!(lin(&typed("2pi r")), "2πr"); + assert_eq!(lin(&typed("Delta x")), "Δx"); + assert_eq!(lin(&typed("beta+theta")), "β+θ"); + // A name inside a longer word stays text; typing the middle of epsilon does not fire psi. + assert_eq!(lin(&typed("epsilon")), "ε"); + assert_eq!(lin(&typed("menu")), "menu"); + assert_eq!(lin(&typed("a b")), "ab", "spaces are ignored"); +} + +#[test] +fn hyphen_is_a_real_minus() { + assert_eq!(lin(&typed("a-b")), "a\u{2212}b"); +} + +#[test] +fn arrows_walk_the_tree_in_visual_order() { + let mut e = typed("a/b"); + // Caret is in the denominator after b. Left twice: before b, then the end of the numerator. + e.key(Key::Left, false); + assert_eq!((e.caret().path.clone(), e.caret().pos), (vec![(0, 1)], 0)); + e.key(Key::Left, false); + assert_eq!((e.caret().path.clone(), e.caret().pos), (vec![(0, 0)], 1)); + e.key(Key::Left, false); + e.key(Key::Left, false); + assert_eq!((e.caret().path.clone(), e.caret().pos), (vec![], 0)); + // And back: Right enters the numerator, crosses to the denominator, leaves. + e.key(Key::Right, false); + assert_eq!(e.caret().path, vec![(0, 0)]); + e.key(Key::Right, false); + e.key(Key::Right, false); + assert_eq!(e.caret().path, vec![(0, 1)]); + e.key(Key::Right, false); + e.key(Key::Right, false); + assert_eq!((e.caret().path.clone(), e.caret().pos), (vec![], 1)); +} + +#[test] +fn up_and_down_move_between_numerator_denominator_and_scripts() { + let mut e = typed("a/b"); + e.key(Key::Up, false); + assert_eq!(e.caret().path, vec![(0, 0)]); + e.key(Key::Down, false); + assert_eq!(e.caret().path, vec![(0, 1)]); + let mut e = typed("x^2"); + e.key(Key::Down, false); + assert_eq!(e.caret().path, vec![(0, 0)], "no subscript: down goes to the base"); + e.key(Key::Up, false); + assert_eq!(e.caret().path, vec![(0, 1)]); + // Up from the top row goes to the start, Down to the end. + let mut e = typed("ab"); + e.key(Key::Up, false); + assert_eq!(e.caret().pos, 0); + e.key(Key::Down, false); + assert_eq!(e.caret().pos, 2); +} + +#[test] +fn matrix_cells_are_reached_with_up_and_down() { + let mut e = ed(); + e.insert_template(&tpl("matrix2")); + e.type_str("1"); + e.key(Key::Down, false); + e.type_str("3"); + let m = lin(&e); + assert!(m.contains('1') && m.contains('3'), "{m}"); + let at = e.caret().path.last().map(|p| p.1); + assert_eq!(at, Some(2), "second row, first column"); +} + +#[test] +fn backspace_deletes_the_previous_atom_and_unwraps_empty_structures() { + let mut e = typed("x^2"); + e.key(Key::Backspace, false); + assert_eq!(e.caret().path.len(), 1); + e.key(Key::Backspace, false); + // The empty exponent is dropped and the base remains. + assert!(e.caret().path.is_empty()); + assert_eq!(lin(&e), "x"); + assert_eq!(e.caret().pos, 1); + e.key(Key::Backspace, false); + assert!(e.is_blank()); + // Backspace behind a whole fraction steps into it; a second one deletes its last atom. + let mut e = typed("a/b"); + e.key(Key::Right, false); + e.key(Key::Backspace, false); + assert!(!e.is_blank(), "one key never wipes a fraction"); + assert_eq!(e.caret().path, vec![(0, 1)]); + e.key(Key::Backspace, false); + assert_eq!(e.caret().path, vec![(0, 1)]); + assert!(!e.is_blank()); + // Backspace in the denominator at its start unwraps the fraction. + let mut e = typed("a/b"); + e.key(Key::Up, false); + e.key(Key::Home, false); + e.key(Key::Backspace, false); + assert_eq!(lin(&e), "ab"); + assert!(e.caret().path.is_empty()); + assert_eq!(e.caret().pos, 0, "in front of a"); + // At the start of the denominator, Backspace only steps back into the numerator. + let mut e = typed("a/b"); + e.key(Key::Left, false); + e.key(Key::Backspace, false); + assert_eq!(lin(&e).replace(['(', ')'], ""), "a/b"); + assert_eq!(e.caret().path, vec![(0, 0)]); +} + +#[test] +fn backspace_in_a_fresh_structure_removes_it() { + let mut e = ed(); + e.insert_template(&tpl("frac")); + e.key(Key::Backspace, false); + assert!(e.is_blank() && e.math().body.is_empty()); + let mut e = ed(); + e.insert_template(&tpl("sqrt")); + e.key(Key::Backspace, false); + assert!(e.math().body.is_empty()); +} + +#[test] +fn delete_removes_the_next_atom() { + let mut e = typed("abc"); + e.key(Key::Home, false); + e.key(Key::Delete, false); + assert_eq!(lin(&e), "bc"); + // Delete in front of a structure steps into it instead of wiping it. + let mut e = typed("a/b"); + e.key(Key::Home, false); + e.key(Key::Home, false); + e.key(Key::Delete, false); + assert!(!e.is_blank()); + assert_eq!(e.caret().path, vec![(0, 0)]); + // Delete at the end of an empty structure removes it. + let mut e = ed(); + e.insert_template(&tpl("sqrt")); + e.key(Key::Delete, false); + assert!(e.math().body.is_empty()); +} + +#[test] +fn home_and_end_go_to_the_row_ends_then_the_whole_equation() { + let mut e = typed("a+b/cd"); + e.key(Key::Home, false); + assert_eq!(e.caret().pos, 0); + assert_eq!(e.caret().path, vec![(1, 1)], "start of the denominator row"); + e.key(Key::Home, false); + assert!(e.caret().path.is_empty()); + assert_eq!(e.caret().pos, 0); + e.key(Key::End, false); + assert_eq!(e.caret().pos, units(&e.math().body)); +} + +#[test] +fn shift_arrows_select_and_typing_replaces() { + let mut e = typed("abc"); + e.key(Key::Left, true); + e.key(Key::Left, true); + assert_eq!(e.selection(), Some((1, 3))); + e.type_str("x"); + assert_eq!(lin(&e), "ax"); + assert_eq!(e.selection(), None); + // Shift+Home selects to the row start; plain Left collapses to its start. + let mut e = typed("abc"); + e.key(Key::Home, true); + assert_eq!(e.selection(), Some((0, 3))); + e.key(Key::Left, false); + assert_eq!((e.selection(), e.caret().pos), (None, 0)); + let mut e = typed("abc"); + e.select_all(); + e.key(Key::Backspace, false); + assert!(e.is_blank()); +} + +#[test] +fn selection_is_wrapped_by_slash_caret_and_templates() { + let mut e = typed("a+bc"); + e.key(Key::Left, true); + e.key(Key::Left, true); + e.type_str("/"); + assert!(matches!(e.math().body.get(1), Some(Node::Frac { num, .. }) if units(num) == 2)); + let mut e = typed("xy"); + e.key(Key::Left, true); + e.type_str("^"); + assert!(matches!(e.math().body.get(1), Some(Node::Script { base, .. }) if units(base) == 1)); + let mut e = typed("ab"); + e.select_all(); + e.insert_template(&tpl("sqrt")); + assert!(matches!(e.math().body.first(), Some(Node::Rad { body, .. }) if units(body) == 2)); + assert_eq!(e.caret().path, vec![(0, 0)]); + assert_eq!(e.caret().pos, 2, "caret after the wrapped text"); +} + +#[test] +fn palette_structures_land_the_caret_in_the_first_blank() { + let mut e = ed(); + e.insert_template(&tpl("frac")); + assert_eq!(e.caret().path, vec![(0, 0)]); + e.type_str("a"); + e.key(Key::Down, false); + e.type_str("b"); + assert_eq!(lin(&e).replace(['(', ')'], ""), "a/b"); + // A superscript from the palette takes the letter before the caret. + let mut e = typed("b"); + e.insert_template(&tpl("sup")); + e.type_str("2"); + assert_eq!(lin(&e), "b^2"); + // An integral puts the caret in its lower limit. + let mut e = ed(); + e.insert_template(&tpl("intlim")); + e.type_str("0"); + e.key(Key::Right, false); + e.type_str("1"); + assert!(lin(&e).contains('0') && lin(&e).contains('1')); + // A fraction takes the term before it. + let mut e = typed("x+12"); + e.insert_template(&tpl("frac")); + assert!(matches!(e.math().body.get(1), Some(Node::Frac { num, .. }) if units(num) == 2)); + assert_eq!(e.caret().path, vec![(1, 1)]); +} + +#[test] +fn every_template_inserts_and_accepts_typing() { + for t in crate::templates() { + let mut e = typed("x"); + e.insert_template(&t.math); + assert!(e.is_valid(), "{}", t.id); + e.type_str("y"); + assert!(e.is_valid(), "{}", t.id); + assert!(lin(&e).contains('y'), "{}: {}", t.id, lin(&e)); + // Left to the start and Right to the end never get stuck. + for _ in 0..50 { + e.key(Key::Left, false); + } + assert_eq!((e.caret().path.len(), e.caret().pos), (0, 0), "{}", t.id); + for _ in 0..50 { + e.key(Key::Right, false); + } + assert_eq!(e.caret().path.len(), 0, "{}", t.id); + assert_eq!(e.caret().pos, units(&e.math().body), "{}", t.id); + } +} + +#[test] +fn display_math_shows_a_box_in_every_empty_place_and_leaves_the_tree_alone() { + let mut e = ed(); + e.insert_template(&tpl("frac")); + let d = to_linear(&e.display_math()); + assert_eq!(d.matches('\u{25A1}').count(), 2, "{d}"); + assert!(e.math().body.iter().all(|n| children(n).iter().all(|k| k.is_empty()))); +} + +#[test] +fn set_caret_clamps_stale_positions() { + let mut e = typed("ab"); + e.set_caret(Caret { path: vec![(7, 3), (1, 1)], pos: 99 }); + assert!(e.is_valid()); + e.set_caret(Caret { path: vec![], pos: 99 }); + assert_eq!(e.caret().pos, 2); + let mut e = typed("a/b"); + e.set_caret(Caret { path: vec![(0, 1)], pos: 0 }); + e.drag_caret(Caret { path: vec![(0, 1)], pos: 1 }); + assert_eq!(e.selection(), Some((0, 1))); + e.drag_caret(Caret { path: vec![], pos: 0 }); + assert_eq!(e.selection(), None, "dragging out of the row just moves the caret"); +} + +#[test] +fn loaded_equations_are_editable() { + let mut e = Editor::new(from_linear("x^2+1")); + e.key(Key::Left, false); + e.type_str("0"); + assert_eq!(lin(&e), "x^2+01"); + e.key(Key::Home, false); + e.key(Key::Home, false); + e.key(Key::Right, false); + assert!(e.is_valid()); +} + +#[test] +fn nesting_depth_is_capped() { + let mut e = ed(); + for _ in 0..(MAX_DEPTH * 3) { + e.type_str("x^"); + } + for _ in 0..(MAX_DEPTH * 3) { + e.type_str("/"); + e.insert_template(&tpl("frac")); + } + assert!(e.caret().path.len() <= MAX_DEPTH); + assert!(e.is_valid()); + // The tree is walkable to its deepest place and back. + for _ in 0..1000 { + e.key(Key::Left, false); + } + assert!(e.is_valid()); +} + +#[test] +fn hostile_key_sequences_never_panic_and_keep_the_caret_valid() { + let keys = [Key::Left, Key::Right, Key::Up, Key::Down, Key::Home, Key::End, Key::Backspace, Key::Delete]; + let texts = [ + "x", "^", "_", "/", "sqrt", "alpha", "2", "-", "(", " ", "pi", "\u{0}", "é", "\n", ")", "[", "}", "+-", "<=", "->", "sum", "int_", "sin", + "sinh", "lim", "pm", "*", "arcsin", + ]; + let ids: Vec<&'static str> = crate::templates().iter().map(|t| t.id).collect(); + let mut seed = 0x2545_F491_4F6C_DD1Du64; + let mut next = move || { + seed ^= seed << 13; + seed ^= seed >> 7; + seed ^= seed << 17; + seed + }; + for round in 0..40 { + let mut e = if round % 5 == 0 { Editor::new(from_linear("(a+b)^2/sqrt(x)")) } else { ed() }; + for step in 0..1500 { + let r = next(); + match r % 10 { + 0..=3 => e.key(keys[(r >> 8) as usize % keys.len()], (r >> 20) & 1 == 1), + 4..=7 => e.type_str(texts[(r >> 8) as usize % texts.len()]), + 8 => { + let id = ids[(r >> 8) as usize % ids.len()]; + e.insert_template(&tpl(id)); + } + _ => match (r >> 8) % 4 { + 0 => e.select_all(), + 1 => e.set_caret(Caret { path: vec![((r >> 12) as usize % 5, (r >> 16) as usize % 4)], pos: (r >> 24) as usize % 9 }), + 2 => e.drag_caret(Caret { path: e.caret().path.clone(), pos: (r >> 24) as usize % 9 }), + _ => { + let _ = e.display_math(); + } + }, + } + assert!(e.is_valid(), "round {round} step {step}: {:?}", e.caret()); + assert!(e.caret().path.len() <= MAX_DEPTH); + } + // Whatever was built still prints and parses. + let _ = crate::to_omml(e.math()); + let _ = to_linear(e.math()); + } +} + +#[test] +fn key_names_parse() { + assert_eq!(Key::parse("Left"), Some(Key::Left)); + assert_eq!(Key::parse(" backspace "), Some(Key::Backspace)); + assert_eq!(Key::parse("del"), Some(Key::Delete)); + assert_eq!(Key::parse("x"), None); +} + +fn ty(s: &str) -> String { + lin(&typed(s)) +} + +#[test] +fn brackets_pair_up_and_the_closing_one_steps_out() { + let mut e = typed("(a+b"); + assert_eq!(e.caret().path.len(), 1, "caret is inside the new pair"); + assert!(matches!(e.math().body.first(), Some(Node::Delim { .. }))); + e.type_str(")+c"); + assert!(e.caret().path.is_empty(), "the closing bracket stepped out"); + assert_eq!(e.math().body.len(), 2, "{:?}", e.math().body); + assert_eq!(ty("(a+b)+c"), "(a+b)+c"); + // A stray closing bracket is just a character. + assert_eq!(ty("a)"), "a)"); + assert_eq!(ty("[x]"), "[x]"); +} + +#[test] +fn open_bracket_wraps_the_selection() { + let mut e = typed("ab"); + e.key(Key::Left, true); + e.key(Key::Left, true); + e.type_str("("); + assert!(matches!(e.math().body.first(), Some(Node::Delim { items, .. }) if units(&items[0]) == 2)); + assert!(e.caret().path.is_empty()); +} + +#[test] +fn slash_takes_a_parenthesised_group_without_its_parentheses() { + let e = typed("(a+b)/"); + match e.math().body.first() { + Some(Node::Frac { num, den }) => { + assert_eq!(units(num), 3, "a+b, parentheses dropped"); + assert!(den.is_empty()); + } + other => panic!("{other:?}"), + } + assert_eq!(e.caret().path, vec![(0, 1)]); +} + +#[test] +fn the_quadratic_formula_types_in_reading_order() { + let mut e = ed(); + e.type_str("x=(-b+-sqrt(b^2"); + e.key(Key::Right, false); + e.type_str("-4ac))/2a"); + // x = frac( -b ± sqrt(b^2 - 4ac), 2a ) + assert_eq!(e.math().body.len(), 2, "{:?}", e.math().body); + let Some(Node::Frac { num, den }) = e.math().body.get(1) else { panic!("{:?}", e.math().body) }; + assert_eq!(units(den), 2, "2a is the denominator"); + let l = to_linear(&Math::new(num.clone())).replace(' ', ""); + assert!(l.contains('\u{B1}') && l.contains('\u{221A}') && l.contains("4ac"), "{l}"); + assert!(!l.starts_with('('), "no redundant parentheses: {l}"); + assert!(matches!(num.first(), Some(Node::Text(t)) if t.starts_with('\u{2212}'))); +} + +#[test] +fn plus_minus_and_symbol_words_convert() { + assert_eq!(ty("a+-b"), "a\u{B1}b"); + assert_eq!(ty("pm"), "\u{B1}"); + assert_eq!(ty("bpm"), "bpm", "pm inside a word stays"); + assert_eq!(ty("a<=b"), "a\u{2264}b"); + assert_eq!(ty("a>=b"), "a\u{2265}b"); + assert_eq!(ty("a!=b"), "a\u{2260}b"); + assert_eq!(ty("x->y"), "x\u{2192}y"); + assert_eq!(ty("a*b"), "a\u{B7}b"); + assert_eq!(ty("2times3"), "2\u{D7}3"); +} + +#[test] +fn big_operators_and_functions_convert_when_typed() { + let e = typed("sum"); + assert!(matches!(e.math().body.first(), Some(Node::Nary { op: '\u{2211}', sub: Some(_), sup: Some(_), .. }))); + assert_eq!(e.caret().path, vec![(0, 0)], "caret in the lower limit"); + let mut e = typed("int_0"); + e.key(Key::Right, false); + assert!(matches!(e.math().body.first(), Some(Node::Nary { op: '\u{222B}', sub: Some(_), sup: None, .. })), "{:?}", e.math().body); + let e = typed("int_0^1"); + assert!( + matches!(e.math().body.first(), Some(Node::Nary { sub: Some(s), sup: Some(u), .. }) if units(s) == 1 && units(u) == 1), + "{:?}", + e.math().body + ); + let e = typed("sin"); + assert!(matches!(e.math().body.first(), Some(Node::Func { name, .. }) if name == "sin")); + assert!(matches!(typed("sinh").math().body.first(), Some(Node::Func { name, .. }) if name == "sinh")); + assert!(matches!(typed("arcsin").math().body.first(), Some(Node::Func { name, .. }) if name == "arcsin")); + assert!(matches!(typed("lim").math().body.first(), Some(Node::Limit { .. }))); +} + +#[test] +fn an_operator_ends_a_function_argument() { + let e = typed("sinx+1"); + assert_eq!(e.math().body.len(), 2, "{:?}", e.math().body); + assert!(matches!(e.math().body.first(), Some(Node::Func { body, .. }) if units(body) == 1)); + let e = typed("sin(x)+1"); + assert_eq!(e.math().body.len(), 2, "{:?}", e.math().body); +} + +#[test] +fn right_after_the_last_matrix_cell_leaves_the_parentheses() { + let mut e = ed(); + e.insert_template(&tpl("matrix2")); + e.type_str("1"); + for k in ["2", "3", "4"] { + e.key(Key::Right, false); + e.type_str(k); + } + e.key(Key::Right, false); + assert!(e.caret().path.is_empty(), "one Right is enough: {:?}", e.caret()); + e.type_str("+x"); + assert_eq!(e.math().body.len(), 2); + // And back in: Left lands in the last cell. + e.key(Key::Left, false); + e.key(Key::Left, false); + e.key(Key::Left, false); + assert_eq!(e.caret().path.len(), 2, "{:?}", e.caret()); +} + +#[test] +fn plain_fence_characters_in_hostile_order_stay_valid() { + let mut e = ed(); + for _ in 0..200 { + e.type_str("([{"); + } + for _ in 0..200 { + e.type_str(")]}"); + } + assert!(e.is_valid()); +} + +#[test] +fn backspace_after_a_filled_structure_steps_in_then_deletes_inside() { + for src in ["x+a/b", "x+sqrtab", "x+(ab)"] { + let mut e = typed(src); + e.key(Key::Right, false); + let before = lin(&e); + e.key(Key::Backspace, false); + assert_eq!(lin(&e), before, "{src}: first Backspace only enters"); + assert!(!e.caret().path.is_empty(), "{src}"); + e.key(Key::Backspace, false); + assert_ne!(lin(&e), before, "{src}: second Backspace deletes an atom"); + assert!(lin(&e).starts_with("x+"), "{src}"); + } +} + +#[test] +fn undo_and_redo_restore_tree_and_caret() { + let mut e = typed("x^2"); + e.key(Key::Right, false); + e.type_str("+1"); + assert!(e.undo()); + assert_eq!(lin(&e), "x^2"); + assert!(e.undo()); + assert!(e.is_blank()); + assert!(!e.undo()); + assert!(e.redo()); + assert_eq!(lin(&e), "x^2"); + assert!(e.redo()); + assert_eq!(lin(&e), "x^2+1"); + assert!(!e.redo()); + // A wiped fraction comes back. + let mut e = typed("a/b"); + e.select_all(); + e.key(Key::Backspace, false); + assert!(e.is_blank()); + e.key(Key::Undo, false); + assert_eq!(lin(&e).replace(['(', ')'], ""), "a/b"); + // A new edit drops the redo branch. + e.type_str("c"); + assert!(!e.redo()); +} + +#[test] +fn cut_and_copy_use_linear_text() { + let mut e = typed("ab+c"); + assert_eq!(e.selected_linear(), None); + e.key(Key::Left, true); + e.key(Key::Left, true); + assert_eq!(e.selected_linear().as_deref(), Some("+c")); + assert_eq!(e.cut().as_deref(), Some("+c")); + assert_eq!(lin(&e), "ab"); + e.key(Key::Undo, false); + assert_eq!(lin(&e), "ab+c"); +} + +#[test] +fn tab_walks_the_places_and_never_leaves_the_tree() { + let mut e = typed("a/b"); + e.key(Key::Up, false); + e.key(Key::Tab, false); + assert_eq!(e.caret().path, vec![(0, 1)], "numerator to denominator"); + e.key(Key::Tab, false); + assert!(e.caret().path.is_empty(), "out of the last place"); + e.key(Key::Tab, true); + assert_eq!(e.caret().path, vec![(0, 1)], "Shift+Tab goes back"); + let mut e = typed("x^2"); + e.key(Key::Tab, false); + e.type_str("+1"); + assert_eq!(lin(&e), "x^2+1", "Tab out of the exponent keeps typing in the tree"); + let mut e = typed("[1,2;3,4]"); + for _ in 0..50 { + e.key(Key::Tab, false); + e.key(Key::Tab, true); + assert!(e.is_valid()); + } +} + +#[test] +fn parentheses_around_a_denominator_are_dropped_like_the_numerator() { + let e = typed("(x+1)/(x-1)"); + let Some(Node::Frac { num, den }) = e.math().body.first() else { panic!("{:?}", e.math().body) }; + assert!(!matches!(num.first(), Some(Node::Delim { .. }))); + assert!(!matches!(den.first(), Some(Node::Delim { .. })), "{den:?}"); + // Parentheses inside a longer denominator stay. + let e = typed("a/(b)c"); + assert!(matches!(e.math().body.first(), Some(Node::Frac { .. }))); +} + +#[test] +fn hostile_keys_with_undo_never_panic() { + let keys = [Key::Left, Key::Right, Key::Up, Key::Down, Key::Home, Key::End, Key::Backspace, Key::Delete, Key::Tab, Key::Undo, Key::Redo]; + let mut seed = 12345u64; + let mut e = ed(); + for _ in 0..3000 { + seed = seed.wrapping_mul(6364136223846793005).wrapping_add(1442695040888963407); + let r = (seed >> 33) as usize; + match r % 4 { + 0 => e.type_str(["x", "^", "_", "/", "(", ")", "sqrt", "alpha", "+", "-"][r / 4 % 10]), + _ => e.key(keys[r / 4 % keys.len()], r.is_multiple_of(7)), + } + assert!(e.is_valid()); + } +} + +#[test] +fn operators_leave_a_filled_exponent_or_subscript() { + assert_eq!(lin(&typed("x^2+y^2=z^2")), "x^2+y^2=z^2"); + assert_eq!(lin(&typed("b^2-4ac")), "b^2−4ac"); + assert_eq!(lin(&typed("a_1+a_2")), "a_1+a_2"); + // An empty exponent keeps a leading minus: x^-1. + assert_eq!(lin(&typed("x^-1")), "x^−1"); + // Limits of a big operator are not scripts: `=` stays in the limit. + assert_eq!(typed("sumi=1").caret().path, vec![(0, 0)], "the lower limit keeps the ="); +} + +#[test] +fn typed_latex_commands_become_symbols_and_structures() { + assert_eq!(ty("\\alpha"), "α"); + assert_eq!(ty("\\alpha\\beta"), "αβ"); + assert_eq!(ty("2\\pi r"), "2πr"); + assert_eq!(ty("a\\leq b"), "a≤b"); + assert_eq!(ty("a\\in b"), "a∈b"); + assert_eq!(ty("\\int_0^1"), ty("int_0^1")); + assert!(matches!(typed("\\int").math().body.first(), Some(Node::Nary { op: '\u{222B}', .. })), "int is not eaten by in"); + assert!(matches!(typed("\\sqrt").math().body.first(), Some(Node::Rad { .. }))); + assert!(matches!(typed("\\sin").math().body.first(), Some(Node::Func { name, .. }) if name == "sin") || typed("\\sin ").math().body.len() == 1); + assert!(matches!(typed("\\sin ").math().body.first(), Some(Node::Func { name, .. }) if name == "sin")); + assert!(matches!(typed("\\sinh").math().body.first(), Some(Node::Func { name, .. }) if name == "sinh")); + // An unknown command stays as typed. + assert!(matches!(typed("\\foo").math().body.first(), Some(Node::Text(t)) if t == "\\foo")); + assert_eq!(ty("\\left(x\\right)"), "(x)"); +} + +#[test] +fn braces_after_a_latex_command_are_its_arguments() { + assert_eq!(ty("\\frac{a+b}{c}"), ty("(a+b)/c")); + assert_eq!(ty("\\frac{1}{2}+x"), "1/2+x"); + assert_eq!(ty("\\sqrt{x+1}"), "√(x+1)"); + assert_eq!(ty("x^{2}+1"), "x^2+1"); + assert_eq!(ty("x_{ab}+1"), "x_(ab)+1"); + assert_eq!(ty("\\sum_{i=1}^{n}i"), ty("sum_i=1^n i")); + assert_eq!(ty("e^{-x^{2}}"), ty("e^-x^2")); + // A real brace pair is still a brace pair. + assert!(matches!(typed("{a}").math().body.first(), Some(Node::Delim { open, .. }) if open == "{")); + // Unmatched braces never panic or leave the caret invalid. + for s in ["}", "\\frac}}", "\\frac{{{", "x^{", "\\sqrt}{"] { + assert!(typed(s).is_valid(), "{s}"); + } +} + +#[test] +fn a_limit_subscript_does_not_nest_an_empty_script() { + for s in ["lim_x", "\\lim_x", "\\lim_{x\\to0}"] { + let e = typed(s); + let Some(Node::Limit { lim, .. }) = e.math().body.first() else { panic!("{s}: {:?}", e.math().body) }; + assert!(!lim.iter().any(|n| matches!(n.bare(), Node::Script { .. })), "{s}: stray script in {lim:?}"); + assert!(!to_linear(e.math()).contains("()_"), "{s}: {}", to_linear(e.math())); + } + assert_eq!(lin(&typed("\\lim_{x\\to0}")), lin(&typed("lim_x→0"))); + assert!(matches!(typed("\\lim_{x\\to0}").math().body.first(), Some(Node::Limit { lim, .. }) if units(lim) == 3)); + // The same for an operator whose limit places already exist. + let e = typed("sum_i"); + assert!(matches!(e.math().body.first(), Some(Node::Nary { sub: Some(s), .. }) if units(s) == 1)); +} + +#[test] +fn select_between_covers_whole_structures_across_rows() { + let mut e = typed("a+x/y"); + // From the start of the top row to inside the denominator: everything up to the fraction. + let start = Caret { path: vec![], pos: 0 }; + let in_den = e.caret().clone(); + assert_eq!(in_den.path.len(), 1); + e.select_between(&start, &in_den); + assert!(e.caret().path.is_empty()); + assert_eq!(e.selection(), Some((0, units(&e.math().body)))); + // Backwards, from the denominator to the start. + e.select_between(&in_den, &start); + assert_eq!(e.selection(), Some((0, units(&e.math().body)))); + // Within one row it is a plain range. + let mut e = typed("abcd"); + e.select_between(&Caret { path: vec![], pos: 1 }, &Caret { path: vec![], pos: 3 }); + assert_eq!(e.selection(), Some((1, 3))); + // Stale carets never panic. + e.select_between(&Caret { path: vec![(9, 9)], pos: 9 }, &Caret { path: vec![(8, 1), (1, 1)], pos: 99 }); + assert!(e.is_valid()); +} + +#[test] +fn typed_latex_root_degree() { + let e = typed("\\sqrt[3]{x}"); + assert!(matches!(e.math().body.first(), Some(Node::Rad { deg: Some(d), body }) if units(d) == 1 && units(body) == 1), "{:?}", e.math().body); + assert_eq!(ty("\\sqrt[3]{x}+1"), ty("\\sqrt[3]{x}") + "+1"); + // Without a command in front a `[` is a bracket as before, also inside a radical. + let e = typed("sqrt["); + assert!(matches!(e.math().body.first(), Some(Node::Rad { deg: None, .. }))); + // A stray `]` never panics. + let e = typed("\\sqrt[]]"); + assert!(e.is_valid()); +} + +#[test] +fn parentheses_closing_a_radicand_or_script_are_not_kept() { + let strip = |s: &str| ty(s).replace(' ', ""); + assert_eq!(strip("sqrt(b^2-4ac)"), "√(b^2−4ac)"); + let e = typed("sqrt(b^2-4ac)"); + assert!(matches!(e.math().body.first(), Some(Node::Rad { body, .. }) if !body.iter().any(|n| matches!(n.bare(), Node::Delim { .. })))); + let e = typed("sum_(i=1)^n"); + assert!( + matches!(e.math().body.first(), Some(Node::Nary { sub: Some(s), .. }) if !s.iter().any(|n| matches!(n.bare(), Node::Delim { .. }))), + "{:?}", + e.math().body + ); + let e = typed("x^(n+1)"); + assert!(matches!(e.math().body.first(), Some(Node::Script { sup: Some(s), .. }) if !s.iter().any(|n| matches!(n.bare(), Node::Delim { .. })))); + // Nested groups keep the inner ones, and the quadratic formula still closes properly. + let e = typed("x=(-b+-sqrt(b^2-4ac))/2a"); + assert!(matches!(e.math().body.last(), Some(Node::Frac { .. }))); +} + +#[test] +fn backspace_after_an_exponent_deletes_its_last_character() { + let mut e = typed("z^3"); + e.key(Key::Right, false); + assert!(e.caret().path.is_empty()); + e.key(Key::Backspace, false); + assert_eq!(lin(&e), "z^()"); + e.type_str("2"); + assert_eq!(lin(&e), "z^2"); +} + +#[test] +fn a_space_ends_an_upper_limit_and_inf_becomes_infinity() { + let e = typed("sum_(i=1)^n i^2=1/2"); + let Some(Node::Nary { sup: Some(sup), body, .. }) = e.math().body.first().map(Node::bare) else { panic!("{:?}", e.math().body) }; + assert_eq!(units(sup), 1, "the upper limit is just n"); + assert!(units(body) >= 2, "the summand follows: {body:?}"); + // The braced form ends the last limit at its closing brace. + let e = typed("\\sum_{i=1}^{n}i"); + assert!(matches!(e.math().body.first().map(Node::bare), Some(Node::Nary { sup: Some(s), .. }) if units(s) == 1)); + // `inf` converts once the word is over, and `infty` still works. + let mut e = typed("x->inf"); + assert_eq!(lin(&e).chars().last(), Some('f'), "still being typed"); + e.flush(); + assert_eq!(lin(&e).chars().last(), Some('\u{221E}')); + assert_eq!(lin(&typed("inf+1")), "\u{221E}+1"); + assert_eq!(lin(&typed("\\infty")), "\u{221E}"); + assert_eq!(lin(&typed("infty")), "\u{221E}"); + assert_eq!(lin(&typed("info")), "info"); + let mut e = typed("inf"); + e.key(Key::Backspace, false); + assert_eq!(lin(&e), "in", "Backspace edits the word instead of converting it"); +} + +// --- Ported from DeckCraft 7972cf5 (crates/math/src/edit/tests.rs). --- +// +// All three failed against WordCraft dbfe1b1's edit model (`mv^2/2` gave `mv^(2/2)`, `e^ipi` +// stayed `e^(ipi)`, `x^n+1` gave `x^n` then `+1`, `x^(n+1)` left the caret in the exponent). +// Decision for each: DeckCraft's behaviour wins (MathLive-style exponent rules), ported into +// edit.rs with every WordCraft test still passing. Details in DIVERGENCE.md. + +/// Decision: DeckCraft wins. A digits-only exponent ends at the next non-digit (`mv^2/2` is +/// `(mv^2)/2`, `x^2sin x` is `x^2·sin x`); multi-digit exponents keep going. +#[test] +fn a_single_digit_exponent_ends_at_the_next_term() { + let e = typed("mv^2/2"); + assert!(matches!(e.math().body.first(), Some(Node::Frac { .. })), "{}", lin(&e)); + assert_eq!(e.caret().path.len(), 1, "caret in the denominator"); + let e = typed("x^2sin x"); + assert_eq!(e.math().body.len(), 2, "{}", lin(&e)); + assert!(matches!(e.math().body.get(1), Some(Node::Func { .. }))); + let e = typed("2^10"); + assert_eq!(lin(&e), "2^10"); + assert_eq!(e.caret().path.len(), 1, "multi-digit exponent keeps going"); +} + +/// Decision: DeckCraft wins. A letter exponent keeps operators (`x^n+1` is `x^(n+1)`), and the +/// three-letter run `ipi` converts its `pi` (`e^ipi` is `e^(iπ)`). +#[test] +fn letters_keep_going_in_an_exponent() { + let e = typed("e^ipi"); + assert_eq!(lin(&e), "e^(iπ)"); + assert_eq!(e.caret().path.len(), 1); + let e = typed("x^n+1"); + assert_eq!(lin(&e), "x^(n+1)"); + assert_eq!(e.caret().path.len(), 1, "operators stay in a letter exponent"); + let e = typed("2^n-1"); + assert_eq!(lin(&e), "2^(n−1)"); +} + +/// Decision: DeckCraft wins. WordCraft already dropped the parentheses; closing the group now +/// also takes the caret out of the exponent. +#[test] +fn a_parenthesised_exponent_is_the_group_itself() { + let e = typed("x^(n+1)"); + let Some(Node::Script { sup: Some(s), .. }) = e.math().body.first() else { panic!("no script") }; + assert!(s.iter().all(|n| !matches!(n, Node::Delim { .. })), "no doubled fence"); + assert!(e.caret().path.is_empty(), "closing the group ends the exponent"); + assert_eq!(lin(&e), "x^(n+1)"); +} + +#[test] +fn typed_angle_floor_and_ceiling_commands_become_brackets() { + let mut e = Editor::new(Math::default()); + e.type_str(r"\langle u,v\rangle+\lfloor x\rfloor+\lceil y\rceil"); + assert_eq!(crate::to_linear(e.math()).replace(' ', ""), "⟨u,v⟩+⌊x⌋+⌈y⌉"); +} + +#[test] +fn latex_round_trips_through_the_editor() { + let mut e = Editor::new(Math::default()); + e.set_latex(r"\frac{a}{b}+\sqrt{x}"); + assert_eq!(e.latex(), r"\frac{a}{b}+\sqrt{x}"); + assert!(!e.undo(), "loading a value leaves no undo step"); +} + +#[test] +fn caret_edge_queries() { + let mut e = Editor::new(crate::from_linear("x+1")); + assert!(e.at_end() && !e.at_start()); + e.key(Key::Home, false); + assert!(e.at_start() && !e.at_end()); + let mut f = Editor::new(crate::from_linear(r"\frac{a}{b}")); + f.key(Key::Home, false); + f.key(Key::Right, false); + assert!(!f.at_start() && !f.at_end(), "inside the numerator is neither edge"); +} + +fn typed_linear(src: &str) -> String { + to_linear(typed(src).math()) +} + +#[test] +fn closing_a_parenthesis_ends_the_radical_function_or_denominator() { + assert_eq!(typed_linear("sqrt(x)+1"), "√(x)+1"); + assert_eq!(typed_linear("sqrt(x+1)*2"), "√(x+1)·2"); + assert_eq!(typed_linear("sin(x)+1"), "sin(x)+1"); + assert_eq!(typed_linear("1/(x-1)+2"), "1/(x−1)+2"); + // Without parentheses the structure keeps taking what is typed, as before. + assert_eq!(typed_linear("sqrt x+1"), "√(x+1)"); +} + +#[test] +fn typed_call_names_become_function_nodes_at_the_parenthesis() { + for name in ["floor", "nCr", "mean", "abs", "stdev", "rref"] { + let e = typed(&format!("{name}(x")); + assert!(matches!(e.math().body.first(), Some(Node::Func { name: n, .. }) if n == name), "{name}: {:?}", e.math().body); + assert_eq!(e.caret().path.len(), 1, "{name}: the caret is in the argument"); + } + // Bare-argument names convert as whole words, like sin. + assert!(matches!(typed("sech").math().body.first(), Some(Node::Func { name, .. }) if name == "sech")); + assert!(matches!(typed("arctanh").math().body.first(), Some(Node::Func { name, .. }) if name == "arctanh")); + assert!(matches!(typed("arccot").math().body.first(), Some(Node::Func { name, .. }) if name == "arccot")); + // A call-only name typed without a parenthesis is just letters; a plain "(" still nests. + assert!(!matches!(typed("floor").math().body.first(), Some(Node::Func { .. }))); + assert!(matches!(typed("x(").math().body.get(1), Some(Node::Delim { .. }))); +} + +#[test] +fn choose_templates_have_a_place_where_n_and_r_go() { + for (id, letter) in [("nCr", "C"), ("nPr", "P")] { + let Some(t) = template(id) else { panic!("{id}") }; + let mut e = Editor::new(Math::default()); + e.insert_template(&t.math); + e.type_str("5"); + e.key(Key::Tab, false); + e.type_str("2"); + assert_eq!(e.latex(), format!("{{}}_5{letter}_2"), "{id}"); + } +} + +#[test] +fn lcm_template_has_a_place_for_each_argument() { + let Some(t) = template("lcm") else { panic!("lcm") }; + let mut e = Editor::new(Math::default()); + e.insert_template(&t.math); + e.type_str("4"); + e.key(Key::Tab, false); + e.type_str("6"); + assert_eq!(e.latex(), "\\operatorname{lcm}\\left(4,6\\right)"); +} diff --git a/crates/equashion-math/src/funcs.rs b/crates/equashion-math/src/funcs.rs new file mode 100644 index 00000000..bba3cddf --- /dev/null +++ b/crates/equashion-math/src/funcs.rs @@ -0,0 +1,35 @@ +//! The function names the parsers and the editor know. One place, so a name added here is +//! typed, parsed and printed the same way everywhere. + +/// Names LaTeX spells as commands (`\sin`); the LaTeX writer prints them as `\name`. +pub(crate) const LATEX: &[&str] = &[ + "sin", "cos", "tan", "cot", "sec", "csc", "arcsin", "arccos", "arctan", "sinh", "cosh", "tanh", "log", "ln", "exp", "lim", "max", "min", "det", + "gcd", +]; + +/// Names with no LaTeX command; the LaTeX writer prints them as `\operatorname{name}`. They +/// are typed with a parenthesis (`floor(x)`) unless they are also in [`BARE`]. +pub(crate) const OPNAMES: &[&str] = &[ + // hyperbolic and the inverse trigonometric / hyperbolic functions LaTeX has no command for + "csch", "sech", "coth", "arccsc", "arcsec", "arccot", "arcsinh", "arccosh", "arctanh", // rounding + "abs", "floor", "ceil", "round", "sign", // number theory + "lcm", "nPr", "nCr", // statistics + "mean", "median", "stdev", "stdevp", "var", "cov", "corr", "total", "count", "quartile", "quantile", "mad", // matrices + "trace", "rank", "rref", +]; + +/// Functions that take an unparenthesised argument (`sin x`, `sech x`). +pub(crate) const BARE: &[&str] = &[ + "sin", "cos", "tan", "cot", "sec", "csc", "arcsin", "arccos", "arctan", "sinh", "cosh", "tanh", "log", "ln", "exp", "csch", "sech", "coth", + "arccsc", "arcsec", "arccot", "arcsinh", "arccosh", "arctanh", +]; + +/// True for any name that becomes a function node when typed with its argument. +pub(crate) fn is_func(name: &str) -> bool { + LATEX.contains(&name) || OPNAMES.contains(&name) +} + +/// True for a name that is only a function once a `(` follows it (not a bare-argument one). +pub(crate) fn is_call_only(name: &str) -> bool { + OPNAMES.contains(&name) && !BARE.contains(&name) +} diff --git a/crates/equashion-math/src/gallery.json b/crates/equashion-math/src/gallery.json new file mode 100644 index 00000000..56c6eaa6 --- /dev/null +++ b/crates/equashion-math/src/gallery.json @@ -0,0 +1 @@ +{"builtins":[{"id":"pythagoras","label":"Sides of a right triangle","linear":"a^2+b^2=c^2","math":{"attrs":"","body":[{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"a"}}}],"sub":null,"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2"}}}]}},{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"+"}}},{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"b"}}}],"sub":null,"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2"}}}]}},{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"="}}},{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"c"}}}],"sub":null,"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2"}}}]}}],"jc":null,"para":false}},{"id":"area","label":"Circle area from its radius","linear":"A=πr^2","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"A=π"}}},{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"r"}}}],"sub":null,"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2"}}}]}}],"jc":null,"para":false}},{"id":"quadratic","label":"Roots of ax²+bx+c","linear":"x=(−b±√(b^2−4ac))/2a","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"x="}}},{"Frac":{"den":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2a"}}}],"num":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"−b±"}}},{"Rad":{"body":[{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"b"}}}],"sub":null,"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2"}}}]}},{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"−4ac"}}}],"deg":null}}]}}],"jc":null,"para":false}},{"id":"binomial","label":"Binomial expansion of (x+a)ⁿ","linear":"(x+a)^n=∑_(k=0)^n▒〖(n¦k) x^k a^(n−k)〗","math":{"attrs":"","body":[{"Script":{"base":[{"Delim":{"close":")","items":[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"x+a"}}}]],"open":"(","sep":""}}],"sub":null,"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"n"}}}]}},{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"="}}},{"Nary":{"body":[{"Delim":{"close":")","items":[[{"Props":{"extra":{"attrs":"","pr":[["type",""]],"side":[],"tail":[]},"node":{"Frac":{"den":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"k"}}}],"num":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"n"}}}]}}}}]],"open":"(","sep":""}},{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"x"}}}],"sub":null,"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"k"}}}]}},{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"a"}}}],"sub":null,"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"n−k"}}}]}}],"op":"∑","sub":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"k=0"}}}],"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"n"}}}]}}],"jc":null,"para":false}},{"id":"expansion","label":"Power series of (1+x)ⁿ","linear":"(1+x)^n=1+nx/1!+(n(n−1)x^2)/2!+⋯","math":{"attrs":"","body":[{"Script":{"base":[{"Delim":{"close":")","items":[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"1+x"}}}]],"open":"(","sep":""}}],"sub":null,"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"n"}}}]}},{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"=1+"}}},{"Frac":{"den":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"1!"}}}],"num":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"nx"}}}]}},{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"+"}}},{"Frac":{"den":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2!"}}}],"num":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"n"}}},{"Delim":{"close":")","items":[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"n−1"}}}]],"open":"(","sep":""}},{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"x"}}}],"sub":null,"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2"}}}]}}]}},{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"+⋯"}}}],"jc":null,"para":false}},{"id":"euler","label":"Euler's identity","linear":"e^(iπ)+1=0","math":{"attrs":"","body":[{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"e"}}}],"sub":null,"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"iπ"}}}]}},{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"+1=0"}}}],"jc":null,"para":false}},{"id":"derivative","label":"Derivative as a limit","linear":"f'(x)=lim┬(h→0)⁡〖(f(x+h)−f(x))/h〗","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"f'"}}},{"Delim":{"close":")","items":[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"x"}}}]],"open":"(","sep":""}},{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"="}}},{"Props":{"extra":{"attrs":"","pr":[],"side":["limh→0"],"tail":[]},"node":{"Func":{"body":[{"Frac":{"den":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"h"}}}],"num":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"f"}}},{"Delim":{"close":")","items":[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"x+h"}}}]],"open":"(","sep":""}},{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"−f"}}},{"Delim":{"close":")","items":[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"x"}}}]],"open":"(","sep":""}}]}}],"name":"lim_(h→0)"}}}}],"jc":null,"para":false}},{"id":"taylor","label":"Exponential series","linear":"e^x=1+x/1!+x^2/2!+x^3/3!+⋯, −∞"],"tail":[]},"node":{"Text":"e"}}}],"sub":null,"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"x"}}}]}},{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"=1+"}}},{"Frac":{"den":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"1!"}}}],"num":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"x"}}}]}},{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"+"}}},{"Frac":{"den":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2!"}}}],"num":[{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"x"}}}],"sub":null,"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2"}}}]}}]}},{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"+"}}},{"Frac":{"den":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"3!"}}}],"num":[{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"x"}}}],"sub":null,"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"3"}}}]}}]}},{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"+⋯,−∞"],"tail":[]},"node":{"Text":"e"}}}],"sub":null,"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"−"}}},{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"x"}}}],"sub":null,"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2"}}}]}}]}}],"op":"∫","sub":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"−∞"}}}],"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"∞"}}}]}},{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"dx="}}},{"Rad":{"body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"π"}}}],"deg":null}}],"jc":null,"para":false}},{"id":"fourier","label":"Sine and cosine series of f(x)","linear":"f(x)=a_0+∑_(n=1)^∞▒〖(a_n cos⁡〖nπx/L〗+b_n sin⁡〖nπx/L〗)〗","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"f"}}},{"Delim":{"close":")","items":[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"x"}}}]],"open":"(","sep":""}},{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"="}}},{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"a"}}}],"sub":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"0"}}}],"sup":null}},{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"+"}}},{"Nary":{"body":[{"Delim":{"close":")","items":[[{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"a"}}}],"sub":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"n"}}}],"sup":null}},{"Props":{"extra":{"attrs":"","pr":[],"side":["cos"],"tail":[]},"node":{"Func":{"body":[{"Frac":{"den":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"L"}}}],"num":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"nπx"}}}]}}],"name":"cos"}}}},{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"+"}}},{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"b"}}}],"sub":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"n"}}}],"sup":null}},{"Props":{"extra":{"attrs":"","pr":[],"side":["sin"],"tail":[]},"node":{"Func":{"body":[{"Frac":{"den":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"L"}}}],"num":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"nπx"}}}]}}],"name":"sin"}}}}]],"open":"(","sep":""}}],"op":"∑","sub":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"n=1"}}}],"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"∞"}}}]}}],"jc":null,"para":false}},{"id":"trig1","label":"Sum or difference of sines","linear":"sin⁡α±sin⁡β=2 sin⁡〖1/2(α±β)〗 cos⁡〖1/2(α∓β)〗","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["sin"],"tail":[]},"node":{"Func":{"body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"α"}}}],"name":"sin"}}}},{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"±"}}},{"Props":{"extra":{"attrs":"","pr":[],"side":["sin"],"tail":[]},"node":{"Func":{"body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"β"}}}],"name":"sin"}}}},{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"=2"}}},{"Props":{"extra":{"attrs":"","pr":[],"side":["sin"],"tail":[]},"node":{"Func":{"body":[{"Frac":{"den":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2"}}},{"Delim":{"close":")","items":[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"α±β"}}}]],"open":"(","sep":""}}],"num":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"1"}}}]}}],"name":"sin"}}}},{"Props":{"extra":{"attrs":"","pr":[],"side":["cos"],"tail":[]},"node":{"Func":{"body":[{"Frac":{"den":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2"}}},{"Delim":{"close":")","items":[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"α∓β"}}}]],"open":"(","sep":""}}],"num":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"1"}}}]}}],"name":"cos"}}}}],"jc":null,"para":false}},{"id":"trig2","label":"Sum of cosines","linear":"cos⁡α+cos⁡β=2 cos⁡〖1/2(α+β)〗 cos⁡〖1/2(α−β)〗","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["cos"],"tail":[]},"node":{"Func":{"body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"α"}}}],"name":"cos"}}}},{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"+"}}},{"Props":{"extra":{"attrs":"","pr":[],"side":["cos"],"tail":[]},"node":{"Func":{"body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"β"}}}],"name":"cos"}}}},{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"=2"}}},{"Props":{"extra":{"attrs":"","pr":[],"side":["cos"],"tail":[]},"node":{"Func":{"body":[{"Frac":{"den":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2"}}},{"Delim":{"close":")","items":[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"α+β"}}}]],"open":"(","sep":""}}],"num":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"1"}}}]}}],"name":"cos"}}}},{"Props":{"extra":{"attrs":"","pr":[],"side":["cos"],"tail":[]},"node":{"Func":{"body":[{"Frac":{"den":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2"}}},{"Delim":{"close":")","items":[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"α−β"}}}]],"open":"(","sep":""}}],"num":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"1"}}}]}}],"name":"cos"}}}}],"jc":null,"para":false}},{"id":"normal","label":"Normal probability density","linear":"f(x)=1/(σ√(2π)) e^(−(x−μ)^2/(2σ^2))","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"f"}}},{"Delim":{"close":")","items":[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"x"}}}]],"open":"(","sep":""}},{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"="}}},{"Frac":{"den":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"σ"}}},{"Rad":{"body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2π"}}}],"deg":null}}],"num":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"1"}}}]}},{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"e"}}}],"sub":null,"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"−"}}},{"Frac":{"den":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2"}}},{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"σ"}}}],"sub":null,"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2"}}}]}}],"num":[{"Script":{"base":[{"Delim":{"close":")","items":[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"x−μ"}}}]],"open":"(","sep":""}}],"sub":null,"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2"}}}]}}]}}]}}],"jc":null,"para":false}},{"id":"bayes","label":"Bayes' rule","linear":"P(A|B)=(P(B|A)P(A))/P(B)","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"P"}}},{"Delim":{"close":")","items":[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"A"}}},{"Delim":{"close":"","items":[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"B"}}}]],"open":"|","sep":""}}]],"open":"(","sep":""}},{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"="}}},{"Frac":{"den":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"P"}}},{"Delim":{"close":")","items":[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"B"}}}]],"open":"(","sep":""}}],"num":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"P"}}},{"Delim":{"close":")","items":[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"B|A"}}}]],"open":"(","sep":""}},{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"P"}}},{"Delim":{"close":")","items":[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"A"}}}]],"open":"(","sep":""}}]}}],"jc":null,"para":false}}],"equationPicture":{"attrs":"","body":[{"Nary":{"body":[],"op":"∑","sub":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"i=1"}}}],"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"n"}}}]}}],"jc":null,"para":false},"structures":[{"id":"fraction","label":"Fraction","picture":{"attrs":"","body":[{"Frac":{"den":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"y"}}}],"num":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"x"}}}]}}],"jc":null,"para":false},"sections":[{"name":"Fraction","templates":[{"id":"frac.stacked","label":"Stacked Fraction","linear":"⬚/⬚","math":{"attrs":"","body":[{"Frac":{"den":[],"num":[]}}],"jc":null,"para":false}},{"id":"frac.skewed","label":"Skewed Fraction","linear":"⬚⁄⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[["type",""]],"side":[],"tail":[]},"node":{"Frac":{"den":[],"num":[]}}}}],"jc":null,"para":false}},{"id":"frac.linear","label":"Linear Fraction","linear":"⬚∕⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[["type",""]],"side":[],"tail":[]},"node":{"Frac":{"den":[],"num":[]}}}}],"jc":null,"para":false}},{"id":"frac.nobar","label":"Stacked, no bar","linear":"⬚¦⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[["type",""]],"side":[],"tail":[]},"node":{"Frac":{"den":[],"num":[]}}}}],"jc":null,"para":false}}]},{"name":"Common Fractions","templates":[{"id":"frac.dydx","label":"Differential","linear":"dy/dx","math":{"attrs":"","body":[{"Frac":{"den":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"dx"}}}],"num":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"dy"}}}]}}],"jc":null,"para":false}},{"id":"frac.DyDx","label":"Change in y over change in x","linear":"Δy/Δx","math":{"attrs":"","body":[{"Frac":{"den":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"Δx"}}}],"num":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"Δy"}}}]}}],"jc":null,"para":false}},{"id":"frac.partial","label":"Partial Differential","linear":"∂y/∂x","math":{"attrs":"","body":[{"Frac":{"den":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"∂x"}}}],"num":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"∂y"}}}]}}],"jc":null,"para":false}},{"id":"frac.delta","label":"Small change","linear":"δy/δx","math":{"attrs":"","body":[{"Frac":{"den":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"δx"}}}],"num":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"δy"}}}]}}],"jc":null,"para":false}},{"id":"frac.pi2","label":"Pi Over 2","linear":"π/2","math":{"attrs":"","body":[{"Frac":{"den":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2"}}}],"num":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"π"}}}]}}],"jc":null,"para":false}},{"id":"frac.half","label":"One half","linear":"1/2","math":{"attrs":"","body":[{"Frac":{"den":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2"}}}],"num":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"1"}}}]}}],"jc":null,"para":false}}]}]},{"id":"script","label":"Script","picture":{"attrs":"","body":[{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"e"}}}],"sub":null,"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"x"}}}]}}],"jc":null,"para":false},"sections":[{"name":"Subscripts and Superscripts","templates":[{"id":"script.sup","label":"Superscript","linear":"⬚^⬚","math":{"attrs":"","body":[{"Script":{"base":[],"sub":null,"sup":[]}}],"jc":null,"para":false}},{"id":"script.sub","label":"Subscript","linear":"⬚_⬚","math":{"attrs":"","body":[{"Script":{"base":[],"sub":[],"sup":null}}],"jc":null,"para":false}},{"id":"script.subsup","label":"Subscript-Superscript","linear":"⬚_⬚^⬚","math":{"attrs":"","body":[{"Script":{"base":[],"sub":[],"sup":[]}}],"jc":null,"para":false}},{"id":"script.pre","label":"Left Subscript-Superscript","linear":"_⬚^⬚▒⬚","math":{"attrs":"","body":[{"PreScript":{"base":[],"sub":[],"sup":[]}}],"jc":null,"para":false}}]},{"name":"Common Subscripts and Superscripts","templates":[{"id":"script.xy2","label":"Subscript-Superscript","linear":"x_y^2","math":{"attrs":"","body":[{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"x"}}}],"sub":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"y"}}}],"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2"}}}]}}],"jc":null,"para":false}},{"id":"script.eiwt","label":"Exponential","linear":"e^(−iωt)","math":{"attrs":"","body":[{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"e"}}}],"sub":null,"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"−iωt"}}}]}}],"jc":null,"para":false}},{"id":"script.x2","label":"Square","linear":"x^2","math":{"attrs":"","body":[{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"x"}}}],"sub":null,"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2"}}}]}}],"jc":null,"para":false}},{"id":"script.pre1n","label":"Left Subscript-Superscript","linear":"_1^n▒Y","math":{"attrs":"","body":[{"PreScript":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"Y"}}}],"sub":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"1"}}}],"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"n"}}}]}}],"jc":null,"para":false}}]}]},{"id":"radical","label":"Radical","picture":{"attrs":"","body":[{"Rad":{"body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"x"}}}],"deg":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"n"}}}]}}],"jc":null,"para":false},"sections":[{"name":"Radicals","templates":[{"id":"rad.sqrt","label":"Square Root","linear":"√⬚","math":{"attrs":"","body":[{"Rad":{"body":[],"deg":null}}],"jc":null,"para":false}},{"id":"rad.nth","label":"Radical with Degree","linear":"√(⬚&⬚)","math":{"attrs":"","body":[{"Rad":{"body":[],"deg":[]}}],"jc":null,"para":false}},{"id":"rad.sqrt2","label":"Square Root with Degree","linear":"√(2&⬚)","math":{"attrs":"","body":[{"Rad":{"body":[],"deg":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2"}}}]}}],"jc":null,"para":false}},{"id":"rad.cbrt","label":"Cube Root","linear":"√(3&⬚)","math":{"attrs":"","body":[{"Rad":{"body":[],"deg":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"3"}}}]}}],"jc":null,"para":false}}]},{"name":"Common Radicals","templates":[{"id":"rad.quadratic","label":"Quadratic Root","linear":"(−b±√(b^2−4ac))/2a","math":{"attrs":"","body":[{"Frac":{"den":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2a"}}}],"num":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"−b±"}}},{"Rad":{"body":[{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"b"}}}],"sub":null,"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2"}}}]}},{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"−4ac"}}}],"deg":null}}]}}],"jc":null,"para":false}},{"id":"rad.hyp","label":"Hypotenuse","linear":"√(a^2+b^2)","math":{"attrs":"","body":[{"Rad":{"body":[{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"a"}}}],"sub":null,"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2"}}}]}},{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"+"}}},{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"b"}}}],"sub":null,"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2"}}}]}}],"deg":null}}],"jc":null,"para":false}}]}]},{"id":"integral","label":"Integral","picture":{"attrs":"","body":[{"Nary":{"body":[],"op":"∫","sub":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"−x"}}}],"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"x"}}}]}}],"jc":null,"para":false},"sections":[{"name":"Integrals","templates":[{"id":"int.plain","label":"Integral","linear":"∫▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"∫","sub":null,"sup":null}}],"jc":null,"para":false}},{"id":"int.limits","label":"Integral with Limits","linear":"∫_⬚^⬚▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"∫","sub":[],"sup":[]}}],"jc":null,"para":false}},{"id":"int.stacked","label":"Integral with Stacked Limits","linear":"∫_⬚^⬚▒⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[["limLoc",""]],"side":[],"tail":[]},"node":{"Nary":{"body":[],"op":"∫","sub":[],"sup":[]}}}}],"jc":null,"para":false}},{"id":"int.double","label":"Double Integral","linear":"∬▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"∬","sub":null,"sup":null}}],"jc":null,"para":false}},{"id":"int.doubleLimits","label":"Double Integral with Limits","linear":"∬_⬚^⬚▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"∬","sub":[],"sup":[]}}],"jc":null,"para":false}},{"id":"int.doubleStacked","label":"Double Integral with Stacked Limits","linear":"∬_⬚^⬚▒⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[["limLoc",""]],"side":[],"tail":[]},"node":{"Nary":{"body":[],"op":"∬","sub":[],"sup":[]}}}}],"jc":null,"para":false}},{"id":"int.triple","label":"Triple Integral","linear":"∭▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"∭","sub":null,"sup":null}}],"jc":null,"para":false}},{"id":"int.tripleLimits","label":"Triple Integral with Limits","linear":"∭_⬚^⬚▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"∭","sub":[],"sup":[]}}],"jc":null,"para":false}},{"id":"int.tripleStacked","label":"Triple Integral with Stacked Limits","linear":"∭_⬚^⬚▒⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[["limLoc",""]],"side":[],"tail":[]},"node":{"Nary":{"body":[],"op":"∭","sub":[],"sup":[]}}}}],"jc":null,"para":false}}]},{"name":"Contour Integrals","templates":[{"id":"int.contour","label":"Contour Integral","linear":"∮▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"∮","sub":null,"sup":null}}],"jc":null,"para":false}},{"id":"int.contourLimits","label":"Contour Integral with Limits","linear":"∮_⬚^⬚▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"∮","sub":[],"sup":[]}}],"jc":null,"para":false}},{"id":"int.contourStacked","label":"Contour Integral with Stacked Limits","linear":"∮_⬚^⬚▒⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[["limLoc",""]],"side":[],"tail":[]},"node":{"Nary":{"body":[],"op":"∮","sub":[],"sup":[]}}}}],"jc":null,"para":false}},{"id":"int.surface","label":"Surface Integral","linear":"∯▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"∯","sub":null,"sup":null}}],"jc":null,"para":false}},{"id":"int.surfaceLimits","label":"Surface Integral with Limits","linear":"∯_⬚^⬚▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"∯","sub":[],"sup":[]}}],"jc":null,"para":false}},{"id":"int.surfaceStacked","label":"Surface Integral with Stacked Limits","linear":"∯_⬚^⬚▒⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[["limLoc",""]],"side":[],"tail":[]},"node":{"Nary":{"body":[],"op":"∯","sub":[],"sup":[]}}}}],"jc":null,"para":false}},{"id":"int.volume","label":"Volume Integral","linear":"∰▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"∰","sub":null,"sup":null}}],"jc":null,"para":false}},{"id":"int.volumeLimits","label":"Volume Integral with Limits","linear":"∰_⬚^⬚▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"∰","sub":[],"sup":[]}}],"jc":null,"para":false}},{"id":"int.volumeStacked","label":"Volume Integral with Stacked Limits","linear":"∰_⬚^⬚▒⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[["limLoc",""]],"side":[],"tail":[]},"node":{"Nary":{"body":[],"op":"∰","sub":[],"sup":[]}}}}],"jc":null,"para":false}}]},{"name":"Differentials","templates":[{"id":"int.dx","label":"Differential x","linear":"dx","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"dx"}}}],"jc":null,"para":false}},{"id":"int.dy","label":"Differential y","linear":"dy","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"dy"}}}],"jc":null,"para":false}},{"id":"int.dtheta","label":"Differential theta","linear":"dθ","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"dθ"}}}],"jc":null,"para":false}}]}]},{"id":"largeOperator","label":"Large\nOperator","picture":{"attrs":"","body":[{"Nary":{"body":[],"op":"∑","sub":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"i=0"}}}],"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"n"}}}]}}],"jc":null,"para":false},"sections":[{"name":"Summations","templates":[{"id":"nary.sum","label":"Summation","linear":"∑▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"∑","sub":null,"sup":null}}],"jc":null,"para":false}},{"id":"nary.sumLimits","label":"Summation with Limits","linear":"∑_⬚^⬚▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"∑","sub":[],"sup":[]}}],"jc":null,"para":false}},{"id":"nary.sumScripts","label":"Summation with Subscript-Superscript Limits","linear":"∑_⬚^⬚▒⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[["limLoc",""]],"side":[],"tail":[]},"node":{"Nary":{"body":[],"op":"∑","sub":[],"sup":[]}}}}],"jc":null,"para":false}},{"id":"nary.sumLower","label":"Summation with Lower Limit","linear":"∑_⬚▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"∑","sub":[],"sup":null}}],"jc":null,"para":false}},{"id":"nary.sumSub","label":"Summation with Subscript Limit","linear":"∑_⬚▒⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[["limLoc",""]],"side":[],"tail":[]},"node":{"Nary":{"body":[],"op":"∑","sub":[],"sup":null}}}}],"jc":null,"para":false}}]},{"name":"Products and Coproducts","templates":[{"id":"nary.prod","label":"Product","linear":"∏▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"∏","sub":null,"sup":null}}],"jc":null,"para":false}},{"id":"nary.prodLimits","label":"Product with Limits","linear":"∏_⬚^⬚▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"∏","sub":[],"sup":[]}}],"jc":null,"para":false}},{"id":"nary.prodScripts","label":"Product with Subscript-Superscript Limits","linear":"∏_⬚^⬚▒⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[["limLoc",""]],"side":[],"tail":[]},"node":{"Nary":{"body":[],"op":"∏","sub":[],"sup":[]}}}}],"jc":null,"para":false}},{"id":"nary.prodLower","label":"Product with Lower Limit","linear":"∏_⬚▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"∏","sub":[],"sup":null}}],"jc":null,"para":false}},{"id":"nary.coprod","label":"Coproduct","linear":"∐▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"∐","sub":null,"sup":null}}],"jc":null,"para":false}},{"id":"nary.coprodLimits","label":"Coproduct with Limits","linear":"∐_⬚^⬚▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"∐","sub":[],"sup":[]}}],"jc":null,"para":false}},{"id":"nary.coprodScripts","label":"Coproduct with Subscript-Superscript Limits","linear":"∐_⬚^⬚▒⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[["limLoc",""]],"side":[],"tail":[]},"node":{"Nary":{"body":[],"op":"∐","sub":[],"sup":[]}}}}],"jc":null,"para":false}},{"id":"nary.coprodLower","label":"Coproduct with Lower Limit","linear":"∐_⬚▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"∐","sub":[],"sup":null}}],"jc":null,"para":false}}]},{"name":"Unions and Intersections","templates":[{"id":"nary.union","label":"Union","linear":"⋃▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"⋃","sub":null,"sup":null}}],"jc":null,"para":false}},{"id":"nary.unionLimits","label":"Union with Limits","linear":"⋃_⬚^⬚▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"⋃","sub":[],"sup":[]}}],"jc":null,"para":false}},{"id":"nary.unionScripts","label":"Union with Subscript-Superscript Limits","linear":"⋃_⬚^⬚▒⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[["limLoc",""]],"side":[],"tail":[]},"node":{"Nary":{"body":[],"op":"⋃","sub":[],"sup":[]}}}}],"jc":null,"para":false}},{"id":"nary.unionLower","label":"Union with Lower Limit","linear":"⋃_⬚▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"⋃","sub":[],"sup":null}}],"jc":null,"para":false}},{"id":"nary.intersection","label":"Intersection","linear":"⋂▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"⋂","sub":null,"sup":null}}],"jc":null,"para":false}},{"id":"nary.intersectionLimits","label":"Intersection with Limits","linear":"⋂_⬚^⬚▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"⋂","sub":[],"sup":[]}}],"jc":null,"para":false}},{"id":"nary.intersectionScripts","label":"Intersection with Subscript-Superscript Limits","linear":"⋂_⬚^⬚▒⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[["limLoc",""]],"side":[],"tail":[]},"node":{"Nary":{"body":[],"op":"⋂","sub":[],"sup":[]}}}}],"jc":null,"para":false}},{"id":"nary.intersectionLower","label":"Intersection with Lower Limit","linear":"⋂_⬚▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"⋂","sub":[],"sup":null}}],"jc":null,"para":false}}]},{"name":"Other Large Operators","templates":[{"id":"nary.or","label":"Logical OR","linear":"⋁▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"⋁","sub":null,"sup":null}}],"jc":null,"para":false}},{"id":"nary.orLimits","label":"Logical OR with Limits","linear":"⋁_⬚^⬚▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"⋁","sub":[],"sup":[]}}],"jc":null,"para":false}},{"id":"nary.and","label":"Logical AND","linear":"⋀▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"⋀","sub":null,"sup":null}}],"jc":null,"para":false}},{"id":"nary.andLimits","label":"Logical AND with Limits","linear":"⋀_⬚^⬚▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"⋀","sub":[],"sup":[]}}],"jc":null,"para":false}},{"id":"nary.oplus","label":"Circled Plus","linear":"⨁▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"⨁","sub":null,"sup":null}}],"jc":null,"para":false}},{"id":"nary.otimes","label":"Circled Times","linear":"⨂▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"⨂","sub":null,"sup":null}}],"jc":null,"para":false}},{"id":"nary.odot","label":"Circled Dot","linear":"⨀▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"⨀","sub":null,"sup":null}}],"jc":null,"para":false}},{"id":"nary.uplus","label":"Union with Plus","linear":"⨄▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"⨄","sub":null,"sup":null}}],"jc":null,"para":false}},{"id":"nary.sqcup","label":"Square Union","linear":"⨆▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"⨆","sub":null,"sup":null}}],"jc":null,"para":false}}]},{"name":"Common Large Operators","templates":[{"id":"nary.binomial","label":"Summation over binomials","linear":"∑_k▒〖(n¦k)〗","math":{"attrs":"","body":[{"Nary":{"body":[{"Delim":{"close":")","items":[[{"Props":{"extra":{"attrs":"","pr":[["type",""]],"side":[],"tail":[]},"node":{"Frac":{"den":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"k"}}}],"num":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"n"}}}]}}}}]],"open":"(","sep":""}}],"op":"∑","sub":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"k"}}}],"sup":null}}],"jc":null,"para":false}},{"id":"nary.sum0n","label":"Summation from 0 to n","linear":"∑_(i=0)^n▒⬚","math":{"attrs":"","body":[{"Nary":{"body":[],"op":"∑","sub":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"i=0"}}}],"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"n"}}}]}}],"jc":null,"para":false}},{"id":"nary.double","label":"Double summation","linear":"∑_(0≤i≤m,0"],"tail":[]},"node":{"Text":"P"}}},{"Delim":{"close":")","items":[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"i,j"}}}]],"open":"(","sep":""}}],"op":"∑","sub":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"0≤i≤m,0"],"tail":[]},"node":{"Text":"A"}}}],"sub":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"k"}}}],"sup":null}}],"op":"∏","sub":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"k=1"}}}],"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"n"}}}]}}],"jc":null,"para":false}},{"id":"nary.unionXY","label":"Union of intersections","linear":"⋃_(n=1)^m▒〖(X_n∩Y_n)〗","math":{"attrs":"","body":[{"Nary":{"body":[{"Delim":{"close":")","items":[[{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"X"}}}],"sub":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"n"}}}],"sup":null}},{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"∩"}}},{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"Y"}}}],"sub":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"n"}}}],"sup":null}}]],"open":"(","sep":""}}],"op":"⋃","sub":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"n=1"}}}],"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"m"}}}]}}],"jc":null,"para":false}}]}]},{"id":"bracket","label":"Bracket","picture":{"attrs":"","body":[{"Delim":{"close":"}","items":[[{"Delim":{"close":")","items":[[]],"open":"(","sep":""}}]],"open":"{","sep":""}}],"jc":null,"para":false},"sections":[{"name":"Brackets","templates":[{"id":"brk.paren","label":"Parentheses","linear":"(⬚)","math":{"attrs":"","body":[{"Delim":{"close":")","items":[[]],"open":"(","sep":""}}],"jc":null,"para":false}},{"id":"brk.square","label":"Brackets","linear":"[⬚]","math":{"attrs":"","body":[{"Delim":{"close":"]","items":[[]],"open":"[","sep":""}}],"jc":null,"para":false}},{"id":"brk.brace","label":"Braces","linear":"{⬚}","math":{"attrs":"","body":[{"Delim":{"close":"}","items":[[]],"open":"{","sep":""}}],"jc":null,"para":false}},{"id":"brk.angle","label":"Angle Brackets","linear":"⟨⬚⟩","math":{"attrs":"","body":[{"Delim":{"close":"⟩","items":[[]],"open":"⟨","sep":""}}],"jc":null,"para":false}},{"id":"brk.floor","label":"Floor","linear":"⌊⬚⌋","math":{"attrs":"","body":[{"Delim":{"close":"⌋","items":[[]],"open":"⌊","sep":""}}],"jc":null,"para":false}},{"id":"brk.ceil","label":"Ceiling","linear":"⌈⬚⌉","math":{"attrs":"","body":[{"Delim":{"close":"⌉","items":[[]],"open":"⌈","sep":""}}],"jc":null,"para":false}},{"id":"brk.abs","label":"Vertical Bars","linear":"|⬚|","math":{"attrs":"","body":[{"Delim":{"close":"|","items":[[]],"open":"|","sep":""}}],"jc":null,"para":false}},{"id":"brk.norm","label":"Double Vertical Bars","linear":"‖⬚‖","math":{"attrs":"","body":[{"Delim":{"close":"‖","items":[[]],"open":"‖","sep":""}}],"jc":null,"para":false}},{"id":"brk.dbl","label":"Double Square Brackets","linear":"⟦⬚⟧","math":{"attrs":"","body":[{"Delim":{"close":"⟧","items":[[]],"open":"⟦","sep":""}}],"jc":null,"para":false}},{"id":"brk.leftSquare","label":"Left Bracket Twice","linear":"├[⬚[┤","math":{"attrs":"","body":[{"Delim":{"close":"[","items":[[]],"open":"[","sep":""}}],"jc":null,"para":false}},{"id":"brk.rightSquare","label":"Right Bracket Twice","linear":"├]⬚]┤","math":{"attrs":"","body":[{"Delim":{"close":"]","items":[[]],"open":"]","sep":""}}],"jc":null,"para":false}},{"id":"brk.outward","label":"Outward Brackets","linear":"├]⬚[┤","math":{"attrs":"","body":[{"Delim":{"close":"[","items":[[]],"open":"]","sep":""}}],"jc":null,"para":false}}]},{"name":"Brackets with Separators","templates":[{"id":"brk.parenSep","label":"Parentheses with Separator","linear":"(⬚│⬚)","math":{"attrs":"","body":[{"Delim":{"close":")","items":[[],[]],"open":"(","sep":"|"}}],"jc":null,"para":false}},{"id":"brk.braceSep","label":"Braces with Separator","linear":"{⬚│⬚}","math":{"attrs":"","body":[{"Delim":{"close":"}","items":[[],[]],"open":"{","sep":"|"}}],"jc":null,"para":false}},{"id":"brk.angleSep","label":"Angle Brackets with Separator","linear":"⟨⬚│⬚⟩","math":{"attrs":"","body":[{"Delim":{"close":"⟩","items":[[],[]],"open":"⟨","sep":"|"}}],"jc":null,"para":false}},{"id":"brk.angleSep2","label":"Angle Brackets with Two Separators","linear":"⟨⬚│⬚│⬚⟩","math":{"attrs":"","body":[{"Delim":{"close":"⟩","items":[[],[],[]],"open":"⟨","sep":"|"}}],"jc":null,"para":false}}]},{"name":"Single Brackets","templates":[{"id":"brk.leftParen","label":"Single Left Parenthesis","linear":"(⬚┤","math":{"attrs":"","body":[{"Delim":{"close":"","items":[[]],"open":"(","sep":""}}],"jc":null,"para":false}},{"id":"brk.rightParen","label":"Single Right Parenthesis","linear":"├⬚)","math":{"attrs":"","body":[{"Delim":{"close":")","items":[[]],"open":"","sep":""}}],"jc":null,"para":false}},{"id":"brk.leftSquareOnly","label":"Single Left Bracket","linear":"[⬚┤","math":{"attrs":"","body":[{"Delim":{"close":"","items":[[]],"open":"[","sep":""}}],"jc":null,"para":false}},{"id":"brk.rightSquareOnly","label":"Single Right Bracket","linear":"├⬚]","math":{"attrs":"","body":[{"Delim":{"close":"]","items":[[]],"open":"","sep":""}}],"jc":null,"para":false}},{"id":"brk.leftBrace","label":"Single Left Brace","linear":"{⬚┤","math":{"attrs":"","body":[{"Delim":{"close":"","items":[[]],"open":"{","sep":""}}],"jc":null,"para":false}},{"id":"brk.rightBrace","label":"Single Right Brace","linear":"├⬚}","math":{"attrs":"","body":[{"Delim":{"close":"}","items":[[]],"open":"","sep":""}}],"jc":null,"para":false}},{"id":"brk.leftBar","label":"Single Left Bar","linear":"├|⬚┤","math":{"attrs":"","body":[{"Delim":{"close":"","items":[[]],"open":"|","sep":""}}],"jc":null,"para":false}},{"id":"brk.leftAngle","label":"Single Left Angle","linear":"⟨⬚┤","math":{"attrs":"","body":[{"Delim":{"close":"","items":[[]],"open":"⟨","sep":""}}],"jc":null,"para":false}}]},{"name":"Cases and Stacks","templates":[{"id":"brk.cases2","label":"Cases (Two Conditions)","linear":"{█(⬚@⬚)┤","math":{"attrs":"","body":[{"Delim":{"close":"","items":[[{"EqArr":{"rows":[[],[]]}}]],"open":"{","sep":""}}],"jc":null,"para":false}},{"id":"brk.cases3","label":"Cases (Three Conditions)","linear":"{█(⬚@⬚@⬚)┤","math":{"attrs":"","body":[{"Delim":{"close":"","items":[[{"EqArr":{"rows":[[],[],[]]}}]],"open":"{","sep":""}}],"jc":null,"para":false}},{"id":"brk.stack2","label":"Stack Object","linear":"█(⬚@⬚)","math":{"attrs":"","body":[{"EqArr":{"rows":[[],[]]}}],"jc":null,"para":false}},{"id":"brk.stack3","label":"Stack Object (Three)","linear":"█(⬚@⬚@⬚)","math":{"attrs":"","body":[{"EqArr":{"rows":[[],[],[]]}}],"jc":null,"para":false}},{"id":"brk.binom","label":"Binomial Coefficient","linear":"(⬚¦⬚)","math":{"attrs":"","body":[{"Delim":{"close":")","items":[[{"Props":{"extra":{"attrs":"","pr":[["type",""]],"side":[],"tail":[]},"node":{"Frac":{"den":[],"num":[]}}}}]],"open":"(","sep":""}}],"jc":null,"para":false}},{"id":"brk.binomAngle","label":"Binomial Coefficient with Angle Brackets","linear":"⟨⬚¦⬚⟩","math":{"attrs":"","body":[{"Delim":{"close":"⟩","items":[[{"Props":{"extra":{"attrs":"","pr":[["type",""]],"side":[],"tail":[]},"node":{"Frac":{"den":[],"num":[]}}}}]],"open":"⟨","sep":""}}],"jc":null,"para":false}}]},{"name":"Common Brackets","templates":[{"id":"brk.casesAbs","label":"Absolute value cases","linear":"f(x)={█(−x,&x<0@x,&x≥0)┤","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"f"}}},{"Delim":{"close":")","items":[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"x"}}}]],"open":"(","sep":""}},{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"="}}},{"Delim":{"close":"","items":[[{"EqArr":{"rows":[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"−x,&x<0"}}}],[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"x,&x≥0"}}}]]}}]],"open":"{","sep":""}}],"jc":null,"para":false}},{"id":"brk.nk","label":"Binomial Coefficient","linear":"(n¦k)","math":{"attrs":"","body":[{"Delim":{"close":")","items":[[{"Props":{"extra":{"attrs":"","pr":[["type",""]],"side":[],"tail":[]},"node":{"Frac":{"den":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"k"}}}],"num":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"n"}}}]}}}}]],"open":"(","sep":""}}],"jc":null,"para":false}},{"id":"brk.nk2","label":"Binomial Coefficient (angle)","linear":"⟨n¦k⟩","math":{"attrs":"","body":[{"Delim":{"close":"⟩","items":[[{"Props":{"extra":{"attrs":"","pr":[["type",""]],"side":[],"tail":[]},"node":{"Frac":{"den":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"k"}}}],"num":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"n"}}}]}}}}]],"open":"⟨","sep":""}}],"jc":null,"para":false}}]}]},{"id":"function","label":"Function","picture":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["sin"],"tail":[]},"node":{"Func":{"body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"θ"}}}],"name":"sin"}}}}],"jc":null,"para":false},"sections":[{"name":"Trigonometric Functions","templates":[{"id":"fn.sin","label":"Sine Function","linear":"sin⁡⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["sin"],"tail":[]},"node":{"Func":{"body":[],"name":"sin"}}}}],"jc":null,"para":false}},{"id":"fn.cos","label":"Cosine Function","linear":"cos⁡⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["cos"],"tail":[]},"node":{"Func":{"body":[],"name":"cos"}}}}],"jc":null,"para":false}},{"id":"fn.tan","label":"Tangent Function","linear":"tan⁡⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["tan"],"tail":[]},"node":{"Func":{"body":[],"name":"tan"}}}}],"jc":null,"para":false}},{"id":"fn.csc","label":"Cosecant Function","linear":"csc⁡⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["csc"],"tail":[]},"node":{"Func":{"body":[],"name":"csc"}}}}],"jc":null,"para":false}},{"id":"fn.sec","label":"Secant Function","linear":"sec⁡⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["sec"],"tail":[]},"node":{"Func":{"body":[],"name":"sec"}}}}],"jc":null,"para":false}},{"id":"fn.cot","label":"Cotangent Function","linear":"cot⁡⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["cot"],"tail":[]},"node":{"Func":{"body":[],"name":"cot"}}}}],"jc":null,"para":false}}]},{"name":"Inverse Functions","templates":[{"id":"fn.asin","label":"Inverse Sine Function","linear":"sin^(−1)⁡⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["sin−1"],"tail":[]},"node":{"Func":{"body":[],"name":"(sin)^−1"}}}}],"jc":null,"para":false}},{"id":"fn.acos","label":"Inverse Cosine Function","linear":"cos^(−1)⁡⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["cos−1"],"tail":[]},"node":{"Func":{"body":[],"name":"(cos)^−1"}}}}],"jc":null,"para":false}},{"id":"fn.atan","label":"Inverse Tangent Function","linear":"tan^(−1)⁡⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["tan−1"],"tail":[]},"node":{"Func":{"body":[],"name":"(tan)^−1"}}}}],"jc":null,"para":false}},{"id":"fn.acsc","label":"Inverse Cosecant Function","linear":"csc^(−1)⁡⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["csc−1"],"tail":[]},"node":{"Func":{"body":[],"name":"(csc)^−1"}}}}],"jc":null,"para":false}},{"id":"fn.asec","label":"Inverse Secant Function","linear":"sec^(−1)⁡⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["sec−1"],"tail":[]},"node":{"Func":{"body":[],"name":"(sec)^−1"}}}}],"jc":null,"para":false}},{"id":"fn.acot","label":"Inverse Cotangent Function","linear":"cot^(−1)⁡⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["cot−1"],"tail":[]},"node":{"Func":{"body":[],"name":"(cot)^−1"}}}}],"jc":null,"para":false}}]},{"name":"Hyperbolic Functions","templates":[{"id":"fn.sinh","label":"Hyperbolic Sine Function","linear":"sinh⁡⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["sinh"],"tail":[]},"node":{"Func":{"body":[],"name":"sinh"}}}}],"jc":null,"para":false}},{"id":"fn.cosh","label":"Hyperbolic Cosine Function","linear":"cosh⁡⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["cosh"],"tail":[]},"node":{"Func":{"body":[],"name":"cosh"}}}}],"jc":null,"para":false}},{"id":"fn.tanh","label":"Hyperbolic Tangent Function","linear":"tanh⁡⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["tanh"],"tail":[]},"node":{"Func":{"body":[],"name":"tanh"}}}}],"jc":null,"para":false}},{"id":"fn.csch","label":"Hyperbolic Cosecant Function","linear":"csch⁡⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["csch"],"tail":[]},"node":{"Func":{"body":[],"name":"csch"}}}}],"jc":null,"para":false}},{"id":"fn.sech","label":"Hyperbolic Secant Function","linear":"sech⁡⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["sech"],"tail":[]},"node":{"Func":{"body":[],"name":"sech"}}}}],"jc":null,"para":false}},{"id":"fn.coth","label":"Hyperbolic Cotangent Function","linear":"coth⁡⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["coth"],"tail":[]},"node":{"Func":{"body":[],"name":"coth"}}}}],"jc":null,"para":false}}]},{"name":"Inverse Hyperbolic Functions","templates":[{"id":"fn.asinh","label":"Inverse Hyperbolic Sine Function","linear":"sinh^(−1)⁡⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["sinh−1"],"tail":[]},"node":{"Func":{"body":[],"name":"(sinh)^−1"}}}}],"jc":null,"para":false}},{"id":"fn.acosh","label":"Inverse Hyperbolic Cosine Function","linear":"cosh^(−1)⁡⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["cosh−1"],"tail":[]},"node":{"Func":{"body":[],"name":"(cosh)^−1"}}}}],"jc":null,"para":false}},{"id":"fn.atanh","label":"Inverse Hyperbolic Tangent Function","linear":"tanh^(−1)⁡⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["tanh−1"],"tail":[]},"node":{"Func":{"body":[],"name":"(tanh)^−1"}}}}],"jc":null,"para":false}},{"id":"fn.acsch","label":"Inverse Hyperbolic Cosecant Function","linear":"csch^(−1)⁡⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["csch−1"],"tail":[]},"node":{"Func":{"body":[],"name":"(csch)^−1"}}}}],"jc":null,"para":false}},{"id":"fn.asech","label":"Inverse Hyperbolic Secant Function","linear":"sech^(−1)⁡⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["sech−1"],"tail":[]},"node":{"Func":{"body":[],"name":"(sech)^−1"}}}}],"jc":null,"para":false}},{"id":"fn.acoth","label":"Inverse Hyperbolic Cotangent Function","linear":"coth^(−1)⁡⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["coth−1"],"tail":[]},"node":{"Func":{"body":[],"name":"(coth)^−1"}}}}],"jc":null,"para":false}}]},{"name":"Common Functions","templates":[{"id":"fn.sintheta","label":"Sine theta","linear":"sin⁡θ","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["sin"],"tail":[]},"node":{"Func":{"body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"θ"}}}],"name":"sin"}}}}],"jc":null,"para":false}},{"id":"fn.cos2x","label":"Cosine 2x","linear":"cos⁡2x","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["cos"],"tail":[]},"node":{"Func":{"body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2x"}}}],"name":"cos"}}}}],"jc":null,"para":false}},{"id":"fn.tanIdentity","label":"Tangent formula","linear":"tan⁡θ=sin⁡θ/cos⁡θ","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["tan"],"tail":[]},"node":{"Func":{"body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"θ"}}}],"name":"tan"}}}},{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"="}}},{"Frac":{"den":[{"Props":{"extra":{"attrs":"","pr":[],"side":["cos"],"tail":[]},"node":{"Func":{"body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"θ"}}}],"name":"cos"}}}}],"num":[{"Props":{"extra":{"attrs":"","pr":[],"side":["sin"],"tail":[]},"node":{"Func":{"body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"θ"}}}],"name":"sin"}}}}]}}],"jc":null,"para":false}}]}]},{"id":"accent","label":"Accent","picture":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"ä"}}}],"jc":null,"para":false},"sections":[{"name":"Accents","templates":[{"id":"acc.dot","label":"Dot","linear":"⬚̇","math":{"attrs":"","body":[{"Accent":{"body":[],"ch":"̇"}}],"jc":null,"para":false}},{"id":"acc.ddot","label":"Double Dot","linear":"⬚̈","math":{"attrs":"","body":[{"Accent":{"body":[],"ch":"̈"}}],"jc":null,"para":false}},{"id":"acc.dddot","label":"Triple Dot","linear":"⬚⃛","math":{"attrs":"","body":[{"Accent":{"body":[],"ch":"⃛"}}],"jc":null,"para":false}},{"id":"acc.hat","label":"Hat","linear":"⬚̂","math":{"attrs":"","body":[{"Accent":{"body":[],"ch":"̂"}}],"jc":null,"para":false}},{"id":"acc.check","label":"Check","linear":"⬚̌","math":{"attrs":"","body":[{"Accent":{"body":[],"ch":"̌"}}],"jc":null,"para":false}},{"id":"acc.acute","label":"Acute","linear":"⬚́","math":{"attrs":"","body":[{"Accent":{"body":[],"ch":"́"}}],"jc":null,"para":false}},{"id":"acc.grave","label":"Grave","linear":"⬚̀","math":{"attrs":"","body":[{"Accent":{"body":[],"ch":"̀"}}],"jc":null,"para":false}},{"id":"acc.breve","label":"Breve","linear":"⬚̆","math":{"attrs":"","body":[{"Accent":{"body":[],"ch":"̆"}}],"jc":null,"para":false}},{"id":"acc.tilde","label":"Tilde","linear":"⬚̃","math":{"attrs":"","body":[{"Accent":{"body":[],"ch":"̃"}}],"jc":null,"para":false}},{"id":"acc.bar","label":"Bar","linear":"⬚̅","math":{"attrs":"","body":[{"Accent":{"body":[],"ch":"̅"}}],"jc":null,"para":false}},{"id":"acc.dbar","label":"Double Bar","linear":"⬚̿","math":{"attrs":"","body":[{"Accent":{"body":[],"ch":"̿"}}],"jc":null,"para":false}},{"id":"acc.overbrace","label":"Overbrace","linear":"⏞⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[["vertJc",""]],"side":[],"tail":[]},"node":{"GroupChr":{"body":[],"ch":"⏞","top":true}}}}],"jc":null,"para":false}},{"id":"acc.underbrace","label":"Underbrace","linear":"⏟⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[["vertJc",""]],"side":[],"tail":[]},"node":{"GroupChr":{"body":[],"ch":"⏟","top":false}}}}],"jc":null,"para":false}},{"id":"acc.braceAbove","label":"Grouping Character Above","linear":"⏞(⬚)┴⬚","math":{"attrs":"","body":[{"Limit":{"base":[{"Props":{"extra":{"attrs":"","pr":[["vertJc",""]],"side":[],"tail":[]},"node":{"GroupChr":{"body":[],"ch":"⏞","top":true}}}}],"lim":[],"lower":false}}],"jc":null,"para":false}},{"id":"acc.braceBelow","label":"Grouping Character Below","linear":"⏟(⬚)┬⬚","math":{"attrs":"","body":[{"Limit":{"base":[{"Props":{"extra":{"attrs":"","pr":[["vertJc",""]],"side":[],"tail":[]},"node":{"GroupChr":{"body":[],"ch":"⏟","top":false}}}}],"lim":[],"lower":true}}],"jc":null,"para":false}},{"id":"acc.leftArrow","label":"Leftwards Arrow Above","linear":"⬚⃖","math":{"attrs":"","body":[{"Accent":{"body":[],"ch":"⃖"}}],"jc":null,"para":false}},{"id":"acc.rightArrow","label":"Rightwards Arrow Above","linear":"⬚⃗","math":{"attrs":"","body":[{"Accent":{"body":[],"ch":"⃗"}}],"jc":null,"para":false}},{"id":"acc.bothArrow","label":"Left Right Arrow Above","linear":"⬚⃡","math":{"attrs":"","body":[{"Accent":{"body":[],"ch":"⃡"}}],"jc":null,"para":false}},{"id":"acc.leftHarpoon","label":"Leftwards Harpoon Above","linear":"⬚⃐","math":{"attrs":"","body":[{"Accent":{"body":[],"ch":"⃐"}}],"jc":null,"para":false}},{"id":"acc.rightHarpoon","label":"Rightwards Harpoon Above","linear":"⬚⃑","math":{"attrs":"","body":[{"Accent":{"body":[],"ch":"⃑"}}],"jc":null,"para":false}}]},{"name":"Boxed Formulas","templates":[{"id":"acc.boxed","label":"Boxed Formula","linear":"▭(⬚)","math":{"attrs":"","body":[{"Boxed":{"body":[],"border":true}}],"jc":null,"para":false}},{"id":"acc.boxedPythagoras","label":"Boxed Formula (example)","linear":"▭(a^2=b^2+c^2)","math":{"attrs":"","body":[{"Boxed":{"body":[{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"a"}}}],"sub":null,"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2"}}}]}},{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"="}}},{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"b"}}}],"sub":null,"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2"}}}]}},{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"+"}}},{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"c"}}}],"sub":null,"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2"}}}]}}],"border":true}}],"jc":null,"para":false}}]},{"name":"Overbars and Underbars","templates":[{"id":"acc.overbar","label":"Overbar","linear":"¯(⬚)","math":{"attrs":"","body":[{"Bar":{"body":[],"top":true}}],"jc":null,"para":false}},{"id":"acc.underbar","label":"Underbar","linear":"▁(⬚)","math":{"attrs":"","body":[{"Bar":{"body":[],"top":false}}],"jc":null,"para":false}}]},{"name":"Common Accent Objects","templates":[{"id":"acc.vecA","label":"Vector A","linear":"A⃗","math":{"attrs":"","body":[{"Accent":{"body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"A"}}}],"ch":"⃗"}}],"jc":null,"para":false}},{"id":"acc.vecAB","label":"Vector AB","linear":"(AB)⃡","math":{"attrs":"","body":[{"Accent":{"body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"AB"}}}],"ch":"⃡"}}],"jc":null,"para":false}},{"id":"acc.xbar","label":"x bar","linear":"x̅","math":{"attrs":"","body":[{"Accent":{"body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"x"}}}],"ch":"̅"}}],"jc":null,"para":false}},{"id":"acc.notAxorB","label":"A xor B","linear":"¯(A⊕B)","math":{"attrs":"","body":[{"Bar":{"body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"A⊕B"}}}],"top":true}}],"jc":null,"para":false}}]}]},{"id":"limitLog","label":"Limit and\nLog","picture":{"attrs":"","body":[{"Limit":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Styled":{"style":"Plain","text":"lim"}}}}],"lim":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"n→∞"}}}],"lower":true}}],"jc":null,"para":false},"sections":[{"name":"Functions","templates":[{"id":"lim.logBase","label":"Logarithm with Base","linear":"log_⬚⁡⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["log"],"tail":[]},"node":{"Func":{"body":[],"name":"(log)_()"}}}}],"jc":null,"para":false}},{"id":"lim.log","label":"Logarithm","linear":"log⁡⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["log"],"tail":[]},"node":{"Func":{"body":[],"name":"log"}}}}],"jc":null,"para":false}},{"id":"lim.lim","label":"Limit","linear":"lim┬⬚⁡⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["lim"],"tail":[]},"node":{"Func":{"body":[],"name":"lim_()"}}}}],"jc":null,"para":false}},{"id":"lim.min","label":"Minimum","linear":"min┬⬚⁡⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["min"],"tail":[]},"node":{"Func":{"body":[],"name":"min_()"}}}}],"jc":null,"para":false}},{"id":"lim.max","label":"Maximum","linear":"max┬⬚⁡⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["max"],"tail":[]},"node":{"Func":{"body":[],"name":"max_()"}}}}],"jc":null,"para":false}},{"id":"lim.ln","label":"Natural Logarithm","linear":"ln⁡⬚","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["ln"],"tail":[]},"node":{"Func":{"body":[],"name":"ln"}}}}],"jc":null,"para":false}}]},{"name":"Common Functions","templates":[{"id":"lim.e","label":"Limit Example","linear":"lim┬(n→∞)⁡〖(1+1/n)^n〗","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["limn→∞"],"tail":[]},"node":{"Func":{"body":[{"Script":{"base":[{"Delim":{"close":")","items":[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"1+"}}},{"Frac":{"den":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"n"}}}],"num":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"1"}}}]}}]],"open":"(","sep":""}}],"sub":null,"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"n"}}}]}}],"name":"lim_(n→∞)"}}}}],"jc":null,"para":false}},{"id":"lim.maxExample","label":"Maximum Example","linear":"max┬(0≤x≤1)⁡〖xe^(−x^2)〗","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":["max0≤x≤1"],"tail":[]},"node":{"Func":{"body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"x"}}},{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"e"}}}],"sub":null,"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"−"}}},{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"x"}}}],"sub":null,"sup":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"2"}}}]}}]}}],"name":"max_(0≤x≤1)"}}}}],"jc":null,"para":false}}]}]},{"id":"operator","label":"Operator","picture":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"≜"}}}],"jc":null,"para":false},"sections":[{"name":"Common Operators","templates":[{"id":"op.colonEq","label":"Colon Equal","linear":"≔","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"≔"}}}],"jc":null,"para":false}},{"id":"op.eqeq","label":"Equal Equal","linear":"==","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"=="}}}],"jc":null,"para":false}},{"id":"op.plusEq","label":"Plus Equal","linear":"+=","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"+="}}}],"jc":null,"para":false}},{"id":"op.minusEq","label":"Minus Equal","linear":"−=","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"−="}}}],"jc":null,"para":false}},{"id":"op.defEq","label":"Equal by Definition","linear":"≝","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"≝"}}}],"jc":null,"para":false}},{"id":"op.measured","label":"Measured By","linear":"≞","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"≞"}}}],"jc":null,"para":false}},{"id":"op.delta","label":"Delta Equal To","linear":"≜","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"≜"}}}],"jc":null,"para":false}}]},{"name":"Operator Structures","templates":[{"id":"op.leftArrowBelow","label":"Left Arrow with Text Below","linear":"⟵┬⬚","math":{"attrs":"","body":[{"Limit":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"⟵"}}}],"lim":[],"lower":true}}],"jc":null,"para":false}},{"id":"op.rightArrowBelow","label":"Right Arrow with Text Below","linear":"⟶┬⬚","math":{"attrs":"","body":[{"Limit":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"⟶"}}}],"lim":[],"lower":true}}],"jc":null,"para":false}},{"id":"op.leftArrowAbove","label":"Left Arrow with Text Above","linear":"⟵┴⬚","math":{"attrs":"","body":[{"Limit":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"⟵"}}}],"lim":[],"lower":false}}],"jc":null,"para":false}},{"id":"op.rightArrowAbove","label":"Right Arrow with Text Above","linear":"⟶┴⬚","math":{"attrs":"","body":[{"Limit":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"⟶"}}}],"lim":[],"lower":false}}],"jc":null,"para":false}},{"id":"op.LeftArrowBelow","label":"Double Left Arrow with Text Below","linear":"⟸┬⬚","math":{"attrs":"","body":[{"Limit":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"⟸"}}}],"lim":[],"lower":true}}],"jc":null,"para":false}},{"id":"op.RightArrowBelow","label":"Double Right Arrow with Text Below","linear":"⟹┬⬚","math":{"attrs":"","body":[{"Limit":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"⟹"}}}],"lim":[],"lower":true}}],"jc":null,"para":false}},{"id":"op.LeftArrowAbove","label":"Double Left Arrow with Text Above","linear":"⟸┴⬚","math":{"attrs":"","body":[{"Limit":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"⟸"}}}],"lim":[],"lower":false}}],"jc":null,"para":false}},{"id":"op.RightArrowAbove","label":"Double Right Arrow with Text Above","linear":"⟹┴⬚","math":{"attrs":"","body":[{"Limit":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"⟹"}}}],"lim":[],"lower":false}}],"jc":null,"para":false}},{"id":"op.bothArrowBelow","label":"Left Right Arrow with Text Below","linear":"⟷┬⬚","math":{"attrs":"","body":[{"Limit":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"⟷"}}}],"lim":[],"lower":true}}],"jc":null,"para":false}},{"id":"op.bothArrowAbove","label":"Left Right Arrow with Text Above","linear":"⟷┴⬚","math":{"attrs":"","body":[{"Limit":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"⟷"}}}],"lim":[],"lower":false}}],"jc":null,"para":false}},{"id":"op.BothArrowBelow","label":"Double Left Right Arrow with Text Below","linear":"⟺┬⬚","math":{"attrs":"","body":[{"Limit":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"⟺"}}}],"lim":[],"lower":true}}],"jc":null,"para":false}},{"id":"op.BothArrowAbove","label":"Double Left Right Arrow with Text Above","linear":"⟺┴⬚","math":{"attrs":"","body":[{"Limit":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"⟺"}}}],"lim":[],"lower":false}}],"jc":null,"para":false}},{"id":"op.colonEqAbove","label":"Text over Colon Equal","linear":"≔┴⬚","math":{"attrs":"","body":[{"Limit":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"≔"}}}],"lim":[],"lower":false}}],"jc":null,"para":false}},{"id":"op.eqAbove","label":"Text over Equal","linear":"=┴⬚","math":{"attrs":"","body":[{"Limit":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"="}}}],"lim":[],"lower":false}}],"jc":null,"para":false}}]},{"name":"Common Operator Structures","templates":[{"id":"op.yields","label":"Yields","linear":"⟶┴(yields)","math":{"attrs":"","body":[{"Limit":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"⟶"}}}],"lim":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"yields"}}}],"lower":false}}],"jc":null,"para":false}},{"id":"op.deltaArrow","label":"Delta over arrow","linear":"⟶┴∆","math":{"attrs":"","body":[{"Limit":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"⟶"}}}],"lim":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"∆"}}}],"lower":false}}],"jc":null,"para":false}}]}]},{"id":"matrix","label":"Matrix","picture":{"attrs":"","body":[{"Delim":{"close":"]","items":[[{"Props":{"extra":{"attrs":"","pr":[["mcs",""]],"side":[],"tail":[]},"node":{"Matrix":{"rows":[[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"1"}}}],[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"0"}}}]],[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"0"}}}],[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"1"}}}]]]}}}}]],"open":"[","sep":""}}],"jc":null,"para":false},"sections":[{"name":"Empty Matrices","templates":[{"id":"mat.1x2","label":"1×2 Empty Matrix","linear":"■(⬚&⬚)","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[["mcs",""]],"side":[],"tail":[]},"node":{"Matrix":{"rows":[[[],[]]]}}}}],"jc":null,"para":false}},{"id":"mat.2x1","label":"2×1 Empty Matrix","linear":"■(⬚@⬚)","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[["mcs",""]],"side":[],"tail":[]},"node":{"Matrix":{"rows":[[[]],[[]]]}}}}],"jc":null,"para":false}},{"id":"mat.1x3","label":"1×3 Empty Matrix","linear":"■(⬚&⬚&⬚)","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[["mcs",""]],"side":[],"tail":[]},"node":{"Matrix":{"rows":[[[],[],[]]]}}}}],"jc":null,"para":false}},{"id":"mat.3x1","label":"3×1 Empty Matrix","linear":"■(⬚@⬚@⬚)","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[["mcs",""]],"side":[],"tail":[]},"node":{"Matrix":{"rows":[[[]],[[]],[[]]]}}}}],"jc":null,"para":false}},{"id":"mat.2x2","label":"2×2 Empty Matrix","linear":"■(⬚&⬚@⬚&⬚)","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[["mcs",""]],"side":[],"tail":[]},"node":{"Matrix":{"rows":[[[],[]],[[],[]]]}}}}],"jc":null,"para":false}},{"id":"mat.2x3","label":"2×3 Empty Matrix","linear":"■(⬚&⬚&⬚@⬚&⬚&⬚)","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[["mcs",""]],"side":[],"tail":[]},"node":{"Matrix":{"rows":[[[],[],[]],[[],[],[]]]}}}}],"jc":null,"para":false}},{"id":"mat.3x2","label":"3×2 Empty Matrix","linear":"■(⬚&⬚@⬚&⬚@⬚&⬚)","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[["mcs",""]],"side":[],"tail":[]},"node":{"Matrix":{"rows":[[[],[]],[[],[]],[[],[]]]}}}}],"jc":null,"para":false}},{"id":"mat.3x3","label":"3×3 Empty Matrix","linear":"■(⬚&⬚&⬚@⬚&⬚&⬚@⬚&⬚&⬚)","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[["mcs",""]],"side":[],"tail":[]},"node":{"Matrix":{"rows":[[[],[],[]],[[],[],[]],[[],[],[]]]}}}}],"jc":null,"para":false}}]},{"name":"Dots","templates":[{"id":"mat.cdots","label":"Midline Dots","linear":"⋯","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"⋯"}}}],"jc":null,"para":false}},{"id":"mat.ldots","label":"Baseline Dots","linear":"…","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"…"}}}],"jc":null,"para":false}},{"id":"mat.vdots","label":"Vertical Dots","linear":"⋮","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"⋮"}}}],"jc":null,"para":false}},{"id":"mat.ddots","label":"Diagonal Dots","linear":"⋱","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"⋱"}}}],"jc":null,"para":false}},{"id":"mat.adots","label":"Up Diagonal Dots","linear":"⋰","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"⋰"}}}],"jc":null,"para":false}}]},{"name":"Identity Matrices","templates":[{"id":"mat.id2","label":"2×2 Identity Matrix","linear":"■(1&0@0&1)","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[["mcs",""]],"side":[],"tail":[]},"node":{"Matrix":{"rows":[[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"1"}}}],[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"0"}}}]],[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"0"}}}],[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"1"}}}]]]}}}}],"jc":null,"para":false}},{"id":"mat.id2zeros","label":"2×2 Identity Matrix (sparse)","linear":"■(1&⬚@⬚&1)","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[["mcs",""]],"side":[],"tail":[]},"node":{"Matrix":{"rows":[[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"1"}}}],[]],[[],[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"1"}}}]]]}}}}],"jc":null,"para":false}},{"id":"mat.id3","label":"3×3 Identity Matrix","linear":"■(1&0&0@0&1&0@0&0&1)","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[["mcs",""]],"side":[],"tail":[]},"node":{"Matrix":{"rows":[[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"1"}}}],[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"0"}}}],[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"0"}}}]],[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"0"}}}],[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"1"}}}],[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"0"}}}]],[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"0"}}}],[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"0"}}}],[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"1"}}}]]]}}}}],"jc":null,"para":false}},{"id":"mat.id3zeros","label":"3×3 Identity Matrix (sparse)","linear":"■(1&⬚&⬚@⬚&1&⬚@⬚&⬚&1)","math":{"attrs":"","body":[{"Props":{"extra":{"attrs":"","pr":[["mcs",""]],"side":[],"tail":[]},"node":{"Matrix":{"rows":[[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"1"}}}],[],[]],[[],[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"1"}}}],[]],[[],[],[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"1"}}}]]]}}}}],"jc":null,"para":false}}]},{"name":"Matrices with Brackets","templates":[{"id":"mat.paren","label":"2×2 Matrix in Parentheses","linear":"(■(⬚&⬚@⬚&⬚))","math":{"attrs":"","body":[{"Delim":{"close":")","items":[[{"Props":{"extra":{"attrs":"","pr":[["mcs",""]],"side":[],"tail":[]},"node":{"Matrix":{"rows":[[[],[]],[[],[]]]}}}}]],"open":"(","sep":""}}],"jc":null,"para":false}},{"id":"mat.square","label":"2×2 Matrix in Brackets","linear":"[■(⬚&⬚@⬚&⬚)]","math":{"attrs":"","body":[{"Delim":{"close":"]","items":[[{"Props":{"extra":{"attrs":"","pr":[["mcs",""]],"side":[],"tail":[]},"node":{"Matrix":{"rows":[[[],[]],[[],[]]]}}}}]],"open":"[","sep":""}}],"jc":null,"para":false}},{"id":"mat.det","label":"2×2 Determinant","linear":"|■(⬚&⬚@⬚&⬚)|","math":{"attrs":"","body":[{"Delim":{"close":"|","items":[[{"Props":{"extra":{"attrs":"","pr":[["mcs",""]],"side":[],"tail":[]},"node":{"Matrix":{"rows":[[[],[]],[[],[]]]}}}}]],"open":"|","sep":""}}],"jc":null,"para":false}},{"id":"mat.norm","label":"2×2 Matrix in Double Bars","linear":"‖■(⬚&⬚@⬚&⬚)‖","math":{"attrs":"","body":[{"Delim":{"close":"‖","items":[[{"Props":{"extra":{"attrs":"","pr":[["mcs",""]],"side":[],"tail":[]},"node":{"Matrix":{"rows":[[[],[]],[[],[]]]}}}}]],"open":"‖","sep":""}}],"jc":null,"para":false}}]},{"name":"Sparse Matrices","templates":[{"id":"mat.sparse","label":"n×n Matrix","linear":"(■(a_11&⋯&a_(1n)@⋮&⋱&⋮@a_(m1)&⋯&a_(mn)))","math":{"attrs":"","body":[{"Delim":{"close":")","items":[[{"Props":{"extra":{"attrs":"","pr":[["mcs",""]],"side":[],"tail":[]},"node":{"Matrix":{"rows":[[[{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"a"}}}],"sub":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"11"}}}],"sup":null}}],[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"⋯"}}}],[{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"a"}}}],"sub":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"1n"}}}],"sup":null}}]],[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"⋮"}}}],[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"⋱"}}}],[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"⋮"}}}]],[[{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"a"}}}],"sub":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"m1"}}}],"sup":null}}],[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"⋯"}}}],[{"Script":{"base":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"a"}}}],"sub":[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"mn"}}}],"sup":null}}]]]}}}}]],"open":"(","sep":""}}],"jc":null,"para":false}},{"id":"mat.identityN","label":"n×n Identity Matrix","linear":"[■(1&0&⋯&0@0&1&⋯&0@⋮&⋮&⋱&⋮@0&0&⋯&1)]","math":{"attrs":"","body":[{"Delim":{"close":"]","items":[[{"Props":{"extra":{"attrs":"","pr":[["mcs",""]],"side":[],"tail":[]},"node":{"Matrix":{"rows":[[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"1"}}}],[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"0"}}}],[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"⋯"}}}],[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"0"}}}]],[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"0"}}}],[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"1"}}}],[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"⋯"}}}],[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"0"}}}]],[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"⋮"}}}],[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"⋮"}}}],[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"⋱"}}}],[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"⋮"}}}]],[[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"0"}}}],[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"0"}}}],[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"⋯"}}}],[{"Props":{"extra":{"attrs":"","pr":[],"side":[""],"tail":[]},"node":{"Text":"1"}}}]]]}}}}]],"open":"[","sep":""}}],"jc":null,"para":false}}]}]}],"symbolNames":{"¬":"neg","°":"degree","±":"pm","Å":"Angstrom","×":"times","ð":"eth","÷":"div","ı":"imath","ȷ":"jmath","Α":"Alpha","Β":"Beta","Γ":"Gamma","Δ":"Delta","Ε":"Epsilon","Ζ":"Zeta","Η":"Eta","Θ":"Theta","Ι":"Iota","Κ":"Kappa","Λ":"Lambda","Μ":"Mu","Ν":"Nu","Ξ":"Xi","Ο":"Omicron","Π":"Pi","Ρ":"Rho","Σ":"Sigma","Τ":"Tau","Υ":"Upsilon","Φ":"Phi","Χ":"Chi","Ψ":"Psi","Ω":"Omega","α":"alpha","β":"beta","γ":"gamma","δ":"delta","ε":"varepsilon","ζ":"zeta","η":"eta","θ":"theta","ι":"iota","κ":"kappa","λ":"lambda","μ":"mu","ν":"nu","ξ":"xi","ο":"omicron","π":"pi","ρ":"rho","ς":"varsigma","σ":"sigma","τ":"tau","υ":"upsilon","φ":"varphi","χ":"chi","ψ":"psi","ω":"omega","ϑ":"vartheta","ϕ":"phi","ϖ":"varpi","ϝ":"digamma","ϱ":"varrho","ϵ":"epsilon","ℏ":"hbar","ℑ":"Im","ℓ":"ell","℘":"wp","ℜ":"Re","℧":"mho","ℵ":"aleph","ℶ":"beth","ℷ":"gimel","ℸ":"daleth","ⅅ":"Dd","ⅆ":"dd","ⅇ":"ee","ⅈ":"ii","ⅉ":"jj","←":"leftarrow","↑":"uparrow","→":"rightarrow","↓":"downarrow","↔":"leftrightarrow","↕":"updownarrow","↖":"nwarrow","↗":"nearrow","↘":"searrow","↙":"swarrow","↦":"mapsto","↩":"hookleftarrow","↪":"hookrightarrow","↺":"circlearrowleft","↻":"circlearrowright","↼":"leftharpoonup","↽":"leftharpoondown","⇀":"rightharpoonup","⇁":"rightharpoondown","⇋":"leftrightharpoons","⇌":"rightleftharpoons","⇐":"Leftarrow","⇑":"Uparrow","⇒":"Rightarrow","⇓":"Downarrow","⇔":"Leftrightarrow","⇕":"Updownarrow","∀":"forall","∁":"complement","∂":"partial","∃":"exists","∄":"nexists","∅":"emptyset","∇":"nabla","∈":"in","∉":"notin","∋":"ni","∎":"qed","∏":"prod","∐":"coprod","∑":"sum","∓":"mp","∔":"dotplus","∕":"ldiv","∖":"setminus","∗":"ast","∘":"circ","∙":"bullet","√":"sqrt","∛":"cbrt","∜":"qdrt","∝":"propto","∞":"infty","∟":"rightangle","∠":"angle","∡":"measuredangle","∢":"sphericalangle","∤":"nmid","∥":"parallel","∧":"wedge","∨":"vee","∩":"cap","∪":"cup","∫":"int","∬":"iint","∭":"iiint","∮":"oint","∯":"oiint","∰":"oiiint","∴":"therefore","∵":"because","∼":"sim","≀":"wr","≁":"nsim","≃":"simeq","≅":"cong","≇":"ncong","≈":"approx","≍":"asymp","≐":"doteq","≔":"coloneq","≜":"triangleq","≝":"defeq","≠":"ne","≡":"equiv","≢":"nequiv","≤":"le","≥":"ge","≪":"ll","≫":"gg","≮":"nless","≯":"ngtr","≰":"nleq","≱":"ngeq","≺":"prec","≻":"succ","≼":"preceq","≽":"succeq","⊂":"subset","⊃":"supset","⊄":"nsubset","⊅":"nsupset","⊆":"subseteq","⊇":"supseteq","⊈":"nsubseteq","⊉":"nsupseteq","⊊":"subsetneq","⊋":"supsetneq","⊎":"uplus","⊑":"sqsubseteq","⊒":"sqsupseteq","⊓":"sqcap","⊔":"sqcup","⊕":"oplus","⊖":"ominus","⊗":"otimes","⊘":"oslash","⊙":"odot","⊢":"vdash","⊣":"dashv","⊥":"perp","⋀":"bigwedge","⋁":"bigvee","⋂":"bigcap","⋃":"bigcup","⋄":"diamond","⋅":"cdot","⋆":"star","⋈":"bowtie","⋉":"ltimes","⋊":"rtimes","⋮":"vdots","⋯":"cdots","⋰":"adots","⋱":"ddots","□":"square","▭":"rect","△":"triangle","⟵":"longleftarrow","⟶":"longrightarrow","⟷":"longleftrightarrow","⟸":"Longleftarrow","⟹":"Longrightarrow","⟺":"Longleftrightarrow","⟼":"longmapsto","⨀":"bigodot","⨁":"bigoplus","⨂":"bigotimes","⨄":"biguplus","⨆":"bigsqcup"},"symbols":[{"chars":"±∞=≠~×÷!∝<≪>≫≤≥∓≅≈≡∀∁∂√∛∜∪∩∅%°℉℃∆∇∃∄∈∋←↑→↓↔∴+−¬αβγδεϵθϑμπρστφωω∗∙⋮⋯⋰⋱ℵℶ∎","name":"Basic Math"},{"chars":"αβγδεϵζηθϑικλμνξοπϖρϱσςτυφϕχψωΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ","name":"Greek Letters"},{"chars":"∀∁ℂ∂ðℇϝℱℊℋℌℍℎℏıℑȷℒℓℕ℘ℙℚℛℜℝℤ℧Åℬℭℰℯℳℴℵℶℷℸⅅⅆⅇⅈⅉ","name":"Letter-Like Symbols"},{"chars":"+−÷×±∓∝∕∗∘∙√∛∜∩∪⊎⊓⊔∧∨⊕⊖⊗⊘⊙⊚⊛⊞⊟⊠⊡⋄⋅⋆⋉⋊∔∸∖≀=≠<>≤≥≮≰≯≱≡∼≃≈≅≢≄≉≇∝≪≫∈∋∉⊂⊃⊆⊇≺≻≼≽⊏⊐⊑⊒∥⊥⊢⊣⋈≍∴∵∷≐≑≒≓≔≕≖≗≜≝≞≟∑∫∬∭∮∯∰∏∐⋂⋃⋀⋁⨀⨁⨂⨄⨆","name":"Operators"},{"chars":"←→↑↓↔↕⇐⇒⇑⇓⇔⇕⟵⟶⟷⟸⟹⟺↦⟼↩↪↼↽⇀⇁↿↾⇃⇂⇋⇌⇄⇆⇇⇉⇈⇊↖↗↘↙↶↷↺↻⊸↜↝↞↠↢↣↫↬↭⇚⇛↰↱⇝","name":"Arrows"},{"chars":"≠≮≯≰≱≢≁≄≉≇≭≨≩⊀⊁⋠⋡∉∌⊄⊅⊈⊉⊊⊋⋢⋣⋦⋧⋨⋩⋪⋫⋬⋭∤∦⊬⊭⊮⊯∄","name":"Negated Relations"},{"chars":"𝒜ℬ𝒞𝒟ℰℱ𝒢ℋℐ𝒥𝒦ℒℳ𝒩𝒪𝒫𝒬ℛ𝒮𝒯𝒰𝒱𝒲𝒳𝒴𝒵𝒶𝒷𝒸𝒹ℯ𝒻ℊ𝒽𝒾𝒿𝓀𝓁𝓂𝓃ℴ𝓅𝓆𝓇𝓈𝓉𝓊𝓋𝓌𝓍𝓎𝓏𝔄𝔅ℭ𝔇𝔈𝔉𝔊ℌℑ𝔍𝔎𝔏𝔐𝔑𝔒𝔓𝔔ℜ𝔖𝔗𝔘𝔙𝔚𝔛𝔜ℨ𝔸𝔹ℂ𝔻𝔼𝔽𝔾ℍ𝕀𝕁𝕂𝕃𝕄ℕ𝕆ℙℚℝ𝕊𝕋𝕌𝕍𝕎𝕏𝕐ℤ","name":"Scripts"},{"chars":"∟∠∡∢⊾⊿⋕⊥∤∥∦∶∷∴∵∎△▭▱○◊□◇⊡⊙","name":"Geometry"}]} \ No newline at end of file diff --git a/crates/equashion-math/src/gallery.rs b/crates/equashion-math/src/gallery.rs new file mode 100644 index 00000000..32efc3c1 --- /dev/null +++ b/crates/equashion-math/src/gallery.rs @@ -0,0 +1,140 @@ +//! The Equation tab's galleries: structure templates (fractions, scripts, radicals, integrals, +//! large operators, brackets, functions, accents, limits and logs, operators, matrices), symbol +//! sets and ready-made equations. +//! +//! The data is WordCraft's (`math_gallery.rs`, v0.5.0), exported once as equaSHion trees so a host +//! needs neither WordCraft's linear-format parser nor its model: each template is a [`Math`] +//! whose empty places are empty sequences, the form [`crate::Editor::insert_template`] takes. +//! `gallery.json` is that export (compact JSON of [`Galleries`]). + +use std::sync::OnceLock; + +use serde::Deserialize; + +use crate::Math; + +/// One template or ready-made equation. +#[derive(Debug, Clone, Deserialize)] +pub struct GalleryTemplate { + pub id: String, + pub label: String, + /// The equation in Word's linear format (`⬚` marks an empty place), for tooltips. + pub linear: String, + pub math: Math, +} + +/// A titled run of templates inside a gallery. +#[derive(Debug, Clone, Deserialize)] +pub struct Section { + pub name: String, + pub templates: Vec, +} + +/// One structure gallery (a button of the Equation tab) with its sections. +#[derive(Debug, Clone, Deserialize)] +pub struct Gallery { + pub id: String, + pub label: String, + /// The picture on the gallery's ribbon button. + pub picture: Math, + pub sections: Vec
    , +} + +/// A named set of symbols (the Symbols gallery's categories). +#[derive(Debug, Clone, Deserialize)] +pub struct SymbolSet { + pub name: String, + pub chars: String, +} + +/// Everything the Equation tab offers. +#[derive(Debug, Clone, Deserialize)] +pub struct Galleries { + pub structures: Vec, + pub symbols: Vec, + /// Ready-made equations (Insert › Equation), grouped by subject. + pub builtins: Vec, + /// The picture on the ready-made equations button. + #[serde(rename = "equationPicture")] + pub equation_picture: Math, + /// TeX-style names of the symbols that have one (`α` is `alpha`), for tooltips. + #[serde(rename = "symbolNames")] + pub symbol_names: std::collections::HashMap, +} + +/// The galleries, parsed once. +#[allow(clippy::expect_used)] +pub fn galleries() -> &'static Galleries { + static G: OnceLock = OnceLock::new(); + G.get_or_init(|| serde_json::from_str(include_str!("gallery.json")).expect("gallery.json is valid")) +} + +impl Galleries { + /// A structure gallery by id. + pub fn structure(&self, id: &str) -> Option<&Gallery> { + self.structures.iter().find(|g| g.id == id) + } + + /// A symbol's name (`alpha` for `α`), when it has one. + pub fn symbol_name(&self, c: char) -> Option<&str> { + self.symbol_names.get(c.to_string().as_str()).map(String::as_str) + } + + /// Every structure template. + pub fn templates(&self) -> impl Iterator { + self.structures.iter().flat_map(|g| g.sections.iter().flat_map(|s| s.templates.iter())) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::{Editor, run_text, to_linear}; + + #[test] + fn the_galleries_load_with_every_group() { + let g = galleries(); + let ids: Vec<&str> = g.structures.iter().map(|g| g.id.as_str()).collect(); + assert_eq!( + ids, + ["fraction", "script", "radical", "integral", "largeOperator", "bracket", "function", "accent", "limitLog", "operator", "matrix"] + ); + assert_eq!(g.templates().count(), 222); + assert_eq!(g.symbols.len(), 8); + assert_eq!(g.builtins.len(), 14); + } + + #[test] + fn template_ids_are_unique_and_none_is_empty() { + let g = galleries(); + let mut seen = std::collections::HashSet::new(); + for t in g.templates().chain(g.builtins.iter()) { + assert!(seen.insert(t.id.as_str()), "duplicate id {}", t.id); + assert!(!t.math.body.is_empty(), "{} has no body", t.id); + assert!(!to_linear(&t.math).is_empty(), "{} has no text", t.id); + } + } + + #[test] + fn every_template_inserts_into_an_empty_equation() { + for t in galleries().templates() { + let mut e = Editor::new(Math::new(vec![])); + e.insert_template(&t.math); + assert!(!e.math().body.is_empty(), "{} inserted nothing", t.id); + } + } + + #[test] + fn buttons_have_pictures_and_symbols_have_names() { + let g = galleries(); + assert!(g.structures.iter().all(|s| !s.picture.body.is_empty()), "every gallery has a picture"); + assert!(!g.equation_picture.body.is_empty()); + assert_eq!(g.symbol_name('α'), Some("alpha")); + } + + #[test] + fn a_ready_made_equation_reads_back() { + let pythagoras = galleries().builtins.iter().find(|t| t.id == "pythagoras").expect("pythagoras"); + assert_eq!(run_text(&pythagoras.math), "a^2+b^2=c^2"); + } +} diff --git a/crates/equashion-math/src/latex.rs b/crates/equashion-math/src/latex.rs new file mode 100644 index 00000000..82a56cec --- /dev/null +++ b/crates/equashion-math/src/latex.rs @@ -0,0 +1,620 @@ +//! LaTeX output: print an equation as the LaTeX a MathLive-style editor would produce. +//! +//! [`to_linear`](crate::to_linear) prints the typed linear form (`√(x)`, `·`); this prints LaTeX +//! (`\sqrt{x}`, `\cdot`) for hosts that store and exchange it. The parser side is +//! [`from_linear`](crate::from_linear), which reads the same LaTeX subset, so +//! `from_linear(&to_latex(m))` gives back an equal tree for everything this printer emits. +//! +//! Choices follow MathLive's output where they are visible to a consumer: one-character scripts +//! are written without braces (`x^2`), delimiters are `\left..\right`, matrices use the +//! `pmatrix`-style environments, upright words are `\operatorname{..}`. + +use crate::funcs::LATEX; +use crate::linear::{ACCENTS, GREEK, NARY, SYMS, raw_text}; +use crate::{MAX_DEPTH, Math, Node, Seq, Style}; + +/// Print an equation as LaTeX. +pub fn to_latex(m: &Math) -> String { + let mut t = Tex::default(); + t.seq(&m.body, 0); + t.out.trim().to_string() +} + +/// Output buffer that knows when a command name was just written, so a following letter gets a +/// separating space (`\pi x`, never `\pix`). +#[derive(Default)] +struct Tex { + out: String, + after_command: bool, +} + +impl Tex { + fn raw(&mut self, s: &str) { + if let Some(c) = s.chars().next() { + self.space_for(c); + } + self.out.push_str(s); + self.after_command = false; + } + + fn space_for(&mut self, c: char) { + if self.after_command && c.is_ascii_alphabetic() { + self.out.push(' '); + } + } + + /// A command such as `\pi`; the next letter will be separated from it. + fn cmd(&mut self, name: &str) { + self.raw("\\"); + self.out.push_str(name); + self.after_command = name.chars().last().is_some_and(|c| c.is_ascii_alphabetic()); + } + + fn ch(&mut self, c: char) { + self.space_for(c); + self.out.push(c); + self.after_command = false; + } + + fn text(&mut self, s: &str) { + for c in s.chars() { + self.text_char(c); + } + } + + fn text_char(&mut self, c: char) { + if let Some((name, _)) = GREEK.iter().find(|(_, g)| *g == c) { + return self.cmd(name); + } + if let Some((name, _)) = SYMS.iter().find(|(_, v)| v.chars().count() == 1 && v.starts_with(c)) { + return match *name { + // MathLive prints these three as bare characters / scripts. + "prime" => self.raw("'"), + "leq" => self.cmd("le"), + "geq" => self.cmd("ge"), + "neq" => self.cmd("ne"), + "dprime" => self.raw("''"), + n => self.cmd(n), + }; + } + if let Some(name) = extra_command(c) { + return self.cmd(name); + } + if let Some(l) = double_struck_letter(c) { + self.cmd("mathbb"); + self.raw("{"); + self.ch(l); + self.raw("}"); + return; + } + match c { + '\u{2212}' => self.ch('-'), + '\u{2009}' => self.raw("\\,"), + '\u{2005}' => self.raw("\\:"), + '\u{2004}' => self.raw("\\;"), + '\u{2001}' => self.cmd("quad"), + '\u{00A0}' => self.raw("~"), + '{' | '}' | '#' | '%' | '&' | '$' | '_' => { + self.raw("\\"); + self.out.push(c); + } + '\\' => self.cmd("backslash"), + '^' => self.raw("\\^{}"), + '~' => self.raw("\\~{}"), + c => self.ch(c), + } + } + + /// `{...}` around a printed argument; an empty argument is an empty group. + fn group(&mut self, s: &Seq, d: usize) { + self.raw("{"); + self.seq(s, d); + self.raw("}"); + } + + /// A script argument: bare for one ASCII letter or digit (`x^2`), braced otherwise. + fn script(&mut self, mark: char, s: &Seq, d: usize) { + self.raw(&mark.to_string()); + match s.as_slice() { + [Node::Text(t)] if t.chars().count() == 1 && t.chars().all(|c| c.is_ascii_alphanumeric()) => self.text(t), + _ => self.group(s, d), + } + } + + /// The base of a script: bare when it is one character, a delimiter pair, a word or a + /// function name, grouped otherwise so the script attaches to all of it. + fn script_base(&mut self, base: &Seq, d: usize) { + let bare = match base.as_slice() { + [] => false, + [n] => match n.bare() { + Node::Text(t) => t.chars().count() == 1, + Node::Delim { .. } | Node::Styled { .. } => true, + Node::Func { body, .. } => body.is_empty(), + _ => false, + }, + _ => false, + }; + if bare { + self.seq(base, d); + } else { + self.group(base, d); + } + } + + fn delimiter(&mut self, s: &str, left: bool) { + let name = match s { + "" => ".", + "(" | ")" | "[" | "]" | "/" => s, + "{" => "\\{", + "}" => "\\}", + "|" => "|", + "\u{2016}" => "\\Vert", + "\u{27E8}" => "\\langle", + "\u{27E9}" => "\\rangle", + "\u{2329}" => "\\langle", + "\u{232A}" => "\\rangle", + "\u{230A}" => "\\lfloor", + "\u{230B}" => "\\rfloor", + "\u{2308}" => "\\lceil", + "\u{2309}" => "\\rceil", + other => other, + }; + self.cmd(if left { "left" } else { "right" }); + self.after_command = false; + self.out.push_str(name); + self.after_command = name.starts_with('\\') && name.chars().last().is_some_and(|c| c.is_ascii_alphabetic()); + } + + fn seq(&mut self, s: &Seq, depth: usize) { + if depth > MAX_DEPTH { + return; + } + let d = depth + 1; + for n in s { + self.node(n.bare(), d); + } + } + + fn node(&mut self, n: &Node, d: usize) { + match n { + Node::Props { .. } => {} + Node::Text(t) => self.text(t), + Node::Styled { text, style } => self.styled(text, *style), + Node::Frac { num, den } => { + self.cmd("frac"); + self.group(num, d); + self.group(den, d); + } + Node::Rad { deg, body } => { + self.cmd("sqrt"); + if let Some(dg) = deg { + self.raw("["); + self.seq(dg, d); + self.raw("]"); + } + self.group(body, d); + } + Node::Script { base, sub, sup } => { + self.script_base(base, d); + if let Some(s) = sub { + self.script('_', s, d); + } + if let Some(s) = sup { + self.script('^', s, d); + } + } + Node::Nary { op, sub, sup, body } => { + if let Some((name, _)) = NARY.iter().find(|(_, c)| c == op) { + self.cmd(name); + } else if *op != '\0' { + self.ch(*op); + } + if let Some(s) = sub { + self.script('_', s, d); + } + if let Some(s) = sup { + self.script('^', s, d); + } + // One node (a letter, `i^2`, a parenthesised sum) follows bare; a longer run is + // braced so the operator still covers all of it when the LaTeX is read back. + let one = match body.as_slice() { + [] => true, + [Node::Text(t)] => t.chars().count() == 1, + [_] => true, + _ => false, + }; + if one { + self.seq(body, d); + } else { + self.group(body, d); + } + } + Node::Delim { open, close, sep, items } => self.delim(open, close, sep, items, d), + Node::Matrix { rows } => self.matrix("matrix", rows, d), + Node::EqArr { rows } => { + self.raw("\\begin{aligned}"); + self.rows(rows, d); + self.raw("\\end{aligned}"); + } + Node::Func { name, body } => { + self.function(name); + if let [only @ Node::Delim { open, close, .. }] = body.as_slice() + && open == "(" + && close == ")" + { + // The argument list already has its own parentheses. + self.node(only, d); + } else if !body.is_empty() { + self.delimiter("(", true); + self.seq(body, d); + self.delimiter(")", false); + } + } + Node::Accent { ch, body } => match ACCENTS.iter().find(|(_, c)| c == ch) { + Some((name, _)) => { + self.cmd(name); + self.group(body, d); + } + None => { + self.seq(body, d); + self.ch(*ch); + } + }, + Node::Bar { top, body } => { + self.cmd(if *top { "overline" } else { "underline" }); + self.group(body, d); + } + Node::GroupChr { ch, top, body } => { + let side = if *top { "over" } else { "under" }; + let name = match *ch { + '\u{2192}' => Some(format!("{side}rightarrow")), + '\u{2190}' => Some(format!("{side}leftarrow")), + '\u{2194}' => Some(format!("{side}leftrightarrow")), + '\u{23DE}' if *top => Some("overbrace".to_string()), + '\u{23DF}' if !*top => Some("underbrace".to_string()), + _ => None, + }; + match name { + Some(n) => { + self.cmd(&n); + self.group(body, d); + } + None => self.seq(body, d), + } + } + Node::Boxed { border, body } => { + if *border { + self.cmd("boxed"); + self.group(body, d); + } else { + self.seq(body, d); + } + } + Node::Limit { lower, base, lim } => { + let word = match base.as_slice() { + [Node::Styled { text, .. }] if *lower && matches!(text.as_str(), "lim" | "max" | "min") => Some(text.as_str()), + _ => None, + }; + match word { + Some(w) => { + self.cmd(w); + self.script('_', lim, d); + } + None => { + self.cmd(if *lower { "underset" } else { "overset" }); + self.group(lim, d); + self.group(base, d); + } + } + } + Node::PreScript { sub, sup, base } => { + self.raw("{}"); + self.script('_', sub, d); + self.script('^', sup, d); + self.seq(base, d); + } + Node::Raw(src) if src == crate::OMATH_BREAK => self.raw(" "), + Node::Raw(src) if src.starts_with(" {} + Node::Raw(src) => { + let t = raw_text(src); + if t.is_empty() { + self.raw("{}"); + } else { + self.text(&t); + } + } + } + } + + /// A function name: `\sin` for the standard commands, `\operatorname{..}` otherwise. + fn function(&mut self, name: &str) { + if LATEX.contains(&name) { + self.cmd(name); + } else { + self.cmd("operatorname"); + self.raw("{"); + self.text(name); + self.raw("}"); + } + } + + fn styled(&mut self, text: &str, style: Style) { + match style { + Style::Normal => { + self.cmd("text"); + self.raw("{"); + self.text(text); + self.raw("}"); + } + Style::Bold => { + self.cmd("mathbf"); + self.raw("{"); + self.text(text); + self.raw("}"); + } + Style::BoldItalic => { + self.cmd("boldsymbol"); + self.raw("{"); + self.text(text); + self.raw("}"); + } + Style::Plain => { + let word = text.chars().count() > 1 && text.chars().all(|c| c.is_ascii_alphabetic()); + if word { + self.function(text); + } else { + self.cmd("mathrm"); + self.raw("{"); + self.text(text); + self.raw("}"); + } + } + } + } + + fn rows(&mut self, rows: &[Seq], d: usize) { + for (i, r) in rows.iter().enumerate() { + if i > 0 { + self.raw(" \\\\ "); + } + self.seq(r, d); + } + } + + fn matrix(&mut self, env: &str, rows: &[Vec], d: usize) { + self.raw(&format!("\\begin{{{env}}}")); + for (i, row) in rows.iter().enumerate() { + if i > 0 { + self.raw(" \\\\ "); + } + for (k, cell) in row.iter().enumerate() { + if k > 0 { + self.raw(" & "); + } + self.seq(cell, d); + } + } + self.raw(&format!("\\end{{{env}}}")); + } + + fn delim(&mut self, open: &str, close: &str, sep: &str, items: &[Seq], d: usize) { + // A lone matrix or `cases` array is an environment, not a delimited group. + if let [only] = items { + match only.as_slice() { + [Node::Matrix { rows }] => { + if open == "(" && close == ")" && rows.len() == 2 && rows.iter().all(|r| r.len() == 1) { + self.cmd("binom"); + for r in rows { + if let Some(c) = r.first() { + self.group(c, d); + } + } + return; + } + let env = match (open, close) { + ("(", ")") => Some("pmatrix"), + ("[", "]") => Some("bmatrix"), + ("{", "}") => Some("Bmatrix"), + ("|", "|") => Some("vmatrix"), + ("\u{2016}", "\u{2016}") => Some("Vmatrix"), + _ => None, + }; + if let Some(env) = env { + return self.matrix(env, rows, d); + } + } + [Node::EqArr { rows }] if open == "{" && close.is_empty() => { + self.raw("\\begin{cases}"); + for (i, r) in rows.iter().enumerate() { + if i > 0 { + self.raw(" \\\\ "); + } + let mut sub = Tex::default(); + sub.seq(r, d); + self.raw(&sub.out.replace('\u{2003}', " & ")); + } + self.raw("\\end{cases}"); + return; + } + _ => {} + } + } + self.delimiter(open, true); + for (i, it) in items.iter().enumerate() { + if i > 0 { + // `|` stretches with the brackets; any other separator (a comma) is a plain character. + if sep == "|" || sep.is_empty() { + self.cmd("middle"); + self.raw("|"); + } else { + self.raw(sep); + } + } + self.seq(it, d); + } + self.delimiter(close, false); + } +} + +/// Symbols that have a LaTeX command but are not in the typed-command table. +fn extra_command(c: char) -> Option<&'static str> { + Some(match c { + '\u{00D7}' => "times", + '\u{221E}' => "infty", + '\u{2218}' => "circ", + '\u{2216}' => "setminus", + '\u{00AC}' => "neg", + '\u{2227}' => "wedge", + '\u{2228}' => "vee", + '\u{2295}' => "oplus", + '\u{2297}' => "otimes", + '\u{21A6}' => "mapsto", + '\u{2194}' => "leftrightarrow", + '\u{21D0}' => "Leftarrow", + '\u{2234}' => "therefore", + '\u{2235}' => "because", + '\u{210F}' => "hbar", + '\u{2113}' => "ell", + '\u{2135}' => "aleph", + '\u{221A}' => "surd", + '\u{2260}' => "neq", + '\u{22C5}' => "cdot", + '\u{2217}' => "ast", + '\u{2286}' => "subseteq", + '\u{2287}' => "supseteq", + '\u{2283}' => "supset", + '\u{2192}' => "to", + _ => return None, + }) +} + +fn double_struck_letter(c: char) -> Option { + Some(match c { + '\u{2102}' => 'C', + '\u{210D}' => 'H', + '\u{2115}' => 'N', + '\u{2119}' => 'P', + '\u{211A}' => 'Q', + '\u{211D}' => 'R', + '\u{2124}' => 'Z', + _ => return None, + }) +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::from_linear; + + fn t(s: &str) -> String { + to_latex(&from_linear(s)) + } + + #[test] + fn plain_text_and_scripts() { + assert_eq!(t("x^2+3x-2"), "x^2+3x-2"); + assert_eq!(t("x^{2}"), "x^2"); + assert_eq!(t("x^{n+1}"), "x^{n+1}"); + assert_eq!(t("x_{12}"), "x_{12}"); + assert_eq!(t("e^{-x^2}"), "e^{-x^2}"); + } + + #[test] + fn fractions_and_roots() { + assert_eq!(t(r"\frac{1}{x}"), r"\frac{1}{x}"); + assert_eq!(t(r"\frac{\frac{1}{2}}{3}"), r"\frac{\frac{1}{2}}{3}"); + assert_eq!(t(r"\sqrt{x+1}"), r"\sqrt{x+1}"); + assert_eq!(t(r"\sqrt[3]{x}"), r"\sqrt[3]{x}"); + } + + #[test] + fn functions_keep_their_parentheses() { + assert_eq!(t(r"\sin\left(2x\right)"), r"\sin\left(2x\right)"); + assert_eq!(t(r"\sin(x)"), r"\sin\left(x\right)"); + assert_eq!(t(r"\sin x"), r"\sin\left(x\right)"); + assert_eq!(t(r"\ln(x)+\cos(x)"), r"\ln\left(x\right)+\cos\left(x\right)"); + } + + #[test] + fn desmos_function_names_print_as_operator_names() { + for name in crate::funcs::OPNAMES { + let want = format!("\\operatorname{{{name}}}\\left(x\\right)"); + assert_eq!(t(&format!("{name}(x)")), want, "{name}"); + } + assert_eq!(t("sech x"), r"\operatorname{sech}\left(x\right)"); + assert_eq!(t("nCr(6,2)"), r"\operatorname{nCr}\left(6,2\right)"); + assert_eq!(t("csch^2 x"), r"\operatorname{csch}^2 x"); + // The LaTeX commands are unchanged. + assert_eq!(t("sinh(x)"), r"\sinh\left(x\right)"); + } + + #[test] + fn desmos_spellings() { + assert_eq!(t("infinity"), r"\infty"); + assert_eq!(t("u cdot v"), r"u \cdot v"); + assert_eq!(t("u cross v"), r"u \times v"); + } + + #[test] + fn commands_are_separated_from_following_letters() { + assert_eq!(t(r"2\pi x"), r"2\pi x"); + assert_eq!(t(r"\theta+\alpha"), r"\theta+\alpha"); + assert_eq!(t(r"a\cdot b"), r"a\cdot b"); + assert_eq!(t(r"a\leq b\geq c\neq d"), r"a\le b\ge c\ne d"); + } + + #[test] + fn delimiters_and_absolute_value() { + assert_eq!(t(r"\left(x+1\right)^{2}"), r"\left(x+1\right)^2"); + assert_eq!(t("|x-1|"), r"\left|x-1\right|"); + assert_eq!(t(r"\left|x\right|"), r"\left|x\right|"); + assert_eq!(t(r"\{x\}"), r"\left\{x\right\}"); + assert_eq!(t(r"\abs{x}"), r"\left|x\right|"); + assert_eq!(t(r"\sin{x}"), r"\sin\left(x\right)"); + } + + #[test] + fn upright_constants_and_words() { + assert_eq!(t(r"\mathrm{e}^{x}"), r"\mathrm{e}^x"); + assert_eq!(t(r"\exponentialE^{x}"), r"\mathrm{e}^x"); + assert_eq!(t(r"\differentialD x"), "d x"); + assert_eq!(t(r"\operatorname{abs}(x)"), r"\operatorname{abs}\left(x\right)"); + assert_eq!(t(r"\text{if } x"), r"\text{if } x"); + } + + #[test] + fn big_operators_and_environments() { + assert_eq!(t(r"\sum_{i=1}^{n}i"), r"\sum_{i=1}^ni"); + assert_eq!(t(r"\sum_{i=1}^{n}(i+1)"), r"\sum_{i=1}^n\left(i+1\right)"); + assert_eq!(t(r"\int_0^1 x\,dx"), r"\int_0^1{x\,dx}"); + assert_eq!(t(r"\begin{pmatrix}a&b\\c&d\end{pmatrix}"), r"\begin{pmatrix}a & b \\ c & d\end{pmatrix}"); + assert_eq!(t(r"\binom{n}{k}"), r"\binom{n}{k}"); + } + + #[test] + fn printed_latex_parses_back_to_the_same_tree() { + for src in [ + r"\frac{a+b}{c}", + r"x^{2}+\sqrt[3]{y}", + r"\sin\left(2x\right)+\cos\left(x\right)", + r"\left|x-1\right|", + r"\sum_{i=1}^{n}i^2", + r"\begin{bmatrix}1&2\\3&4\end{bmatrix}", + r"a\le b\ne c", + r"\overline{x}+\hat{y}", + r"\mathbb{R}\to\infty", + ] { + let m = from_linear(src); + let l = to_latex(&m); + assert_eq!(from_linear(&l).body, m.body, "{src} -> {l}"); + } + } + + #[test] + fn printing_is_stable() { + for src in [r"\frac{x^2}{\sqrt{y}}", r"\sin\left(\pi x\right)", r"2\left(x+1\right)", r"\begin{cases}1&x>0\\0&x<0\end{cases}"] { + let once = t(src); + assert_eq!(t(&once), once, "{src}"); + } + } +} diff --git a/crates/equashion-math/src/lib.rs b/crates/equashion-math/src/lib.rs new file mode 100644 index 00000000..8af7f21f --- /dev/null +++ b/crates/equashion-math/src/lib.rs @@ -0,0 +1,167 @@ +//! equaSHion equations: the math tree, OMML (Office Math Markup) and presentation MathML import +//! and export, a typed "linear" text format, and the template palette. +//! +//! Layer 1, no dependency on fonts: layout lives in `equashion-layout`. +#![deny(clippy::unwrap_used, clippy::expect_used, clippy::panic, clippy::unimplemented, clippy::todo, clippy::unreachable)] +#![forbid(unsafe_code)] + +mod edit; +mod funcs; +mod gallery; +mod latex; +mod linear; +mod mathml; +mod omml; +mod templates; +mod xml; +pub(crate) use xml::XML_DEPTH; + +pub use edit::{Caret, Editor, Key, Path, children, children_mut, seq_at, seq_at_mut, units}; +pub use gallery::{Galleries, Gallery, GalleryTemplate, Section, SymbolSet, galleries}; +pub use latex::to_latex; +pub use linear::{from_linear, to_linear, unknown_commands}; +pub use mathml::{MATHML_NS, MAX_MATHML, MathmlError, from_mathml, to_mathml, to_mathml_display}; +pub use omml::{OMATH_BREAK, OMML_NS, from_omml, to_omml}; +pub use templates::{Template, matrix_template, template, templates}; + +use serde::{Deserialize, Serialize}; + +/// The text a `Math` run carries for an equation: its linear form on one line (control +/// characters, tabs and newlines become spaces) and never empty, so the run always has a width. +pub fn run_text(m: &Math) -> String { + let t: String = to_linear(m).chars().map(|c| if c.is_control() { ' ' } else { c }).collect(); + if t.trim().is_empty() { "\u{25A1}".to_string() } else { t } +} + +/// Maximum nesting depth honoured anywhere in this crate (parsing, printing, layout). +pub const MAX_DEPTH: usize = 48; + +/// Maximum number of XML elements read from one OMML document; the rest is dropped. +pub const MAX_NODES: usize = 250_000; + +/// A sequence of math nodes. +pub type Seq = Vec; + +/// One equation (an `m:oMath`). +#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)] +pub struct Math { + pub body: Seq, + /// True when the source was an `m:oMathPara` (display equation); written back the same way. + pub para: bool, + /// Paragraph justification (`m:oMathParaPr/m:jc`), only meaningful with `para`. + pub jc: Option, + /// Attributes of the (first) `m:oMath` element, as ` name="value"` text ready to write. + #[serde(default)] + pub attrs: String, +} + +impl Math { + pub fn new(body: Seq) -> Self { + Math { body, para: false, jc: None, attrs: String::new() } + } + pub fn is_empty(&self) -> bool { + self.body.iter().all(|n| matches!(n, Node::Text(t) if t.is_empty())) + } +} + +/// Run style of a [`Node::Styled`] text. +#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] +pub enum Style { + /// `m:sty p`: upright. + Plain, + Bold, + /// `m:sty bi`. + BoldItalic, + /// `m:nor`: normal text, not math. + Normal, +} + +/// A node of the math tree. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub enum Node { + /// Plain run of characters (letters, digits, operators). + Text(String), + /// Fraction `num / den`. + Frac { num: Seq, den: Seq }, + /// Radical; `deg` is the optional root degree. + Rad { deg: Option, body: Seq }, + /// Sub/superscript on `base`. + Script { base: Seq, sub: Option, sup: Option }, + /// N-ary operator (sum, product, integral...) with optional limits. + Nary { op: char, sub: Option, sup: Option, body: Seq }, + /// Delimiters around one or more items separated by `sep`. + Delim { open: String, close: String, sep: String, items: Vec }, + /// Matrix: rows of cells. + Matrix { rows: Vec> }, + /// Named function (sin, log...) applied to `body`. + Func { name: String, body: Seq }, + /// Accent mark `ch` (a combining character) over `body`. + Accent { ch: char, body: Seq }, + /// Text with an explicit run style (`m:sty` / `m:nor`). + Styled { text: String, style: Style }, + /// `m:limLow` (`lower`) or `m:limUpp`: a limit expression under or over `base`. + Limit { lower: bool, base: Seq, lim: Seq }, + /// `m:eqArr`: a vertical array of equation lines. + EqArr { rows: Vec }, + /// `m:sPre`: scripts placed before the base. + PreScript { sub: Seq, sup: Seq, base: Seq }, + /// `m:bar`: a line over (`top`) or under the body. + Bar { top: bool, body: Seq }, + /// `m:groupChr`: a stretchy grouping character (brace, arrow) over or under the body. + GroupChr { ch: char, top: bool, body: Seq }, + /// `m:box` (`border` false) or `m:borderBox`. + Boxed { border: bool, body: Seq }, + /// Unknown OMML element, kept verbatim so it survives a round trip. + Raw(String), + /// A node together with the OMML properties the tree does not model (`fPr/type`, `m:scr`, + /// `m:lit`, `m:ctrlPr`, `w:rPr` fonts, `limLoc`, `grow`, `shp`, ...), re-emitted on write so a + /// first edit does not rewrite the equation into a lossy form. Layout and linear text see + /// straight through it. + Props { extra: Extra, node: Box }, +} + +/// Unmodelled OMML properties of one element (see [`Node::Props`]). +#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)] +pub struct Extra { + /// Children of the element's property container (`m:fPr`, `m:rPr`, ...): (name, verbatim XML). + pub pr: Vec<(String, String)>, + /// Run only: sibling elements other than `m:rPr` and `m:t` (for example `w:rPr`), verbatim. + pub side: Vec, + /// Attributes of the element itself, as ` name="value"` text ready to write. + #[serde(default)] + pub attrs: String, + /// Children of a structural element that the tree does not model, verbatim. + #[serde(default)] + pub tail: Vec, +} + +impl Extra { + pub fn is_empty(&self) -> bool { + self.pr.is_empty() && self.side.is_empty() && self.attrs.is_empty() && self.tail.is_empty() + } +} + +impl Node { + /// The node with any [`Node::Props`] wrappers removed. + pub fn bare(&self) -> &Node { + let mut n = self; + while let Node::Props { node, .. } = n { + n = node; + } + n + } +} + +#[cfg(test)] +mod tests; + +#[cfg(test)] +mod run_text_tests { + use super::*; + + #[test] + fn run_text_is_never_empty_or_multiline() { + assert_eq!(run_text(&from_omml("")), "\u{25A1}"); + assert!(!run_text(&from_linear("a\nb\tc")).chars().any(char::is_control)); + } +} diff --git a/crates/equashion-math/src/linear.rs b/crates/equashion-math/src/linear.rs new file mode 100644 index 00000000..88dff977 --- /dev/null +++ b/crates/equashion-math/src/linear.rs @@ -0,0 +1,1736 @@ +//! The "linear" format: equations as typed text, e.g. `x^2 + sqrt(a)/b`, `pi`, `a<=b`. +//! +//! [`from_linear`] is a port of (and superset of) the old `pretty_equation` dialog helper: `^`, +//! `*`, `sqrt`, `<=`, `>=`, `!=`, `pi`, `+-` all keep working, and `a/b`, `x_1` and Greek names +//! now build real structure. [`to_linear`] prints a tree back in the same syntax (Unicode symbols +//! are written as themselves), so `from_linear(to_linear(m))` reproduces canonical trees. +//! +//! The parser is forgiving about ordinary typing: spaces around `/` and before the body of +//! `sqrt`, `sum`, `int` and a bare function (`sin x`); `lim_(x->0)`; `[a,b]`, `|x|`; `matrix(..)` +//! (parenthesised), `■(..)` (bare grid), `cases(..)`; and a LaTeX subset (`\frac{a}{b}`, `\leq`, +//! `\sqrt[3]{x}`, `\sum_{i=1}^{n}`, `\{ .. \}`, `\text{..}`, braces as grouping). + +use crate::xml::{self, XEl}; +use crate::{MAX_DEPTH, Math, Node, Seq, Style}; + +pub(crate) const GREEK: &[(&str, char)] = &[ + ("alpha", 'α'), + ("beta", 'β'), + ("gamma", 'γ'), + ("delta", 'δ'), + ("epsilon", 'ε'), + ("varepsilon", 'ϵ'), + ("zeta", 'ζ'), + ("eta", 'η'), + ("theta", 'θ'), + ("vartheta", 'ϑ'), + ("iota", 'ι'), + ("kappa", 'κ'), + ("lambda", 'λ'), + ("mu", 'μ'), + ("nu", 'ν'), + ("xi", 'ξ'), + ("omicron", 'ο'), + ("pi", 'π'), + ("varpi", 'ϖ'), + ("rho", 'ρ'), + ("sigma", 'σ'), + ("varsigma", 'ς'), + ("tau", 'τ'), + ("upsilon", 'υ'), + ("phi", 'φ'), + ("varphi", 'ϕ'), + ("chi", 'χ'), + ("psi", 'ψ'), + ("omega", 'ω'), + ("Gamma", 'Γ'), + ("Delta", 'Δ'), + ("Theta", 'Θ'), + ("Lambda", 'Λ'), + ("Xi", 'Ξ'), + ("Pi", 'Π'), + ("Sigma", 'Σ'), + ("Phi", 'Φ'), + ("Psi", 'Ψ'), + ("Omega", 'Ω'), +]; + +use crate::funcs::{self, BARE, LATEX}; + +/// LaTeX-style symbol names. +pub(crate) const SYMS: &[(&str, &str)] = &[ + ("leq", "≤"), + ("le", "≤"), + ("geq", "≥"), + ("ge", "≥"), + ("neq", "≠"), + ("ne", "≠"), + ("pm", "±"), + ("mp", "∓"), + ("cdot", "·"), + ("div", "÷"), + ("to", "→"), + ("rightarrow", "→"), + ("leftarrow", "←"), + ("Rightarrow", "⇒"), + ("Leftrightarrow", "⇔"), + ("approx", "≈"), + ("equiv", "≡"), + ("sim", "∼"), + ("ldots", "…"), + ("cdots", "⋯"), + ("dots", "…"), + ("in", "∈"), + ("notin", "∉"), + ("subset", "⊂"), + ("subseteq", "⊆"), + ("cup", "∪"), + ("cap", "∩"), + ("forall", "∀"), + ("exists", "∃"), + ("partial", "∂"), + ("nabla", "∇"), + ("emptyset", "∅"), + ("degree", "°"), + ("angle", "∠"), + ("perp", "⊥"), + ("parallel", "∥"), + ("nparallel", "∦"), + ("prime", "′"), + ("dprime", "″"), + ("backprime", "‵"), + ("mid", "∣"), + ("propto", "∝"), + ("ll", "≪"), + ("gg", "≫"), + // Bracket commands: kept as text, like a typed `⟨` (the drawn delimiters come from OMML). + ("langle", "⟨"), + ("rangle", "⟩"), + ("lfloor", "⌊"), + ("rfloor", "⌋"), + ("lceil", "⌈"), + ("rceil", "⌉"), +]; + +pub(crate) const ACCENTS: &[(&str, char)] = &[ + ("hat", '\u{0302}'), + ("tilde", '\u{0303}'), + ("bar", '\u{0305}'), + ("dot", '\u{0307}'), + ("ddot", '\u{0308}'), + ("vec", '\u{20D7}'), + ("breve", '\u{0306}'), + ("check", '\u{030C}'), + ("acute", '\u{0301}'), + ("grave", '\u{0300}'), +]; + +/// Operator names that LaTeX spells as commands and that print as plain words. +pub(crate) const PASS: &[&str] = &["mod", "bmod", "pmod", "arg", "dim", "ker", "deg", "hom", "Pr", "lg", "sgn", "limsup", "liminf", "sup"]; + +/// Double-struck capital for the common number sets; everything else is left alone. +fn double_struck(c: char) -> char { + match c { + 'C' => 'ℂ', + 'H' => 'ℍ', + 'N' => 'ℕ', + 'P' => 'ℙ', + 'Q' => 'ℚ', + 'R' => 'ℝ', + 'Z' => 'ℤ', + c => c, + } +} + +pub(crate) const NARY: &[(&str, char)] = + &[("sum", '∑'), ("prod", '∏'), ("int", '∫'), ("iint", '∬'), ("iiint", '∭'), ("oint", '∮'), ("bigcup", '⋃'), ("bigcap", '⋂')]; + +/// The single character a LaTeX-style symbol or Greek name stands for (`alpha`, `leq`), if any. +pub(crate) fn symbol(name: &str) -> Option { + if let Some((_, c)) = GREEK.iter().find(|(n, _)| *n == name) { + return Some(*c); + } + let (_, v) = SYMS.iter().find(|(n, _)| *n == name)?; + let mut it = v.chars(); + let c = it.next()?; + it.next().is_none().then_some(c) +} + +/// The big operator a name stands for (`sum`, `int`) and whether it takes limits above and below. +pub(crate) fn nary_op(name: &str) -> Option<(char, bool)> { + let (_, c) = NARY.iter().find(|(n, _)| *n == name)?; + Some((*c, matches!(name, "sum" | "prod" | "bigcup" | "bigcap"))) +} + +/// The accent a name stands for (`hat`, `vec`). +pub(crate) fn accent(name: &str) -> Option { + ACCENTS.iter().find(|(n, _)| *n == name).map(|(_, c)| *c) +} + +/// True for an upright function name (`sin`, `lim`, `max`) and for the operator words that print +/// as plain text (`arg`, `mod`). +pub(crate) fn is_function_word(name: &str) -> bool { + funcs::is_func(name) || PASS.contains(&name) +} + +/// True when `name` is a function that takes a bare argument (`sin x`). +pub(crate) fn is_bare_func(name: &str) -> bool { + BARE.contains(&name) +} + +/// Every command name the typed-LaTeX table knows, for prefix checks. +pub(crate) fn command_names() -> impl Iterator { + GREEK + .iter() + .map(|(n, _)| *n) + .chain(SYMS.iter().map(|(n, _)| *n)) + .chain(NARY.iter().map(|(n, _)| *n)) + .chain(ACCENTS.iter().map(|(n, _)| *n)) + .chain(LATEX.iter().copied()) + .chain(PASS.iter().copied()) +} + +const NARY_CHARS: &[char] = &['∑', '∏', '∫', '∬', '∭', '∮', '⋃', '⋂']; + +// ---- parsing ------------------------------------------------------------------------------ + +struct Parser { + c: Vec, + pos: usize, + depth: usize, + /// Lazily built bracket-match tables for `(`, `[` and `{` (one linear pass each). + tables: [Option>>; 3], +} + +impl Parser { + fn new(c: Vec, depth: usize) -> Parser { + Parser { c, pos: 0, depth, tables: [None, None, None] } + } +} + +const WS: fn(char) -> bool = |c| matches!(c, ' ' | '\t' | '\n' | '\r'); + +/// Typographic minus for an ASCII hyphen. +fn minus(c: char) -> char { + if c == '-' { '\u{2212}' } else { c } +} + +/// Nesting depth of a node, counting at most `cap` levels (the walk itself is bounded by `cap`). +fn node_depth(n: &Node, cap: usize) -> usize { + if cap == 0 { + return 0; + } + let none: &[Node] = &[]; + let mut kids: Vec<&[Node]> = Vec::new(); + match n.bare() { + Node::Props { .. } => {} + Node::Text(_) | Node::Styled { .. } | Node::Raw(_) => {} + Node::Frac { num, den } => kids.extend([num.as_slice(), den.as_slice()]), + Node::Rad { deg, body } => kids.extend([deg.as_deref().unwrap_or(none), body.as_slice()]), + Node::Script { base, sub, sup } => kids.extend([base.as_slice(), sub.as_deref().unwrap_or(none), sup.as_deref().unwrap_or(none)]), + Node::Nary { sub, sup, body, .. } => kids.extend([sub.as_deref().unwrap_or(none), sup.as_deref().unwrap_or(none), body.as_slice()]), + Node::Delim { items, .. } => kids.extend(items.iter().map(|i| i.as_slice())), + Node::Matrix { rows } => kids.extend(rows.iter().flatten().map(|c| c.as_slice())), + Node::EqArr { rows } => kids.extend(rows.iter().map(|r| r.as_slice())), + Node::Func { body, .. } | Node::Accent { body, .. } | Node::Bar { body, .. } | Node::GroupChr { body, .. } | Node::Boxed { body, .. } => { + kids.push(body.as_slice()) + } + Node::Limit { base, lim, .. } => kids.extend([base.as_slice(), lim.as_slice()]), + Node::PreScript { sub, sup, base } => kids.extend([sub.as_slice(), sup.as_slice(), base.as_slice()]), + } + 1 + kids.iter().map(|k| seq_depth(k, cap - 1)).max().unwrap_or(0) +} + +fn seq_depth(s: &[Node], cap: usize) -> usize { + s.iter().map(|n| node_depth(n, cap)).max().unwrap_or(0) +} + +/// Trim blanks off both ends of a cell. +fn trim_seq(mut s: Seq) -> Seq { + if let Some(Node::Text(t)) = s.first_mut() { + *t = t.trim_start_matches(WS).to_string(); + } + if let Some(Node::Text(t)) = s.last_mut() { + *t = t.trim_end_matches(WS).to_string(); + } + s.retain(|n| !matches!(n, Node::Text(t) if t.is_empty())); + s +} + +fn push_text(out: &mut Seq, s: &str) { + if s.is_empty() { + return; + } + if let Some(Node::Text(t)) = out.last_mut() { + t.push_str(s); + } else { + out.push(Node::Text(s.to_string())); + } +} + +fn push_node(out: &mut Seq, n: Node) { + match n { + Node::Text(t) => push_text(out, &t), + n => out.push(n), + } +} + +/// Parse typed text into an equation. Never fails; bad input stays literal text. +pub fn from_linear(s: &str) -> Math { + let mut p = Parser::new(s.chars().collect(), 0); + Math::new(p.seq()) +} + +/// Backslash commands the typed-text parser did not know: they stay in the equation as literal +/// text (so nothing typed is lost) and are listed here so a caller can report them. Each name +/// appears once, in order of first use; the walk is iterative and bounded. +pub fn unknown_commands(m: &Math) -> Vec { + const MAX_NAMES: usize = 32; + let mut out: Vec = Vec::new(); + let mut stack: Vec<&Seq> = vec![&m.body]; + let mut budget = 1_000_000usize; + while let Some(seq) = stack.pop() { + for n in seq.iter().rev() { + budget = budget.saturating_sub(1); + if budget == 0 { + return out; + } + stack.extend(crate::children(n.bare())); + } + for n in seq { + if let Node::Text(t) = n.bare() { + let mut rest = t.as_str(); + while let Some(i) = rest.find('\\') { + rest = rest.get(i + 1..).unwrap_or(""); + let name: String = rest.chars().take_while(|c| c.is_ascii_alphabetic()).collect(); + if !name.is_empty() && out.len() < MAX_NAMES && !out.contains(&name) { + out.push(name); + } + } + } + } + } + out +} + +impl Parser { + fn peek(&self) -> Option { + self.c.get(self.pos).copied() + } + fn at(&self, off: usize) -> Option { + self.c.get(self.pos + off).copied() + } + fn skip_ws(&mut self) { + while self.peek().is_some_and(|c| c == ' ' || c == '\t') { + self.pos += 1; + } + } + + /// Index of the `cl` matching the `o` at `open`, if any. + fn matching(&mut self, open: usize, o: char, cl: char) -> Option { + let ti = match (o, cl) { + ('(', ')') => 0, + ('[', ']') => 1, + ('{', '}') => 2, + _ => return self.matching_scan(open, o, cl), + }; + if self.tables.get(ti).is_some_and(|t| t.is_none()) { + let mut t: Vec> = vec![None; self.c.len()]; + let mut stack: Vec = Vec::new(); + for (i, &ch) in self.c.iter().enumerate() { + if ch == o { + stack.push(i); + } else if ch == cl + && let Some(j) = stack.pop() + && let Some(slot) = t.get_mut(j) + { + *slot = Some(i); + } + } + if let Some(slot) = self.tables.get_mut(ti) { + *slot = Some(t); + } + } + self.tables.get(ti)?.as_ref()?.get(open).copied().flatten() + } + + fn matching_scan(&self, open: usize, o: char, cl: char) -> Option { + let mut d = 0usize; + for i in open..self.c.len() { + let ch = *self.c.get(i)?; + if ch == o { + d += 1; + } else if ch == cl { + d = d.saturating_sub(1); + if d == 0 { + return Some(i); + } + } + } + None + } + + fn sub(&self, from: usize, to: usize) -> Parser { + Parser::new(self.c.get(from..to).map(|s| s.to_vec()).unwrap_or_default(), self.depth + 1) + } + + /// Parse a balanced `o ... cl` group at the cursor; returns the inner sequence. + fn group_with(&mut self, o: char, cl: char) -> Option { + if self.depth >= MAX_DEPTH || self.peek() != Some(o) { + return None; + } + let m = self.matching(self.pos, o, cl)?; + let inner = self.sub(self.pos + 1, m).seq(); + self.pos = m + 1; + Some(inner) + } + + /// `[a, b; c, d]`: a bracket group with a top-level `;` is a matrix. + fn bracket_grid(&mut self) -> bool { + if self.depth >= MAX_DEPTH || self.peek() != Some('[') { + return false; + } + match self.matching(self.pos, '[', ']') { + Some(m) => self.has_top_level(self.pos + 1, m, &[';']), + None => false, + } + } + + fn group(&mut self) -> Option { + self.group_with('(', ')') + } + + fn seq(&mut self) -> Seq { + let mut out = Seq::new(); + while let Some(ch) = self.peek() { + match ch { + '(' => { + let start = self.pos; + match self.group() { + Some(inner) => out.push(Node::Delim { open: "(".into(), close: ")".into(), sep: "|".into(), items: vec![inner] }), + None => { + self.pos = start + 1; + push_text(&mut out, "("); + } + } + } + '[' if self.bracket_grid() => { + let m = self.matching(self.pos, '[', ']').unwrap_or(self.pos); + let rows = self.grid(self.pos + 1, m, ',', ';'); + self.pos = m + 1; + out.push(Node::Delim { open: "[".into(), close: "]".into(), sep: "|".into(), items: vec![vec![Node::Matrix { rows }]] }); + } + '[' => match self.group_with('[', ']') { + Some(inner) => out.push(Node::Delim { open: "[".into(), close: "]".into(), sep: "|".into(), items: vec![inner] }), + None => { + self.pos += 1; + push_text(&mut out, "["); + } + }, + '{' => match self.group_with('{', '}') { + // Braces only group; their content is spliced in. + Some(inner) => { + for n in inner { + push_node(&mut out, n); + } + } + None => { + self.pos += 1; + push_text(&mut out, "{"); + } + }, + '|' => self.bar_group(&mut out), + '\\' => self.command(&mut out), + '^' | '_' => { + self.pos += 1; + let operand = self.atom(false); + attach_script(&mut out, ch == '^', operand); + } + '/' => { + self.pos += 1; + if out.last().is_some_and(|n| node_depth(n, MAX_DEPTH) + 1 >= MAX_DEPTH) { + // Too deeply nested to wrap again: keep the slash literal. + push_text(&mut out, "/"); + continue; + } + let num = take_numerator(&mut out); + let den = self.denominator(); + out.push(Node::Frac { num, den }); + } + '*' => { + self.pos += 1; + push_text(&mut out, "·"); + } + '<' if self.at(1) == Some('=') => { + self.pos += 2; + push_text(&mut out, "≤"); + } + '>' if self.at(1) == Some('=') => { + self.pos += 2; + push_text(&mut out, "≥"); + } + '!' if self.at(1) == Some('=') => { + self.pos += 2; + push_text(&mut out, "≠"); + } + '+' if self.at(1) == Some('-') => { + self.pos += 2; + push_text(&mut out, "±"); + } + '-' if self.at(1) == Some('>') => { + self.pos += 2; + push_text(&mut out, "→"); + } + '√' => { + self.pos += 1; + let n = self.radical(); + out.push(n); + } + '■' if self.at(1) == Some('(') => { + self.pos += 1; + match self.matrix() { + Some(n) => out.push(n), + None => push_text(&mut out, "■"), + } + } + '█' if self.at(1) == Some('(') => { + self.pos += 1; + match self.eq_array() { + Some(n) => out.push(n), + None => push_text(&mut out, "█"), + } + } + c if NARY_CHARS.contains(&c) => { + self.pos += 1; + let n = self.nary(c); + out.push(n); + } + c if c.is_ascii_alphabetic() => { + let w = self.word(); + match self.special(&w) { + Some(n) => push_node(&mut out, n), + None => push_text(&mut out, &w), + } + } + c => { + self.pos += 1; + push_text(&mut out, &minus(c).to_string()); + } + } + } + out + } + + /// `|x|` absolute value when the first bar opens (not directly after a letter or `)`). + fn bar_group(&mut self, out: &mut Seq) { + let opens = match out.last() { + None => true, + Some(Node::Text(t)) => t.chars().last().is_some_and(|c| !c.is_alphanumeric() && c != ')' && c != '|'), + Some(_) => false, + }; + let close = if opens && self.depth < MAX_DEPTH { (self.pos + 1..self.c.len()).find(|&i| self.c.get(i) == Some(&'|')) } else { None }; + match close { + Some(j) if j > self.pos + 1 => { + let inner = self.sub(self.pos + 1, j).seq(); + self.pos = j + 1; + out.push(Node::Delim { open: "|".into(), close: "|".into(), sep: "|".into(), items: vec![inner] }); + } + _ => { + self.pos += 1; + push_text(out, "|"); + } + } + } + + /// A LaTeX-style command or escape at the cursor (`\frac`, `\leq`, `\{`). + fn command(&mut self, out: &mut Seq) { + self.pos += 1; + let Some(c) = self.peek() else { return push_text(out, "\\") }; + if !c.is_ascii_alphabetic() { + self.pos += 1; + match c { + '{' => self.escaped_brace(out), + ',' => push_text(out, "\u{2009}"), + ':' => push_text(out, "\u{2005}"), + ';' => push_text(out, "\u{2004}"), + ' ' => push_text(out, " "), + '!' => {} + c => push_text(out, &c.to_string()), + } + return; + } + let w = self.word(); + match w.as_str() { + "frac" | "dfrac" | "tfrac" | "cfrac" => { + let num = self.frac_arg(); + let den = self.frac_arg(); + out.push(Node::Frac { num, den }); + } + "begin" => self.environment(out), + "binom" | "dbinom" | "tbinom" => { + let n = self.brace_arg(); + let k = self.brace_arg(); + let m = Node::Matrix { rows: vec![vec![n], vec![k]] }; + out.push(Node::Delim { open: "(".into(), close: ")".into(), sep: "|".into(), items: vec![vec![m]] }); + } + "mathbb" => { + let arg = self.brace_arg(); + for n in arg { + match n { + Node::Text(t) => push_text(out, &t.chars().map(double_struck).collect::()), + n => push_node(out, n), + } + } + } + "mathcal" | "mathscr" | "mathfrak" | "mathit" | "mathsf" | "mathtt" | "boldsymbol" | "bm" | "textit" | "textsf" | "emph" | "mbox" + | "hbox" | "mathnormal" => { + for n in self.brace_arg() { + push_node(out, n); + } + } + "overrightarrow" | "overleftarrow" | "overleftrightarrow" | "underrightarrow" | "underleftarrow" | "underleftrightarrow" + if { + self.skip_ws(); + self.peek().is_some() + } => + { + let body = self.brace_arg(); + let ch = if w.ends_with("leftrightarrow") { + '\u{2194}' + } else if w.ends_with("rightarrow") { + '\u{2192}' + } else { + '\u{2190}' + }; + out.push(Node::GroupChr { ch, top: w.starts_with("over"), body }); + } + "widehat" | "widetilde" | "vec" | "hat" | "tilde" | "bar" | "dot" | "ddot" | "breve" | "check" | "acute" | "grave" + if { + self.skip_ws(); + self.peek().is_some() + } => + { + let name = match w.as_str() { + "widehat" => "hat", + "widetilde" => "tilde", + o => o, + }; + let body = self.brace_arg(); + if let Some((_, ch)) = ACCENTS.iter().find(|(n, _)| *n == name) { + out.push(Node::Accent { ch: *ch, body }); + } + } + "overline" | "underline" | "overbrace" | "underbrace" | "boxed" | "box" | "fbox" + if { + self.skip_ws(); + self.peek() == Some('{') + } => + { + let body = self.brace_arg(); + out.push(match w.as_str() { + "overline" => Node::Bar { top: true, body }, + "underline" => Node::Bar { top: false, body }, + "overbrace" => Node::GroupChr { ch: '\u{23DE}', top: true, body }, + "underbrace" => Node::GroupChr { ch: '\u{23DF}', top: false, body }, + "boxed" | "fbox" => Node::Boxed { border: true, body }, + _ => Node::Boxed { border: false, body }, + }); + } + "quad" | "qquad" => { + push_text(out, if w == "quad" { "\u{2001}" } else { "\u{2001}\u{2001}" }); + self.skip_ws(); + } + "lVert" | "rVert" | "Vert" => push_text(out, "\u{2016}"), + "lvert" | "rvert" | "vert" => push_text(out, "|"), + "overset" | "stackrel" | "underset" => { + let (a, b) = (self.brace_arg(), self.brace_arg()); + out.push(Node::Limit { lower: w == "underset", base: b, lim: a }); + } + "limits" | "nolimits" => {} + "left" | "right" | "big" | "Big" | "bigl" | "bigr" | "Bigl" | "Bigr" | "displaystyle" => {} + "abs" + if { + self.skip_ws(); + self.peek() == Some('{') + } => + { + let body = self.brace_arg(); + out.push(Node::Delim { open: "|".into(), close: "|".into(), sep: "|".into(), items: vec![body] }); + } + // An empty slot (`\placeholder{}`) is nothing; a filled one is its content. + "placeholder" => { + self.skip_ws(); + if self.peek() == Some('{') { + for n in self.brace_arg() { + push_node(out, n); + } + } + } + _ if NARY.iter().any(|(n, _)| *n == w) && self.depth < MAX_DEPTH => { + let op = NARY.iter().find(|(n, _)| *n == w).map(|(_, o)| *o).unwrap_or('∑'); + self.depth += 1; + let n = self.nary_latex(op); + self.depth -= 1; + out.push(n); + } + "text" | "textrm" | "mathrm" | "operatorname" | "mathbf" | "textbf" => { + let style = match w.as_str() { + "text" | "textrm" => Style::Normal, + "mathbf" | "textbf" => Style::Bold, + _ => Style::Plain, + }; + self.skip_ws(); + if self.peek() == Some('{') + && let Some(m) = self.matching(self.pos, '{', '}') + { + let text: String = self.c.get(self.pos + 1..m).map(|s| s.iter().collect()).unwrap_or_default(); + self.pos = m + 1; + if !text.is_empty() { + out.push(Node::Styled { text, style }); + } + } + } + _ => { + if let Some(n) = self.special(&w) { + push_node(out, n); + } else if let Some((_, sym)) = SYMS.iter().find(|(n, _)| *n == w) { + push_text(out, sym); + } else if LATEX.contains(&w.as_str()) || PASS.contains(&w.as_str()) { + push_text(out, &w); + } else { + // Unknown command: keep it visible, backslash included. + push_text(out, &format!("\\{w}")); + } + } + } + } + + /// After `\{`: a delimiter pair up to the matching `\}`, else a literal brace. + fn escaped_brace(&mut self, out: &mut Seq) { + let mut d = 1usize; + let mut i = self.pos; + let mut close = None; + while i + 1 < self.c.len() && self.depth < MAX_DEPTH { + match (self.c.get(i), self.c.get(i + 1)) { + (Some('\\'), Some('{')) => { + d += 1; + i += 2; + } + (Some('\\'), Some('}')) => { + d -= 1; + if d == 0 { + close = Some(i); + break; + } + i += 2; + } + _ => i += 1, + } + } + match close { + Some(j) => { + let inner = self.sub(self.pos, j).seq(); + self.pos = j + 2; + out.push(Node::Delim { open: "{".into(), close: "}".into(), sep: "|".into(), items: vec![inner] }); + } + None => push_text(out, "{"), + } + } + + fn at_str(&self, i: usize, s: &str) -> bool { + s.chars().enumerate().all(|(k, ch)| self.c.get(i + k) == Some(&ch)) + } + + /// Index of the `\end{name}` closing an already-consumed `\begin{name}`. + fn find_end(&self, from: usize, name: &str) -> Option { + let begin = format!("\\begin{{{name}}}"); + let end = format!("\\end{{{name}}}"); + let (bl, el) = (begin.chars().count(), end.chars().count()); + let (mut d, mut i) = (1usize, from); + while i < self.c.len() { + if self.at_str(i, &end) { + d = d.saturating_sub(1); + if d == 0 { + return Some(i); + } + i += el; + } else if self.at_str(i, &begin) { + d += 1; + i += bl; + } else { + i += 1; + } + } + None + } + + fn cell(&mut self, from: usize, to: usize) -> Seq { + trim_seq(self.sub(from, to).seq()) + } + + /// Rows and cells of a LaTeX environment body (`&` between cells, `\\` between rows). + fn env_cells(&mut self, from: usize, to: usize) -> Vec> { + let mut rows: Vec> = Vec::new(); + let mut row: Vec = Vec::new(); + let (mut start, mut i, mut envd, mut brace) = (from, from, 0usize, 0usize); + while i < to { + let ch = self.c.get(i).copied().unwrap_or(' '); + if ch == '\\' { + match self.c.get(i + 1).copied() { + Some('\\') => { + if envd == 0 && brace == 0 { + row.push(self.cell(start, i)); + rows.push(std::mem::take(&mut row)); + start = i + 2; + } + i += 2; + } + Some(c) if c.is_ascii_alphabetic() => { + if self.at_str(i, "\\begin") { + envd += 1; + i += 6; + } else if self.at_str(i, "\\end") { + envd = envd.saturating_sub(1); + i += 4; + } else { + i += 1; + } + } + Some(_) => i += 2, + None => i += 1, + } + continue; + } + match ch { + '{' => brace += 1, + '}' => brace = brace.saturating_sub(1), + '&' if envd == 0 && brace == 0 => { + row.push(self.cell(start, i)); + start = i + 1; + } + _ => {} + } + i += 1; + } + let last = self.cell(start, to); + if !row.is_empty() || !last.is_empty() { + row.push(last); + rows.push(row); + } + rows + } + + /// After `\begin`: a matrix, cases or aligned environment up to its `\end`. + fn environment(&mut self, out: &mut Seq) { + self.skip_ws(); + let Some(name) = self.raw_braces() else { return push_text(out, "\\begin") }; + if name == "array" { + self.skip_ws(); + let _ = self.raw_braces(); + } + let start = self.pos; + let end = if self.depth < MAX_DEPTH { self.find_end(start, &name) } else { None }; + let Some(end) = end else { + // Unterminated or too deep: keep the opener visible and carry on. + push_text(out, &format!("\\begin{{{name}}}")); + return; + }; + let rows = self.env_cells(start, end); + self.pos = end + format!("\\end{{{name}}}").chars().count(); + let base = name.trim_end_matches('*'); + let flat = |rows: Vec>, sep: &str| -> Vec { + rows.into_iter() + .map(|r| { + let mut o = Seq::new(); + for (k, c) in r.into_iter().enumerate() { + if k > 0 && !sep.is_empty() { + push_text(&mut o, sep); + } + for n in c { + push_node(&mut o, n); + } + } + o + }) + .collect() + }; + let delim = + |open: &str, close: &str, inner: Node| Node::Delim { open: open.into(), close: close.into(), sep: "|".into(), items: vec![vec![inner]] }; + let node = match base { + "pmatrix" => delim("(", ")", Node::Matrix { rows }), + "bmatrix" => delim("[", "]", Node::Matrix { rows }), + "Bmatrix" => delim("{", "}", Node::Matrix { rows }), + "vmatrix" => delim("|", "|", Node::Matrix { rows }), + "Vmatrix" => delim("\u{2016}", "\u{2016}", Node::Matrix { rows }), + "matrix" | "smallmatrix" | "array" => Node::Matrix { rows }, + "cases" => delim("{", "", Node::EqArr { rows: flat(rows, "\u{2003}") }), + _ => Node::EqArr { rows: flat(rows, "") }, + }; + out.push(node); + } + + /// Raw text of a `{...}` group at the cursor (no parsing). + fn raw_braces(&mut self) -> Option { + if self.peek() != Some('{') { + return None; + } + let m = self.matching(self.pos, '{', '}')?; + let t: String = self.c.get(self.pos + 1..m)?.iter().collect(); + self.pos = m + 1; + Some(t) + } + + /// An argument of `\frac`: a group, a command, or (as in TeX) a single character, so + /// `\frac13` is 1 over 3. + fn frac_arg(&mut self) -> Seq { + self.skip_ws(); + match self.peek() { + Some(c) if c.is_alphanumeric() => { + self.pos += 1; + let mut o = Seq::new(); + push_text(&mut o, &c.to_string()); + o + } + _ => self.brace_arg(), + } + } + + fn brace_arg(&mut self) -> Seq { + if self.depth >= MAX_DEPTH { + return vec![]; + } + self.skip_ws(); + self.depth += 1; + let r = self.atom(false); + self.depth -= 1; + r + } + + fn word(&mut self) -> String { + let mut w = String::new(); + while let Some(c) = self.peek() { + if c.is_ascii_alphabetic() { + w.push(c); + self.pos += 1; + } else { + break; + } + } + w + } + + /// A word with meaning (Greek letter, `sqrt`, function, accent, n-ary). Consumes input only + /// when it returns `Some`. + fn special(&mut self, w: &str) -> Option { + if self.depth >= MAX_DEPTH { + return None; + } + self.depth += 1; + let r = self.special_inner(w); + self.depth -= 1; + r + } + + fn special_inner(&mut self, w: &str) -> Option { + if let Some((_, g)) = GREEK.iter().find(|(n, _)| *n == w) { + return Some(Node::Text(g.to_string())); + } + match w { + "sqrt" => return Some(self.radical()), + "inf" | "infty" => return Some(Node::Text("∞".into())), + // MathLive's upright constants and differential: a typed `d`, an upright `e` and `i`. + "differentialD" => return Some(Node::Text("d".into())), + "exponentialE" => return Some(Node::Styled { text: "e".into(), style: Style::Plain }), + "imaginaryI" => return Some(Node::Styled { text: "i".into(), style: Style::Plain }), + "times" | "cross" => return Some(Node::Text("×".into())), + "cdot" => return Some(Node::Text("·".into())), + "infinity" => return Some(Node::Text("∞".into())), + _ => {} + } + if let Some((_, op)) = NARY.iter().find(|(n, _)| *n == w) { + return Some(self.nary(*op)); + } + if matches!(w, "lim" | "max" | "min") && self.peek() == Some('_') && self.depth < MAX_DEPTH { + self.pos += 1; + let lim = self.atom(false); + return Some(Node::Limit { lower: true, base: vec![Node::Styled { text: w.to_string(), style: Style::Plain }], lim }); + } + if funcs::is_func(w) { + // `\sin\left(2x\right)`: the sizing command is dropped, so the group is the argument. + let save = self.pos; + self.skip_ws(); + if !self.skip_sizer() { + self.pos = save; + } + } + if funcs::is_func(w) && self.peek() == Some('{') && self.depth < MAX_DEPTH { + // `\sin{x}`: a braced argument is the function's argument. + let body = self.brace_arg(); + return Some(Node::Func { name: w.to_string(), body }); + } + if self.peek() == Some('(') && self.depth < MAX_DEPTH { + if funcs::is_func(w) { + let body = self.group()?; + return Some(Node::Func { name: w.to_string(), body }); + } + if w == "root" { + let deg = self.group()?; + self.skip_ws(); + let body = self.operand(true); + return Some(Node::Rad { deg: Some(deg), body }); + } + if let Some((_, ch)) = ACCENTS.iter().find(|(n, _)| *n == w) { + let body = self.group()?; + return Some(Node::Accent { ch: *ch, body }); + } + let delims = match w { + "matrix" | "pmatrix" => Some(("(", ")")), + "bmatrix" => Some(("[", "]")), + "vmatrix" => Some(("|", "|")), + "Bmatrix" => Some(("{", "}")), + _ => None, + }; + if let Some((open, close)) = delims { + let m = self.matrix()?; + return Some(Node::Delim { open: open.into(), close: close.into(), sep: "|".into(), items: vec![vec![m]] }); + } + match w { + "eqarr" => return self.eq_array(), + "cases" => { + // `&` between cells is a column break: a wide gap, shown as `&` in linear text. + let a = match self.matrix()? { + Node::Matrix { rows } => Node::EqArr { + rows: rows + .into_iter() + .map(|r| { + let mut o = Seq::new(); + for (k, c) in r.into_iter().enumerate() { + if k > 0 { + push_text(&mut o, "\u{2003}"); + } + for n in c { + push_node(&mut o, n); + } + } + o + }) + .collect(), + }, + _ => return None, + }; + return Some(Node::Delim { open: "{".into(), close: String::new(), sep: "|".into(), items: vec![vec![a]] }); + } + "overrightarrow" | "overleftarrow" | "overleftrightarrow" | "underrightarrow" | "underleftarrow" | "underleftrightarrow" => { + let body = self.group()?; + let ch = if w.ends_with("leftrightarrow") { + '\u{2194}' + } else if w.ends_with("rightarrow") { + '\u{2192}' + } else { + '\u{2190}' + }; + return Some(Node::GroupChr { ch, top: w.starts_with("over"), body }); + } + "overline" | "underline" => { + let body = self.group()?; + return Some(Node::Bar { top: w == "overline", body }); + } + "overbrace" | "underbrace" => { + let body = self.group()?; + let top = w == "overbrace"; + return Some(Node::GroupChr { ch: if top { '\u{23DE}' } else { '\u{23DF}' }, top, body }); + } + "box" | "boxed" => { + let body = self.group()?; + return Some(Node::Boxed { border: w == "boxed", body }); + } + _ => {} + } + } + if funcs::is_func(w) && matches!(self.peek(), Some('^' | '_')) { + // `sin^2 x`, `log_2 x`: keep the name whole so the script attaches to it. + return Some(Node::Styled { text: w.to_string(), style: Style::Plain }); + } + if BARE.contains(&w) && self.depth < MAX_DEPTH { + // `sin x`, `ln 2`, `cos\theta`: an unparenthesised argument. + let save = self.pos; + self.skip_ws(); + if self.peek().is_some_and(|c| c.is_alphanumeric() || c == '\\' || c == '√') { + let body = self.operand(true); + return Some(Node::Func { name: w.to_string(), body }); + } + self.pos = save; + } + None + } + + /// At `\left`, `\bigl`, ... directly before `(`: step over the command. True when it did. + fn skip_sizer(&mut self) -> bool { + if self.peek() != Some('\\') { + return false; + } + let mut j = self.pos + 1; + let mut w = String::new(); + while let Some(c) = self.c.get(j).filter(|c| c.is_ascii_alphabetic()) { + w.push(*c); + j += 1; + } + if matches!(w.as_str(), "left" | "big" | "Big" | "bigl" | "Bigl" | "biggl" | "Biggl") && self.c.get(j) == Some(&'(') { + self.pos = j; + return true; + } + false + } + + fn radical(&mut self) -> Node { + self.skip_ws(); + let mut deg = None; + if self.peek() == Some('[') + && let Some(m) = self.matching(self.pos, '[', ']') + && self.depth < MAX_DEPTH + { + deg = Some(self.sub(self.pos + 1, m).seq()); + self.pos = m + 1; + } + self.skip_ws(); + let body = self.operand(true); + Node::Rad { deg, body } + } + + fn nary(&mut self, op: char) -> Node { + let (mut sub, mut sup) = (None, None); + for _ in 0..2 { + match self.peek() { + Some('_') if sub.is_none() => { + self.pos += 1; + sub = Some(self.atom(false)); + } + Some('^') if sup.is_none() => { + self.pos += 1; + sup = Some(self.atom(false)); + } + _ => break, + } + } + self.skip_ws(); + // `prod_(k=1)^n (1+1/k)`: a parenthesised sum or difference is the operand with its + // parentheses (dropping them would change the meaning); other groups follow the + // linear format and lose theirs (`sum_(i=1)^n (x_i)`). + let close = if self.peek() == Some('(') && self.depth < MAX_DEPTH { self.matching(self.pos, '(', ')') } else { None }; + let keep = close.is_some_and(|m| self.has_top_level(self.pos + 1, m, &['+', '-', '\u{2212}', '='])); + let mut body = if keep { + match self.group() { + Some(inner) => vec![Node::Delim { open: "(".into(), close: ")".into(), sep: "|".into(), items: vec![inner] }], + None => self.operand(true), + } + } else { + self.operand(true) + }; + loop { + // `sum_(i=1)^n 1/i`: a fraction in the body belongs to the sum. + let save = self.pos; + self.skip_ws(); + if self.peek() == Some('/') && seq_depth(&body, MAX_DEPTH) + 1 < MAX_DEPTH { + self.pos += 1; + let den = self.denominator(); + body = vec![Node::Frac { num: body, den }]; + } else { + self.pos = save; + break; + } + } + if matches!(op, '∫' | '∬' | '∭' | '∮') { + // `int_0^1 x^2 dx`: the differential belongs to the integrand. + let save = self.pos; + self.skip_ws(); + if self.peek() == Some('d') && self.at(1).is_some_and(|c| c.is_ascii_alphabetic()) && !self.at(2).is_some_and(|c| c.is_ascii_alphabetic()) + { + let dx: String = [self.at(0), self.at(1)].into_iter().flatten().collect(); + self.pos += 2; + push_node(&mut body, Node::Text(format!(" {dx}"))); + } else { + self.pos = save; + } + } + Node::Nary { op, sub, sup, body } + } + + /// A LaTeX big operator (`\sum_{i=1}^n (i+1)^2`, `\int_a^b f(x)\,dx`): the scripts, then a + /// body that runs to the next relation, sign, comma or closing bracket at this level, so the + /// whole product belongs to the operator (LaTeX has no operand, so this is the reading a + /// person has in mind). + fn nary_latex(&mut self, op: char) -> Node { + let (mut sub, mut sup) = (None, None); + for _ in 0..2 { + self.skip_ws(); + match self.peek() { + Some('_') if sub.is_none() => { + self.pos += 1; + sub = Some(self.atom(false)); + } + Some('^') if sup.is_none() => { + self.pos += 1; + sup = Some(self.atom(false)); + } + _ => break, + } + } + self.skip_ws(); + let from = self.pos; + let end = self.latex_body_end(from); + let mut body = if end > from && self.depth < MAX_DEPTH { trim_seq(self.sub(from, end).seq()) } else { vec![] }; + self.pos = end.max(from); + while body.first().is_some_and(|n| matches!(n, Node::Text(t) if t.trim().is_empty())) { + body.remove(0); + } + Node::Nary { op, sub, sup, body } + } + + /// End (exclusive) of a LaTeX big operator's body that starts at `from`. + fn latex_body_end(&self, from: usize) -> usize { + const STOP: &[&str] = &[ + "le", + "leq", + "ge", + "geq", + "ne", + "neq", + "approx", + "equiv", + "to", + "rightarrow", + "Rightarrow", + "leftrightarrow", + "Leftrightarrow", + "in", + "subset", + "subseteq", + "pm", + "mp", + "times", + "div", + "cdot", + "quad", + "qquad", + "end", + "right", + "sim", + "cong", + "propto", + "mid", + ]; + let mut i = from; + let mut depth = 0usize; + while let Some(&ch) = self.c.get(i) { + match ch { + '(' | '[' | '{' => depth += 1, + ')' | ']' | '}' => { + if depth == 0 { + break; + } + depth -= 1; + } + '+' | '-' | '\u{2212}' | '=' | '<' | '>' | ',' | ';' | '&' if depth == 0 && i > from => break, + '\\' => match self.c.get(i + 1).copied() { + Some('\\') if depth == 0 => break, + Some(c) if c.is_ascii_alphabetic() => { + let name: String = self.c.get(i + 1..).unwrap_or(&[]).iter().take_while(|c| c.is_ascii_alphabetic()).collect(); + if depth == 0 && STOP.contains(&name.as_str()) { + break; + } + i += name.chars().count(); + } + Some(_) => i += 1, + None => {} + }, + _ => {} + } + i += 1; + } + i.min(self.c.len()) + } + + fn matrix(&mut self) -> Option { + if self.depth >= MAX_DEPTH { + return None; + } + let m = self.matching(self.pos, '(', ')')?; + let (from, to) = (self.pos + 1, m); + // Typed form `matrix(a,b;c,d)`: when no `&`/`@` appears at top level, `,` splits + // cells and `;` splits rows. + let formal = self.has_top_level(from, to, &['&', '@']); + let (cs, rs) = if formal { ('&', '@') } else { (',', ';') }; + let rows = self.grid(from, to, cs, rs); + self.pos = m + 1; + Some(Node::Matrix { rows }) + } + + /// True when one of `chars` occurs in `from..to` outside any bracket nesting. + fn has_top_level(&self, from: usize, to: usize, chars: &[char]) -> bool { + let mut depth = 0usize; + for i in from..to { + match self.c.get(i).copied() { + Some('(' | '[' | '{') => depth += 1, + Some(')' | ']' | '}') => depth = depth.saturating_sub(1), + Some(c) if depth == 0 && chars.contains(&c) => return true, + _ => {} + } + } + false + } + + /// Split `from..to` into rows (`rs`) of cells (`cs`) at bracket depth zero. + fn grid(&mut self, from: usize, to: usize, cs: char, rs: char) -> Vec> { + let mut rows: Vec> = vec![]; + let mut row: Vec = vec![]; + let (mut depth, mut start) = (0usize, from); + for i in from..=to { + let ch = if i == to { '\u{0}' } else { self.c.get(i).copied().unwrap_or('\u{0}') }; + match ch { + '(' | '[' | '{' => depth += 1, + ')' | ']' | '}' => depth = depth.saturating_sub(1), + c if depth == 0 && (c == cs || c == rs || i == to) => { + row.push(trim_seq(self.sub(start, i).seq())); + start = i + 1; + if c != cs { + rows.push(std::mem::take(&mut row)); + } + } + _ => {} + } + } + rows + } + + /// `█(a@b)`: lines separated by `@` (cells within a line are concatenated). + fn eq_array(&mut self) -> Option { + match self.matrix()? { + Node::Matrix { rows } => Some(Node::EqArr { rows: rows.into_iter().map(|r| r.into_iter().flatten().collect()).collect() }), + _ => None, + } + } + + /// An atom followed by any scripts, used for radicands and n-ary bodies. + fn operand(&mut self, full_word: bool) -> Seq { + self.operand_ex(full_word, false) + } + + /// Like [`operand`](Self::operand); `coef` lets a number absorb letters stuck to it (`2a`). + fn operand_ex(&mut self, full_word: bool, coef: bool) -> Seq { + if self.depth >= MAX_DEPTH { + return vec![]; + } + self.depth += 1; + let numeric = self.peek().is_some_and(|c| c.is_ascii_digit()); + let mut out = self.atom(full_word); + if coef + && numeric + && matches!(out.as_slice(), [Node::Text(t)] if !t.is_empty() && t.chars().all(|c| c.is_ascii_digit() || c == '.')) + && self.peek().is_some_and(|c| c.is_ascii_alphabetic()) + { + let w = self.word(); + match self.special(&w) { + Some(n) => push_node(&mut out, n), + None => push_text(&mut out, &w), + } + } + while let Some(ch @ ('^' | '_')) = self.peek() { + self.pos += 1; + let operand = self.atom(false); + attach_script(&mut out, ch == '^', operand); + } + self.depth -= 1; + out + } + + /// The right-hand side of `/`: leading spaces are skipped, `2a` is one term. + fn denominator(&mut self) -> Seq { + self.skip_ws(); + let mut d = self.operand_ex(true, true); + if self.peek() == Some('!') && self.at(1) != Some('=') { + self.pos += 1; + push_text(&mut d, "!"); + } + d + } + + /// One atom: a group (delimiters stripped), a number, a word, a command or a single symbol. + fn atom(&mut self, full_word: bool) -> Seq { + let Some(ch) = self.peek() else { return vec![] }; + if ch == '(' || ch == '{' { + let start = self.pos; + let closer = if ch == '(' { ')' } else { '}' }; + return match self.group_with(ch, closer) { + Some(inner) => inner, + None => { + self.pos = start + 1; + vec![Node::Text(ch.to_string())] + } + }; + } + if ch == '\\' { + let mut tmp = Seq::new(); + self.command(&mut tmp); + return tmp; + } + if ch == '√' { + self.pos += 1; + return vec![self.radical()]; + } + let signed = (ch == '+' || ch == '-') && self.at(1).is_some_and(|c| c.is_ascii_digit()); + if ch.is_ascii_digit() || signed { + let mut s = String::new(); + if signed { + s.push(minus(ch)); + self.pos += 1; + } + while let Some(d) = self.peek() { + let dot = d == '.' && self.at(1).is_some_and(|c| c.is_ascii_digit()); + if d.is_ascii_digit() || dot { + s.push(d); + self.pos += 1; + } else { + break; + } + } + return vec![Node::Text(s)]; + } + if (ch == '+' || ch == '-') && self.at(1).is_some_and(|c| c.is_alphabetic()) { + self.pos += 1; + let mut rest = self.atom(false); + let mut out = vec![Node::Text(minus(ch).to_string())]; + out.append(&mut rest); + let mut merged = Seq::new(); + for n in out { + push_node(&mut merged, n); + } + return merged; + } + if ch.is_ascii_alphabetic() { + let start = self.pos; + let w = self.word(); + if let Some(n) = self.special(&w) { + return vec![n]; + } + if full_word { + return vec![Node::Text(w)]; + } + self.pos = start + 1; + return vec![Node::Text(ch.to_string())]; + } + self.pos += 1; + vec![Node::Text(minus(ch).to_string())] + } +} + +/// Remove and return the base a script attaches to. +fn pop_base(out: &mut Seq) -> Seq { + match out.pop() { + None => vec![], + Some(Node::Text(t)) => { + let chars: Vec = t.chars().collect(); + let mut i = chars.len(); + if chars.last().is_some_and(|c| c.is_ascii_digit()) { + while i > 0 && chars.get(i - 1).is_some_and(|c| c.is_ascii_digit() || *c == '.') { + i -= 1; + } + } else { + i = i.saturating_sub(1); + } + let head: String = chars.iter().take(i).collect(); + let tail: String = chars.iter().skip(i).collect(); + if !head.is_empty() { + out.push(Node::Text(head)); + } + vec![Node::Text(tail)] + } + Some(n) => vec![n], + } +} + +fn attach_script(out: &mut Seq, sup: bool, operand: Seq) { + if out.last().is_some_and(|n| node_depth(n, MAX_DEPTH) + 1 >= MAX_DEPTH) { + // Scripts on scripts on scripts...: past the depth cap the mark stays literal. + push_text(out, if sup { "^" } else { "_" }); + for n in operand { + push_node(out, n); + } + return; + } + if let Some(Node::Script { sub: s, sup: p, .. }) = out.last_mut() { + let slot = if sup { p } else { s }; + if slot.is_none() { + *slot = Some(operand); + return; + } + } + // A script on an over/under brace (or arrow) is its label, centred beyond the mark. + if let Some(Node::GroupChr { top, .. }) = out.last() + && *top == sup + { + let base = pop_base(out); + out.push(Node::Limit { lower: !sup, base, lim: operand }); + return; + } + let base = pop_base(out); + let (sub, sup_v) = if sup { (None, Some(operand)) } else { (Some(operand), None) }; + out.push(Node::Script { base, sub, sup: sup_v }); +} + +/// Drop trailing blanks from the last text node (`a / b`: the space before `/` is not part of +/// the numerator and is not kept). +fn trim_trailing_ws(out: &mut Seq) { + if let Some(Node::Text(t)) = out.last_mut() { + let trimmed = t.trim_end().len(); + t.truncate(trimmed); + if t.is_empty() { + out.pop(); + } + } +} + +fn take_numerator(out: &mut Seq) -> Seq { + trim_trailing_ws(out); + match out.pop() { + None => vec![], + Some(Node::Text(t)) => { + let chars: Vec = t.chars().collect(); + let mut i = chars.len(); + if chars.last() == Some(&'!') { + i -= 1; + } + while i > 0 && chars.get(i - 1).is_some_and(|c| c.is_alphanumeric() || *c == '.') { + i -= 1; + } + let head: String = chars.iter().take(i).collect(); + let tail: String = chars.iter().skip(i).collect(); + if !head.is_empty() { + out.push(Node::Text(head)); + } + if tail.is_empty() { vec![] } else { vec![Node::Text(tail)] } + } + Some(Node::Delim { open, close, items, .. }) if open == "(" && close == ")" && items.len() == 1 => { + items.into_iter().next().unwrap_or_default() + } + Some(n) => vec![n], + } +} + +// ---- printing ----------------------------------------------------------------------------- + +/// Print an equation in the linear format. +pub fn to_linear(m: &Math) -> String { + let mut out = String::new(); + seq(&mut out, &m.body, 0); + out +} + +fn lin(s: &Seq, depth: usize) -> String { + let mut o = String::new(); + seq(&mut o, s, depth); + o +} + +fn run_atomic(s: &str) -> bool { + !s.is_empty() && s.chars().all(|c| c.is_alphanumeric() || c == '.') +} + +fn number(s: &str) -> bool { + let t = s.strip_prefix(['+', '-', '\u{2212}']).unwrap_or(s); + !t.is_empty() && t.chars().all(|c| c.is_ascii_digit() || c == '.') && t.chars().next().is_some_and(|c| c.is_ascii_digit()) +} + +fn script_atomic(s: &str) -> bool { + number(s) || (s.chars().count() == 1 && s.chars().all(|c| c.is_alphabetic())) +} + +fn base_atomic(s: &str) -> bool { + (s.chars().count() == 1 && s.chars().all(|c| c.is_alphabetic())) || (!s.is_empty() && s.chars().all(|c| c.is_ascii_digit() || c == '.')) +} + +fn paren(s: String, atomic: bool) -> String { + if atomic { s } else { format!("({s})") } +} + +/// Escape characters the parser treats as syntax in literal text. +fn esc(s: &str) -> String { + let mut o = String::with_capacity(s.len()); + for c in s.chars() { + if matches!(c, '\\' | '{' | '}') { + o.push('\\'); + } + o.push(c); + } + o +} + +/// Would the node, printed right after an unparenthesised denominator, fuse with it? +fn starts_alnum(n: Option<&Node>, depth: usize) -> bool { + match n.map(Node::bare) { + Some(Node::Text(t)) | Some(Node::Styled { text: t, .. }) => t.chars().next().is_some_and(|c| c.is_alphanumeric() || c == '.'), + Some(Node::Func { .. }) | Some(Node::Limit { .. }) => true, + Some(Node::Script { base, .. }) if depth < MAX_DEPTH => starts_alnum(base.first(), depth + 1), + _ => false, + } +} + +/// Visible text inside an unknown element, so a `Raw` node still reads as something. +pub(crate) fn raw_text(src: &str) -> String { + fn walk(e: &XEl, out: &mut String, d: usize) { + if d > MAX_DEPTH + 16 { + return; + } + if e.local() == "t" { + out.push_str(&e.text()); + } else { + for c in e.els() { + walk(c, out, d + 1); + } + } + } + let mut s = String::new(); + for r in &xml::parse(src) { + walk(r, &mut s, 0); + } + s +} + +fn limits(out: &mut String, sub: &Option, sup: &Option, d: usize) { + for (mark, part) in [('_', sub), ('^', sup)] { + if let Some(s) = part { + let t = lin(s, d); + let a = script_atomic(&t); + out.push(mark); + out.push_str(&paren(t, a)); + } + } +} + +fn seq(out: &mut String, s: &Seq, depth: usize) { + if depth > MAX_DEPTH { + return; + } + let d = depth + 1; + for (i, n) in s.iter().enumerate() { + match n.bare() { + Node::Props { .. } => {} + Node::Text(t) => out.push_str(&esc(t)), + Node::Styled { text, .. } => out.push_str(&esc(text)), + Node::Frac { num, den } => { + let (a, b) = (lin(num, d), lin(den, d)); + let glued = out.chars().last().is_some_and(|c| c.is_alphanumeric() || c == '.'); + let na = run_atomic(&a) && !glued; + out.push_str(&paren(a, na)); + out.push('/'); + let da = run_atomic(&b) && !starts_alnum(s.get(i + 1), 0); + out.push_str(&paren(b, da)); + } + Node::Rad { deg, body } => { + out.push('√'); + if let Some(dg) = deg { + out.push('['); + out.push_str(&lin(dg, d)); + out.push(']'); + } + out.push_str(&format!("({})", lin(body, d))); + } + Node::Script { base, sub, sup } => { + let b = lin(base, d); + let ba = base_atomic(&b) + || matches!(base.as_slice(), [Node::Delim { .. }]) + || matches!(base.as_slice(), [Node::Styled { text, .. }] if funcs::is_func(text)); + out.push_str(&paren(b, ba)); + limits(out, sub, sup, d); + } + Node::Nary { op, sub, sup, body } => { + if *op != '\0' { + out.push(*op); + } + limits(out, sub, sup, d); + out.push_str(&format!("({})", lin(body, d))); + } + Node::Delim { open, close, items, .. } + if open == "{" && close.is_empty() && matches!(items.as_slice(), [it] if matches!(it.as_slice(), [Node::EqArr { .. }])) => + { + let rows = match items.first().and_then(|it| it.first()) { + Some(Node::EqArr { rows }) => rows.iter().map(|r| lin(r, d).replace('\u{2003}', "&")).collect::>(), + _ => vec![], + }; + out.push_str(&format!("cases({})", rows.join("@"))); + } + Node::Delim { open, close, sep, items } => { + out.push_str(&esc(open)); + let parts: Vec = items.iter().map(|i| lin(i, d)).collect(); + out.push_str(&parts.join(&esc(sep))); + out.push_str(&esc(close)); + } + Node::Matrix { rows } => { + let rs: Vec = rows.iter().map(|r| r.iter().map(|c| lin(c, d)).collect::>().join("&")).collect(); + out.push_str(&format!("■({})", rs.join("@"))); + } + Node::EqArr { rows } => { + let rs: Vec = rows.iter().map(|r| lin(r, d)).collect(); + out.push_str(&format!("█({})", rs.join("@"))); + } + Node::Func { name, body } => out.push_str(&format!("{name}({})", lin(body, d))), + Node::Limit { lower, base, lim } => { + let b = lin(base, d); + let t = lin(lim, d); + let a = script_atomic(&t); + if *lower && matches!(b.as_str(), "lim" | "max" | "min") { + out.push_str(&b); + out.push('_'); + } else { + // No linear spelling for other bases: print it as a script. An over/under + // brace or arrow is already a call, so it needs no parentheses. + let marked = matches!(base.as_slice(), [Node::GroupChr { top, .. }] if *top != *lower); + out.push_str(&if marked { b.clone() } else { paren(b.clone(), base_atomic(&b)) }); + out.push(if *lower { '_' } else { '^' }); + } + out.push_str(&paren(t, a)); + } + Node::PreScript { sub, sup, base } => { + // No linear spelling: the scripts are written first, in script syntax. + out.push('_'); + out.push_str(&format!("({})", lin(sub, d))); + out.push('^'); + out.push_str(&format!("({})", lin(sup, d))); + out.push_str(&lin(base, d)); + } + Node::Bar { top, body } => out.push_str(&format!("{}({})", if *top { "overline" } else { "underline" }, lin(body, d))), + Node::GroupChr { ch, top, body } => match (*ch, *top) { + ('\u{2192}', t) => out.push_str(&format!("{}rightarrow({})", if t { "over" } else { "under" }, lin(body, d))), + ('\u{2190}', t) => out.push_str(&format!("{}leftarrow({})", if t { "over" } else { "under" }, lin(body, d))), + ('\u{2194}', t) => out.push_str(&format!("{}leftrightarrow({})", if t { "over" } else { "under" }, lin(body, d))), + ('\u{23DE}', true) => out.push_str(&format!("overbrace({})", lin(body, d))), + ('\u{23DF}', false) => out.push_str(&format!("underbrace({})", lin(body, d))), + _ => out.push_str(&lin(body, d)), + }, + Node::Boxed { border, body } => out.push_str(&format!("{}({})", if *border { "boxed" } else { "box" }, lin(body, d))), + Node::Accent { ch, body } => match ACCENTS.iter().find(|(_, c)| c == ch) { + Some((name, _)) => out.push_str(&format!("{name}({})", lin(body, d))), + None => { + out.push_str(&lin(body, d)); + out.push(*ch); + } + }, + Node::Raw(src) if src == crate::OMATH_BREAK => out.push(' '), + // Argument properties (`m:argPr`) carry no visible content. + Node::Raw(src) if src.starts_with(" {} + Node::Raw(src) => { + let t = raw_text(src); + if t.is_empty() { + out.push('□'); + } else { + out.push_str(&esc(&t)); + } + } + } + } +} + +/// Tree depth for tests (bounded walk). +#[cfg(test)] +pub(crate) fn seq_depth_for_tests(s: &[Node]) -> usize { + seq_depth(s, 100_000) +} diff --git a/crates/equashion-math/src/mathml.rs b/crates/equashion-math/src/mathml.rs new file mode 100644 index 00000000..bab17eaa --- /dev/null +++ b/crates/equashion-math/src/mathml.rs @@ -0,0 +1,1103 @@ +//! Presentation MathML (MathML 3 / MathML Core) writer and reader. +//! +//! The writer produces a standalone `` element: +//! well-formed XML, no XML declaration, no DOCTYPE, no prefix, and no named entities (`<`, `&` +//! and `>` are written as numeric character references, everything else as raw UTF-8). That is +//! the shape Word, LibreOffice and ONLYOFFICE convert into an equation when it is pasted as text. +//! +//! | Tree | MathML | +//! |---|---| +//! | text | one `mi` per letter, `mn` per number, `mo` per operator, `mspace` per typed space | +//! | `Styled` | `mi` (`mathvariant` normal, bold, bold-italic) or `mtext` | +//! | `Frac` | `mfrac` | +//! | `Rad` | `msqrt` or `mroot` | +//! | `Script` | `msub`, `msup`, `msubsup` | +//! | `Nary` | `munderover` (`msubsup` for integrals) around the operator `mo`, then the body | +//! | `Delim` | `mrow` with `mo fence="true" stretchy="true"` at both ends and `mo separator="true"` between items (never `mfenced`) | +//! | `Matrix`, `EqArr` | `mtable` / `mtr` / `mtd` (`columnalign="left"` marks an equation array; cells split at an em space) | +//! | `Func` | `mi` name, `mo` U+2061 (function application), argument | +//! | `Accent` | `mover accent="true"` with the combining mark (U+0302 and so on), as OMML stores it | +//! | `Limit` | `munder` / `mover`, then U+2061 (see `FN_APPLY`) | +//! | `Bar`, `GroupChr` | `mover` / `munder` with a stretchy `mo` (a bar is U+00AF over or under) | +//! | `PreScript` | `mmultiscripts` with `mprescripts` | +//! | `Boxed` | `menclose notation="box"`, or `mpadded` for an invisible box | +//! +//! The reader takes the same constructs (and `mfenced`, `semantics`, `mstyle`, prefixed names +//! such as `mml:math`), and is bounded: input size, XML depth and element count are capped, and +//! hostile input never panics. + +use crate::xml::{self, XEl, XNode}; +use crate::{MAX_DEPTH, Math, Node, OMATH_BREAK, Seq, Style}; + +/// The MathML namespace. +pub const MATHML_NS: &str = "http://www.w3.org/1998/Math/MathML"; + +/// Largest MathML text [`from_mathml`] reads, bytes. +pub const MAX_MATHML: usize = 1 << 20; + +/// Why [`from_mathml`] gave no equation. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum MathmlError { + /// Nothing but whitespace. + Empty, + /// Longer than [`MAX_MATHML`] bytes. + TooLarge, + /// No `` element in the text. + NoMath, +} + +impl std::fmt::Display for MathmlError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.write_str(match self { + MathmlError::Empty => "empty MathML", + MathmlError::TooLarge => "MathML too large", + MathmlError::NoMath => "no element", + }) + } +} + +impl std::error::Error for MathmlError {} + +/// Combining accent marks and the spacing characters MathML puts in the `mo` over the base. +const ACCENT_MARKS: &[(char, char)] = &[ + ('\u{0302}', '^'), + ('\u{0303}', '~'), + ('\u{0305}', '\u{00AF}'), + ('\u{0307}', '\u{02D9}'), + ('\u{0308}', '\u{00A8}'), + ('\u{20D7}', '\u{2192}'), + ('\u{0306}', '\u{02D8}'), + ('\u{030C}', '\u{02C7}'), + ('\u{0301}', '\u{00B4}'), + ('\u{0300}', '`'), +]; + +/// Typed spaces and their `mspace` widths. The first entry for a width is the one read back. +const SPACES: &[(char, &str, f32)] = &[ + ('\u{2009}', "0.1667em", 0.1667), + ('\u{2005}', "0.2222em", 0.2222), + ('\u{2004}', "0.2778em", 0.2778), + ('\u{2001}', "1em", 1.0), + ('\u{2002}', "0.5em", 0.5), + ('\u{200A}', "0.0833em", 0.0833), + ('\u{00A0}', "0.25em", 0.25), + ('\u{2003}', "1em", 1.0), + ('\u{2006}', "0.1667em", 0.1667), + ('\u{2008}', "0.2222em", 0.2222), +]; + +/// An invisible function application after an `munder` / `mover` that ONLYOFFICE reads as a +/// limit: its importer gives such a limit the next sibling as an argument and drops it, and this +/// is the sibling it takes (Word writes `lim` the same way, as a function name). +const FN_APPLY: &str = "⁡"; + +/// Grouping marks that ONLYOFFICE reads as `m:groupChr` (no `FN_APPLY` needed after them). +const BRACES: &[char] = &['\u{23DE}', '\u{23DF}', '\u{23DC}', '\u{23DD}', '\u{23B4}', '\u{23B5}', '\u{00AF}']; + +/// Characters drawn as stretchy grouping marks over or under a base (brace, bracket, arrows). +const GROUP_CHARS: &[char] = + &['\u{23DE}', '\u{23DF}', '\u{23B4}', '\u{23B5}', '\u{23DC}', '\u{23DD}', '\u{2190}', '\u{2192}', '\u{2194}', '\u{21D0}', '\u{21D2}', '\u{21D4}']; + +const OPEN_FENCES: &[&str] = &["(", "[", "{", "|", "\u{2016}", "\u{27E8}", "\u{2329}", "\u{230A}", "\u{2308}", "\u{27E6}"]; +const CLOSE_FENCES: &[&str] = &[")", "]", "}", "|", "\u{2016}", "\u{27E9}", "\u{232A}", "\u{230B}", "\u{2309}", "\u{27E7}"]; + +/// Big operators read as n-ary operators. +fn is_nary_char(c: char) -> bool { + matches!(c, '\u{2211}' | '\u{220F}' | '\u{2210}' | '\u{222B}'..='\u{2233}' | '\u{22C0}'..='\u{22C3}' | '\u{2A00}'..='\u{2A0C}') +} + +fn is_fence_char(c: char) -> bool { + let mut b = [0u8; 4]; + let s: &str = c.encode_utf8(&mut b); + OPEN_FENCES.contains(&s) || CLOSE_FENCES.contains(&s) +} + +fn is_integral(c: char) -> bool { + matches!(c, '\u{222B}'..='\u{2233}') +} + +// ---- writer ------------------------------------------------------------------------------- + +/// The equation as a MathML `` element; `display="block"` when it is a display equation +/// (`m.para`), `display="inline"` otherwise. +pub fn to_mathml(m: &Math) -> String { + to_mathml_display(m, m.para) +} + +/// The equation as a MathML `` element with `display="block"` (`block`) or +/// `display="inline"`. The text starts exactly with ` String { + let mut out = String::with_capacity(256); + out.push_str(""); + let mut body = String::new(); + let n = seq(&mut body, &m.body, 0); + // One top-level row, so programs that expect a single child of `math` get one. + if n == 1 { + out.push_str(&body); + } else if n > 1 { + out.push_str(""); + out.push_str(&body); + out.push_str(""); + } + out.push_str(""); + out +} + +/// XML text with `<`, `&` and `>` as numeric references (never named entities). +fn esc(s: &str, out: &mut String) { + for c in s.chars() { + if !xml::xml_ok(c) { + continue; + } + match c { + '&' => out.push_str("&"), + '<' => out.push_str("<"), + '>' => out.push_str(">"), + '"' => out.push_str("""), + '\r' => out.push_str(" "), + _ => out.push(c), + } + } +} + +fn token(out: &mut String, tag: &str, attrs: &str, text: &str) { + out.push('<'); + out.push_str(tag); + out.push_str(attrs); + out.push('>'); + esc(text, out); + out.push_str("'); +} + +/// Write a sequence; returns how many top-level elements were written. +fn seq(out: &mut String, s: &[Node], d: usize) -> usize { + if d > MAX_DEPTH { + return 0; + } + s.iter().map(|n| node(out, n.bare(), d + 1)).sum() +} + +/// One argument of a layout element (exactly one element: bare, or an `mrow`). +fn arg(out: &mut String, s: &[Node], d: usize) { + let mut tmp = String::new(); + if seq(&mut tmp, s, d) == 1 { + out.push_str(&tmp); + } else { + out.push_str(""); + out.push_str(&tmp); + out.push_str(""); + } +} + +fn open(out: &mut String, tag: &str, attrs: &str) { + out.push('<'); + out.push_str(tag); + out.push_str(attrs); + out.push('>'); +} + +fn close(out: &mut String, tag: &str) { + out.push_str("'); +} + +/// Plain text: one token per letter, number, operator or typed space. ASCII spaces separate +/// tokens and are not written (MathML spaces by operator, not by typed blanks). +fn text(out: &mut String, t: &str) -> usize { + let cs: Vec = t.chars().filter(|&c| xml::xml_ok(c)).collect(); + let mut n = 0; + let mut i = 0; + while i < cs.len() { + let c = cs[i]; + if let Some((_, w, _)) = SPACES.iter().find(|(s, _, _)| *s == c) { + out.push_str(""); + n += 1; + i += 1; + continue; + } + if c.is_whitespace() { + i += 1; + continue; + } + if c.is_ascii_digit() { + let start = i; + i += 1; + while i < cs.len() && (cs[i].is_ascii_digit() || (cs[i] == '.' && cs.get(i + 1).is_some_and(char::is_ascii_digit))) { + i += 1; + } + let num: String = cs[start..i].iter().collect(); + token(out, "mn", "", &num); + n += 1; + continue; + } + let s = c.to_string(); + if c.is_alphabetic() || matches!(c, '\u{221E}' | '\u{2202}' | '\u{2207}' | '\u{210F}' | '\u{2113}' | '\u{2135}' | '\u{2205}') { + token(out, "mi", "", &s); + } else if is_nary_char(c) { + // A big-operator character inside text is not an n-ary structure. + token(out, "mo", " largeop=\"false\"", &s); + } else if is_fence_char(c) { + // Typed brackets do not grow; `\left..\right` pairs are `Delim`. + token(out, "mo", " stretchy=\"false\"", &s); + } else { + token(out, "mo", "", &s); + } + n += 1; + i += 1; + } + n +} + +fn styled(out: &mut String, t: &str, style: Style) -> usize { + if t.is_empty() { + return 0; + } + match style { + Style::Normal => { + // Token content is trimmed by MathML renderers: keep edge spaces as no-break spaces. + let lead = t.len() - t.trim_start_matches(' ').len(); + let core = t.trim_matches(' '); + let trail = if core.is_empty() { 0 } else { t.len() - t.trim_end_matches(' ').len() }; + let s = format!("{}{}{}", "\u{00A0}".repeat(lead), core, "\u{00A0}".repeat(trail)); + token(out, "mtext", "", &s); + } + Style::Plain => { + let word = t.chars().count() > 1 && t.chars().all(char::is_alphabetic); + token(out, "mi", if word { "" } else { " mathvariant=\"normal\"" }, t); + } + Style::Bold => token(out, "mi", " mathvariant=\"bold\"", t), + Style::BoldItalic => token(out, "mi", " mathvariant=\"bold-italic\"", t), + } + 1 +} + +/// Split an equation-array row into cells at em spaces in its text. +fn cells(row: &[Node]) -> Vec { + let mut out = vec![Seq::new()]; + for n in row { + match n.bare() { + Node::Text(t) if t.contains('\u{2003}') => { + for (i, part) in t.split('\u{2003}').enumerate() { + if i > 0 { + out.push(Seq::new()); + } + if !part.is_empty() + && let Some(c) = out.last_mut() + { + c.push(Node::Text(part.to_string())); + } + } + } + other => { + if let Some(c) = out.last_mut() { + c.push(other.clone()); + } + } + } + } + out +} + +fn node(out: &mut String, n: &Node, d: usize) -> usize { + match n { + Node::Props { node: inner, .. } => node(out, inner.bare(), d), + Node::Text(t) => text(out, t), + Node::Styled { text: t, style } => styled(out, t, *style), + Node::Frac { num, den } => { + open(out, "mfrac", ""); + arg(out, num, d); + arg(out, den, d); + close(out, "mfrac"); + 1 + } + Node::Rad { deg: None, body } => { + open(out, "msqrt", ""); + seq(out, body, d); + close(out, "msqrt"); + 1 + } + Node::Rad { deg: Some(deg), body } => { + open(out, "mroot", ""); + arg(out, body, d); + arg(out, deg, d); + close(out, "mroot"); + 1 + } + Node::Script { base, sub, sup } => { + let tag = match (sub, sup) { + (None, None) => return seq(out, base, d), + (Some(_), None) => "msub", + (None, Some(_)) => "msup", + (Some(_), Some(_)) => "msubsup", + }; + open(out, tag, ""); + arg(out, base, d); + for s in [sub, sup].into_iter().flatten() { + arg(out, s, d); + } + close(out, tag); + 1 + } + Node::Nary { op, sub, sup, body } => { + open(out, "mrow", ""); + let mut opx = String::new(); + let known = is_nary_char(*op); + let s = if *op == '\0' { String::new() } else { op.to_string() }; + token(&mut opx, "mo", if known { "" } else { " largeop=\"true\"" }, &s); + let side = is_integral(*op); + let tag = match (sub, sup) { + (None, None) => None, + (Some(_), None) => Some(if side { "msub" } else { "munder" }), + (None, Some(_)) => Some(if side { "msup" } else { "mover" }), + (Some(_), Some(_)) => Some(if side { "msubsup" } else { "munderover" }), + }; + match tag { + None => out.push_str(&opx), + Some(tag) => { + open(out, tag, ""); + out.push_str(&opx); + for s in [sub, sup].into_iter().flatten() { + arg(out, s, d); + } + close(out, tag); + } + } + arg(out, body, d); + close(out, "mrow"); + 1 + } + Node::Delim { open: o, close: c, sep, items } => { + open(out, "mrow", ""); + token(out, "mo", " fence=\"true\" stretchy=\"true\"", o); + if items.is_empty() { + out.push_str(""); + } + for (i, it) in items.iter().enumerate() { + if i > 0 { + token(out, "mo", " separator=\"true\"", sep); + } + arg(out, it, d); + } + token(out, "mo", " fence=\"true\" stretchy=\"true\"", c); + close(out, "mrow"); + 1 + } + Node::Matrix { rows } => { + open(out, "mtable", ""); + for r in rows { + open(out, "mtr", ""); + for cell in r { + open(out, "mtd", ""); + seq(out, cell, d); + close(out, "mtd"); + } + close(out, "mtr"); + } + close(out, "mtable"); + 1 + } + Node::EqArr { rows } => { + open(out, "mtable", " columnalign=\"left\""); + for r in rows { + open(out, "mtr", ""); + for cell in cells(r) { + open(out, "mtd", ""); + seq(out, &cell, d); + close(out, "mtd"); + } + close(out, "mtr"); + } + close(out, "mtable"); + 1 + } + Node::Func { name, body } => { + open(out, "mrow", ""); + let one = name.chars().count() == 1; + token(out, "mi", if one { " mathvariant=\"normal\"" } else { "" }, name); + out.push_str("⁡"); + arg(out, body, d); + close(out, "mrow"); + 1 + } + Node::Accent { ch, body } => { + // The combining mark itself (as OMML `m:acc` stores it): ONLYOFFICE turns that into an + // accent, while a spacing `^` becomes an upper limit there. + open(out, "mover", " accent=\"true\""); + arg(out, body, d); + token(out, "mo", " stretchy=\"false\"", &ch.to_string()); + close(out, "mover"); + 1 + } + Node::Limit { lower, base, lim } => { + let tag = if *lower { "munder" } else { "mover" }; + open(out, "mrow", ""); + open(out, tag, ""); + arg(out, base, d); + arg(out, lim, d); + close(out, tag); + out.push_str(FN_APPLY); + close(out, "mrow"); + 1 + } + Node::PreScript { sub, sup, base } => { + open(out, "mmultiscripts", ""); + arg(out, base, d); + out.push_str(""); + arg(out, sub, d); + arg(out, sup, d); + close(out, "mmultiscripts"); + 1 + } + Node::Bar { top, body } => { + let (tag, attrs) = if *top { ("mover", " accent=\"true\"") } else { ("munder", " accentunder=\"true\"") }; + let mark = "\u{00AF}"; + open(out, tag, attrs); + arg(out, body, d); + token(out, "mo", " stretchy=\"true\"", mark); + close(out, tag); + 1 + } + Node::GroupChr { ch, top, body } => { + let tag = if *top { "mover" } else { "munder" }; + let brace = BRACES.contains(ch); + if !brace { + open(out, "mrow", ""); + } + open(out, tag, ""); + arg(out, body, d); + token(out, "mo", " stretchy=\"true\"", &ch.to_string()); + close(out, tag); + if !brace { + out.push_str(FN_APPLY); + close(out, "mrow"); + } + 1 + } + Node::Boxed { border, body } => { + let (tag, attrs) = if *border { ("menclose", " notation=\"box\"") } else { ("mpadded", "") }; + open(out, tag, attrs); + seq(out, body, d); + close(out, tag); + 1 + } + Node::Raw(src) if src == OMATH_BREAK || src.starts_with(&OMATH_BREAK[..OMATH_BREAK.len() - 1]) => { + out.push_str(""); + 1 + } + Node::Raw(src) => { + let t = crate::linear::raw_text(src); + if t.is_empty() { + 0 + } else { + token(out, "mtext", "", &t); + 1 + } + } + } +} + +// ---- reader ------------------------------------------------------------------------------- + +/// The `` element of `src` (any prefix), from its start tag to its end tag (or the end of +/// the text), so MathML pasted inside an HTML page or with an XML declaration still reads. +fn math_slice(src: &str) -> Option<&str> { + let b = src.as_bytes(); + let name_char = |c: u8| c.is_ascii_alphanumeric() || matches!(c, b'_' | b'-' | b'.' | b':'); + let mut start = None; + let mut i = 0; + while let Some(off) = src[i..].find('<') { + let at = i + off; + let mut j = at + 1; + while j < b.len() && name_char(b[j]) { + j += 1; + } + let name = &src[at + 1..j]; + let local = name.rsplit(':').next().unwrap_or(name); + if local == "math" && (j == b.len() || matches!(b[j], b' ' | b'\t' | b'\n' | b'\r' | b'>' | b'/')) { + start = Some((at, name.to_string())); + break; + } + i = at + 1; + } + let (at, name) = start?; + let end_tag = format!("').map_or(src.len(), |g| e + g + 1) + }); + Some(&src[at..end.unwrap_or(src.len())]) +} + +fn find_math(els: &[XEl], d: usize) -> Option<&XEl> { + if d > crate::XML_DEPTH { + return None; + } + for e in els { + if e.local() == "math" { + return Some(e); + } + if let Some(m) = e.children.iter().find_map(|c| match c { + XNode::El(x) => find_math(std::slice::from_ref(x), d + 1), + XNode::Text(_) => None, + }) { + return Some(m); + } + } + None +} + +/// Read MathML: a `` element (any namespace prefix, `display="block"` gives a display +/// equation), possibly inside other markup. Unknown elements give their text. Never panics. +pub fn from_mathml(src: &str) -> Result { + if src.trim().is_empty() { + return Err(MathmlError::Empty); + } + if src.len() > MAX_MATHML { + return Err(MathmlError::TooLarge); + } + let slice = math_slice(src).ok_or(MathmlError::NoMath)?; + let roots = xml::parse(slice); + let root = find_math(&roots, 0).ok_or(MathmlError::NoMath)?; + let para = root.attr_local("display") == Some("block") || root.attr_local("mode") == Some("display"); + Ok(Math { body: read_seq(root.els().collect(), 0), para, ..Default::default() }) +} + +/// Append a node, merging text into the text before it. +fn push(out: &mut Seq, n: Node) { + match (out.last_mut(), n) { + (_, Node::Text(t)) if t.is_empty() => {} + (Some(Node::Text(a)), Node::Text(b)) => a.push_str(&b), + (Some(Node::Styled { text: a, style: sa }), Node::Styled { text: b, style: sb }) if *sa == sb => a.push_str(&b), + (_, n) => out.push(n), + } +} + +fn token_text(e: &XEl) -> String { + e.text().trim_matches(|c: char| matches!(c, ' ' | '\t' | '\n' | '\r')).to_string() +} + +fn attr<'a>(e: &'a XEl, name: &str) -> Option<&'a str> { + e.attrs.iter().find(|(k, _)| k == name).map(|(_, v)| v.trim()) +} + +fn is_true(e: &XEl, name: &str) -> bool { + attr(e, name) == Some("true") +} + +/// A grouping element whose children belong to the surrounding row. +fn is_group(e: &XEl) -> bool { + match e.local() { + "mrow" => !is_delim_row(e), + "mstyle" | "maction" | "merror" => true, + "mpadded" => e.attrs.iter().any(|(k, _)| k != "xmlns" && !k.starts_with("xmlns:")), + _ => false, + } +} + +/// Children with `semantics`, `maction` and annotations looked through. Grouping rows are +/// read by `read_el`, so an n-ary operator only takes its body from its own row. +fn expand<'a>(els: Vec<&'a XEl>, d: usize, out: &mut Vec<&'a XEl>) { + if d > crate::XML_DEPTH { + return; + } + for e in els { + match e.local() { + "semantics" => expand(e.els().take(1).collect(), d + 1, out), + "annotation" | "annotation-xml" | "mphantom" | "none" | "mprescripts" => {} + "maction" => expand(e.els().take(1).collect(), d + 1, out), + _ => out.push(e), + } + } +} + +fn single_char(s: &str) -> Option { + let mut it = s.chars(); + let c = it.next()?; + it.next().is_none().then_some(c) +} + +/// The operator of an n-ary structure: an `mo` holding a big operator (or marked `largeop`). +fn nary_op(e: &XEl) -> Option { + if e.local() != "mo" || attr(e, "largeop") == Some("false") { + return None; + } + let t = token_text(e); + if is_true(e, "largeop") { + return match t.chars().count() { + 0 => Some('\0'), + 1 => single_char(&t), + _ => None, + }; + } + single_char(&t).filter(|&c| is_nary_char(c)) +} + +/// An n-ary operator with optional limits: (op, sub, sup). +type NaryHead = (char, Option, Option); + +fn nary_head(e: &XEl, d: usize) -> Option { + if let Some(op) = nary_op(e) { + return Some((op, None, None)); + } + let kids: Vec<&XEl> = e.els().collect(); + let op = nary_op(kids.first()?)?; + let a = |i: usize| kids.get(i).map(|k| read_arg(k, d)).unwrap_or_default(); + Some(match e.local() { + "msub" | "munder" => (op, Some(a(1)), None), + "msup" | "mover" => (op, None, Some(a(1))), + "msubsup" | "munderover" => (op, Some(a(1)), Some(a(2))), + _ => return None, + }) +} + +fn read_arg(e: &XEl, d: usize) -> Seq { + read_seq(vec![e], d + 1) +} + +fn read_seq(els: Vec<&XEl>, d: usize) -> Seq { + let mut out = Seq::new(); + if d > 2 * MAX_DEPTH + 16 { + return out; + } + let mut v = Vec::new(); + expand(els, d, &mut v); + let mut i = 0; + while i < v.len() { + let e = v[i]; + // Function application: name, U+2061, argument. + if e.local() == "mi" && v.get(i + 1).is_some_and(|n| n.local() == "mo" && token_text(n) == "\u{2061}") { + let body = v.get(i + 2).map(|b| read_arg(b, d)).unwrap_or_default(); + out.push(Node::Func { name: token_text(e), body }); + i += 3; + continue; + } + if let Some((op, sub, sup)) = nary_head(e, d) { + let body = v.get(i + 1).map(|b| read_arg(b, d)).unwrap_or_default(); + out.push(Node::Nary { op, sub, sup, body }); + i += 2; + continue; + } + read_el(e, d, &mut out); + i += 1; + } + out +} + +fn variant_style(e: &XEl) -> Option> { + match attr(e, "mathvariant") { + Some("normal") => Some(Some(Style::Plain)), + Some("bold") => Some(Some(Style::Bold)), + Some("bold-italic") => Some(Some(Style::BoldItalic)), + Some(_) => Some(None), + None => None, + } +} + +fn double_struck(c: char) -> char { + match c { + 'C' => '\u{2102}', + 'H' => '\u{210D}', + 'N' => '\u{2115}', + 'P' => '\u{2119}', + 'Q' => '\u{211A}', + 'R' => '\u{211D}', + 'Z' => '\u{2124}', + c => c, + } +} + +fn space_char(e: &XEl) -> Option { + let w = attr(e, "width")?; + let em = match w { + "veryverythinmathspace" => 1.0 / 18.0, + "verythinmathspace" => 2.0 / 18.0, + "thinmathspace" => 3.0 / 18.0, + "mediummathspace" => 4.0 / 18.0, + "thickmathspace" => 5.0 / 18.0, + "verythickmathspace" => 6.0 / 18.0, + "veryverythickmathspace" => 7.0 / 18.0, + _ => { + let (num, unit) = w.split_at(w.find(|c: char| c.is_ascii_alphabetic() || c == '%').unwrap_or(w.len())); + let v: f32 = num.trim().parse().ok()?; + match unit.trim() { + "em" => v, + "ex" => v * 0.5, + "mu" => v / 18.0, + "px" => v / 16.0, + "pt" => v / 12.0, + _ => return None, + } + } + }; + if !(em.is_finite() && em > 0.02) { + return None; + } + let mut best: Option<(char, f32)> = None; + for (c, _, w) in SPACES { + let diff = (w - em).abs(); + if best.is_none_or(|(_, b)| diff < b - 1e-4) { + best = Some((*c, diff)); + } + } + best.map(|(c, _)| c) +} + +fn is_delim_row(e: &XEl) -> bool { + if e.local() != "mrow" { + return false; + } + let kids: Vec<&XEl> = e.els().collect(); + let (Some(first), Some(last)) = (kids.first(), kids.last()) else { return false }; + if kids.len() < 2 || first.local() != "mo" || last.local() != "mo" { + return false; + } + let fence = |m: &XEl, set: &[&str]| is_true(m, "fence") || (attr(m, "stretchy") != Some("false") && set.contains(&token_text(m).as_str())); + fence(first, OPEN_FENCES) && fence(last, CLOSE_FENCES) +} + +/// `(open, close, sep, items)` from the children between the fences. +fn delim(open: String, close: String, inner: &[&XEl], seps: Option<&str>, d: usize) -> Node { + let mut items: Vec = Vec::new(); + let mut cur: Vec<&XEl> = Vec::new(); + let mut sep: Option = None; + for k in inner { + let is_sep = + k.local() == "mo" && (is_true(k, "separator") || seps.is_some_and(|s| s.contains(token_text(k).as_str()) && !token_text(k).is_empty())); + if is_sep { + sep.get_or_insert_with(|| token_text(k)); + items.push(read_seq(std::mem::take(&mut cur), d + 1)); + } else { + cur.push(k); + } + } + items.push(read_seq(cur, d + 1)); + Node::Delim { open, close, sep: sep.unwrap_or_else(|| "|".into()), items } +} + +fn read_el(e: &XEl, d: usize, out: &mut Seq) { + let kids: Vec<&XEl> = e.els().collect(); + let a = |i: usize| kids.get(i).map(|k| read_arg(k, d)).unwrap_or_default(); + // A single `mo` script mark: (char, stretchy attribute). + let mark = |i: usize| -> Option<(char, Option<&str>)> { + let k = kids.get(i)?; + if k.local() != "mo" { + return None; + } + single_char(&token_text(k)).map(|c| (c, attr(k, "stretchy"))) + }; + match e.local() { + "mi" | "mn" | "mo" => { + let t = token_text(e); + if t.is_empty() || (e.local() == "mo" && matches!(t.as_str(), "\u{2061}" | "\u{2062}" | "\u{2063}" | "\u{2064}")) { + return; + } + let style = match variant_style(e) { + Some(s) => s, + None if e.local() == "mi" && t.chars().count() > 1 => Some(Style::Plain), + None => None, + }; + if attr(e, "mathvariant") == Some("double-struck") { + return push(out, Node::Text(t.chars().map(double_struck).collect())); + } + match style { + Some(style) => push(out, Node::Styled { text: t, style }), + None => push(out, Node::Text(t)), + } + } + "mtext" | "ms" => { + let raw = e.text(); + let t = raw.trim_matches(|c: char| matches!(c, '\t' | '\n' | '\r')); + let lead = t.chars().take_while(|&c| c == '\u{00A0}').count(); + let trail = if t.chars().all(|c| c == '\u{00A0}') { 0 } else { t.chars().rev().take_while(|&c| c == '\u{00A0}').count() }; + let core: String = t.chars().skip(lead).take(t.chars().count().saturating_sub(lead + trail)).collect(); + let s = format!("{}{}{}", " ".repeat(lead), core, " ".repeat(trail)); + if !s.is_empty() { + push(out, Node::Styled { text: s, style: Style::Normal }); + } + } + "mspace" => { + if matches!(attr(e, "linebreak"), Some("newline" | "indentingnewline")) { + out.push(Node::Raw(OMATH_BREAK.to_string())); + } else if let Some(c) = space_char(e) { + push(out, Node::Text(c.to_string())); + } + } + "mrow" if is_delim_row(e) => { + let inner = &kids[1..kids.len().saturating_sub(1).max(1)]; + let (Some(f), Some(l)) = (kids.first(), kids.last()) else { return }; + out.push(delim(token_text(f), token_text(l), inner, None, d)); + } + "mfenced" => { + let open = attr(e, "open").unwrap_or("(").to_string(); + let close = attr(e, "close").unwrap_or(")").to_string(); + let seps: String = attr(e, "separators").unwrap_or(",").chars().filter(|c| !c.is_whitespace()).collect(); + let mut items: Vec = kids.iter().map(|k| read_arg(k, d)).collect(); + if items.is_empty() { + items.push(Seq::new()); + } + let sep = seps.chars().next().map_or_else(|| "|".to_string(), |c| c.to_string()); + out.push(Node::Delim { open, close, sep, items }); + } + "mfrac" => { + let lt = attr(e, "linethickness").unwrap_or(""); + if matches!(lt, "0" | "0px" | "0em" | "0pt" | "0.0") { + out.push(Node::Matrix { rows: vec![vec![a(0)], vec![a(1)]] }); + } else { + out.push(Node::Frac { num: a(0), den: a(1) }); + } + } + "msqrt" => out.push(Node::Rad { deg: None, body: read_seq(kids, d + 1) }), + "mroot" => out.push(Node::Rad { deg: Some(a(1)), body: a(0) }), + "msub" => out.push(Node::Script { base: a(0), sub: Some(a(1)), sup: None }), + "msup" => out.push(Node::Script { base: a(0), sub: None, sup: Some(a(1)) }), + "msubsup" => out.push(Node::Script { base: a(0), sub: Some(a(1)), sup: Some(a(2)) }), + "mover" => { + let base = a(0); + let n = match mark(1) { + Some(('\u{00AF}' | '\u{203E}' | '\u{0305}', Some("false"))) => Node::Accent { ch: '\u{0305}', body: base }, + Some(('\u{00AF}' | '\u{203E}' | '\u{0305}', _)) => Node::Bar { top: true, body: base }, + Some((c, Some("true"))) => Node::GroupChr { ch: c, top: true, body: base }, + Some((c, _)) if is_true(e, "accent") || ACCENT_MARKS.iter().any(|(m, s)| *m == c || *s == c) => { + let ch = ACCENT_MARKS.iter().find(|(_, s)| *s == c).map_or(c, |(m, _)| *m); + Node::Accent { ch, body: base } + } + Some((c, _)) if GROUP_CHARS.contains(&c) => Node::GroupChr { ch: c, top: true, body: base }, + _ => Node::Limit { lower: false, base, lim: a(1) }, + }; + out.push(n); + } + "munder" => { + let base = a(0); + let n = match mark(1) { + Some(('_' | '\u{0332}' | '\u{00AF}' | '\u{203E}', _)) => Node::Bar { top: false, body: base }, + Some((c, Some("true"))) => Node::GroupChr { ch: c, top: false, body: base }, + Some((c, _)) if GROUP_CHARS.contains(&c) => Node::GroupChr { ch: c, top: false, body: base }, + _ => Node::Limit { lower: true, base, lim: a(1) }, + }; + out.push(n); + } + "munderover" => { + let inner = Node::Limit { lower: true, base: a(0), lim: a(1) }; + out.push(Node::Limit { lower: false, base: vec![inner], lim: a(2) }); + } + "mmultiscripts" => { + let base = a(0); + let mut post: Vec<(Seq, Seq)> = Vec::new(); + let mut pre: Vec<(Seq, Seq)> = Vec::new(); + let mut in_pre = false; + let mut pending: Option = None; + for k in kids.iter().skip(1) { + if k.local() == "mprescripts" { + in_pre = true; + pending = None; + continue; + } + let s = if k.local() == "none" { Seq::new() } else { read_arg(k, d) }; + match pending.take() { + None => pending = Some(s), + Some(sub) => { + if in_pre { + pre.push((sub, s)); + } else { + post.push((sub, s)); + } + } + } + } + let mut n = match pre.into_iter().next() { + Some((sub, sup)) => vec![Node::PreScript { sub, sup, base }], + None => base, + }; + if let Some((sub, sup)) = post.into_iter().next() { + let sub = (!sub.is_empty()).then_some(sub); + let sup = (!sup.is_empty()).then_some(sup); + if sub.is_some() || sup.is_some() { + n = vec![Node::Script { base: n, sub, sup }]; + } + } + for x in n { + push(out, x); + } + } + "mtable" => { + let eqarr = attr(e, "columnalign").is_some_and(|c| c.starts_with("left")); + let rows: Vec> = kids + .iter() + .filter(|r| matches!(r.local(), "mtr" | "mlabeledtr")) + .map(|r| { + let skip = usize::from(r.local() == "mlabeledtr"); + r.els().filter(|c| c.local() == "mtd").skip(skip).map(|c| read_seq(c.els().collect(), d + 1)).collect() + }) + .collect(); + if eqarr { + let rows = rows + .into_iter() + .map(|cells| { + let mut row = Seq::new(); + for (i, c) in cells.into_iter().enumerate() { + if i > 0 { + push(&mut row, Node::Text("\u{2003}".into())); + } + for n in c { + push(&mut row, n); + } + } + row + }) + .collect(); + out.push(Node::EqArr { rows }); + } else { + out.push(Node::Matrix { rows }); + } + } + "menclose" => { + let notation = attr(e, "notation").unwrap_or("longdiv"); + let body = read_seq(kids, d + 1); + let n = if notation.split_whitespace().any(|w| matches!(w, "box" | "roundedbox" | "circle")) { + Node::Boxed { border: true, body } + } else if notation.trim() == "top" { + Node::Bar { top: true, body } + } else if notation.trim() == "bottom" { + Node::Bar { top: false, body } + } else { + for n in body { + push(out, n); + } + return; + }; + out.push(n); + } + _ if is_group(e) => { + for n in read_seq(kids, d + 1) { + push(out, n); + } + } + "mpadded" => out.push(Node::Boxed { border: false, body: read_seq(kids, d + 1) }), + _ => { + if kids.is_empty() { + let t = token_text(e); + if !t.is_empty() { + push(out, Node::Text(t)); + } + } else { + for n in read_seq(kids, d + 1) { + push(out, n); + } + } + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::from_linear; + + fn ml(latex: &str) -> String { + to_mathml(&from_linear(latex)) + } + + #[test] + fn root_and_header() { + let mut m = from_linear(r"\frac{a}{b}"); + m.para = true; + let x = to_mathml(&m); + assert!(x.starts_with(""), "{x}"); + assert!(to_mathml_display(&m, false).starts_with("")); + assert_eq!(x, "ab"); + } + + #[test] + fn tokens_are_classified() { + let x = ml(r"x^2+3.14\alpha-\sin x"); + assert!(x.contains("x2+3.14α−"), "{x}"); + assert!(x.contains("sin⁡x"), "{x}"); + assert!(ml(r"\text{if } x").contains("if\u{a0}")); + assert!(ml(r"a\,b").contains("")); + assert!(ml("ad").contains("<")); + } + + #[test] + fn structures_use_the_expected_elements() { + for (src, want) in [ + (r"\sqrt{x}", "x"), + (r"\sqrt[3]{x}", "x3"), + (r"x_i^2", "xi2"), + (r"\sum_{i=1}^{n}i", "∑i=1ni"), + (r"\int_0^1 x", "∫01x"), + (r"\lim_{x\to0}x", "limx→0⁡x"), + (r"\hat{x}", "x\u{302}"), + (r"\overline{x}", "x¯"), + (r"\overrightarrow{x}", "x→⁡"), + (r"\overbrace{a}^{3}", "a⏞3⁡"), + (r"\left(x\right)", "(x)"), + (r"\begin{pmatrix}a&b\end{pmatrix}", "ab"), + ( + r"\begin{cases}1&x>0\end{cases}", + "1x>0", + ), + (r"\boxed{x}", "x"), + (r"\mathbf{v}", "v"), + (r"\mathrm{e}", "e"), + ] { + let x = ml(src); + assert!(x.contains(want), "{src}: {x}"); + assert!(!x.contains("mfenced"), "{src}: {x}"); + } + } + + #[test] + fn reads_foreign_mathml() { + let r = |s: &str| from_mathml(s).map(|m| crate::to_latex(&m)).unwrap_or_else(|e| format!("ERR {e}")); + assert_eq!(r(r#"12"#), r"\frac{1}{2}"); + assert_eq!( + r( + r#"x2"# + ), + "x^2" + ); + assert_eq!(r(r#"ab"#), r"\left(a,b\right)"); + assert_eq!(r(r#"(x)"#), r"\left(x\right)"); + assert_eq!(r(r#"xx"#), "x"); + assert_eq!(r(r#"
    y"#), "y"); + assert_eq!(r(r#"(nk)"#), r"\binom{n}{k}"); + assert_eq!(from_mathml(" "), Err(MathmlError::Empty)); + assert_eq!(from_mathml("

    no

    "), Err(MathmlError::NoMath)); + assert!(from_mathml("x").is_ok_and(|m| m.para)); + } + + #[test] + fn hostile_input_is_bounded() { + let h = std::thread::Builder::new().stack_size(1 << 20).spawn(|| { + let cases = vec![ + format!("{}", "".repeat(20_000)), + format!("{}", "".repeat(50_000)), + format!("{}", "x".repeat(100_000)), + "&bogus;��".to_string(), + "]>&b;".to_string(), + "".to_string(), + "".to_string(), + "".to_string(), + "<<>>&&&"; + +fn is_math(e: &XEl) -> bool { + e.math +} + +/// Children of `e`'s property container (`Pr`) that the tree does not model. +fn extra_pr(e: &XEl, modeled: &[&str]) -> Vec<(String, String)> { + let Some(pr) = child(e, &format!("{}Pr", e.local())) else { return vec![] }; + let mut v: Vec<(String, String)> = pr + .els() + .filter(|c| !(is_math(c) && modeled.contains(&c.local()))) + .map(|c| (if is_math(c) { c.local().to_string() } else { c.name.clone() }, extra_xml(c))) + .collect(); + sort_pr(&mut v, &format!("{}Pr", e.local())); + v +} + +/// Schema order, as the writer emits it, so a re-read tree equals the one that was written. +fn sort_pr(v: &mut [(String, String)], tag: &str) { + let order = pr_order(tag); + v.sort_by_key(|(k, _)| order.iter().position(|o| o == k).unwrap_or(order.len())); +} + +/// Verbatim XML of a preserved property; the redundant `xmlns:m` is dropped because `to_omml` +/// declares it on the root. +fn extra_xml(c: &XEl) -> String { + let x = raw_xml(c); + let decl = format!(" xmlns:m=\"{OMML_NS}\""); + if c.name.starts_with("m:") { x.replacen(&decl, "", 1) } else { x } +} + +fn keep(node: Node, extra: Extra) -> Node { + if extra.is_empty() { node } else { Node::Props { extra, node: Box::new(node) } } +} + +/// What a structural element carries beyond the tree: unmodelled properties, its own attributes, +/// and children that are neither its property container nor one of `kids`. +fn ex(e: &XEl, modeled: &[&str], kids: &[&str]) -> Extra { + let prc = format!("{}Pr", e.local()); + let tail = e.els().filter(|c| !(is_math(c) && (c.local() == prc || kids.contains(&c.local())))).map(extra_xml).collect(); + Extra { pr: extra_pr(e, modeled), side: vec![], attrs: xml::start_extras(e, OMML_NS), tail } +} + +/// Schema order of property children, so merged output stays valid. +fn pr_order(tag: &str) -> &'static [&'static str] { + match tag { + "fPr" => &["type", "ctrlPr"], + "radPr" => &["degHide", "ctrlPr"], + "sSubSupPr" => &["alnScr", "ctrlPr"], + "naryPr" => &["chr", "limLoc", "grow", "subHide", "supHide", "ctrlPr"], + "dPr" => &["begChr", "sepChr", "endChr", "grow", "shp", "ctrlPr"], + "mPr" => &["baseJc", "plcHide", "rSp", "cSp", "rSpRule", "cGpRule", "cGp", "mcs", "ctrlPr"], + "accPr" => &["chr", "ctrlPr"], + "barPr" => &["pos", "ctrlPr"], + "groupChrPr" => &["chr", "pos", "vertJc", "ctrlPr"], + "eqArrPr" => &["baseJc", "maxDist", "objDist", "rSp", "rSpRule", "ctrlPr"], + "boxPr" => &["opEmu", "noBreak", "diff", "brk", "aln", "ctrlPr"], + "borderBoxPr" => &["hideTop", "hideBot", "hideLeft", "hideRight", "strikeH", "strikeV", "strikeBLTR", "strikeTLBR", "ctrlPr"], + "rPr" => &["lit", "nor", "scr", "sty", "br", "aln"], + _ => &["ctrlPr"], + } +} + +fn child<'a>(e: &'a XEl, local: &str) -> Option<&'a XEl> { + e.els().find(|c| is_math(c) && c.local() == local) +} + +fn push_text(out: &mut Seq, s: &str) { + if s.is_empty() { + return; + } + if let Some(Node::Text(t)) = out.last_mut() { + t.push_str(s); + } else { + out.push(Node::Text(s.to_string())); + } +} + +fn push_styled(out: &mut Seq, s: &str, style: Option

    1{}5UjempM?{zupW|a3+pj1*pBOik! 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%0DO1zlnjbp5Eo*zj{8J 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 z z^4Rh?#nvq`5h=Rl*uW)Z7_Z*_H1-^dJe<+Nb*eV{oKhJVKV1Cu@{T({okzxOvc6%;TDwq+lxYD zjGJqmyV}Mky=bg10N~$U~X;WI7w(+@B zWzU{mWMl*yEh;i8F;YSSXPqU#Om4eFvj zaWTa@DXS?K9n`ZYItvOqFTt6;SjS0Ll3?mMgy-A0#5!}9voRC4dS9(1Cy3emwSbC! zZLPULTA33YTranRW*Lr`*cJknab(^0;n|PzMz0gB06L(-(10~|!-;w;vc7(FgYZsT zB25rS)Q!4HW++EAH)w>2efbBa*P8UO5Pf!NUT)5o+%0Lzn>S@dZA{ngb=&K{-&-Nv zp`DHUMdKZfZ+5_r+??z@EwOr^uOvw{LP@@`$o0?G`ve5&eY5@XHYX24Fpee-)mYB{ zqv3?<`-X;pzCZmBQHWUWvqHL|2}|CR=f6eo8xZQdF(P_nSZGRmm~QQ!HAPJtO?R9H z9eI8G_N`j>`N3zzyyj~fUwz9LafeFJJ6e!VQkq`(Kp;&c$B- zLdGy!Nf*t(gp$_#g{$$VA?$HA>}JalF4npyMC+qn<2*Vnij7(9r;d(IObyp1M};PZ zsrBdwop*L(peisZ!bcm(uUH%tzDk$i!6g>&O)OT|H-vgz(HTFL1`pN10(v%RxGG%* zecjqhUPdn(s>A`=oMu0bU}4?kC8MpCO^;usYR$&nyzI?+&<$p-i2?i^M@B7;d1FVt zfC~vp-t?s?6i*I~bzd9nsvcvrrEokO&xPaDN41P+S8ZWjN?vktLQ#kE#H6D+>g2@O z$aGyyQd&Z)Isq-4q|VLWoU7Xz5W7{Cy)`XQo6R3Qnv}L*hgA_7s*y}BNoSK;Xu&z6 ztj8}P7ZCWfL9P+)%BXH-E$i_DWVf{B^8@75e~C;c$eS^}nbXnQ4 zJ5{*>+4`{1nCK{NWLRu$wAw%RXnCwIt|+D`BF`hPeWF{-h#uuJj*aNTD-Bz2sQ2uR zjV;n)Th&&~_0Ith`@jEMBPbNV`~up>jbmL+W|P_f_0o9Fc$Kwhr%o?lqN^Dri0sS0 zrjfHT4^>C=&i=(TWUYt~8?KEw0P6664?N*b9QgvA4fA?0B(sXCud1)UA#AutGVwu4 zQ08Rs(2_6OQJ_d1BVWYfJ2}4k0Dp|o_ak6`fW_~Pe2fOukjTIBB_N$MjNVG&NRO9d z9tJZ=VnYqmASajE$)g$p*(iVw@ec(E==B}{9|iOP0j2`b9IOFYS1>sQgxsr42sDhX z6B_@w5NZ)Y89p0z)Uu9zMm8!+uXlvtNn*Sw6aCCR@-_oFbG)F15f#_hI;svs-q{%IX3L7K~NZ8hLBT$!P z+ttyb6JT9D{(wj}uZbwGmo_I^IZ@**p-WBi7l+3*4d9^|7et-|+F~CRP;fUr)vX0igb*o_tqgcB-C?uO}1g z$@C8k3Xk!l!bYoIU72Wdmxq^D#2iuQX2x#7;dyklu3x`Or^nB^)YR1Y)YY1tG(SIG z!lI-_X-gGFJY>;cwt%RIETWA@OWX|LF!Iw1XB-m4D-#wqpHL;9BztKI0ECHkA)^8$+Qnk3XdyH9__`FqDbq`hcAn9TB6zz8@wSrEGao! z+wX~!)8qc8m4q}y8M8E8;UQ1lV-i61VIEg?^dV5R=%?gUXJ>e6`V^MQOgK?o5E( zc|SzyrY+>tOOq;&sB#lC-)AYG^s21v|MvL=FfGHW&(oq zpZ=5NlAJw(Caf9exP0t4)`upMqxZ*P&k4viP1bB4hR5F~a}7xl$@dfJ_j2Lkbt-F_ zQ#WM$VZPk99kS{Zc0O?S+s6SY8eH<$iiCrYrZ?>pi$Z1HCSI5(EQ2JQyT^?TDw z99BOd`7lmjC(_AJFOenWld~L&HZCz%YUq3TWm*6gw$CqciT@M}qiK}dbOq-IbU(3v zM2Z0lFr2191@lwRcp3Q7=cd#7DEB(q0ATUn`1nLbOV(05aTJXhxtt?^$q4~0D_zm) z43JcMj=~~uVACDx?-o?=QqpNhHQ9ze6+pd*-zUQ#Fi`J}R8exDEclJt?++gKoU8(# zl{IS5kPTo+?g?xQ75xE6NN^H#m@CD7(hR8Inw|WoY!iYs_4*5DwC7-Uj|12e80woq z1rE`#*3YF`*hBega8)K>`8{>)&g{kq+$K#*vXYDu>F9yyfiMcMy(C3BL=Ld)r@d(N zd>zjEgYwDIpU8YQ-o+EGSxD0!^QP_eib$I0)2EH}ni~FKh%b-JxuZj9P(Jhgi!zvD z;CzaVLF;t@&~C0KPkWJT|D%xQunXC$R|8o=`x6h}2~QhIbG6QL!p7_5`3*8a zZ&rAZ9J^;uESoIFEy2WU!)^ORRMBD2@+F(#tgPb@7`5RRrxE^0JCH69Or8?EuKmxX zYr5IzM;z_CRY6jXE5vaNzW!$5jQUqkPTqO)`25sPT1zi@>2j(i^;gXjr3&*z;~Y(H zd>x6oL{`;VJ^h(vK3Mobc>A;+@DNG&w?7iA##vRvvUJIELAscG;LH^jvFLf6YP8ge z{~33#xYAVsFNw6ixZ?Xk6P8lB4uj=_NLKxU3~x?**i2lwm@0IZwt$DYf8Ffq&*o3t z{Vd&=4r%h@Z%8ROVS8C(UffP9!Tt9-=?|_uPd$x)aL;#$e-gu0@O3hOm9BhC4V>lT z=2jY0e(9?lfCdjGY1d$#wwRo}Zv2wBbVqUN*UieMCFbSrq$M|~#FPI>#axwf)L7CW zr+*puaF#!#?&s@Cp&o>gOApPT(yPi}LmEg(Jys@W)sG$!{|ArF$#b}J8{YhbhQJmb z-e-o>k?-NRVI_0lMn>uyEU0C(CzPKhHw`L_wEp$fA6xz(hquu8b5qxWyk*A6C$bc0 z80a2n+Q|LF(`e~ivI2+?-|}=1y~o9ndq_MN%~SixEKbTdk8Agc|BL*!^Jeys1vfh+ z^97@_r|cXBcU6D2f6CJ}O=7 z%X{&p6+G^?g6FuW_etG7;n>r5_i-F4+^UPX7F~eft|=QVkx_iMG~R-ucK> zkQZz23ad7I~?>qeafFBvas*Nry4sfC(4GDg>B)ITH^YT*@W)i8+aw&*NfKXT$q z#)&I$Q0U?=g9DVsB#9%pt{ZLbdDso_qW%m}eQiq>i2p-#;@|EeYOv_KF?cLs=Pi2< zhmHEr=ETW32)gXoE=$5?vlI7;!%gDwz?|Ik5pOoa%ykp7_=WUQ5m3}fN2F<=kLoR_ zBO++4UbMH0_93mlgY~@jrZiV1pGDjpYeFm=HHv-~p&iwZTBh0DG@*+%Tql-km{Nyp zvZRgXS?!+kzYyD;eK~u#mx2YiuZ~SRGWs>OZU2IYio#>)95etNtREc~;1=xRx4c6% z?|Uey(66`;8P>ih4^@P#5U3r{0Wnv|E4|sp2W0p?hq)=V7dOcW6&W-b zfJ@YB)*Nacr6sS1(pP{kNS$?xe4!%!215^>4u3I<^oxMm1Q&l*!WQ5-*+|zv-uox{ z;?K?`tjiPO=i}|j#tXb~b>um_$3&wdo$CLCTktkFzQTE&#;*S;JFReS8VS297w%J4 zGJp2eg=eI_3RVgnX-`MvR-A*AgQ>Lrg+6EJXaUUgGlg5`l_7QHeQl`Ts{ALCa8bBL zd_%+^4ErvY=#uzJ2i;B;=B1@(YC|q?(P6>Sp=vMRZF}Ir^3i_MzksyS4(Ij2nTf@i zdFnZ1pPib@y7#1mXrKB)u#(QM6UVw-gkE`@OP6ZPE7y0~rHkmt4UL>JX`0${ZAhK; z;*!;^o1^ZLRkzpQ6>i+3F5*2t_HNwUm^+Gjl@~UgRlj@+dx1AIulLGiV)@p&!v{_Q zIzTb-bZ`3QwC=P$R*1yMXe&C-$vU@CM-=gdOJuJ7TyrI{UWz}#N-S+wY8JI z-H6Nct~ls~#?G!oM^S}}cKm(VU)o}+vv_)8x%~)L50|Nf#!Wff*m(ZOH#p;GxD9Hd(PnLN*@9dy?C;XnyW&b@w4l1}@sQ=!BmRZ1QGq@S>Fy zRQ(>zC31XoM3Z>Q?D$V);dOKJ2AU3sYqBegRX;Ay@3T!iAbais!l{7z(Fv=)&mL=& zFVP#5`3p&ePdJ&Npvsylna;c)|3=fsZZ@#(VupV zr7qF5m(Fr@NG;iQmTapvJ9CEw-!Uht=!VZ4faj4$LT#Yd@EQHghFSqCJ*@#?B%kSO zEhal%C5xhUB$%g*q8-OgQA0XE5Q$w%#jQ)~AK{b0E(K=)x6!|Y^=5Z&nv;&X8W(bI#Ky(_-6xPDK9KL8e0~z z3xjRb;spB@D$8$J=}np|R$0;l;oxuKaIh=k2~`OS7q4|Lb5!Gw zIGpifBJs%x?}?+oQ_(gL7X7Bz{_LL@{11ChH{R2bocrb^1H7dCBLw-c#D=Lo0=Mq1NFZOQ{-t|aYjol#Msd>sog)mVZG!<@OI2FI`Cb&4 zNjhxBO@0Rz8OFzTiKd+#RYK0l!o~GkOJ|cbw`#aK>J~}4FElooWNO@l*r%}%6%J*U z{s#50FJF*Bq`U2NOa^?<;kaRgS3OvB+*-PLOEusYECDce?%b6}2gh|nGXg1T+&GN- zfzqH_GfWXfZ+Y274)EHgJzB#RuU%X) z4enCA4+5k|uSUnmZn~2=2X<9?_9>VTWD^=xfu&0~osjcn)rDDm zwGj4~s^gBvoQzgnpV*d4jrAaj1ZAJzdrSsC2)gfnUpI0CS3EF%G*F{IcbGk4w&R|M z+HxXY^HQr?tMdC~*!8jXy;h?A0wk_IzAztqRVt$R~|t05CAeJ+;;fZ--2uPSrZPQT}bpxQoP0^?1+O)3w^k z6`b9;g@e1P;9pTWjC>iby>VWQ`zii@z3Nd>>EY956S0H*WZZ=BBGC{Wq))u$E4bW) z8#WkvRX{!fytm?Z9*%SxIZSZ2WZ81e#??`W!Ti+HPv+XsvW%wDE$x zQ-b5gm&J*7)hgj$OY@B6Q(Gjr02HBXy-B}V`0+-QkI|c*xJ7KQlQGx>VpP;r?D}D+ zE}5T^U$w4A{rch^47FCP>m3?&W8Aot!*FF^743U%L?hbd3ou8|OQb8~WOJ#@8_{){bD*<& zu;aNG5jwK?5_RFUekTSz4c;@m5Pdl{$&h>-B7ceoH&7zIF3@>9LbK z;nm$LTRJaU2Zp*JnO|h1@%sj_lQ|rQxQGp8KD;fZkk*e#Zx!%-6hG51Q?#U`4ecnW zZKG)GfwY&3_9m?dkhW3Uh6|!(F8?Lw%0z0RqTJ{SeWJBClDTL!m-k5?UB~8di~8DU zfE*b?7y1HglvLGP9lu2e*KY;;O3tKEB%hCcgx%Eud&;0<-7hWwc|A~GP6U^3^iZu2 zTJO0=dtn`Spk~{lQq}1N88Ezd$XvF?zd_-)uQcQ+YDUa|xlg{rfnygjE;D{>wu*!0FU>A-#bUTSy6o3lvpX&PamT!AuGAGCCya8FY_yQCp5r@fxQceY zHnP#gHrTZ>wmGSOb^bolJY0Xy-JqlUI*F-{2}^xcU6*>e%vx#q{qBx42hM286@I^6 zmXnQ&DponoT)eE{x7|slDJM)w)_!_3s)B6&~;ceW5Z2xW!?0R12&lxR09+%w)KdGxnGu zwc)2Tu*K^WNICCp&1HFbY+0xNdJb(rAX1mh-`IBG&Q*0@eh47Z2T*6AtzIX?IhQj( zI-XYlc7c5IJ6q4h;kXAUZ-6_&xf|T2USY>SaZOsdr$bz`mc`Myrn{!|xu(1SoX<7= z6#rZrOoq*`wvwLaHjU2{j&l%{obbj?BQ$=e z5#GH2O7jK~*~Y%?+)gg_<$mK2_vJF(lKp~ItCq#O8H+UTIyy>%x0Y6gViLc<|2#Se zMWfP5+1tXncN zM0UEY|&eNmKmYfHfx>7^l7xK{Rjp90IiphMTEtMJD!@D9cec6sK z;UAK-oMlCPv0FJQJWNt57J@tvrLa~etpjCmc%e|%Qz>|((T1X^%X}f3&Pis4|O9I#OBmI1b$7-*Vl$#OTJu<)V0LzKBp^;GWr=Q{L3!#a|+rr7wD1Mp6 zC4Mr6zs0Qha_LfYs8V<+Ex@Oa^Y0&Phb8fJ z9wzz4V3&K(04Y)4R3y&kajiC%qhFKZyb+i}q3=h-gDl|KFsf(p1Hyy)p(_p-%lkxZ zeWa7L@;gcSFSW%qP%Z@0L&kg&usmw{a9RpiC{a7EtH?b`E8-|nkT;NA?nGFU$265C z=^tF??@J8V$@U`=`rUdf12KD)zkVli%zsSGgu@S|A`>OTo`)-O>@9dbO!4tf^uo~* z_F5g`uzAEyoFIO=L^qc@V5C%`4TM6MnC*G7d1~T_ZHV($yH%nerxo-4!m@tWk%{uhbeU`Oa1Fe8>PrES{2Ad+8gjGGBy}jJbK&HR_1naB`8hkt zB`!28cIROg36qwKKEZmgb=qBx+@`4H@DQ9J0Hh;qZAbo3PbbNC=CgA!=XI{{a5N|0= zye*A&hj?=XCXCbp>E01pu9di=Ni}(h_EY+@mQJ$GH;B7Ag zrm`DtqN8!Hn5Z<4l7AiOHyqi$8OsY29JFpAE8%HnpA^eq-&~lzRl7B7YifzQnEK$V zm|ioch>~TBoD8Nbhtb2_n84g$b-3_%5VQP~J!h!stti|w5tpkZu{16xGTX0%WjQ?Ny1}dD0`IK5{yKL)1Hk>HCqEYmd#B(8YaR!j;!HA$ zbK{2w_ypndV>Yyx-2i`fv|z&wT@mqh=V!+G`7Km?^Jid$QpTUj@*cNYx0jD1qXDCZ zgYSMJNBw=9K0g|%--Y4!RvPtI*!^*oZCORX;Di;)>)9B4Z>3?w>l4y`scw#GcvZ9E zl@z-zmyIq5@Xl8lT|I08{`z^jjy|K8MPYZ#C=z$%#YAk^(muxX$T7TZ`ENw0l5k+U zU|eU~$v+@5DNsv#OQ*QY3l8^TV}wkE5ZWu zB*7kjA3Cskh=!_}`DFgF&|J5Sk(lHn;e{QJB?>WPEM<&AdqTl@l`%&oUC3Am3jbid z<<9u`>)}>JN-ozJ+Z*RA8&KeYVt!!o=4ZM`a$<&cgK*_a*p@Zh`zYYo>0mgScnF9) z3&oQtaXx2R*F|GR_U*<(L|QOY+0|%12nH| zb19G`?illp?_HHR3Gm?}`H)<$AH6Q_1BSbgd}h=-kBwM>>*9-_9$a~d{84hh*y_L= zV*8wo`(1b-?ZuGrbK@UoZkUp5(c~`7DvQw3pwdtUCOEKN!#$VYSIIdDhI>QKH7_>@-hfY)dgXYC5+{wZg zLE@C5rUZE;o`s&q&{A!f#T=zx)%~GO_H2|6b)px!YGkqH;2(^yyTSp`IPp*F?aD-mO88g~C2 z{hkhaHRR?j9T}!1t{>Qicr+DqrUVfq*-E|D{@=;OXFu*FO@~l8fF4QtYlF!rZo1A`Gkp-Hd(a*mv!Chq$`dQOxN!fN zwQ3)q#ALk=14LErRWvuNUk9N!bhA<)5*ZMn4)#w^_hz1{*NgZR`TXon!e?g2#ct7B zW4(xk(~6g#f1_gWCejSiLq0IXcYL(A6u0AXnOozwsx8w&c-di+T+!^VBF$zJt|4|?z$n#z61bWl6W}u` zS}Q!iN|Nt|r@LnjV~fd~rnRJ!r#_GjefeW-lZ-lgv?cVq7RTq`lbO(L_zCWJ=$MIQ z5q}zp{4|4k5ix~c^Og&08|&aezK;1}Sqa6SkIqpjoTDrNeorA5vnHRF)S$$jP(OH5 zImn!`EG{g@Bb=dp&YZFASh-^BN;qRN`MK=>kN?ZBx}0Hd<@X-(bT7lQ#^fH;-aIAi*VQ7*3~y*St7C)_IVnFYGjs7mj$;5OXOmCLrRK=fDdxKbEliEy#|4VG~&-115 z7EfMLnZ~<$pOP3QCHr|RnX{k2Bn}|t^h=xo+{R*orIHSbxI@+ee;i9a4JYLqm$HbC zEfLs&b|L})BSP9`T-_2ef@SFlUF*?-#Feft4}wz5cH+Fe)Kz~RMv`llfBh}%94cG) zh=qljJ*24;-11K95y9+iCrw?)3*)A`YJ^D%OO(RogywZhAuhp{_tXgACKv_8_h?>< zY_ZawcEY6CmP~OhQ{2Z)lhRqH*mP5-?&+pXvB+de)AajD{%*6>D`XV>{p^GHi1$Y{ ztKUPz%Xrfg4$K$$65mr+r)3(6}Tp1j$#ir6W4otxO;m4AJX0fEUM${9|vJ~$wrBCvj&$fXiPMAO)Rk>Dwfzg zcClesIw~kj5fv;bMU4fdh+qLh1Qirf?7fRhuyT)#{891m@&4Q%G_2J#7SU{u{jVbYhCqk#~+APRq~N&jF-)|DXx8204wL zv~9<9{qSF96G}@1E;=1TnnO>&l#_p+xqp6pYVfShDB4CgZnnpw*-rNCV04~nmuDSI zF*dPv0e|&UM093r`4p**>b7Wygj`)DI|ODOVm^5R0mj;S4y>j4vyeTE`KZY1_O(yR z`cGJ=00pau)r%-YXq3Tep8r}rmjthc(_})nVS841meY-sDumZuLw(Jp!NG1bCQk{h z#|;~Z>FJ3D>kGFnc=$6l^-c@i5V0;|eR3`WS_9ZK3Oy>#|jASH{Mw*GH~j=rMoH;&4Q;2o;j+rZcj| z^2y6(hB!n51iQwqUKSY{6%mcGu)yGhH&jg79xX7$7s@uT+j}C#DQ?x$@TDulasR<0 ztA#yfQ7fV&m#M>6hhmP6_P4K3j*HQ=cv7fVERpSy`y(iG@$xYDpe5_l7dS;kM23c~ z3ran>;q;ER`os^io$}QiWHaS!Hp$XrHf-DMw031g_)2}ms?|&5oz}*#iQiyI2%H_f zI4D#f7QB4X@({Z(G7-N@w62l>xh2}LDMqYBkJhlTM2+nd8YQ-tTFVmyRpM6?{>kaZ zao_B!&&qMc#buUIL zQ&7<^M8-X#kb43dfZDN6D-EIHCzZmVhACQHGC$JdYvq;tN^#3;Er%yBxJQf2#LRm( zMql$St!XrAPHu;WnIqE7Y7k|7byg|s>3>Dz?Pb$oRD(NKI z=P~=|54F;_Yz+EXjxN4I4=elC70OLWUHk@nXdkhU{3R?Mx5 ziYuRh-OA`4qA7JxV0D+lZMpcz4pooHjiq|wjrh(-F;y!?nGY%fRm*GmtSh112%D+= z*<_7yWUlBtoyuuaIgPi-?0kh7M@AL>pk%`p1DAXE*3F}U9g1GdQ?RA(A+1#k7b>nP zg{>8L6~dMZU%9Zm;)7C}PTd+RHL~UPl}5c8_#Kvd|F#-zuv()nr-o{BNq)*!scZ?+^Ywl$JcBjZbOGJsZSe zE>tn6Hs%&sENJ(HY4yuYF+g!=J)wa!pb^d8t9pFsZpY6C-x;_J2F98*tCfl_iu!xP>SBupSGvIh*SJc)G(&}JP}|nx%}QZ=@qVpv z(lr3bAZD$s8mtjl{{H&_pRv@%pTD2;Z;m)#K0iYHx3#sw>Ygy(O{_s3RI8b*ED6=P zg=>Ya-}X=ndusNASu~uW6*eEAtYv@x^}lmG3>>RN&BwJ=)8Z8i%IVoXn<|EFFyxN2 zKBi4tdt<##I2HkEVkdNFdFL`dFk2=WsX!Gf9~-jngkH4qRlp^>po>XAb6?p(D-7~* zQ3!*Qw#iZS7bOq}Vql=Q^Uz}P()Ygxh$DAUD5@NUkm)*RA1zkNghdA9c@aSMJ?6<_ znI_C<7a7dWw5BB19Tt=U+dj8lX`$*zkxCkLPgv+$d7V>q1I6Lu3@t7ME6qE2d5x?- z+B$41(po6Skf)Yr-4kv*8;fX+Qn;05PQ*HA(tL$*(8D|p_U~+Nt`+V%o7O6&Bi!j! zri1=QbX9{>k?E|~QJl59Cv0&w-sNq&pv|qt$x0#1HBBiby2fgSiLQ(Iw>YgS%fj*z z)R1xAQp4X?MuSzVR=jmjm}rckUsSW?LZUfLD`c5Rf`(dXO#>{gu7hXUF(#Xurz}dO z(melUYW@S(bxZD)QsWaZbA+sl`dZ;)g?M`vW@y7McJ1iy#^gWj{rUN`+^4T}gO{nC zy+({1=T&UF2+k_7#@1^K(p6L>p;q$@Eo!6|SbhMSK$j94onup9EAD4~wrI`QwA1RE zf6`W$3p_*_bX!?oN;OK!K1aCdfmX9B#7pf>5^ugsXPFoID_A6_5pH^LGR|~{Um~?m z!%6YmN(w8U3uKcVAwRpmmfrt`2hJt7UMbwnmbBpL(w>y`#9Vd3)SZLJd-{y_*ZCvG zDzEHNb~O(d3V=jAF)uoBTOheY1_Mh@?DGz^{%&eS%CXzZC$8K3tkV0gTz_6B>=oOybC7C|Sl#VrsnAv5y%l*u zTbJ{?e=E6JLfWJBb&il%Rr^qY6D@D<${MJJ>mp0g3b`Vpbw8kz1Ds`C6dg&Xa`W|> zGRC*SR9vmCf`7Obd*ldD4Pdp9+NhG*e8s|6+g8vtEt9XYNZ_KuB7vKR&paiDaQj)X zt(v1U>86%y=LkEmL6fd_Vo`I|p@8ju_UcvxZL*bVH7>fEy760=i*_M?vY~;kX$$^Z zo#G-b!h=C@?PDre>To4{^VVHyz#48PHLenGvn`>C@AlHKdH$)@&6OV|Z3)>{2>{*0 zi}PR=sa8I{NKMsGC!cTEZT$EyUG|SZo1U~GWxH-o)RNYH#&!s;2f<7Z{UVk;k>Y7J z)zW?*5{GC{j<01%U_8_)E#QOVRF1IcEjo4Kttd%&H0Hl$OMZo!R@R2Om^z@j$NnKEJ2B=uw-o& z`x%HdsZF)hNQnMYc>*N}tG`sfij7kWtE;P{RFbQTwq>Uta1wT($eBH1%KX3?zWNo4 z10gwcN2-5yncjY6$fix}*KOLoE@pWMUM((=pH@gnTd&B;+i_sG&z709d>7AMhyy5= z9^sGzFrgiaXuf3xUSk_*gCIeOy<4b$8G-z*c?yI%MaXg)U}h^%PLLzmbGB+3_DgZ( zW;xZalFZNy>ULHeqy5{eyTPiEMq5ObOvyswmtGv?y(s+Li$5?bLw-xa=Gj4lbH2-R ztHd!Rg$4qRWH1<7Wf^E2ghDVgleN%x9yh*QyD8_NQiJC=$YHf!kmj>^wwIeJjlj9A z(bXCi5hSkN@)X&L{IIHnn?poraD(9m z<;jI zGFz9E9GA2Qn>)Ng^k6`$rOox0!Lping0h&4syzO}p$(6ht#tJD3Rp7Vsh`Jz+qVxK zxL&dEx0bAF%ic^Cg?{az1eVSHgp0DuR@qP*Y7SCb9u(vx%&hni&W%>9a5%X_bk^dI zG)O7Ts*sxCWL2U9zp-fKS8?f!1t-$+Xm0(GuM2ab9;^pNl)Pz7T^jDi4zdB4T!fq? zcdf852{-$wglkEt=1LN(DM+HaTH%TZ#)FXK5vbT(7e7AV%yq_1%bl1ngXI=>-H_25 zna_rphH1+eZKeQfD`cQ{@iDJD!{a}Og^-yfJyuFXn{via^A@iqS%#wi%TNT#=g|n+ zB!3w>e1GqsmgtAhNk9$kjcv%*Lidem?kkKLq5JPu!{*`n0Qs>th@Hgf zKZ-m{TG9$r&vDHPkIub=H=cT~db9|SQpFNJ92LUU)CUS-#yJd2V1s=gmXG^lTuKvw z@iMJH_?mhSeEIahq!k{;1#%J~w3lGW@(L}Z)^e>j9~>4bV&wj9)tXO7F?iQQkfU*A zahMparCPru>upD&R|gox?;XV6p9d`;va>p1%nH3m!PL%iY4qyArLm#f)TDgvCX8fz zOWz06;OIcuZ`Gr-jWBcpbaD|xS}(*c_%Fj+Ck!o+ev#z7%ApHT<>(H)O2KCVO(5Cl z;m$@_+&EZ;WnJp^06EAy2)?fWF)V~!S8*C#flTl#u675K3wy#V_H{+Y3tj)=wR)I= zQLtIo`F`MrLsfp_09G5@Q+r`%6hx2_B|hR#VrGBtB{HI_-NdXY>9@AL+L=+P)-MWz zpV=l*ff(j4|Fid)8TEg0ACMd(hXw?EmK+!=U-Y-tPX?=3u#ggJDh$5`UWONl4*%Vs z2ywUmN0%~U6k8C>SsZ=~ERGok7Kayb+qiWFNEe@dO?hA`j&Q(IVW&8`Ou1E0;Xeic zVt1|adw7|=V(w-9i{WK())R*}@mv#T7k_!QVF1Ib1}APyq#yVkB|4CPUah3VC3G+` zB~jQpcr8|J-ufvq&BDx7$Q{h5G*!j<^PjXRJi#(EozKhf=jH$A<%jUu=|7Ks3yBVo zPCPb2h4vhBK_J@liKz!CJ=Bb@Bx?7|(FckV1ywW9+Rm04=x0v4S!ST<^=DST z%cnWKy1X5zjzm<~nl07-Yxaq$r(W2-!!rHUS*D+#MW;=r0ei^?sb9gFyX7%B+0v&O zs4AFq_OsMO`_Fum^B|5dq#sr*jZVDaE(7np0R<78T{Wd_xh)D)$}cS>(xYvb>L*G! zwPdM%e=3M(I`V%1YXVu@gHIrx4SWJQ)3Is-=^Vo!jF>T2&lYQYSZ0eBQE0c2?Oy)$ zk*ea|+36>p1hc_3m@nd)Apo<%{6YzwrltS; ztM^7!ehbIh+FTOb1y)#?^e!QvM|1^j95-)PB4pDRj2^|B=VA{tGUtgKz{_QGj`j|C z$-IUY7vT@%C~2^g&4r6RVw$d%T-i>Lgre%hi?gYslstBvwN!0*Od$^_2vvI{QxlsV z##%BxTdHP_&f>xH6VNd3N-veBUhGf)-isz10y9sTGNI2elOIv-2S<07mgn|t4eXP& z4FTf9z^8Zb@M?`OP+@|(x0d-!N0FjeilWT_z2~dJ-ky+5@#(HJc>fQQu4`%0J;7)& zt~8xd3ZD$-D@x>dGGk%HXfV4eO%ti+|6b{O@SLAvI>#%JIxEGZSo1h#Ro@pqpe2tf z6zfxsBvp;{A;fnve>K>oRhdwyYc+K!wvq{Ec62w$)CHe~svi??nQn7|ME{W-WjQ+y1<Lq>(h{(2GAF z9B9ra>V%2KQdf5NIhG?%VEy7eY%=R=H0sUZ7AYJty3|Fi*uHrRgkAJD4^U>UHFZ}? zofM-37d6+-S8$6pb>r5kku~6JhSBNsxzR=@X~k*WWQF+#jctVKTPz_M*bl6kY^GRO zAr1U&=av=0%0^3yJku!~X3Xi_s?9hk+qmu@GY-1M&G=9@H{+m7Fyny$xJy?Gf!U9> zRbxgY3kCAkP2F7Y*#;Qi; zYg28lFuy|TDVccbHC3j|7e4;OdUYtnEf|QVHqq(9RW^*qjWPF-%Cqt#Y*+|1RGTqU ze6rcGyt+|nyk$t{f^@NbS2%C^cHi4H^ZFnh>b@r!oHe!!xyd>gbCV6V;wEcwhRF&O zTS-$`6JA3^m0bc_Ce&Gagm=J+txO|035>MTB|1G2X3G22quNM?zzXAzB`We>h1ey5 z64caqAb^~IVh*mInG*0d*V1xSc&%2lA;M%1{wpSbD$!a++7qo zc=jKID?FV$b8ttu;l1?>rX|XSgWT{I!|ud8(xgdRRNtc7IXWa+%&Q6LgT=*oQeFB% zY&THBN~O-S{*=MmJVG*_HkaTcg~KFCizaCwRJ9!e19PAU*KUGxmsm$UpxSg-#jv_6_!vw`(ctc10A5h;V7*|7pi3=4*JJS z!jMswDkRej8OySOp!|A)#l@22B&~SRkTr{|*5d!5c#HqLfVS3KRoZYfX=%kBn)#kq za5q$LEYXU;a2tVBLt!{IZYbl3K6|w}|0k~|Y~^+&{tn_Qj~1rn9*rAPJL6^U&<6g8 zKNHqhE<|~Mi)z7Ml{-Twux1Y}9_akX26v%BX%TQ%x;^Z%^SUef{pJ_3*wg%(! z|EsMDs|?)7{cPYqjtg=`ab-6!v)*D|yl+*m4jfrr9k;Pf2IF?_>e?H)s{@g77`dy2 z^@jiI=h_=Aeok;Nt};X*JV8ApV2N>6!rFz}{EWM~$J_VW;mv`+GB0TxHP4 zn$-qf<^H(0vba8O(rc_LM{tvFZ&mI2gh2+Qf6*juoG4SCETN~D`klpTvpg{oi0Q4F z97iL2l2u3gnmSy?xzNQ}grRlq;GUg34VpZ1f-cQhmXcQ(zt2giBwYcsZ4#qjx)qHuviTW@+FdG0kNntMn`1}4afiN>hm6%{&XuL+ACBM8k9aji*0~?o>Lbva zSnM%;R~M(1^$|aEwvRKj>D7bD8gx5@wDZ=Nt`UG!+8eUOJG-s7Kc|=%?1PrQ?xTuI zib_gGKGg#+%FgBuVYPqPtz`-TgpF(7x&NdS^fh9Wmm^kwrTTHy+xSvaF4ECv8ZKLjGd5mo z`|ZJp#dn2Rj+JAV!A??YC8r*ohixfpnp*h$@#XyCtkx!7ECWQ=823iM^qFvsYA)1K zBJxRa9=vgcpsq&tZJssRJhKs1_^Qfd+clK(Ok?*mPEys-$fEMCN%7J~Y=E!8JI>O4 z%6X~zs)543l}2uLz?!~(VJq ze~dlWyc5uo>RzsRW1Fa88%pNA z)co}pU36gw#((K$_FEgu=DpPXW&Kw3bxT$<_De5|z+e&YrRHPZ_nMj-b_S>Ns(X3n zFB>|;d#U-*_%BVZn(V6kmtNjLFX;yFrRM#wyo)Awcf^-oK146YVO70+%^nXUf6cpo zyqBijDpit)X@v?ZYynjQY?=4b+^kBGG~J9|eAS>S6iHe6=%G2aN{uwnj6Nu9H-;MN zzyaPr7FeZ4@-x52t-pVS7OCVA?;f+NQX&OuFiC~>8bXV7rigd1a(R^!DNIvYsDk$D zLyL6v2=89yH`PjnA}V{Tpgd;H)p++P@1Ak}XC*po>>^Z99z8zB{GrS*-GdI#qIZ*M zI~0fxp8wK2DDVn8H<7ZSJ@l{qbLXJFo9NqkIsnz7dq7OC?i+Mhj;@WR5-9FRDDX?y zpt;AqXQQE`nwo~t-WGu zWB$YFvBv(j!oImF7d^2IL9(elrP3JpD=3+5;R$C$=zt7p?g|P4?(z`1y_>li`eqrC zq|n%IR%yg13d#mv%?UY+rn4xFDEw$7IT$RrA8SrUe=$T~+tAk$ zODzc>Y)H_^u42FhDCjo3Cp#x+Ib@P)z8avQ9IBM{mD?xYQ_^>zZ0I|Uyc0%9nu4CP zSF-bRc37+>(v%o7{fC>6F$QE*ggKq>-m!#9UV(hmT2iNzTrRdXxpw_Bqi> z)=O@G-gFCP^<18MjpA#RwN;2Uq?)qJa&`+yN1Cq>D(Du{gY*PgPqlb=KePFuk-4ab z$SDM|zZxSDZ9>=qp2;_vwm@)wVHMTlErKhs*2wm&2Fod$okn4u0@;7g@`S+IvmrV$Xg&yFl|Hv5{-yi^+u$JKP9KbRD{AW75|909NwZP@`|YX%PEb$kZCAH zfynPykTRX6^N@0(qDs7PAl^C}g+|p^PC2YnrumesU^x)TIXP0D+=G;(6c+KCAYPS5 z5vTeM4I&6#^VcHisoZ41-k`&smpS)hFBA2C7i&8&(YX@mFGY3Oaf?&C7D>MFh;sg5 z1NB?Y$38!TdOCNGnwqIc9LVwG$BzwYxA4qpgNv#ooZ1byIJMgmDFi-K{t?a-)E_k; z#x($S1b3gBT5ByX)anzIY5W$K@F?tqtJLSHv=Y8lK~`|9s!y8t^PNGI#J#GV&qe|Q{Y18|uJ9FsQkrzF|H&8nz|=3O|eA^(?Rt!YI|=oSI}yP;V4Dg@_C zu9I*mmYPG8;FmR@B&SDt0Oe=}jX(LfYHQNkX3#E(OQBjgFHSsQA}4MGU2@_!6Xo@S4%+0@?Z(Rq?+L=KrqKFJQ2$H4-&10v zKi|9s`6sSk_%}{JeJrQ%1buS)PGe!shd|#LdVd4@e<`>nr8k6*gPbC-*C zkAS`bbpH|b|57p|>rZ55W9-V6jOU58as>5(T3MeFKzBT=*5}1gc3x|rYdWUAByM8owDuRlnWmQ6`l`5(oz>dEM57w} zH`X`A3zDbO(nJ=TpvQQinU%bS-QqwSv5wTHs*&Bikw%m(HB)|WV<%wF#7=BoRWq65 zCL3{x)LQwarA)L`@=r?{XlXq5LHhFE7=N}g&O&cg6U83dd^szrER`izmZEdyXF8)T zHIA_{#%W~vq}8&U8ruw6I{rvam9&-j-58F(8yh0x2~&l)+5^b@hwnJjaEgn=xYNe? z0^(4Ol}qh4l>xH33eoa;NG{1VvW>C={DG_p&;Kf68LvWE#xp6j;X1%md#c` z+W0J#OB!596t9NM(pU*u8rN#%%T&l@I74HMlFd|zmd_%&)Ed`Ove#!(S2lpCjr%q7 zzg45;QmDr0z)M>`k%Y4kuA{WqXH8W0g(i%5G>SkrA6pV!PJ19Ht`Ze1F_+5nG5RVC zWN8YJLXa-%ObHokQi0+k~dj%t@yWwxvSVM{FN2RMY+aylPp~!Sv~=aXOZG= zW4Mj67xbI0sYLwi8~l|Wkc&vC;vmaVNS4p>D9dHK3o=Cxv}6?oSUFvGNDhI@qIfaO z=UBP%H(ZBpe39u+<5e5uDj3I6jqx3@qwp89VLGQZ z#)T?K(YR1nMDMhtasRU{Ga<_oE=!{|^FqwDz0W8IY0;qn1&lIQ8m@bJzcRyXMe=} zT)Y2|WltwOd~&r1^#DbgavUpQL)5|**6n&z8i*5y_4DPzwT2oyqg=T1KA+W>vw;!a zn&Gu~$UzhhMLX=Pd6Rw$)6oeHn+Z0WZJl}r;jM1_sgOo+HU^F;blItkRovQnv=Cd# zBRp^eF&HBgplA|j$iaIIvjRs~HI+c}zt%8m+8v++ zjy^~gG>dcOG3;>1-Qei%?qi1$U@&VOZj9m_)!BRJJpj&0aYK3Nam1U+&t3tIYzQbe zD2K2QEQs?l{34DQ&kog5i$h?9*=m%R!3o(OVl4oP5Y`)~PDZexQudw!?&lTL_>5q7 zDE)_~G6=jd+Z4}-zy+OqM6@LXXU2O-aoa2~b3d!Jn7qm0jvI40Gxf3`k!>=#X@pT< zhCKoaHb}lLp1+FH1i9Rp1xvsD9xF&D?+#&TNv6G z5&jcc%xTG<{lS@P=s%FvL20~eAfVzJvrnDz8ZWq^$KWvIIa6VSN?PZDsmD23WC^4A zVHitcoGIr$ugM;Gd(>M~x$Ll}=Jq2FM_-11oc89!-HtR-cy*LRqt-Jd{>EA`b04W0 zOXKX#IL)v;5u&3`NKN{R*@KR=XMcoslC$N80odu9!O|{BO_`aq*COyYR?na#QDa=g z*{i#K#wVQKOE@L=qn(_+*a63z?*n_!_nkhDoP|3FihZ#V5B3`E`9yWMgFR1pv|>%I zbw?eJzYZlU&v#^1-hrkGuZ|NIu^JdQcW3P-t(){4Lspn8%=-lUi4vCRs9P~-&;gX3 zL5HKPo17&q8I0w9Z+7U4)JMX}-dC*sqVBALK__DNj_e@UnDdTVSQl+cndij$1Q4uO zl-loPJj;fWP+z=TB1}-ROy90I=6< z)NUtA{*gY8^W#`x8yxPn)Qd8dJ#*E)~o*M#r2cz1Gl& zpC%DbeY>u`Re=Dy&K@WP7xnQ|X7=M)j-GbFybu#SnWAE0?f~S#Y&i`tGH_ELnah#! zSLf)KDtgRuACJ>gE_-pK6{=^}Q~I}CSmmZZQI8&1pFEuKblD$5nOH$bRX@ee%cHL- z^dJ=w9M&W1*6jrwxK79FV*+^Xy@nJxw9{}R)tA%2b=O}4rFqCW6otboqpx=4y^aH% zB0Is?9_-#KUM$E#GEC;?!3r6CRv8<3bj+>Ux^RWd>=9#t(l}y2Zg8K)lvCZBEvWKY zXuYrNjpt7$zFhhcOqmgz!>r=G3z04|37P8%Uh5I{bNh>p!y)d*m{^v5(tL6PSI*;s zWJu#;uYAJMLQi)Th1V)0hqOYnvaog4vhMNK9mV^Ay`5McHfkKJVDMakBRn?h?o9C2 zaptg5%!AE3h#R9hUv;K+Y8U{cg6Bf}LtJjXdN%n@#ABh%s3uIz?BacnVtwmKDZM9n zu}3tbH-L?2$LUxL%vj6FR`XX&aK>!MQVYZd#$QC|hEvcG`oOKCj5Mi7$u6FY41TN# zv*nWtvh~Yu!|Jg)?vgEoCo5y#r6cc82Xk$w4;hK!VmN{ub2)SM07z-;3-12$WMIa< zbJ^RMQ{II?1C#CPn({PWA>qs((S*KOLR}cIW4~ZFTt;?yIpnLro>Lmo8rxt*R6`K-V+9R4V z008aF6LhQ-rrZbv(tH@hnY14TBtlxg{xs=m2Bq~8n-N@E8MR0}PxTVG0O8cGW4gad zL3O?MIOCLJ!a%7ngKsEfv8RVVpA06OPaZIo#j>5Jq<)OMHP&c`Gpp+bCjW73U}jo} zao$UO=b(9yQ20m8VI*~vQ^JN52q^HT zLvG@4BK%nywcmV=8gT9~TQXwRu+}mKInUn(u<@2`XJ2U^gHJ1Csb>eh@c?^`J^Bq| zsjT=M0yi@`do5?7r1L!R_m59Q810;P6=d^q2HAwX1%IpPy7Hztjo_RfQP401&!uhD zvEBgjD#HrSyD-k*cf+YS)-E<4L*!HtUFs@&ig0sf)b01%)MP#9uZ~81i3M0+1^qN< zCx%8lcBH4Yj=`suvApvG-cJC34JZ6IfaS3pm!(+#48F$N%|^+efT6b1v|nR4$@=uO zCpT@xFw=h3y13Z5b#cDiJo5w7?1sG>O83P?wU~6ADvrI@C8lNPrzAzhhsQ?5+p%%% zM;6RZn5@+%D+*>O0qy;R4o}^osvi*ySc8(q@oI5A-hq?fQcK;M<$y+U0d&5UpqAoK zG50g9tIj^f+(Pr!5bKLCU);74*PC0YQnve~OeqZ9QE%v{L885QQ!U;&Db_mvNtc+B zdnh#}9BqfAZ4bEpW$dx3zuMHFma#{K3p(JEPgOObZV2Q(D#ohCwOFe!`AFS#G0SCr z+0cG$rgTFs-8{=?onu3E_6N+{HOg+**WSFjYa{M7Z&$_Pzt}kM?URcGcG?Z0ulkD} zjo+w^wa$ngOMx7mv~%ClwC&+>VXu?22ywP}>vH2Ml#eTl(wKf%kkrl!{VkB^`3 z+lbfst9M*nd~AH&{GAid`0uqFOxm7etT9+^48pS#fOEQSdkfB_XNJay#)ie&v6;Yc z+9kP|Td2*=krTNq&14gFtO1hRFa>~kz7zGvHfm#Q`VMPc3JTP%TP|~B(XK4fv{7yP z{RT_C!lE%w`Xd}Mh@9^;@G3C5EWuK~+tF08aYyI~%O zeX}YDK?ygXJhQnE2SMZTGzg}XMk_Vm+8P`<7Qo$9r9O;3y+r_V4VEm8 zS4-nDA4>j_wfy2BXzT44FKr&eLE!b|7g|P-jQ!Qd{%jc%!{LH19PNjPruycNO`L0Y z-1($b%QDmlN%ljXb%FDyjPdccqoz1PdX9#irCAog(vN2LrJ=f*)v}MkjKTtjv{nrV zDQ8C;Fu=uDy9Y|U`{s?!W4H$-59v;EA|me8#tke^tO2mp9=fp5u<-D(G_QRll4jeL zvaila9Zj{=rf>R79fz>5bOEy`kM#D!NWnil95!B{xb!7{-OLSo~X`(JHEHpec zG<{A%|83LIz7|g!Q;^ye+*67jj5Hbk(n1)#*MC& z=tj}Hb&!IB1=4qt&eU3MYQw&h^i09{9PYDoph9fxV2#e=9B3~76^P?27pN;2GJHW+ z?76y7&PZ7L%!9p>C)=H5KVFlHO*v}QzV6bIL9CI^Z}Pa_^Jj8K;=zcXcB!t>)?1Wg zyrVXjxzOJ3lxSh(Yqo+kl8ebxZJN&T1^e0nr2XO?=-3lDGaJ4&Ra=D+?I1cX22~zc zWBKd2xQNZCV4We%5N-&|@GR_}JkjnHYjsn4WqP4Dz3eKz8pvAd{3ed+KG!oLEFnAr zjMS&Y0BPNOmyTCz)Rj&h>9{NHwJ`Dx+eG!Hai+~`(-vgd91jSC-~Z(t=sV&0XRfa{H|T7tH-L52`HmaaW$x77-i`=&kD^QBMvZNdT4Ni`@Ri|`Zl-s} z)Wcm;#?>Q>cc>iKo^H5MsV)}Ua6kf_MpCfpvf6Y7X}yB6`mkFUzFKyRO8=l6mE+a+ z{Y{-UiaFMKf7s-aA28?e&e%|@abBvIz1Go(5*mu`Y&HektyK^{-iz+3l;FA6@i(a+ z@ZV}M6t}aVY}%)>8)sec0B1P8RWy`!p=MI+OH#kRF^=9queBCqU=+XeI`9EZpO`c% zm=@#M3sXT9L^xv?JNpHEFR8!vp~p6dkQs-@vcc3=ntVkH-WTIIAG>7=@ig-H6!1#$ z0VvMX>2!N?jH4Smg@OzOcJ`~yX?zQ>=($Z14g%q6I)%DO>#j>#d21c#5o7ko8f-OP z=at|C32AEVAU0{OV>c;_p&$bR0KqIN zj`k_HYaF`io)4e8fmJ3 z&*XM+t>Y{lM0YmsW;tSWUI9J`KX-`}#;tYy)dU=2Q+);kJNqZ*(aO_**_jN{LybT-`-#uC_ZJD|zpaL{qW?}w)Jq8P{NVlqQX1`4~+h9;{2 zu)(^)C8X8HbiScj<2SLM=TgU1mhfJ3r`asnZmELdqoL&P!xFNWI-VDi6$odKQT&Uk ziA^5Zh@o^%-HK=8%b z#Ey?`aP0kt3JJ6Z0|R}sn;1Mf(lH%ifC}j}BwoO)!3O|fPtRw!_eDBh!4nn*2?Srv zP3-&J21hw>BV80t0a)U?ZerG?rH(roBYRT~oME`mtHB4-?bMjZSl&{{>tYt6Af5#O zGB|O}D;uE7+~FB<16fb8#6`S6aj9dbq@iz3oiOkC!0W*W!_PUACV#2pE%82~Ab{@v zWpd)IKW)SdRIXwRDT)mg-*+`g!_OH~Xknydh0&i- zkU&svcq06T4gPFZvD4BF*4(V0E+rR5IzBX}({y7PCD3s@pvy9RGW`D8m_9nvF-yW( zO|zarVQ2q_0c7si66#PQ3aqwP3{wFSvVkNhq<*$i1Nv12Qr3K1)&bu;DD2;u8!5#) za`>OI(D7KA)ZnBFL7WYwItqS8hId0LBq+s6 z#$46%fihE9siuNH7<;B3lSx0ATB=r`k{P>-H5KfGsi)5{nMEMR;K0`<)~B^LdD@f4 zeX7)9gqt#{rm?Gh`6-#m$$XA6R3Z~=n!3tY4+NRGO*@Eu$Z!(tTh2)Q$rlw3cjT-s z-j>=r%kGc?;zJ=oZuksBp*$^u$_m9Rs!q%x3dpS`HZYx$8i?P@aovCwg|?rnnbA?; z@DhhRC&{IhTuvgg^#vQHs_Y>BZtkEECtwN61z?ayU4;U#gnf`Nb~P>*8qbJ` zt>P*kPJu?oI2Xnz8{xWklOwSuNd(x{pqry#L_Dpf+s=5B{a?;1iDkSBap7XQmu2w;5xNlEZ+I zg2CwVqN2pKNcaE4WJEu4E?c5xi|S?uB+r}?;6HoTR=?~$i77iV*XYDXQ7h|{C&`!p zk1a&V_pO2kCcMI$*jTlw9V7up-mT*=tU;*GxOtFivw}5<@Av?F8lq;9q=oHcON0g* zbU)%u?G{>iEa8}g*yf~=#DAy`7shWW)JwxpBEO+HRq^}L;tj<}*%CZ@mp(U1c5%AL z&R?BIj13JLrx%+HQV2;nX%Ou0zGRrwaR1+nX6dH{$a-h(pM4LoO!=%<$*Gg{cZtIe za_)0Mc=qm&s$XV6?x9`DyHj+2+ht1@2N}Gb0>Tmw=*h&KhhI|wog_ps= zVfYE>jVs$i`~%gDA9tEcGdD;uG>nIaQ{q)iH8@mYXO#1_f`Z+d9*fr7w; zPC*w{vnFrInxvFahl+gi{m$938NGMw2V{7z&rxTl zBp2v}tjYO%0=jP13t5xWx767v0AqxPy7Q1Nf#)(cnhEMA;AlLuOOca@Madz6` zsp@Ioi^mO^m;3<1v2yVkdLxc7oT29jX&`_=_a1aOQi7v_hd+qFax~DVu9ah0r4ld_ z<|kVGiU$~nt6Ah<&EZ;8EwQaixaca*;ujvBEq$)XFVhO`1ppD}(F?>m*QOtE5>lDr zko@w-(?{tDmlj{v%^-K#Y&o-=8sy2;PUGc+7scfRK=jP|{dKx=H4jqWNeFb&M<~7z=;P+B zZgAG+Q;=@CqKhH8lMW5eRXpL~E4vgPn`h^isc-B!bO3v*VrXdb^z?uLia84;@TI#P z@-K)-u9EB3UYCT4hRSVwRN?YzVXF)DbkrO9;DTk|io+Wtr|9{qsi_L@***aiouGWztq52JglfSGJDQrb+I%vT;ITBx{p)P(oKmW z`nhZ&l1}UfHsrROCGVX`d$SSiuujjctmSM-WRqW+)~RKm ztdqm^z5z1fQ>UZlL+Cpvdr@vdQ{8>A*zB%cTCIG-;Svk5>btjG&bAh7&rh4AjJl&O{WBckVF1-F5BZ>wzJVFhe}riSjDvqN;ecsyq+br_iD zeQHpu&q;@O<@5_jauTxNigBSTHVb(8?)BD75&iqB&8eGLOxF2#oO)Lpz+7;)lu$DJtrVwNl2Ynb;k0F+YUJFM zW;4A_Go)!@zB$xCgHra=&YZa!VS&^m&w*5VQ=heXP9yVz z-U{yr)2+H03YUd(CztDQ($KZb)<&!it+#Jb?x5GmS^Km0?$(F-WUIb4CBI)Xa2t{m zcE;|>Q14%K@#mqF=S}h3uqahm6nSB<)AkLsW_pFsHO$cq?~~Tf^h91`7KH?kNd#1! z56*M{RD{iooHs|^Ygga<$8yv2GZy^r>l+^A7pV(c9_2UJX=-3@>5etq*6#s*%wBq? zqIAWoq~w*`oc3lcH6-gpeGR^0eqGs6$Ee6<(aW5u6?VM0_{Ytkp>98Zl53FeD)n5G z5W6{kTRp&BOR5JTUmd*)sbDK<`EKu2AF^(YbW6}@u~jXsCG78 zJp%;M%DNPzN>zA-#O>45D#d|>_xFv#0Rgt6KWmVx z!1wiW>#*$>agKej6?!&1ljbpMBc8(66qD++b2gINXHe6fKB*4mdY)FCBVkAGcCtIi z;rddL8QM!OjIH?9KP<9|Qz!c6l>F%WWut%v-*BFMWXRGHx`EX6rToUGr9I>H>GBn1 zC1YcV)PcCdq zV%dt}OT$J&HvLl-BbUaN=qY=@;_RA*eKzQU6lgriI;iH$JNhp(ba0v^_cpBAsi!DK zNkYP5UVSP^%Y}XPDpw_$w2jzS zEtTAjrbj+KRmGJ zZA*RE>-VL|o)l-?qK@jKSqfHjO20;Kx)pM&Ka;5*uq2aTf ze6WwM5d1q>u}#X@g=>Su)B*FOm%uX5Dunnph7`rj<=BnBc2uyI^Naea;dh&VmPGba_($c2%utS(Szq_?oA*^6^&G2Co;B7 zj32XRjNLwYE645oneCXBZl7FGJC`S4I<-Gz*3S{qVNnL1P{+{JZ^|%t_0U|8@`bvnxluj~ z)Zl?BvqoOjJrY-_?ycW<=AP5z?JoVs22b&tsULN@dsf@^c7ki|8Wd5qmx!9>7wG|qT`*A324{LBAq;`3m*$gaPaN=~e^=MEQqDL`OJvPEd{B z;JZCry*G8wi7mS2W0v(_KFrQu>=Cg$2u@#_y8fdflRB3HK_-FQD^|i?fMTQ~!#~df zA@iDu@CG~qs!ZuW%qSr2iy7_w1y;0f;W}6mNU97;A>>>(w#-%unU^h|J?FB;vpWfy z=Pcg+zq|I#Yt^oO)-|~H%xf0cKI>YQYtOW}_FY%1T)VT_XrPwaia-m|$g9nze)LUh zQf5tg*u$(D-aToxpP*R5Ab1sYSP(wj{1xm8ch5R+KB2`|~Vt?vvs+ z&d~2YvH8Yjb=iy?9b8BELB_*16b!)4gZ#S3k`WW9=;%h>;RSQf6sz~)azVzFo|6nCrcc({Z-u{1wWiINZF0qW zstyV|2%vOoqyVarURJJP2a(}{VJ+dXu~ndTF4DJ)59m)7z}>I2bR?3wD+io`FFd!e z%>MA&fX^jPs5;6q0r6$HDeEXFUeumhvr&~D9H_>{{+Hig>VHw#K?*GWblvBBdA2Td z@t(zV)YE5%OkSiDPK^o}Hn*3$XR-g;`MRBpcLjQ>=XixoU8o!F_nViiy89X5;s8K~ z=P%l{WU~5_{ErEVLsN8PlDyaLR`1%rA$JREIGlVo<+}P}zsyl7y2)GlowW4LIh%Dy zlFy{xRG*)i?3Sq$c1+%~AU0oZpDNA?ym`VpQ9NZM-W8Xq4!X52Vzr!Dt=6N*x#?*S z`~OIL53ne%wr_k9W_QDr@DMgbU^dKPjWsdG5^J#cjujPD1VIF8yR>C@smlUOUpg$k zSLq#8uy=6SF8{l4qH{@34?nKNh3Idh*gXHL1x?|w<(UFa9G ztnFgiBk|))US4es-UX2VX8o~O*-27lbJYl$_H_4DR#w6h;QB4E9_SNHLVJl^!E-qF zwq4Z+uWH*Rc#iiHfr3eJ+<9P?;Aggu>_VM;Az~M(T|bB89^BatS$2W4Fu02mf%Y7K z5Qg`0g2{l5EJgnLg6Zfz;sv}A_P1WG)Z!#?CHJBg;JJi*FQOCww>KlI*SjGtxKioG zEBLJGuGb+mFs*dAVW-Eouxq5~;}#?Ib{p96Sh6jAG>9JJL6|}GEqqo75(yn{z&dc$ zqxWU6@DWeHhAj648SgYS6;CTK$5Xiwn(7H5_(9kc?iyTRpc8;;+{Qj{GaeqW9G(c0 zhrz!N6)giNHTWEVIkI%}8?=Shmv^AgY`F8fi(E)lkr-kAfr(c$C?ce48GwU7 zZTd3*<*=zfSD;7@)6zONkNn$TFMa9H7j5Ag@rGBGz0{cME%~aL7!|X@X4nd?A%|>4 zLLQF?ACe{}UPa?sZ|*kpHSv&4WDa*13RLki8d_uv;XgltLdL#HB^tv;aq8(uOg|fq z6j_+?cpGd+wgc$dOU4umu;XpFfs@JTiDzrL;_*g4uz`>e3e~^(777&!fs&VJY&LKt zDY(Q!o^bTUvol=rOh!*!R?!$c$oSK@Tn$Vh_|m~tWCFxO0irQ*hEm2D!6g8hn!x$5 z(Mv9tXFeJWXD${_hFG4$ke0_&7-D&f(OBW@Sm9`_a5NSgY{bUYQ2Pxw=o2oy42Xbg z&%t`GE_S1&Kx#X9`gWV)qn1N99F34_w31L2TWGzJ{ofjz$(Co!)zy|aX7t1}H(YVA z#uAzlYHapjzJTHL&`%NcQ+aXa1`52rg62l@4XutoDE)Ofl zY5(~&2(yged+)-}qJk|4=}@BRc?FV@YbdK(-#uBl8=_M1=aQtb?pq^uD=5->W_7jKl;$b zUNp5An5lpn2wZBEY5513O{G5hGUHDn+QeVHwZa+pWA6|Nz&A$k9CyA84n8*W6^J+c zF&>jDe7uhl0nF43MW+c)Ff~XEX7;jEd(lkDaeCVj zJ8o#(Y0+QoPcZjzf(tf_FB-<_peKR(pMHyA%k=fPAX?ym{Rz0_AwC7Wen#{cl=_N9 z3G6tWAULysMg4s7{1q-+_cQt{CMZF$wf(xwL-E7w^=H}{NH8k6nI;ABKy#bFjY!D# zDPK?H1eV5H0)M0*Ct%01KawE+!L8_xpodFuko4RKon=pfuR8-bZ*G_q&I2L{xpCKhBcc2ah~nPHp@HG^2AZKY-O&f2z4nv@C$x32tgHjuSF}Sv0e1dqCwN64eRshFY_%Z+ zyr~$@3kr8DijTR3-wlv|pnw+`+@XWO4eG>^dJ?oX{vnO452|?dAL-H~TmfXT=Lg;p z%bq7u!H8yPSc3`%^gr?0pN2>{+mBWWo{fUvNYe~2hHG3tYs-EOHaBm`wM9=!bc8?d zzY`Kog1KttJm?zubLb$S6Z25ze`(@Iu0aF?h(-I2UKtsX5O;wWlKWWj(#{mn4OmiN zZ4(D>H4Mp&?z35-XU4sUKu|e=A9n;Hp2-_|B?ieQc;?iTkbSh|&0NPfLOZ!0ZwwZ& zBIxHh9boUF{B&Rh8M?b*;0vy|8$BFgCl5fXEY8arIAep={#XoWJOO?L$mYi4u>gh0 zM-!M{lmBPWhvL^6p3lk$zW8?Lxo@)nRt?g?RLS)@}c47qiqesLJnc{W7EH| z@GCZlOK$|L6HZWPJWR4Jr2YpdKFZg>0vjt-KMY)zK0PQ59%FL|b|)VP>vN#G!%0v8 z$^|jlZ2JM01!>`Ii|!$GdPua7^@J~WGx(JS*PPyg;O+R|*ptGZ;63c$$UBg>1)-M5 z3)D9N0R61tBmmW_5fZHgyCfdkl}qb?7vNpFn7dj@nMJULQm}>q8mEua2psZ4a;*S8 z1^c3>_%N|Tz%D}>M5_RQ%`OD03~x6a+ER|pEa26@bFfczmi=inj3V|hh~SIpqnA~t zqUWFlntRa3Fz}ooKmw@3Ry1S4;vDCR;eAsN)(HF&^V^XCMw$Vz)C44Cir5JJ-5ua) z7H_aebNKtQfWQL#@4*KcMVtdKh7^Io z1@araCG5&xv`cECW4poGqlBGLg1G~5YbM|k5W=(*>%kmDZv^g+VWwJ1pvk>h1TJrP zfdT(wSm)xou-#u23!1irMriQ`RCCdI_#oOu4uXp7CeVf2gdMklj{7F|BeV&IuD>DW z+(C5zoY9Xr(ew-G^NVQm7sf+_KmVmVfr6>I_9OUW0VZFK@)8K%dPBY5L5=8NofBepmXR)^;3 z6s%GzC1tKh{ZDw%uy#9^>(@ZTje1>iIjld0s0S8W!q>6F*RdvsSd-VWCWcrul+Ka6 zVE5}Pzai1`bim&g0%ggn^1?-e@z$l>U#xV2!tkgo$)!^Ik9xoJFvUEurVlYVN`t(M&>r z6#Ys9!p^LNdl94|Sa3iD@dvx0ht48IlNEYzJfFnT8&Nc$EwMz==WsOGU~Y~bU|UX& z>PajgM9Lu)H7M%2KRl5fnaG|MptT0Alyzt=H^KvJQ6FbdqFek=w`~0o^I_F>X3{rX zX#54AEd!^9fGPGDXl70T*Xp)#7RzYSmz%kuk^;P{Fg? z`i<@nvdx3WqmLY(HatxT zuIkmmmmb|#zN3CLh`>Y2{SMULw0(I8!Q5eK&1OX2B1Bv5`jQuG|G}DN@Nr}>T>PWb&%$>$9Xdjtya7Qf`-)lW{@#O6^>nq?4B>p4;UWIRmT{_&l z6^oZxi6Rsr4O&Fj6h^OC=g=d)Q7Hhd#E7I$z^Y03hN9cyo(R zoj4kVKmLS}RfpF%Q1!`mnVgP?v-~_tx_~0i8g*Y}doLTaG)$!1&Ft~yR?N@Ow623s=#b7Qe9EZiZ4ClFfF4!h;?)nf~Pd;uaxcr@D&&%MC*>%nDfFguIX9|7DD{Uo?4k$=M~pUnBn z;{La+@_PXCn+tSp=JxgQZES=M&t$xrnJoaup%JKze*iyt=Wql$B&fxFz< zeP?@H5_Tt03V%~KICj6@bh_gw&=WedU^FF}K~pY6{{p3V;e#-REqtBQs~_!yltt_d z60PpioA8(I51h&9qw(s!tcl=ed+vA44mO(9M+=-}LHlWJ%SQ8CGIQFYKZLR`x?b)! z<#HDA@i}}R4Fd`(3&-<-cY~U{Mr`@)Qw%Ly4_ufA0BWg64bYIGo4bZTl0r@exp&yM z3pWc8WPq&0;Fy_((0KyvVPHgUfQ*m@e)Xf-(8(_J<^PiNJUU5&p?4Ml>SPgYb{DD7 z;KM3Y%awqNyP$~wmFC;{8&aUeB=nz- zOoW#Fyt(myV`pvHz3|$Id%Ame($jEl@vP~KM;n@|tG(~F*M~R#+$8$(sU3g_&LJx% z^9}46_AUM>qvjYeYV>abqXy3rY}&c4_ZB_Mc(jqL=gmK@kP^&=-KMcC(W8a_&ObCB|Mg83 z^~XjjL2pGi-Qzca8Pe1veTQ}mMDM-D+Xm9p52o`uPZ9)vzZ}q89xs|Zm*~Y-=L90< zs>%7-kz6>M{chv7vwT$gA$fPS4euY?1m3=nvmXCx2y|r!c~hVbOI6UToI7^_7fwHy zeAGCPFS4~;6ACH0CICC67v#M|i@;L|PuTQqG#JKHHT`M`;#BZve6Mj4G(p;p4z#)) z%`4Y+o~iUKw;1Y0bF0x?)i+v=DHJ>l&n55{0 z$hf`f>r;0n3%|kB1lWe-!2|%GAWF~_)fZ78rdQZBr=3peOcbIBe2l~(P=Mm*!QeIP zhCuZ5<8d*7Sd95FJpm2u(hj4cUY6}OX6LcrliN!EH0-yN2$hZQ>eyVR)r9NKgNZ9H#` zUakayPJG1_y|W$!m)15IP_#Dd{Y}v^C=mfb>QYERK!Q8^J2p$W1cU%q;#`82gTuf> zh9pMtP>9B3Lu|qFcszy2!JZ9`4WXC3JYjkV%rCQGk0j)l7UMx@^et?gMI%D6UjK|7 zo4xQm#G{bW{qO$FrY~5&2);iP8&R0IaOSvR7|f=vL>smYTA(KvL|`wok`y_CMfW8E zzQmRhXzY4C7J_;RUgC>%_+7yT7UV@v;3}Rauq%JPB^;0|VquUuW+;g58MI)HE&v-0 zY9#{IkkPX8i0`0sGr6+z3}w|D%Btp)xL}xZT)47a_@K7^!cf-W*MlSXOrfb>=lB%r z`85y$bU^{{LDhhT{5t&w%Qs~JPYneR^$!`LuP+$04Gzsgk4b*5uT z0tt|A&h zWV(_ZmOxXCNJf)G$`J`98iwmVa2wvU9*i6Bjz})>4V{al@+8;0h8xz8NHFKJHVoE` ztpoPI06*;&?>A0m4fqzwc}Vnt&0>Eg(Wm-WeGS`+Rt#Xp$i!jzVK4p^41iZ%U1&X# z`>DXd)fj*-GtKB48)nR&Wr4F7gZ{+v_)p-&o3LSMnm&wg7Kt`o)W2FW2$eg_B0!H)Z8qjyE^2 z{c{iba5v{bUbtucHw{WO`WH4!d}hd&i06Eqc_)B5&L5lbY!CXk_?LTCmui@`m5+`+ z6(h4By8qO|?m~`^bs~+_=Um877aGGw53I8PlbU^h0RD^GMl%E$GPGfh{(S-LoVg7D?E-S6{;tl4 z@H1j(o&xpsbL6nD6Td|H+i^aA$sYo*3B!{+M69dCj zfctZTtpSityu<+{y}O3fLAz{8CtiYf2}Yb8$l)oV&p(AfJjH?J0wAk^VGS!Q{Yu#h zr@+@WqCpsQ7dhM$u|>9sh<6GrB*#(|EWPeMjOyQ49e}0EV+Z zOo09bU)MMuiZi53gLG+-jOz~s8wNA2$(x{AEyxUqpv$0hTsd5KVZ-=1W_ag67iP7b z{!hvP5-yIw zDtJkTZ1*A8eNeUnm=HjV!*K*?KD{9k|A}J=1Vy~SDgs4<0Lu)uanFKjnFehUV>kop zF^D!iGwPpK7y(<|LQ6%s!hZ?e?+d1~FoE4FQ0aV+gbu0K=$_=~F#3WY!5^JGp&dQN&| znlgdWAbxOmNU#Q*5Q?Y>WhfPtA=2A;uR?H z0TXRnYI?ddRiTiFg(}j+v<&{!QVUkYOokd_#R^4OXdI(R15q7<#M(4%x&l?1D!~VP z)h*7tSPPbbkXNAqBjR)hAGA!5OH0#I@CbMq#HJ|VS??Jw<4wZLNo`tMS{z49nnElO zQ$ikPIs;;%6{I#LO$!!^#}S_n`A1_F$}l-cJtG2vpDl94PF#CvwTd*TnNkiW*f30?1MCLV zo4t+wJA3y?dwWZyrIjh2?0TDW#7ysf_3D;_SNDpyS;1p}vk`UOG%?p_+T`ctT5*3>l55W7SBa4RD6Sc>2FgMfOHQyOEDfMKgJJ3jIPG(OWztTm7J^p+T@k&C6uK zKI1C+>eWrIGOvE+CMHm|HaIOcR6MY^x)Q25Q6bI45S1Ponj#ZRgMy@tA^m8*g%Nf<{4Tg9|6eE{Yh-SqeCwETyiv*{cpT+I zySI1-%580VuPHB$ZO*I8Da|d&MW5sv0-$dSDtaCL&Bf)#&HWvsw42u~S(oPBz)1f^ zjf`Z-c+N$kM)2ffCNhpgM#7$Ez01LFejGN+#Kuq72~~nQ>txtijg5qW%V%PVi}>*{ zs$95vTG%F7c3N^F28|a25@ie?FIm5AoA7|(<~H5>csw5TkW4~)z&wnvJ_h3#tlLc@ zZ<9EPA9DgY*?f_OdDvwVd-7HO1oGntqE;}~<7dIW*?iGk<}<+S+$ZJe6Tvr#BC#_+ z5mEszii!D&jU*n&uRccH;hTNV4Tov$C&uhT_C5fT;TZ5z1IiJG`1=rlpNkF?fKeaB zE%a?!?}_7#yo6=;1r&P$sV^B1zs;T|gJrUya7|cpI8(R3aN7n7e}dlu@zzZEnS=TM zj7x>E#G{i_G^r_6jw~}+85SKDPVe37`T1wm8_vxe&d!&fxA&f*Q^Ug&lwuqPgIs_t zIDoP8FshHe@lbQQYFKS!BFPy3&v>1@F$~X=>LK;*uS_k zK9-|@vHegD^nvm4Uf>7qU9;fCA~7g7z5^C)3!YSefBp^=lR)5Udlq3}AW^{ev&PGi zCuo6va2}DJu!09^NN0E7g-5qKLH`al_g&7Hq7OxvS#uEAqVX3ybQ*PB45R$qcd{5y z9XIgfI_Ao$2c3UZ3%$Jq-40N8z1zRM)z#8dMn@+QULHq-_KN2p>+A;^YF%b^NeSJg zZB6M+67H1;_(;VPd5JEDiQ$JxQ~`mMeMMjeEqdD7*gljOofnnMB(`_Q_lXnJViUCM z3MS)Z?13jOUBiejNxu;|2W62HpS!v~pGcs-IP&># zu5~c>C?;~OwIgWC;1=k8(+o_1yY%ZT5Kjh&2_JD9Jd@e?!8w@X@$eWlWdvL;hdF7} zlXG&Z29L@kG{gr4hRfxQNa@rcu&Z&Cc*(|1OJf*O#A8jEGF~Y@;OgoK{QSou39@84 z{n8X>an<946^>`s^ywk=o2h826MN7G;!f}D*tY5L4o5X;oIqYhyj%>0Z$02(5B-0; zyaxS>z||Hw0IAJJ(;Eu2ziN1#joh-qG6s#c0pBfcVJDq;P}%%*JHj8$7i49q}*eWU65ymX9Y`d5K?~Dti7958t!MEkQ|?! zL?x>-71?xJc4B@3RWGaZ0S~3T-RAivL}Eg;CQ|GbmwG-fS(OkKXMG@bm-awjR9sYy zD#CA@m54Wv=ckQ{k5tD+S|@rCAIjElT15FL1*8Sj^5AG$I29frp^2blxPK~#A*;-9 z;rXIO6X6}afON0DE_o={<;7`onN`6^PCY%D*;oQvYUbn2(Uxp-%Hql&Zl3G=ErAgk@yy$TVCfbvEc44g z=1Or%W-oP_K#Pv@?6Aob(l4VYuv6UGn^%y*XcFV%6RG5ggvdx*9^xX|CEn$tOP4Vb zNs-YJR8(AyCJGduv5d?~&&bY}X9NX>h6V>`gyt|Gnm|-e)@W2n5Eli?Kek`7?~$45 z8JU^#bXl-mE|aB)W;1xHWmX!*DbquOVg8qCAr593Yf zSnmW50-d~5=n8!KhakP`l+pe3pwk23_U@MdGm-xHk%{Nor|b+qjBvSJS&;8iZU6g#YI<)5Thg0@ScDNj;U5@*>@8?o}aT8Kr-hO&@5)HnL$o-5rf} z?X4%>_U<`+)REB-S~?!C>uNjM(Asv=b>H5@t_NU@xRiSao#)5`nqZxHCF#`Z%hb({ zgUjqTZCSRz*uDNZU4LA+V=pyj?uP(4vF@{HPrG#e^%Zn|MR83VmvZS+NV(?Jwkwge z|53T4GX?V!)C6!&++fE69#tFVt^Tz%?3~HglSlXLJ?!SV-?^@%yRo*NqX}r)yANn_ zJlxRMb+WFNF}nfHw5{VDcd)4FMcaB3d(gICFo5u6dE~t-7w_I#ePIzJ!VA`ISnQU5 zOy|SFoLCX*Qr{#W@q)GMmMp%s{sAKzxp(=(-P+J9|6&IALGKfCU2#N-ScE%Fb~`o= z^tCqibhjPeVSnJz9!QJ3@vr1=$CCs75Z~2)Xovm&!+U{qAd77%u0i279yL`p?$tlm zyVkkYT&%G;*>tNJ&8w5tm(?Qz4*qp$UdxrvgUzCHfDdp6v-^`7In{|wE_ypXsVL=S zlJ#tXqdLIBnIij2By~J5 zxQu4&uacrjYbQhsvelU}8EPRm*9j`)+t(E>3n z=W_SVOJmZ<6M^yJVG1!=vMHid(qUF}icokXTcTj!;#@pSj3>_y^mkyqu`MBwi4IqY z(LFpwetqrg6PWQ#6i-%Noi%IasyQ^5ZO*k--_SKCt9A}tGTgk>H*obzpZ!|H&9yu2 zSA#?9aNa3!1v3p3KMUe=^J4SG`FXMG9O&8`Ko%O)V|4!%D?bIW)Wh$P`e*uQ>@&W; zwTEP5Sh+q1CND@;hgKnl_T>MP)PX%ndaAr4B?^h+$j%UdP_}Wk$_@_i4;Dv7tJRT= zn}mprRz*Zpo(!LRRGyR;#zZEoU<+PX+MA`LGknVSxKg3f3Rp{hPQmXS zUq$1$KvfP|9scUdFNNrxI{Mz_<}dE8FJ7l%4&$vPe%td?-%VmWY+QqOGEW7Azm+`t z@^|ko^od--wR#^1XAh@^(38x0fV$;FE??t)Si(5#E}ys|zJ9s1QOBH=tSMO`_Wgyd z%BwG`qd4(Tv;D~$N|%vaT1bZ{69@eKynQLrnD=-teTSW>6M;bzDUEmCg#!tVL)F0(nvJ;RaATT=ODbP`7>mhc0rx zybSFwf-x1n^BDFdZ5`-Y!|4W(M?UqU`wCQx-Xnj$(sG^=RVmtB3-%<^>iC-chOD+k z>(ZT-JGN1qT>Tuv6)_5hHY%&;LHaY%K%Ju$b5wv8+N-R!oV~ z?V8H!>i{_vKak`9!H< z<;FC|XjEPi5S+7ecWE$;}VzKs*>g+R2 z5t?}f&E5Az2*B0ekwMWg-U{uC0%HP+I)`;<){9-21j>D&|JXT6b}VtHr1`<6Ri(w% zWppmT#i7&takNk>0Ft&QxFoIW6XGC1+%~ssD<>c>sxq;(yh4a;`QdVfuRpcrPHY)H zyc+K(r{p%GZ{lO()$uXb)rab4gS6;Cq>J)6t>0Ho)+65I+Ek_Pcs%2BaK?cX3ZZ+A zB#*womJ}%z{gQf~y&Cdq=pSO6`JMK8?=yabYxvt{%>$bW&FfqA=h~O2$ zu}F~+6Pe=;GZlZ|oFjN{5uPawKJ$mWR$Q!Y$kZ_Fj<7Usd`%q}Wbot~l9ti%8JPPHW16zeO28=$H&LV#m5T)ukIF^SEH+D zPH1Pexikxp$0#LX)KSEnTMzq6#lp2@SxH`Df;v%^$T(&ns&#D@9t)BOxLuml&mgXO z^NWj0@`DSHdbX{e9*kb8Ab2&0IK35%p$(CkHt(6F1(m?Hm@>XDbG7HL(;p|qm( zL}gb&PeEa6aWRsXe_sKx6c7Gh4%~yp8cj_#CF1E!keLVKyIiL6XZ(=xV0k1Avk!Qc zjyr31i;o!kU_h9^e}JzLU*Id{isR6o?m>4#^ZAlcX`qzyFZKa`}u>1k~FZP zOi(ApB+?~5&BuOH35x`C6C5g?I)x&mcX@tMgu9o&_i?d8mXcZ0atBHACj4sX`Mq9;`x5>(nkNtuU%1ujiyoFG2YR>G`0iLLd%}aDYK~k z(LO2}y(o*&&qhZ`yq>=~G_432#^-ox2^k4VG_d|;eqsJHiYr$g8>6N~WkH#6E&4Zn z*%5Zhkx60U)KP4`!&fHHO3NxM(52IHeAs{5MQAgkGQ?a-Rn_G>P|N!hPpJ6597&6d zOAF!ccU7J!^^*=tYf6zrl?4*N?joY6@4xeH1KEX_5m7ZYs%qds@JzuKCcm=&G6S$q zS-~mtB-od4d8e|qrmu%;2)rXNro;053w-m0V5yoWKd$u`Z;4&x#o+k@5pS$e7aEu^ z75n@608f_?@FL@t336H+7M7?K`*<8b77-Vr31>9n;c-!7KZ&;|a7+>uj0(*8f~Zvm z`)eF%A5FLuaZGh2*pK3j3;kz88a4l&(UL`Ki%4&*- zF3ZzJCnv`wiStX!@-^ysHSElVJiF+mWL1(lApv&XjF0!RgR1GmB7VZ-%FfOfA@HQ% zjVdJE%e)IJC~Zn+X3142M;)EzpmrQdZfi1ozSX=B9}EeNlZI zGed9`?2~<`iM_q!6MPx;9kL^x_Dqq@67Tm((8!pqdjvYd&L+`%!BAR85j0|=Nm@p9 zbP|J$1n|m)nSTDMGDC^#m{_$~^zIm2yk2$>OT-G4Hig*@ zRT`!xg%IuLP3A_=&UP3*bAXkS&*-sDiLNkFouW!%R4K5}5m!}I7Nw z#wC|E9w6>Aqd1z}HExM+(4Z=FSb5(h2QT+mwTg>wDncrmR!Pe$Z%QT$hf%7e+6$y( zJUhQcCkF?QxzX0Xf}b?aRVBqRCh+WHqSVpRRHOzNF?3vXOq@y#Q;0(9ejk4T7M zL@VCs9f}DF@uZGbIM;d8qX-YH?W>v{nFWBX>vF*NW6YyAr#WPL(0EK05nU8hQbPS) z1ncALH2Rl}s(ha0LS+HBDka4l`aa3klfvk`lFcKmY zLY0(nsB$w{IrCKD2y6}MGWAAfT4qK{F*0B4sR))zfYGRQ#xPnGcr|#`1__gt8bu^j zSRvWH@qD8$H?f4i1jB_Sx7xEx49kfX85xPmS|*OKlb892P)d1-%okht*8*09(m5q5 zH93ifv0~+$nIc5n_hzmbEBzB@3yT*O$>n(!=PP6-p~V43b@_^--jeDP|03Y}f@$Kg zicEBK)3}R8Jdy{jSiT2`7x9@OBpWusVE6eip@*Z}&fV0J+$HHgbZS6>e^CHTBLZc5 zg`z+_7<&&83+4+X8M)GYaY1o$eo{w7@nM6MRM6+X+{b~xJIn+_m=!*C1 zyqznKi9JI?4#8T>h_@vnA|gIgEcN!1s^VheqJf_V6HH_TupgtN)iF^_aY@wIn?)2yb!%1s;AMD}AJ2Y}{83N~ zPD6`+7MGO7L>Dntcnp#0;gGgjjCmjXx*T9KeaM#XrFC!^L_V zQdU?HmKhfx8z;u=1)G(jzRJ)9=%}KxycH-KT_h#aV1?&eWL}(-k(pL`W2y@+TA_S* z9U4cLBExu;q!e*& zKeqOjg~*lA>6Pz>_?PMAum|5PZ*@eXu@XSSd3Pfy9*rsY>IB=BO%`Z(@4k+zmb7O7 zGk$Qa>U8K4O*yJS)gY{rB!*_uqKV~-tdztuCN51NnwY5IBD0bc%jh_`j8J5#`CiFU z*;$DhIyw#DSf<4C;5y52ogip0ugNK*vSq0<7~?0Z6uSDfx*F<-Ww$`Nl~}g)Beyiy ze5mcjHHwfZWf=G`fJggQ2eo_BqLnHIw#E)*nldakR4kDN`!S+OmBKGunWLa1!qt)R zp=g!5lI)85LVBp|Z0S(Zknh9zS=^6m5cbpyErIYN16eq_41AS)X{0f5MSS(+??u2tqrB@)T82zsN(2G12< zE6O&MZ>$tng-dl3u~Zp&)KIQ0TBd|GQ&zApBR?rUlO6~f2<(#xIqG*vw@BAYg`z1c z1)9OWPnH)2OZ^V{p74{UsNz#th|w;zU~v@jcVX~(M+3zm>NMTReY z-_Za^9g&_9|3pP4S($pYb zvS`aj@1H%```0BT>~lKH0hs-&;{Kk(nnuR0vD-_w_;vUOh{BP zlO9Q=7AKXKQ9o{YIIo7$MsEIq5Cc zl@#T}pHAZIEs^-bHy@EIsgjg5OY^JC{R&%3TFW~ss!zXq^(80gH&yV`wYr?3Ty<`! zv;cmc(n{%*?Bsk4bfPinWI(-FUR*^`W@1TfoMUX!KWxflXUNI48&YM4YW;zoz*9h!`N@>5OdXXY*9Ig*6qqyfc-1Mo%wnqPK%v92z>we=h_>aT zTcZdOZvdXi^HLCz$=T7V;=JsX)Kn%lDlsCA^4}A&n2vi)RL7;H6~lBW1S%8-H-p;5 zUtQ|$D`FP6;4uZ$6F^}DZkYfBLF%|yDJ&Eeq-5zzsA``wcQ`jxls?(=O<1zk=oP;}zF7Eo8djv;J>*bts2oH>baB+&#J&uW+ODx)( zT#%ZWoR-LhrDTWaiPJI@l3-MWir4}9+LlD9iaBK9Wvc_T+{OD2_#N`m$*RDvYz(v< zj~4*2H$jvnOV$iTa24V4{K7*OGD?~)ua7W9+46WHkzrw>lq55x0ix`Ia3L==Dk5A# zNekq)D%vZ;PZ~_Y%1Wb&jZFZ9Xc$PfwC5I(Nfr5{b$_T`0I#fr- zbr4t74bcIV|3>uz`d|mSPjFyUTtQw#!j(7%`GeqB*%r_(Y2#W_0V+8Shidi~!PGoj zLUc&5DnzWGY8e!wNeE$zT57xMnj{AT_kf|B=K=qaXFE5G3{4D8QKXbr_tdqP9XsOYBy|z8HI@POt}VwKTD-bl%iWdX zvhdI-;oJ~X7Nm)jG4X9N?cuE@2XY-!_X|bFK&HYD#>gr%u9X;wsZq$Oz(eZ2^x;<0 zQLy)LTyA=eb^!V_kGBGdnF8A5>SlFob~9H&Tj-JT2ee0voVhFRzCz_0rBHKMZ~<<* zEFm-jqUCWX5<@j5jj6R7L(_0~GY`ieI&1)^fkaj&COovSk@PG(R&u1cUDhUR2#ioD zLqo%aBNmo&(3gtR*5|fnwr9HdxO;ng3DM1mq<=uJt}rhLW;s(RZ!9lY-$%x^5dG>b zMHnS@j`5(6w2)2$Pv`jj)J$!E93!%_a($bgB{6v>73z zzP_G*5K1;$hN6E(3?PykP@jwHlL_w%oWs|L+pB;H*frFC{w8&O-aoFZH-7|1xCcqU$m$%vhyfHvE~nv$+fj=h(t!RpG6wrY>9YaDmE0Tjz( z7JLu8JOHPj*2tEeQbV9EX!cD!``R;bu6g4_f#}Zt1rS=ug_b{CiDxeZH#V~cOG|uL zJ#{1SyAOU5-0~*O;Nz}rv$p6ej6on-7&LRJepJ54#gc6p>yHV-jRxqcNR(6Bc-v?lD`2+hWDSA-l zu&#Wj7<|Nh0LEGNfHO|P>cRENhaTqLE=Mj;N|fnu*RblX}J>i!O0qF2~7KU2QDMx1tKmF z+!fXJu^)Mmg)Kx#aea7~xVS7n5xCg`=cM^LZso%7o9}*){zd(;^XJX&v|3Hn?b6!s zqA;^@{u)<075zII*`S%!&emOy1fG+Oty8fXy{2yCL&Q+M+JU-WS{+Ah-oJC&M}SXu z_v7ym(r%vfgPbEl11zetET&l8RiBatVoHWRL&gY@VEd^V_5u{zC2j9hGM9WEyLK7J< zv+44v4b;gq6~f3URYU}+fQIJffreWb@Uza`H}8+WXw);jOpB&8MYQSF^n zdt!T92kh`+{N9}J+;@q()Yx}6pHADKuvgF+lWcz`a460M18%Cd!}!=6DjdDPa4teKgKt?Ma*= zfc5-l!lNVL6tGSwLM6@7ge)4sI94Zbs@&fJmffFN4Pd}Pj1Zs|_>=wnH+rm&v<7Vq zdGoWc&>8gM9&QZT|MNGoKcQLeqMy6bLlPABxP8ZVP}l>);K&g;1IXJxx-X&8e!Q3j z0EFsrGzUaF=bc&)6wz_7#Ra*A z1qFdV-u{6AWcd`IF)1j3SpQsqKYxfV2rPuP@P(I&rj{cero($*egg+oa2HfyFX+Qf zk#6K88&sfw$JB5M-l{*c!LKg|ZHz$f*P^UjX1$rj2Z0~=IEY0}uqi;F*s%YJWozz2w7!PazsIFx_u9Y%STjqw#1twpVZ{fVq0EadEaKM+=SASgxt-2R%La0tw~+?qX2BP=hi>|Dzn^BocsA6Nyaxx@x56Bk&CgeAPa zQI3JGUb_aZ0;5lOM+Xk>vO4Z6JrKF~^F%9UaI8yOuuwF4jNKQBNqh1RRJdAi-;)qf z;+-39-E*eSt1YlA%35SOCb1m)!*Uz!Qb+!t6d#f#OO;zMS?yOIQXAE1Et>o8gf{ds zd3$xZJR(#TVm&b_u_3#*u-qB|48A6hBpl83)Lpq_l^&51nH3{!vdq+ECZ(rb{@lvT z@2KoZln_8z$>j8;jQGsoBdwy2$lUxrh1ebhuSt_+F~C!auwH$;TvwCTkYJ5w938(fl4-1yo;O6*gp~PP!;0DJ9=0JTMyfI+Ga|Isx33g|}$FIAde>3TZ5InR^<->DkDwZvtK}~!z?{~V}WXb09H*cOkcmMX8^($6vUbhtb ze`9kOyRYjkC|A{XBgbyz`vGJV;AFp*k4(jYes3y0gx+F01#64e#X_s>@ z6$v{9hro!jjDGkS88K`uno53oY26$K zX5V=m*Uz4};o_Gx5b@;V#fP*$_CxZswHHAPrnB$SxeH%CI=}8S?&h3z>*m9_`w-sw zAKmDSPUPARc8+L8-?zPA_WamqJUqCAboX-hbQ14BP<(*_!OMqeF`7?7M+KK)Vr)5O z$yCqe0l4|)(=mS;DelVPr+jgwEiZtBxkL-`}pzITi<_k)o$KrD;LfJJ*l>JUG)++ zvgcY4bjNNK-;Lf!i}rNv>qg2x(M!8wvvs6M-*+UA$^&0^m*X~H_XNz)$8<(2(gGnY$Nklzzkude8?F_GQn$4h!^gH;U^O z%S;`fbt-)wIKv6tk>-FV))Lrs`}P^L#XAo*e8Hf9-39E`&p^n8rfz?PjTSjLZuF*y zB#!M1|7kME_61_m!+ioo#ADil(XZ)d!S%*d^bRx^7e_g~Zo6-bS71|k<%?kIwxmSQ zFz?*X2ejE&=@KwVH>zNNFs?u`B%)?~gsqyqegM^TYDQHv{@^EclAY3y?ayQ`hjFQH zf9iH*Uxh35HrVe(_4g4e{CYiQ2PFjNp^CAFWxxc&%i;n}bt{t5s!bebLE0q5q*! zCkF~szc2j@S$zK-oPY4_e!>%jg4C)&dY?U+TvnD)E=FYU;)OHUd_H~d=Vzby>ALH> zpsViqz8ewU9o)gF`|sJtf4i_t$kURbhx0I5iRUd_R*4{lJ8Z;rgFo9QVcLU5czA?-cDqB^?x;Z?Z18=}N;bA4eq-X*rEX+~r0hS+0^4HQv9 zlp?(^Wnq`HEG%td8!Wvny?5!L*bCTVOQI$wF;UZub9ra;=6^1lH*foY-}8Lmv#{mf zxifRm%$+%N=A7T}Mpb!jQ#IKf?o_#9VWs3Ke%1M{qmSS_pYJy^U~ z_`ch^Et^_aUs@qbNl~WI$lKyj>NRgr(&YTaDK;rh@Fe%oNBecRDPJm4P-r;4KpcV3bAj+~E#t9C?(d5Ow-4MvY# z!l=4Z`i=16mB0WPuE9M#lLN2{FH@eK&clO(YD0eY$=)saRRisz@R0|{^O0jdgz%gIq?PSV4nBaEP+oq<`ua*^ZB12> zho^6#w+O8R7&pK~oXJ_uF<};cXEkT}o`|4e5qT0!jHY!KN@gnRws7Xh$EU=;|JmFX=-rb3VnsUc7(i%aH zztNk9jZco9mw%u)n7Xp!;3lUKoMrP(<{+av)*O6`jRKp(3CRgBhy&3~DdJ%DG?L(Q zIJncot30Td{s-KoEfjPDBG@I#9@)M&;74G`fo?Qjl^1$&200` zdC@%V=Zoe!k#5a44|C649Azjf%FQV($c+vQi;}RRLHK1#EXe_U>j`k{g$6@mp+O?1 zN%opBNi=+$IK{{@by=|DbiuJINLI9LcEb17BzRhQr&%^m;JU1jxsbyRgy zb$(4mWmom7>aOaDntb>jRSlcJMN9%9#3~Au1qMN#s!Cf&p8@m`R~~8hDeSVY+<)`= z+a&A?0c2A+XstyGkF>MpIBz0$@yG$$6qiH9+l=IU0KwqcxwH|-c_i;s+a!ovHrb-t zr&d0@d1@t^aPt(G+&e|K+61v=>D=`EwEO}=bz*f~4ULMpao&kOK7#PHi1Y~h7G4an z0Je6fx4Ct7L>>C>D33JBrkKdh6tl|Hw2FHirUmzUg0behdlL8>PNK@{2~^E3^Mrmp zJ*Bd>N>O>aa-%4^7iV zi0bqOc?E*cdE;BU%|$KE!}#ZE+glE|ifLtvQYl!<3onSMlhJVzp~?P2xGXs-FSuln zDhzOkxHnFg7gUSFt4;>ofT@J5Dk|yEE9K+w7*C-1O-oaY&@0Q%Z{Hv|;OFlfNtXoM z=d2Wdz{C*KBMZwh!|e3zmsl@aLayKl)osOS6l3@BMQ~s2EeoI zl7y*6*y1TQJXm8t=x%TCJqXk$X0LHDIqd-cjye|6k?&kUSpLR#wX!PoQhrutQaPFi zaabK<#1of`(Q9I>-m1oGePwQ`aa!dce>`IMVBlH(dSX)!?VS(^)ws3ko0%S)G}t7Q&8#GF>FMU+DP} zc#0+oNQj7baU|a6p*sw~xJy%Fq=MB)9buIIVBT6+k5XTuYx;piFOgEdCtfa$iEPfx z(dlyxqWZ?7qSA_rn)D1!byl&i^kRnAXdM@?R3?Ztm%iFgpoxcju+?(Gs)O6z7SXtt z3&T#TfaFh{a_aMT-5?!bTpC+0Jl#JqDq^cp9$y-hOOpfUeB5tZM4{h3@$X#p+j)v5 ztayWCTU17%A#NHM=tu8R=MB|)Re~akJ|aveiIQfV(&X>M-xadC0?b`#-ErUNgeM{Zi(&FrL5z9-HH9Bc^nz&~=yC3dVRhq*f;NC@xZ z`omz8%C(drZUvg+(q0bAQ6E@6`o%Tk&VN;po`BwTv;5e&a`d>GG$ZJIjpZOeH4f++#`z88?Vzy0(8xalAxry$_LlXP5_nw%)fDLl;mThtDEIQl+;KJL zMYABclFR5BkSxqNeB~^pF3r99*>HDmrGtq8<)pH<1?oTx*d0flk z&u5h!nyt>brbF6IoC5IqZZCuff&-yF7Z@w7*wrJfuvRjy)PE@uq&4LArxNj}`oJm< zP>tj{tlqH1oM6=kZwP4pPkF)^J>@T%vdRQ{tsc3-JAMthvZ@4{^j_o7$g&GrZfew5 zlfS7T)J#W#LI5ySPgO21#5_jw2);JDv=alca2s$wPyCmHfh{4$z{>q_UIjV^4``3r zAK$|d&^35$u4^qIyIt7+f6e^lZ;e?n_v1U<=hOd-xj*rCnYJgptPjn6!p{Bnm3~#{ zj1SAtRgs@{B8RE}bFNNKw}vU*U98HKi7K>Zxy6F}y!zaZmeZgFY->N<6afU3zHQN3 z1@Ny2DZKw}{%5`zrP!G{K9WC=yWF9??C^`3c@9_p=gfTUm_EObotazYZ7I$0sBD-o z%^ivu5(20C*OYzD;9#Tuptt=FcP`AXr0qsD&9s%ub9GWX37wqcBM-qw=SF7!v@7QS zcI-9w*g|(`K7!;YJ%1!bp)VeZO67}3f}No6qL(h9Ie_unDIPd}4j62#dIxf<^=Be` zo;)l9&+~d;7g)nV#5V~m0L?_O`fh?odJ_^mAWWT zCsOMROLZ!KVs34C3+OiHob%OvSM({_$$B;L4bGoUoCz1%TZ4)DW|H+1a^SdFgzBKa@~v2&+{jCnY6`LPLne#3W^sFg{V0 zm5~NJ%A%rTA}uXLl_eaX9q*n3VydXW=0-z}FU*cWQ&n2+SCdmsemj%d1Vd+of2$wN z=|9X-p>b%%B0A#fin%4yDr?Be*K)FwXD9f zm6qfXo172qb6)eS-7>*mPj6Q@8g)ifXBsZC$-X=*Xw{cDjwjpsAIU6HDgX%ZLqCvN{LaBFvCHGx0 za*&TAN@pCI(M*s}BZ5EQ0*HHnM7I62;E3jTj=WPEaq=?)04MsmOSj|)|JwZPk^ItS z0O{C|Uge$qs5Jk`!{&#<`P)B&&3j}G@b{TvJ-tY*9~k}Q^ss)oR|XDex5QSrdeNj? zYtNn15A~8yucKe!)b(kQi2gmm|KMs*Yb1w6VA2jz)$LWVj~ zFDx+>l;{*1d6uXqqgFikGr=ijB?8Oca578ZQ-u z6i7<4b*juP+AAYFz#uf_l!N0qNK2ljQ|JLDA||Eqm%`#gbYBc{ILbn+-a<57bUz>2 z7T+!)KfBA=P6db4LY})gOCu2}mB;51hfC_hdW3r!@avrdAQ?zvFcyIOl}#Ep=j}fl z;SwZbX5e)cp0XCU+oBACS%Jz3n>6n6A4*$On}XVHU?cVwINQU0A5VG!3@%;Y^14d$ zYYO6vB}NhUgD}){nByFT=0px7`fxBoR@)x9MHI@Siu{FvLBU7C08n81fI5RFv)`^`0ltR5ffb9^Zu~B8Piqz8!vR z8kskMr*g^t149;M!9be@97SztHgIEr4p3(o5gU=p(on zEC_AE>ul|87jz%3+3OJ; z6A(mK`4TXqXBP-d4bed!`<*v#h0Un(53Qxk2Yfu*mi?U@A zY+A8I;zS>Yr1MW0qC>Fqyuqe*a=!~IBlkL;B} z@zFB2co`I*4)@o8y1Ly5&DjW`d~Xv+0I0Fud^@*kI4eh;lbHj3QW>QTjuQOyo<47B z?;6iAMm6mZ&WAG2^V_=1-qu|<-@A}+GTc^gN6qm;w=!pGd~%{pr0OMp=)yCBJl%|o5zEp!C79dGubgCM>}wwy+` zoW}9`zeOEut{E8cDs_$wiH(dFolYw&suCJ<<6*Mr8{D?=9CeV;_xCw>Sar{j`m9Mu-g*Z0UCsIa7$_ueA#Mfq+K(S`oTdoVmS zT9Qx}Z4{X(c~ko!Jl9*5fu<05GdF%WdAvAJ5{Bi zw?4jxMnQSA>K#iWv&X!;sWVRreNkpXp`bXSR9Zy8gO*~!M`$KaD)dSTN(;Bar=0-z z2siK!hiSA?B4yI48N{K|#;|@N0ENCv71o0cwfr=7CPqmF2im0rG-Fjsy^E~~GW$Dt@A-k(TV7JDPXxoTD6*Wu zHeB=`vxGVn>~xo?iVVpK6MBn-JjJ3&ze~VsK+ZWBh~A5Y@jxO$g5UBY(LwadS602> zA*~*Lns?$W@=InO*pVI40(k91d+`FGdUAx3w#J2U1UNWpz@u^x%B_qP9lDa5 zP9*3I3FSiM^aj9^*Hg-zl-%gj+2|wd?*=YlKB0+HNhAV^A|_5kyR0Tm)~JiR2#r#e zZ#2{j?<%>{1ZkWkXfFQ9`p_Ecz%n9)>+Y+Dw$Vc*OYKSDJY<&B0r(zebE)jG^oTe? zNOv;@Pl$ybdsT-o!vu=7FYB?N{O1%*f6W+I&Oj1g7q&<9j)k8A;*0~7 z?@7Wl#Bt|x;ez#}4^LP1^jC;Rcq;=}uEgfxOZW9GL_av&F;owDhIlLUCe`2E+}nGk zdC%U%M;sknj`YC@(gEB-lK|LqpV?S7_{RM60N@M@zz60wW6k>0bij{EXwE-VBEik) zPCIP+rPIc$*#pmAae%t%g)`3cbGLy!3{L{*o=H5@GLtpM%(Eazm}OI;fJwL&6zzY> z`$eIQIdpYM_g5nVbIJVO!PG2KWCZ{=dE+XKvw0n*_%UPTQsv$&|mLReIsno%lZ zCi0R(LX*RUq{BZJTR7~C6+=Y+wi6D#0n^JA>3|A(kXDtEq7vc~o+1%gg~t<;+ny)2 zd^Tnw?qc%?oL(Eqotece>g?0^|N5EdFE5G!sNWZb%v@DJL-?W$mlF=ZUxLY69SiGk z=AanO6%UFVL3!R>!7QmFJJ1B+a#JO0QZq7c+_XkQ@IL@h`QYG0Ph+5sF|a{ZTFNdM z0L>b|UJ}wEFE`p4%j6BgrFi@(Y_Fy&i!z$2%MPhnFT4JIN>mULlz6lu$n+ks@GexDcNlR;UjSqtuGD~pe6WqK-kWpEgNh(Fg zyhqlGjKp+#!r~>?VcGyiWJE+{QlKVm`EqN>BR)gHN9nM*jE;^{NOjS=)V#br^ga6C zy6Ff35A7kUsfmEQgS*L*WJqLE8(DNzYD69%Zv^9^n;Yvj*v#U$FO>d_vieYHj}^-5 zZ8%xgOEO~%Pyq!2K^bzz>ok zDr;FW9m}Z$!jjYb`nPV{w+Bqnj6;J&Kxt(6$~WNVxzLKzXebI`h_ zPv4zfcp%?8IU?RW(8Cr@um&HQsADkUy?PKw;#gomip8&X9s^jtI2`o`p5WgcUzeO~ zb09n^OuxTnug#8~VqHXPT%3(WqV*~dC=aNW<>vCqaE(Tp7h7=Rq;>zHE?Kd%pvyWU z&0FnWjwU{{MrO80{EsF?CfgM5FITo}``T>C&cWTW;YpF&Sex9aT3vZLU(S?KrkN%| zl!0+z_7M0!Hc*ifxE|Gh=0%`NJWA!|J)SL*0DUD<6vns@c#muxIU?>VM7H1+d~x@1 zSo@il!+%Aav_iDWTy}p0Vo=(;n*F=?pCL=Z4}K*xo$}5O(iaJejCrS3G=7CgDib&x zqwGSR1fK2DZ5nlIs)lycN;KJmf+pQDEe)LO%8i^oQ4V450*@A16CJ9HQR@Ub<=T23 z4W8i2H#n}5N5cFB@##qrZ44U)v?0%^tI+T_@#50da-C2Q;dY`Mykj|SIrRdgpWcf$ zB&uWM1=6rse_*y%PLZWvCkAo{3u*-QhYYTCQCv=f6!tdwGHGC(S1kP{kIXW+J8d|f z-zune%sEO!kfK7EmyidezceV`GmcJ$SroQLQ&?JBJxvao+i9gu^4jF$Wb1Tpxt?8w zrBCGKukZ4UjZq}T&}7y`PFl1iHA)EE{wZ`dj}=ad+EDygL`sk$tR#*;%3Bd{=etwj z+8HvOm6ehT!7@r#jA$|yE7xlwTXPO6@o|xn>bPvtMa)<*Yv9ckyn%XZ;uF}L%Z$Jt z!He&f==~Jr1@UV=XrYziEc)sM8GaM6LVwKaLDWrQk9zOUBGKCNx}84@5&zunM~GPb z6sF{?**F@%mm~rf4JTYj0nGCf81l)^HoSxw#i+$Z{5cqtUR&lIuI2(DtTe&+>bj9tiAkxSweh5ym8^>wGAE(0hLkLUDMqQ z-{rS)iymcEUhS;RZ76SOxP008Rf3w2&qh<*oVtfkcXyv2?snR?-D&?0m>RdIfVMFa zP5cQh8WH!SiSYeREA-l>-+&Cp`ZqN7A{jP-yjv*P4NA#S@yYgqfno4>ROBStsO<Lb9wV4@d8Od2T!B>;A6d4IgHp?UB8o4Gx zW7B*oBU7n@8DLANJR>m$W&o(ro*m$CpaRFq`0GTLQjrlaT*Zx70F(+;DBdnQ2^2)R zjl-})B~OtnY_=Sf1Kvow+@^U02ro_^XR|6dK0Q&9oM02YIyoUtk)^P?>|sb6v9N82K?j2S-abA zZ~j(jEYHxFixjcRz#;Bbd-zx^oq@k2pt`YY2*G0hW=<-yj`&qJHdR(PH&*$$iQtsG zuOCF)rmRH=%(DR9+uT}^R}*7t;Cq0&TvoKv$qG)aJ+K%kpF4 zCCiiXQ^Qjt!Ue%fc+r5gA_L0?`-%(KL}(*);X3%&^BI3^MfnFs1Nf)i6xW@G(#@ib z+VuLgrs~4VLSrEx?&!wWflplpCaA!%EgrsMVaQF?wR4u58Av_;wmKTLYQsLV#;`K*w8AhE0_8n z-m`7hHc?=qU!iwla$|CxqK0pJ8GlHvI_+?(MNm_ zU=i9z9rXGVaU(?4*)@jRyxOR0NmUFVb0fSzbQUV1qLszPm6f5ze!iihetyNFRe;p6 z5xw;-l`qYU$&*ILL`oxK_}MAh+4>Z{UVwGiskGv>qO_udxWf3tSeaZ3&d@TjZN|#^ z=WsS9jt!3wk54X4E=n%a$#n@jxmFJUU@79OV3{}v(8lxhc{;uv%)n132_$XP_gjX#%9XK-}5yEnu4sf@U*bhFt80AlynD# z{S2Y%FE<~%hiI#+o6)~qZ*psvqRse~Gd(Sb+YdEg|2g_5>8s|TkM2{WCkKDkih8(Y zoth(`>#=BoKVO{fUu(?OX6tDE(Nh14fQs_sa(z8NMwc6F6xL=}6p9v9c-)ge=J#@E zXiwUY3ft?7TSepnHK!p2d~?~H_emW>i$p$&PW_1&`J}H#md7=yb=e?;C{Z-GS5w*0 zD{QL_bWIiY8;nhzf)lR2c5q=1=beo!@oX^J`o6*0$IZGpc;kuSd+*!ZPt%`n^Irb8 zV9vm*tc^73w~OP%MY9zfZ@we6b9LN#(CF4L5w)gP8ry_y@x7HEj#`nF8;dJdIj(h~?JzZuGB4-WmQK+AonyvyLm0$VX9e8RdW~MZe}SuN8nl9*jfTIvXIxhkPkIhRT5@_!TRXuyf_GPE4ek9P0`P4gT;1GVD@Zw%aax}>_l_>d` zx{9N~yMBhT0CASPqNxNv&_i9d4-DVgN}#xhROBG>fQ$d`K&=@dzT!T)N*TW_U(CX7 zrc!M_pX?)0HB~R?>D95Ed_fCCK7mK z3*Z;p9KQFjE2`j%9=HGqNlmrf2*6rlQt{@3K1jEPPy(PC17E`7C*Dk0ZXcV@mNC|*N}V${L1qEdhH**Wyev3+s}B-ne~S1qN>ow=oUHO_U(<|kDo#!9{Eg$KL+pTqduCv08wpg;lK&O z@$i1HRyw!5T2m|h{^rWJ=B`-rjtJLIoxAeZWuP6~&?0EgZYZv#i~O=ZjtCCNc!c@_g3RoB7nsr${^G)mXu=7&J*MKg z_a($VP8wxQ{5)Vs`wieItp_7|eOpAp1o>gsPQ%Uudss9Q33ZCLRslIIgV-uVBOQ@P zM0>g$<04*9(bGhH23# z!@S%l?;$JU1@lGgPT!6a{bu;$p5ZC~w&e7>4+X4{Xq*V}PRnyYh2VO~hLzQqquZ9l zejr@Tku3f&`VIbwlFA+#92&`qUT?p9Lo^IYzdBq*{uj|N7x#*hH7glt`0ba_)Jy2C zOXr8kCwCbYuui{_&p>1kD<5-YuHKomt6;B9X(=JEQ?#@QaPKtoi@Vqy7#ZN28rQuA zyM^{@qhzG?v&Vn9Uv6ndi>ReYhM9% z!Q;EhQYH9A*^a#P6R=M{xx3HD-uqMGWpLZ;t{$p6Gu|uauebX!R+N^V3f3ybS@Z4O zDnS3f8?=?W8aB9bxj?D}&_4R(B8N+N1iDmhnhwSgNx*r8&JT*wWO2!f7>F~xgnqt= z77YOn9L)8==#}~m`m~J@T+YpYL&BkmKED>x@#Bx@_H@sE^2;y(dB@}rvhK_-wnyYc zk2nN9!r57s0SH-077|Lp+5Ygsh!Y7jW>~|K**`fs{WN>mE~5I-9*_(czJWugp+ELt zyn7Bk1m&#qqJgbf_X(@>#}S8Z19VG8`G?+t34GM1vlHCjas^2pT*|MbHfBO|HiQzkMN&{CaNtsgWBa zmHaZ^y2{PB4-E6Yxh0Oqy$uHe6cNqXfM=}WBFm^5U$YT80$a9)mG{m;pJPkeed%lV z&5UWqn=PCUMhClzO5G3U>}O3^&z}$Lr`QaMx;t`88%4p5ozXqQbLRd5S^8j6Q+x68 z(}Gi>L+_oFfcBIfiW8f#ycSBJCDna39=HA+o8~1p9;1W?`m?Pr6GX{ z0pL;!_T_S)yhF}{gOP{)z3G6O$hJ;FM_y|MP)ahN-8;YO0(!p#y>(&ykwEh|T-pGX z2|r&VBW0-Z9x#Ue@*{dBQ&fsQFCouTF4-l+uVnu6CVCBe%x-@P&Ko$ryxc=W%hjhQlw}OOyH5TzhTAx@4`f{ zJoy&AlqY(^#V_SOeh-mC(~WbGH!CnG_Xd>73X!?N3K7bK@0Ls@69jYS@Yo;2X6VQ7 zsj=O+33QzI`<~mlaXEpH^M*mkLy~i2e_KOfXWs9xt-;cBgylN0@Z24NxOv1eL%&Wv zjq(Y7ui;XK;MS_>L&s>DUa8L(Xwx)lTKd`u&Ru_%n--e}(1S54F)|sw=fK9C6#{?# z2E8MF4(Ah=yHom^(*qOGpD{}mzymY+h7CU9AZ95!R3nQbh0co^8v z!q9%~NC0Q(e_XkXhc_U08wj=y=E37N56>YiS3@5B&OUg4!8^BGZ1oha+cCTYts}2- zPzV_FpNH3Z3ljxXZ!5X zVW{`Z1YUR$0n;&92wD!ocmO=#cX;G=$Y~FkP5d%gxq-yIpLq{V!9ByF!{kUIascda zE;k8Ktl&w2GA_F6A(VgYz5WD0@ycRMw2~V(YrvM{0{n%0DECDMc$Q` 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/@L6d+Tm(Q=!Mm6d16LhQBBzTPNq7$ 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�W!KZBg%vhcNK+2^D-b7)yV+VtcEd+ROs*gE#_ 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 Zp|Z|l|C)mhGFI1^?|v$d9Ik$p`X8+f1PTBE literal 0 HcmV?d00001 diff --git a/assets/fonts/SourceSerif4-Bold.ttf b/assets/fonts/SourceSerif4-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..c4159ff2a409d9224dfa97af4e5167817e91e833 GIT binary patch literal 271568 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

@xg}0KdFp>azmY2u~OAKj9eydY_{{ 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%0Ah19x)6 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 Rym<`an$9f)Pv6<1Z}D=cI6h)Fr}r7331T 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 z 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