123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- 'use strict';
- var R_LATIN_ASCII = 'a-zA-Z';
- var R_LATIN_FULLWIDTH = '\uFF21-\uFF3A\uFF41-\uFF5A';
- var R_LATIN = R_LATIN_ASCII + R_LATIN_FULLWIDTH;
- var R_HIRAGANA = '\u3040-\u309F';
- var R_KATAKANA = '\u30A0-\u30FF';
- var R_KATAKANA_PHONETIC = '\u31F0-\u31FF';
- var R_KATAKANA_HALFWIDTH = '\uFF65-\uFF9F';
- var R_KATAKANA_ALL = R_KATAKANA + R_KATAKANA_PHONETIC + R_KATAKANA_HALFWIDTH;
- var R_KANA = R_HIRAGANA + R_KATAKANA_ALL;
- var I_HIRAGANA = [0x3040, 0x309F];
- var I_KATAKANA = [0x30A0, 0x30FF];
- var I_HIRAGANA_TO_KATAKANA = I_KATAKANA[0] - I_HIRAGANA[0];
- var R_IDEO_MAIN = '\u4E00-\u9FCF';
- var R_IDEO_EXT_A = '\u3400-\u4DBF';
- var R_IDEO = R_IDEO_MAIN + R_IDEO_EXT_A;
- var R_HANGUL_SYLLABLES = '\uAC00-\uD7AF';
- var R_IDEO_OR_SYLL = R_IDEO + R_KANA + R_HANGUL_SYLLABLES;
- var REGEX_IDEO = null;
- var REGEX_KANA = null;
- var REGEX_IDEO_OR_SYLL = null;
- var REGEX_IS_KANA_WITH_TRAILING_LATIN = null;
- function hasKana(str) {
- REGEX_KANA = REGEX_KANA || new RegExp('[' + R_KANA + ']');
- return REGEX_KANA.test(str);
- }
- function hasIdeograph(str) {
- REGEX_IDEO = REGEX_IDEO || new RegExp('[' + R_IDEO + ']');
- return REGEX_IDEO.test(str);
- }
- function hasIdeoOrSyll(str) {
- REGEX_IDEO_OR_SYLL = REGEX_IDEO_OR_SYLL || new RegExp('[' + R_IDEO_OR_SYLL + ']');
- return REGEX_IDEO_OR_SYLL.test(str);
- }
- function charCodeToKatakana(chr) {
- var charCode = chr.charCodeAt(0);
- return String.fromCharCode(charCode < I_HIRAGANA[0] || charCode > I_HIRAGANA[1] ? charCode : charCode + I_HIRAGANA_TO_KATAKANA);
- }
- function hiraganaToKatakana(str) {
- if (!hasKana(str)) {
- return str;
- }
- return str.split('').map(charCodeToKatakana).join('');
- }
- function isKanaWithTrailingLatin(str) {
- REGEX_IS_KANA_WITH_TRAILING_LATIN = REGEX_IS_KANA_WITH_TRAILING_LATIN || new RegExp('^' + '[' + R_KANA + ']+' + '[' + R_LATIN + ']' + '$');
- return REGEX_IS_KANA_WITH_TRAILING_LATIN.test(str);
- }
- function kanaRemoveTrailingLatin(str) {
- if (isKanaWithTrailingLatin(str)) {
- return str.substr(0, str.length - 1);
- }
- return str;
- }
- var UnicodeCJK = {
- hasKana: hasKana,
- hasIdeograph: hasIdeograph,
- hasIdeoOrSyll: hasIdeoOrSyll,
- hiraganaToKatakana: hiraganaToKatakana,
- isKanaWithTrailingLatin: isKanaWithTrailingLatin,
- kanaRemoveTrailingLatin: kanaRemoveTrailingLatin
- };
- module.exports = UnicodeCJK;
|