mirror of
https://github.com/storytold/craft-libs.git
synced 2026-11-08 19:42:12 +00:00
craft-i18n's SCOWL rel-2026.02.25 dictionaries (en-us, en-gb -ise, en-ca) are embedded by build.rs and read per English: en-US, the British-spelling Englishes (en-AU, en-NZ, en-IE...) through en-GB, en-CA. Suggestions come from the run's own dictionary; a word is right when any of the three (or en-extra.txt) knows it, unless en-variants.txt marks it as the other dialect's. en-variants.txt stays: SCOWL's size-60 lists keep one spelling per dialect and Word accepts more (organize and organise in en-GB, judgement in en-US). English lookup order: dictionaries folder (the run's own English only), [installed English pack, craft-libs#485], embedded SCOWL, system Hunspell (own English only; not searched while SCOWL is embedded), the built-in Moby list. The embedded Moby list is no longer a spelling source (the built-in list is the same list); it stays for hyphenation. The dialect policy applies to every source. The affix engine gains COMPOUNDRULE (one-character flags, * and ?), ONLYINCOMPOUND and COMPOUNDMIN, which SCOWL uses for ordinals (21st, 112th). Hostile patterns are capped (64 rules, 32 tokens, 48-byte words) and checked by a memoised walk. load_english now reads them instead of ignoring them (and keeps ONLYINCOMPOUND stems as compound parts); only flag-based compounding and OCONV are still ignored for English. scowl::notice() exposes the SCOWL/Ispell/Titze notice for About. Embedded Language data grows by 1,542,396 bytes. CI pins craft-i18n#109's merge commit efb1127. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FypgCX8LsYYE8fsj4byBm2
62 lines
2.3 KiB
YAML
62 lines
2.3 KiB
YAML
name: Proofing
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
paths: ["crates/proof/**", "Cargo.toml", "Cargo.lock", ".github/workflows/proof.yml"]
|
|
pull_request:
|
|
paths: ["crates/proof/**", "Cargo.toml", "Cargo.lock", ".github/workflows/proof.yml"]
|
|
workflow_dispatch:
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
concurrency:
|
|
group: craft-proof-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
check:
|
|
timeout-minutes: 20
|
|
name: Proofing lint, tests with and without Language data, WASM
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
persist-credentials: false
|
|
# The Language data (craft-i18n `language-data/`), embedded by crates/proof/build.rs.
|
|
# Pinned to storytold/craft-i18n#109's merge commit (the SCOWL dictionaries, CP2.1).
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
repository: storytold/craft-i18n
|
|
ref: efb1127ac65b238ccfe7df1893f33e91b924b96e
|
|
path: craft-i18n
|
|
persist-credentials: false
|
|
- uses: dtolnay/rust-toolchain@b725eda525362e7cf34af9a7243cac1e3f01a7ec # stable
|
|
with:
|
|
components: rustfmt, clippy
|
|
targets: wasm32-unknown-unknown
|
|
- uses: Swatinem/rust-cache@d1527c8f67ef9af357290475d4af4b0fab8f12e0 # v2.9.3
|
|
with:
|
|
key: craft-proof
|
|
- run: cargo fmt -p craft-proof --check
|
|
- name: Without Language data (a fork, docs.rs, offline)
|
|
run: |
|
|
cargo clippy -p craft-proof --all-targets --locked -- -D warnings
|
|
cargo test -p craft-proof --locked
|
|
cargo check -p craft-proof --locked --target wasm32-unknown-unknown
|
|
- name: A release without Language data fails
|
|
run: |
|
|
if CRAFT_I18N_REQUIRED=1 cargo check -p craft-proof --locked 2>build.log; then
|
|
echo "::error::CRAFT_I18N_REQUIRED=1 without CRAFT_I18N_DIR built"; exit 1
|
|
fi
|
|
grep -q "CRAFT_I18N_REQUIRED=1 but CRAFT_I18N_DIR is unset" build.log
|
|
- name: With Language data
|
|
env:
|
|
CRAFT_I18N_DIR: ${{ github.workspace }}/craft-i18n
|
|
CRAFT_I18N_REQUIRED: "1"
|
|
run: |
|
|
cargo clippy -p craft-proof --all-targets --locked -- -D warnings
|
|
cargo test -p craft-proof --locked
|
|
cargo check -p craft-proof --locked --target wasm32-unknown-unknown
|