You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.3 KiB
52 lines
1.3 KiB
1 month ago
|
'use strict';
|
||
|
|
||
|
const bitfield = require('sparse-bitfield');
|
||
|
const codePoints = require('./lib/code-points');
|
||
|
|
||
|
const unassigned_code_points = bitfield();
|
||
|
const commonly_mapped_to_nothing = bitfield();
|
||
|
const non_ascii_space_characters = bitfield();
|
||
|
const prohibited_characters = bitfield();
|
||
|
const bidirectional_r_al = bitfield();
|
||
|
const bidirectional_l = bitfield();
|
||
|
|
||
|
/**
|
||
|
* Iterare over code points and
|
||
|
* convert it into an buffer.
|
||
|
* @param {bitfield} bits
|
||
|
* @param {Array} src
|
||
|
* @returns {Buffer}
|
||
|
*/
|
||
|
function traverse(bits, src) {
|
||
|
for (const code of src.keys()) {
|
||
|
bits.set(code, true);
|
||
|
}
|
||
|
|
||
|
const buffer = bits.toBuffer();
|
||
|
return Buffer.concat([createSize(buffer), buffer]);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param {Buffer} buffer
|
||
|
* @returns {Buffer}
|
||
|
*/
|
||
|
function createSize(buffer) {
|
||
|
const buf = Buffer.alloc(4);
|
||
|
buf.writeUInt32BE(buffer.length);
|
||
|
|
||
|
return buf;
|
||
|
}
|
||
|
|
||
|
const memory = [];
|
||
|
|
||
|
memory.push(
|
||
|
traverse(unassigned_code_points, codePoints.unassigned_code_points),
|
||
|
traverse(commonly_mapped_to_nothing, codePoints.commonly_mapped_to_nothing),
|
||
|
traverse(non_ascii_space_characters, codePoints.non_ASCII_space_characters),
|
||
|
traverse(prohibited_characters, codePoints.prohibited_characters),
|
||
|
traverse(bidirectional_r_al, codePoints.bidirectional_r_al),
|
||
|
traverse(bidirectional_l, codePoints.bidirectional_l)
|
||
|
);
|
||
|
|
||
|
process.stdout.write(Buffer.concat(memory));
|