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