Phase 3: dictionary loading pipeline + binary embedding

- 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.
This commit is contained in:
afiqzudinhadi 2026-06-22 21:26:23 +08:00
parent d4dc836b52
commit 1751171667
6 changed files with 411 additions and 46 deletions

View file

@ -7,14 +7,13 @@ extern "C" {
void zmk_javelin_steno_init(void);
void zmk_javelin_steno_process_key(int steno_key_index, bool is_press);
// Linker symbols for the embedded dictionary binary
extern const uint8_t _javelin_dict_start[];
extern const uint8_t _javelin_dict_end[];
#ifdef __cplusplus
}
class StenoDictionary;
struct StenoOrthography;
// Complete engine initialization with loaded dictionary.
// Called from dictionary loading code once flash data is validated.
void zmk_javelin_steno_init_engine(StenoDictionary &dictionary,
const StenoOrthography &orthography);
#endif