37 lines
928 B
TypeScript
37 lines
928 B
TypeScript
import { join } from "path";
|
|
import {mkdirSync, writeFileSync} from 'fs';
|
|
|
|
export const RUST_OUT_DIR = join(__dirname, '..', 'src', 'gen');
|
|
|
|
try {
|
|
mkdirSync(RUST_OUT_DIR);
|
|
} catch (err) {
|
|
if (err.code !== 'EEXIST') {
|
|
throw err;
|
|
}
|
|
}
|
|
writeFileSync(join(RUST_OUT_DIR, 'mod.rs'), `
|
|
pub mod attrs;
|
|
pub mod codepoints;
|
|
pub mod entities;
|
|
`);
|
|
|
|
export const DATA_DIR = join(__dirname, 'data');
|
|
|
|
export const leftPad = (str: string, n: number) => '0'.repeat(n - str.length) + str;
|
|
|
|
export const prettyJson = (v: any) => JSON.stringify(v, null, 2);
|
|
|
|
export const byteStringLiteral = (bytes: number[]): string => 'b"' + bytes.map(c => {
|
|
if (c > 255) throw new Error('Not a byte');
|
|
// 0x20 == ' '.
|
|
// 0x7E == '~'.
|
|
// 0x5C == '\\'.
|
|
// 0x22 == '"'.
|
|
if (c >= 0x20 && c <= 0x7E && c != 0x5C && c != 0x22) {
|
|
return String.fromCharCode(c);
|
|
} else {
|
|
return `\\x${leftPad(c.toString(16), 2)}`;
|
|
}
|
|
}).join('') + '"';
|