| import { getArrayVal } from "../helper/getArrayVal"; | |
| import { inRange } from "./utilities"; | |
| import { getEncodingIndexes } from "./encoding-indexes-provider"; | |
| /** | |
| * @param {number} pointer The |pointer| to search for. | |
| * @param {(!Array.<?number>|undefined)} index The |index| to search within. | |
| * @return {?number} The code point corresponding to |pointer| in |index|, | |
| * or null if |code point| is not in |index|. | |
| */ | |
| export function indexCodePointFor(pointer, index) { | |
| if (!index) | |
| return null; | |
| return index[pointer] || null; | |
| } | |
| /** | |
| * @param {number} code_point The |code point| to search for. | |
| * @param {!Array.<?number>} index The |index| to search within. | |
| * @return {?number} The first pointer corresponding to |code point| in | |
| * |index|, or null if |code point| is not in |index|. | |
| */ | |
| export function indexPointerFor(code_point, index) { | |
| const pointer = index.indexOf(code_point); | |
| return pointer === -1 ? null : pointer; | |
| } | |
| /** | |
| * @param {string} name Name of the index. | |
| * @return {(!Array.<number>|!Array.<Array.<number>>)} | |
| * */ | |
| export function index(name) { | |
| const encodingIndexes = getEncodingIndexes(); | |
| if (!encodingIndexes) { | |
| throw Error("Indexes missing." + | |
| " Did you forget to include encoding-indexes.js first?"); | |
| } | |
| return encodingIndexes[name]; | |
| } | |
| /** | |
| * @param {number} pointer The |pointer| to search for in the gb18030 index. | |
| * @return {?number} The code point corresponding to |pointer| in |index|, | |
| * or null if |code point| is not in the gb18030 index. | |
| */ | |
| export function indexGB18030RangesCodePointFor(pointer) { | |
| // 1. If pointer is greater than 39419 and less than 189000, or | |
| // pointer is greater than 1237575, return null. | |
| if ((pointer > 39419 && pointer < 189000) || (pointer > 1237575)) | |
| return null; | |
| // 2. If pointer is 7457, return code point U+E7C7. | |
| if (pointer === 7457) | |
| return 0xE7C7; | |
| // 3. Let offset be the last pointer in index gb18030 ranges that | |
| // is equal to or less than pointer and let code point offset be | |
| // its corresponding code point. | |
| let offset = 0; | |
| let code_point_offset = 0; | |
| const idx = index('gb18030-ranges'); | |
| for (let i = 0; i < idx.length; ++i) { | |
| /** @type {!Array.<number>} */ | |
| const entry = getArrayVal(idx[i]); | |
| if (entry[0] <= pointer) { | |
| offset = entry[0]; | |
| code_point_offset = entry[1]; | |
| } | |
| else { | |
| break; | |
| } | |
| } | |
| // 4. Return a code point whose value is code point offset + | |
| // pointer − offset. | |
| return code_point_offset + pointer - offset; | |
| } | |
| /** | |
| * @param {number} code_point The |code point| to locate in the gb18030 index. | |
| * @return {number} The first pointer corresponding to |code point| in the | |
| * gb18030 index. | |
| */ | |
| export function indexGB18030RangesPointerFor(code_point) { | |
| // 1. If code point is U+E7C7, return pointer 7457. | |
| if (code_point === 0xE7C7) | |
| return 7457; | |
| // 2. Let offset be the last code point in index gb18030 ranges | |
| // that is equal to or less than code point and let pointer offset | |
| // be its corresponding pointer. | |
| let offset = 0; | |
| let pointer_offset = 0; | |
| const idx = index('gb18030-ranges'); | |
| for (let i = 0; i < idx.length; ++i) { | |
| const idxVal = idx[i]; | |
| /** @type {!Array.<number>} */ | |
| const entry = getArrayVal(idxVal); | |
| if (entry[1] <= code_point) { | |
| offset = entry[1]; | |
| pointer_offset = entry[0]; | |
| } | |
| else { | |
| break; | |
| } | |
| } | |
| // 3. Return a pointer whose value is pointer offset + code point | |
| // − offset. | |
| return pointer_offset + code_point - offset; | |
| } | |
| /** | |
| * @param {number} code_point The |code_point| to search for in the Shift_JIS | |
| * index. | |
| * @return {?number} The code point corresponding to |pointer| in |index|, | |
| * or null if |code point| is not in the Shift_JIS index. | |
| */ | |
| export function indexShiftJISPointerFor(code_point) { | |
| // 1. Let index be index jis0208 excluding all entries whose | |
| // pointer is in the range 8272 to 8835, inclusive. | |
| shift_jis_index = shift_jis_index || | |
| index('jis0208').map(function (code_point, pointer) { | |
| return inRange(pointer, 8272, 8835) ? null : code_point; | |
| }); | |
| const index_ = shift_jis_index; | |
| // 2. Return the index pointer for code point in index. | |
| return index_.indexOf(code_point); | |
| } | |
| let shift_jis_index; | |
| /** | |
| * @param {number} code_point The |code_point| to search for in the big5 | |
| * index. | |
| * @return {?number} The code point corresponding to |pointer| in |index|, | |
| * or null if |code point| is not in the big5 index. | |
| */ | |
| export function indexBig5PointerFor(code_point) { | |
| // 1. Let index be index Big5 excluding all entries whose pointer | |
| big5_index_no_hkscs = big5_index_no_hkscs || | |
| index('big5').map((code_point, pointer) => (pointer < (0xA1 - 0x81) * 157) ? null : code_point); | |
| const index_ = big5_index_no_hkscs; | |
| // 2. If code point is U+2550, U+255E, U+2561, U+256A, U+5341, or | |
| // U+5345, return the last pointer corresponding to code point in | |
| // index. | |
| if (code_point === 0x2550 || code_point === 0x255E || | |
| code_point === 0x2561 || code_point === 0x256A || | |
| code_point === 0x5341 || code_point === 0x5345) { | |
| return index_.lastIndexOf(code_point); | |
| } | |
| // 3. Return the index pointer for code point in index. | |
| return indexPointerFor(code_point, index_); | |
| } | |
| let big5_index_no_hkscs; | |
| //# sourceMappingURL=indexes.js.map |
Xet Storage Details
- Size:
- 5.56 kB
- Xet hash:
- 3ba236c0150beb5950f2e40f2755f7de5a537cedc08b144f4e83433eea48a27a
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.