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
			| 
											3 years 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)); |