mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-05 08:25:32 +00:00
65 lines
2 KiB
TypeScript
65 lines
2 KiB
TypeScript
/*
|
||
Copyright: Copyright (C) 2022 SIL International.
|
||
Authors: srl295
|
||
This tool generates a .h version of the keyman_core_ldml.ts file
|
||
*/
|
||
|
||
import { constants } from './keyman_core_ldml.js';
|
||
|
||
const keys = Object.keys(constants);
|
||
keys.sort();
|
||
console.log(`
|
||
/*
|
||
Copyright: Copyright (C) 2022-2023 SIL International.
|
||
Authors: srl295
|
||
This file provides constants for the KMX Plus (LDML support) binary format,
|
||
to be shared between TypeScript and C++ via the generator (below)
|
||
*/
|
||
|
||
//
|
||
// Generated File - do not edit
|
||
//
|
||
// This file is generated by core/tools/ldml-const-builder/build.sh
|
||
// based on core/include/ldml/keyman_core_ldml.ts
|
||
//
|
||
|
||
#pragma once
|
||
`);
|
||
|
||
let errs = 0;
|
||
|
||
for (const key of keys) {
|
||
const value: any = constants[key as keyof typeof constants];
|
||
const upkey = key.toUpperCase();
|
||
const type = typeof value;
|
||
if (type === 'number') {
|
||
console.log(`#define LDML_${upkey} 0x${value.toString(16).toUpperCase()}`);
|
||
} else if (type === 'string') {
|
||
console.log(`#define LDML_${upkey} "${value}"`);
|
||
} else if (key === 'section') {
|
||
// handle section table
|
||
const subkeys = Object.keys(value);
|
||
subkeys.sort();
|
||
for (const subkey of subkeys) {
|
||
const upsubkey = subkey.toUpperCase();
|
||
const subvalue = value[subkey];
|
||
if (subvalue !== subkey) {
|
||
// "can't happen" because tsc would complain
|
||
console.error(`In the SectionMap: ${subkey}: '${subvalue}' - expected key and value to match.`);
|
||
errs++;
|
||
}
|
||
const asnum = constants.hex_section_id(subkey);
|
||
console.log(`#define LDML_${upkey}ID_${upsubkey} 0x${asnum.toString(16).toUpperCase()} /* "${subkey}" */`);
|
||
console.log(`#define LDML_${upkey}NAME_${upsubkey} "${subkey}"`);
|
||
}
|
||
} else if (key.endsWith('_map') || type === 'function') {
|
||
// ignored
|
||
} else {
|
||
console.error(`Don’t know what to do with constants[${key}] of type ${type}`);
|
||
errs++;
|
||
}
|
||
}
|
||
|
||
if (errs != 0) {
|
||
throw Error(`Fail: ${errs} error(s), see above.`);
|
||
}
|