CONFIG_ZMK_JAVELIN_STENO_DICT choices:
- PLOVER (default) — downloads openstenoproject/plover main.json
- LAPWING — downloads lapwing-base + lapwing-commands + lapwing-numbers
- NONE — no auto-download, upload via USB or provide custom binary
Set in corne.conf: CONFIG_ZMK_JAVELIN_STENO_DICT_LAPWING=y
CMake configure:
1. Check for pre-compiled dicts/steno_dict.bin (or JAVELIN_DICT_BIN)
2. If missing, download Plover main.json from openstenoproject/plover
3. Run compile_dict.py to produce JSC4 binary
4. Embed via dict_embed.S
Downloaded JSON cached in dicts_src/ — persists across builds via
GH Actions west module cache. Only re-downloads if cache evicted.
- engine_init.cc: user dict (16KB RAM-backed) added to dict stack as
highest priority. Console commands registered (list/enable/disable/
toggle dicts, lookup, add/remove translations, template values).
Undo stroke (*) already handled by StenoEngine::Process().
- zmk_console_shim.cc: route Javelin console output to ZMK logging
(line-buffered, LOG_INF per line). Enables debug visibility.
All Phase 4 features (undo, user dict, add_translation mode, console
mode, orthography engine, all processor types) are already compiled
from Javelin source — this commit wires them into the init path.
Orthography rules: empty for now (suffix folding disabled).
Full orthography requires separate data in the binary — planned for
dict compiler enhancement.
- engine_init.cc: loads StenoDictionaryCollection from embedded binary,
validates JSC4 magic + timestamp, constructs dict list + full processor
pipeline (Repeat → AllUp → JeffModifiers → Engine)
- dict_embed.S: embeds compiled dict binary via .incbin directive.
Falls back to null placeholder if no dict available
- CMakeLists.txt: dict binary discovery (dicts/steno_dict.bin or
JAVELIN_DICT_BIN cmake var), assembly embedding
- tools/dict_compiler/compile_dict.py: stroke parser + skeleton compiler.
Full JSC4 binary format not yet implemented — for now, use Javelin
web tool (lim.au) to generate dict binary
- dicts/: directory for compiled dictionary binaries
Dict compiler is the remaining gap — JSC4 format requires exact XIP
pointer layout matching Javelin's C++ struct casting.