spiegel-keyman/core/include/ldml/ldml-const-builder.ts

65 lines
2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
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(`Dont know what to do with constants[${key}] of type ${type}`);
errs++;
}
}
if (errs != 0) {
throw Error(`Fail: ${errs} error(s), see above.`);
}