French spelling dictionary ========================== The word list in `fr.dic.gz` and the suggestion directives in `fr.aff` are derived from the Dicollecte / Grammalecte Hunspell dictionary for French (`fr.aff` / `fr.dic`), as packaged by Debian/Ubuntu in `hunspell-fr-comprehensive`. Copyright (C) 2007-2018 the Dicollecte contributors (full list at https://grammalecte.net/members.php?prj=fr) Dictionary author: Olivier R. License: MPL-2.0 This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. Upstream: https://grammalecte.net/home.php?prj=fr Which of the three ------------------ Debian packages this dictionary three ways, by how it treats the 1990 spelling reform: `hunspell-fr-classical` (traditional spellings), `hunspell-fr-revised` (reform spellings) and `hunspell-fr-comprehensive` (both). Petal ships the **comprehensive** one, because Petal never corrects her French — the only thing this dictionary can do is underline something, and *coût* and *cout* are both correct French. The regional packages (`fr_FR`, `fr_CA`, `fr_BE`, `fr_CH`, `fr_LU`, `fr_MC`) are all symlinks to the same word list, so there is no regional choice being made here. What Petal changed ------------------ `scripts/build_hunspell_dictionary.py` applies the upstream affix rules ahead of time — Hunspell's PFX/SFX expansion run once at build time instead of once per browser — and writes the resulting 473,326 surface forms as a flat word list. The shipped `.aff` keeps only upstream's TRY/KEY/REP/MAP/WORDCHARS lines, which shape *corrections* rather than membership. One thing about membership did change, and it is reversible at lookup rather than lost: the elided forms (`l'arbre`, `qu'elle`, `jusqu'ici`) are **not** in the word list. Expanding them costs 8.25 MB gzipped against 1.19 MB, and they are not new words — they are thirteen clitics glued to words already present — so `withElision` in `web/src/hooks/useSpellChecker.ts` splits the token and checks the remainder instead. Stems that carry an apostrophe of their own (`aujourd'hui`, `quelqu'un`, `presqu'île`, `prud'homme`) are kept verbatim.