// Generated by CoffeeScript 1.7.1 var UnicodeTrie, inflate; inflate = require('tiny-inflate'); UnicodeTrie = (function() { var DATA_BLOCK_LENGTH, DATA_GRANULARITY, DATA_MASK, INDEX_1_OFFSET, INDEX_2_BLOCK_LENGTH, INDEX_2_BMP_LENGTH, INDEX_2_MASK, INDEX_SHIFT, LSCP_INDEX_2_LENGTH, LSCP_INDEX_2_OFFSET, OMITTED_BMP_INDEX_1_LENGTH, SHIFT_1, SHIFT_1_2, SHIFT_2, UTF8_2B_INDEX_2_LENGTH, UTF8_2B_INDEX_2_OFFSET; SHIFT_1 = 6 + 5; SHIFT_2 = 5; SHIFT_1_2 = SHIFT_1 - SHIFT_2; OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> SHIFT_1; INDEX_2_BLOCK_LENGTH = 1 << SHIFT_1_2; INDEX_2_MASK = INDEX_2_BLOCK_LENGTH - 1; INDEX_SHIFT = 2; DATA_BLOCK_LENGTH = 1 << SHIFT_2; DATA_MASK = DATA_BLOCK_LENGTH - 1; LSCP_INDEX_2_OFFSET = 0x10000 >> SHIFT_2; LSCP_INDEX_2_LENGTH = 0x400 >> SHIFT_2; INDEX_2_BMP_LENGTH = LSCP_INDEX_2_OFFSET + LSCP_INDEX_2_LENGTH; UTF8_2B_INDEX_2_OFFSET = INDEX_2_BMP_LENGTH; UTF8_2B_INDEX_2_LENGTH = 0x800 >> 6; INDEX_1_OFFSET = UTF8_2B_INDEX_2_OFFSET + UTF8_2B_INDEX_2_LENGTH; DATA_GRANULARITY = 1 << INDEX_SHIFT; function UnicodeTrie(data) { var isBuffer, uncompressedLength, view; isBuffer = typeof data.readUInt32BE === 'function' && typeof data.slice === 'function'; if (isBuffer || data instanceof Uint8Array) { if (isBuffer) { this.highStart = data.readUInt32BE(0); this.errorValue = data.readUInt32BE(4); uncompressedLength = data.readUInt32BE(8); data = data.slice(12); } else { view = new DataView(data.buffer); this.highStart = view.getUint32(0); this.errorValue = view.getUint32(4); uncompressedLength = view.getUint32(8); data = data.subarray(12); } data = inflate(data, new Uint8Array(uncompressedLength)); data = inflate(data, new Uint8Array(uncompressedLength)); this.data = new Uint32Array(data.buffer); } else { this.data = data.data, this.highStart = data.highStart, this.errorValue = data.errorValue; } } UnicodeTrie.prototype.get = function(codePoint) { var index; if (codePoint < 0 || codePoint > 0x10ffff) { return this.errorValue; } if (codePoint < 0xd800 || (codePoint > 0xdbff && codePoint <= 0xffff)) { index = (this.data[codePoint >> SHIFT_2] << INDEX_SHIFT) + (codePoint & DATA_MASK); return this.data[index]; } if (codePoint <= 0xffff) { index = (this.data[LSCP_INDEX_2_OFFSET + ((codePoint - 0xd800) >> SHIFT_2)] << INDEX_SHIFT) + (codePoint & DATA_MASK); return this.data[index]; } if (codePoint < this.highStart) { index = this.data[(INDEX_1_OFFSET - OMITTED_BMP_INDEX_1_LENGTH) + (codePoint >> SHIFT_1)]; index = this.data[index + ((codePoint >> SHIFT_2) & INDEX_2_MASK)]; index = (index << INDEX_SHIFT) + (codePoint & DATA_MASK); return this.data[index]; } return this.data[this.data.length - DATA_GRANULARITY]; }; return UnicodeTrie; })(); module.exports = UnicodeTrie;