Writer power-ups (Phase 11), plus the selection-bubble vs copy/paste fix. - Find & Replace (Ctrl/Cmd+F): SearchHighlight decoration extension + FindReplace bar (match-case, replace-all back-to-front, scroll without popping the selection bubble). - Read-aloud (Web Speech, offline) on the word card and selection bubble. - Keyboard/touch access to the ESL helpers: Ctrl/Cmd+D look up word at caret, Ctrl/Cmd+J rewrite selection, touch long-press lookup. Refactored the right-click handler into a shared openWordLookup(pos). - Whole-corpus backup: GET /api/docs/export-all zips every doc (md/docx), de-dupes filenames, dated name; sidebar download links. TestExportAll. - Smart typography input rules (curly quotes/em-dash/ellipsis), ASCII-only so CJK is untouched. - Duplicate doc, sidebar sort (Recent/Title/Longest), toolbar outline popover. - English phonetic (chosen over pinyin for an English learner): ECDICT-built phonetic.json.gz (46,579 words) + Result.Phonetic + WordCard IPA line; scripts/build_phonetic.py (full build + --seed fallback). - Selection bubble no longer blocks copy/paste: deferred to pointer-up and made click-through except on its buttons. Claude-Session: https://claude.ai/code/session_016Yr6jELuRc7hyzYLccQKZd
39 lines
1.7 KiB
Go
39 lines
1.7 KiB
Go
// Package lexicon serves offline word lookups — a Chinese gloss, a definition,
|
|
// and a list of synonyms for a single word — from public datasets compiled into
|
|
// the binary. Definitions come from the Wordset dictionary (modern, concise
|
|
// glosses with a part of speech and example, which read kindly for an ESL
|
|
// writer); synonyms come from the Moby Thesaurus; the Chinese gloss comes from
|
|
// ECDICT. All are gzipped JSON, decompressed lazily on first use so a writer who
|
|
// never looks up a word pays nothing.
|
|
package lexicon
|
|
|
|
import _ "embed"
|
|
|
|
// definitionsGz is the gzipped Wordset definitions map: word → [[pos, def,
|
|
// example], …], lowercase keys. Built by the data-prep step (see commit notes).
|
|
//
|
|
//go:embed data/definitions.json.gz
|
|
var definitionsGz []byte
|
|
|
|
// synonymsGz is the gzipped Moby thesaurus map: headword → [synonym, …],
|
|
// lowercase keys, capped per word to keep the popover (and the binary) small.
|
|
//
|
|
//go:embed data/synonyms.json.gz
|
|
var synonymsGz []byte
|
|
|
|
// glossGz is the gzipped English→Chinese gloss map: word → 中文 gloss, lowercase
|
|
// keys. Built from ECDICT (scripts/build_gloss.py), filtered to common words so
|
|
// an ESL writer who speaks Mandarin gets an instant translation on hover/lookup.
|
|
//
|
|
//go:embed data/gloss.json.gz
|
|
var glossGz []byte
|
|
|
|
// phoneticGz is the gzipped English-phonetic map: word → IPA, lowercase keys.
|
|
// Built from ECDICT's phonetic column (scripts/build_phonetic.py). Shown beside
|
|
// the read-aloud button so the writer — a Mandarin speaker learning English —
|
|
// can see how to say the word. Ships with a small common-word seed; a full build
|
|
// broadens coverage.
|
|
//
|
|
//go:embed data/phonetic.json.gz
|
|
var phoneticGz []byte
|