Replaced the `.join(" ")` array concatenations in the registry's phrase deduplication logic with an element-wise comparison using `.every()`. The previous logic repeatedly allocated new strings and iterated through arrays for every element in the collision list, leading to redundant memory allocations during registry creation. This change reduces the average time to execute `buildRegistry()` across 5 iterations from ~864ms to ~304ms, representing an ~65% performance improvement.
Co-authored-by: Horizontal42 <75383519+Horizontal42@users.noreply.github.com>
The 290-line function is now registerCoreVocab / registerUnits /
registerAreaVolume / registerCurrencies / registerExtraUnits /
registerCrypto / registerCompletions, called in the same order —
phrase-collision priority depends on that order, unchanged. Pure
reorganization, no behavior change.
- vocab: EN+RU aliases for abs/log/ln/round; RU already had sqrt/cbrt
- engine: "half"/"a half"/"one half"/"половина" → 0.5; "one and a half"/"полтора"/"полторы" → 1.5 as named constants; widen const union in parser/tokenizer/evaluator/registry
- export: ⤓ button in statusbar dropdown — copy sheet, save .sum, export .txt, print/PDF; write_text_file Tauri command; print media CSS hides chrome
Write plain text, get live results per line. English + Russian, units,
live currency rates with crypto, percents, dates and timezones, bitwise
ops, variables and sheet totals. Tauri 2 + TypeScript engine +
CodeMirror 6; daily backups and a deleted-sheets bin.
Inspired by Numi for macOS (numi.app); built from scratch for Windows.