mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-10-25 10:17:02 -06:00
The nine OFL faces in `assets/fonts` are compiled into every build of vectorcraft-text: 3.4 MB of the binary, about 1.6 MB of a gzipped wasm. An embedder that loads every font at run time with `FontDb::add_font` (a web app serving its own font catalogue, say) ships them twice and can't turn them off. - vectorcraft-text: `bundled-fonts`, a default feature, holds the `include_bytes!` list. Off, a database starts without them (craft-fonts and system fonts are unaffected) and text has no glyphs until a font is added, as when the bundled fonts fail to parse. - vectorcraft-engine: a `bundled-fonts` default feature forwards to it, so the apps and any embedder using the engine keep the fonts unless they build it with `default-features = false`. - The workspace declares vectorcraft-text without default features, so no library crate turns the fonts back on. The tests of cad, metafile and tools, which lay type out, ask for the feature in their dev-dependencies; the other crates' tests get it through testkit. `cargo test --workspace` builds with the fonts, as before. A new integration test, `without_bundled_fonts`, covers the configuration without them (`cargo test -p vectorcraft-text --no-default-features --test without_bundled_fonts`): the database starts without them, text in no font lays out with no glyphs, and a font added later is used and is the fallback for families the database lacks. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
52 lines
2.3 KiB
TOML
52 lines
2.3 KiB
TOML
[package]
|
|
name = "vectorcraft-text"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
description = "VectorCraft text: font database, shaping, layout, glyph outlines"
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[dependencies]
|
|
vectorcraft-geom = { workspace = true }
|
|
vectorcraft-doc = { workspace = true }
|
|
kurbo = { workspace = true }
|
|
skrifa = { workspace = true }
|
|
harfrust = { workspace = true }
|
|
log = { workspace = true }
|
|
# Font subsets for embedding (SVG @font-face); MIT OR Apache-2.0, already used by the PDF writer
|
|
# (which turns on `variable-fonts` too: named instances of variable fonts are instanced).
|
|
subsetter = { version = "0.2", default-features = false, features = ["variable-fonts"] }
|
|
unicode-bidi = "0.3.18"
|
|
unicode-general-category = "1"
|
|
unicode-script = "0.5"
|
|
# Word boundaries in scripts written without spaces between words (Thai, Lao, Khmer, Myanmar), where
|
|
# lines may break: ICU4X's line segmenter (Unicode-3.0, as icu_properties already in the build),
|
|
# with its dictionaries on the desktop and its far smaller LSTM models on the web.
|
|
icu_segmenter = "2.3"
|
|
# Grapheme clusters (a Thai consonant with its vowel and tone marks, an accented letter, an emoji
|
|
# sequence) for caret movement; MIT OR Apache-2.0, already in the build.
|
|
unicode-segmentation = "1.13"
|
|
# Builds a small variable font for tests (`test_fonts`; no font file is committed). MIT OR
|
|
# Apache-2.0, already in the build through subsetter.
|
|
write-fonts = { version = "0.48", optional = true }
|
|
|
|
[features]
|
|
default = ["bundled-fonts"]
|
|
# The OFL fonts of `assets/fonts` (Source Sans 3, Source Serif 4, Inter, JetBrains Mono) compiled
|
|
# in: 3.4 MB of the binary. Off, the font database starts without them (craft-fonts and system
|
|
# fonts are unaffected), for an embedder that adds its own with `FontDb::add_font` and would ship
|
|
# these twice. vectorcraft-engine turns it on by default (its `bundled-fonts` feature).
|
|
bundled-fonts = []
|
|
# `vectorcraft_text::test_fonts` for other crates' tests (dev-dependencies only).
|
|
test-fonts = ["dep:write-fonts"]
|
|
|
|
[dev-dependencies]
|
|
write-fonts = "0.48"
|
|
|
|
# Fonts registered with Windows outside its font folders ("install as shortcut", installers);
|
|
# MIT OR Apache-2.0, a safe wrapper of the registry API from the windows-rs project.
|
|
[target.'cfg(windows)'.dependencies]
|
|
windows-registry = "0.6"
|