mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-13 20:29:24 +00:00
This substantial refactor reorganizes the header data for sections in the Core LDML processor. The change was substantial because of assumptions made about the binary layout of sections. In order to make the code easier to maintain, safer, and more resilient to future changes, I opted to make a consistent helper for each section, and copy header data so that it could be transparently reused. The principal changes are: 1. Support the version field in the COMP_KMXPLUS_HEADER struct, and split it into COMP_KMXPLUS_HEADER_17 and COMP_KMXPLUS_HEADER_19 versions. 2. Establish a corresponding COMP_KMXPLUS_XXXX_Helper clas for each section. 3. Refactor the majority of rawData accesses into using helper functions, which reduces direct pointer manipulation and adds extra boundary checks. A special-case exists for BKSP - it is identical to TRAN, except for its section ident. In order to avoid a complicated pattern for handling it, I have special-cased it in one place, adding an overloaded `get_section_from_sect` function for COMP_KMXPLUS_BKSP. An opportunity exists to refactor a bit further - reduce direct access to the binary data (through the COMP_KMXPLUS_XXXX structs, and instead promote use of the COMP_KMXPLUS_XXXX_Helper classes). This indirection would reduce duplication of data access and make it cleaner when we start doing multi-version code. Next commit will add unit tests for v19 format files. |
||
|---|---|---|
| .. | ||
| config | ||
| docs | ||
| src | ||
| .gitignore | ||
| build.sh | ||