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.
111 lines
3.0 KiB
111 lines
3.0 KiB
/** |
|
* @licstart The following is the entire license notice for the |
|
* Javascript code in this page |
|
* |
|
* Copyright 2019 Mozilla Foundation |
|
* |
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
* you may not use this file except in compliance with the License. |
|
* You may obtain a copy of the License at |
|
* |
|
* http://www.apache.org/licenses/LICENSE-2.0 |
|
* |
|
* Unless required by applicable law or agreed to in writing, software |
|
* distributed under the License is distributed on an "AS IS" BASIS, |
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
* See the License for the specific language governing permissions and |
|
* limitations under the License. |
|
* |
|
* @licend The above is the entire license notice for the |
|
* Javascript code in this page |
|
*/ |
|
"use strict"; |
|
|
|
Object.defineProperty(exports, "__esModule", { |
|
value: true |
|
}); |
|
exports.getCharacterType = getCharacterType; |
|
exports.CharacterType = void 0; |
|
var CharacterType = { |
|
SPACE: 0, |
|
ALPHA_LETTER: 1, |
|
PUNCT: 2, |
|
HAN_LETTER: 3, |
|
KATAKANA_LETTER: 4, |
|
HIRAGANA_LETTER: 5, |
|
HALFWIDTH_KATAKANA_LETTER: 6, |
|
THAI_LETTER: 7 |
|
}; |
|
exports.CharacterType = CharacterType; |
|
|
|
function isAlphabeticalScript(charCode) { |
|
return charCode < 0x2E80; |
|
} |
|
|
|
function isAscii(charCode) { |
|
return (charCode & 0xFF80) === 0; |
|
} |
|
|
|
function isAsciiAlpha(charCode) { |
|
return charCode >= 0x61 && charCode <= 0x7A || charCode >= 0x41 && charCode <= 0x5A; |
|
} |
|
|
|
function isAsciiDigit(charCode) { |
|
return charCode >= 0x30 && charCode <= 0x39; |
|
} |
|
|
|
function isAsciiSpace(charCode) { |
|
return charCode === 0x20 || charCode === 0x09 || charCode === 0x0D || charCode === 0x0A; |
|
} |
|
|
|
function isHan(charCode) { |
|
return charCode >= 0x3400 && charCode <= 0x9FFF || charCode >= 0xF900 && charCode <= 0xFAFF; |
|
} |
|
|
|
function isKatakana(charCode) { |
|
return charCode >= 0x30A0 && charCode <= 0x30FF; |
|
} |
|
|
|
function isHiragana(charCode) { |
|
return charCode >= 0x3040 && charCode <= 0x309F; |
|
} |
|
|
|
function isHalfwidthKatakana(charCode) { |
|
return charCode >= 0xFF60 && charCode <= 0xFF9F; |
|
} |
|
|
|
function isThai(charCode) { |
|
return (charCode & 0xFF80) === 0x0E00; |
|
} |
|
|
|
function getCharacterType(charCode) { |
|
if (isAlphabeticalScript(charCode)) { |
|
if (isAscii(charCode)) { |
|
if (isAsciiSpace(charCode)) { |
|
return CharacterType.SPACE; |
|
} else if (isAsciiAlpha(charCode) || isAsciiDigit(charCode) || charCode === 0x5F) { |
|
return CharacterType.ALPHA_LETTER; |
|
} |
|
|
|
return CharacterType.PUNCT; |
|
} else if (isThai(charCode)) { |
|
return CharacterType.THAI_LETTER; |
|
} else if (charCode === 0xA0) { |
|
return CharacterType.SPACE; |
|
} |
|
|
|
return CharacterType.ALPHA_LETTER; |
|
} |
|
|
|
if (isHan(charCode)) { |
|
return CharacterType.HAN_LETTER; |
|
} else if (isKatakana(charCode)) { |
|
return CharacterType.KATAKANA_LETTER; |
|
} else if (isHiragana(charCode)) { |
|
return CharacterType.HIRAGANA_LETTER; |
|
} else if (isHalfwidthKatakana(charCode)) { |
|
return CharacterType.HALFWIDTH_KATAKANA_LETTER; |
|
} |
|
|
|
return CharacterType.ALPHA_LETTER; |
|
} |