Extracted the individual token parsing blocks from `lexLine` into dedicated helper functions (`tryLexDate`, `tryLexBaseNumber`, `tryLexDecimalNumber`, `tryLexDotNumber`, `tryLexXRef`, `tryLexWord`).
This improves readability and maintainability by keeping the core parsing loop concise while preserving the exact fallback logic and functionality of the lexer.
Co-authored-by: Horizontal42 <75383519+Horizontal42@users.noreply.github.com>
Besides ISO, the lexer now accepts D.M.YYYY / M/D/YYYY literals
(31.12.2024, 12/31/2024) with a round-trip validity check so
out-of-range components (2026-13-45, 32.13.2024) fall back to plain
arithmetic instead of silently rolling over to a nearby valid date —
that rollover bug affected ISO literals too, not just the new forms.
Day/month order for ambiguous literals and display layout both come
from a new dateFormat setting (system/iso/dmy/mdy); "system" resolves
once via Intl against the OS locale. Intl.DateTimeFormat instances
are now cached by options key instead of rebuilt on every render.
App-side wiring (settings UI, persistence) comes in a follow-up commit.
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.