379 lines
No EOL
9.1 KiB
JavaScript
379 lines
No EOL
9.1 KiB
JavaScript
'use strict';
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var NON_BINARY_PROP_NAMES_TO_ALIASES = {
|
|
General_Category: 'gc',
|
|
Script: 'sc',
|
|
Script_Extensions: 'scx'
|
|
};
|
|
|
|
var NON_BINARY_ALIASES_TO_PROP_NAMES = inverseMap(NON_BINARY_PROP_NAMES_TO_ALIASES);
|
|
|
|
var BINARY_PROP_NAMES_TO_ALIASES = {
|
|
ASCII: 'ASCII',
|
|
ASCII_Hex_Digit: 'AHex',
|
|
Alphabetic: 'Alpha',
|
|
Any: 'Any',
|
|
Assigned: 'Assigned',
|
|
Bidi_Control: 'Bidi_C',
|
|
Bidi_Mirrored: 'Bidi_M',
|
|
Case_Ignorable: 'CI',
|
|
Cased: 'Cased',
|
|
Changes_When_Casefolded: 'CWCF',
|
|
Changes_When_Casemapped: 'CWCM',
|
|
Changes_When_Lowercased: 'CWL',
|
|
Changes_When_NFKC_Casefolded: 'CWKCF',
|
|
Changes_When_Titlecased: 'CWT',
|
|
Changes_When_Uppercased: 'CWU',
|
|
Dash: 'Dash',
|
|
Default_Ignorable_Code_Point: 'DI',
|
|
Deprecated: 'Dep',
|
|
Diacritic: 'Dia',
|
|
Emoji: 'Emoji',
|
|
Emoji_Component: 'Emoji_Component',
|
|
Emoji_Modifier: 'Emoji_Modifier',
|
|
Emoji_Modifier_Base: 'Emoji_Modifier_Base',
|
|
Emoji_Presentation: 'Emoji_Presentation',
|
|
Extended_Pictographic: 'Extended_Pictographic',
|
|
Extender: 'Ext',
|
|
Grapheme_Base: 'Gr_Base',
|
|
Grapheme_Extend: 'Gr_Ext',
|
|
Hex_Digit: 'Hex',
|
|
IDS_Binary_Operator: 'IDSB',
|
|
IDS_Trinary_Operator: 'IDST',
|
|
ID_Continue: 'IDC',
|
|
ID_Start: 'IDS',
|
|
Ideographic: 'Ideo',
|
|
Join_Control: 'Join_C',
|
|
Logical_Order_Exception: 'LOE',
|
|
Lowercase: 'Lower',
|
|
Math: 'Math',
|
|
Noncharacter_Code_Point: 'NChar',
|
|
Pattern_Syntax: 'Pat_Syn',
|
|
Pattern_White_Space: 'Pat_WS',
|
|
Quotation_Mark: 'QMark',
|
|
Radical: 'Radical',
|
|
Regional_Indicator: 'RI',
|
|
Sentence_Terminal: 'STerm',
|
|
Soft_Dotted: 'SD',
|
|
Terminal_Punctuation: 'Term',
|
|
Unified_Ideograph: 'UIdeo',
|
|
Uppercase: 'Upper',
|
|
Variation_Selector: 'VS',
|
|
White_Space: 'space',
|
|
XID_Continue: 'XIDC',
|
|
XID_Start: 'XIDS'
|
|
};
|
|
|
|
var BINARY_ALIASES_TO_PROP_NAMES = inverseMap(BINARY_PROP_NAMES_TO_ALIASES);
|
|
|
|
var GENERAL_CATEGORY_VALUE_TO_ALIASES = {
|
|
Cased_Letter: 'LC',
|
|
Close_Punctuation: 'Pe',
|
|
Connector_Punctuation: 'Pc',
|
|
Control: ['Cc', 'cntrl'],
|
|
Currency_Symbol: 'Sc',
|
|
Dash_Punctuation: 'Pd',
|
|
Decimal_Number: ['Nd', 'digit'],
|
|
Enclosing_Mark: 'Me',
|
|
Final_Punctuation: 'Pf',
|
|
Format: 'Cf',
|
|
Initial_Punctuation: 'Pi',
|
|
Letter: 'L',
|
|
Letter_Number: 'Nl',
|
|
Line_Separator: 'Zl',
|
|
Lowercase_Letter: 'Ll',
|
|
Mark: ['M', 'Combining_Mark'],
|
|
Math_Symbol: 'Sm',
|
|
Modifier_Letter: 'Lm',
|
|
Modifier_Symbol: 'Sk',
|
|
Nonspacing_Mark: 'Mn',
|
|
Number: 'N',
|
|
Open_Punctuation: 'Ps',
|
|
Other: 'C',
|
|
Other_Letter: 'Lo',
|
|
Other_Number: 'No',
|
|
Other_Punctuation: 'Po',
|
|
Other_Symbol: 'So',
|
|
Paragraph_Separator: 'Zp',
|
|
Private_Use: 'Co',
|
|
Punctuation: ['P', 'punct'],
|
|
Separator: 'Z',
|
|
Space_Separator: 'Zs',
|
|
Spacing_Mark: 'Mc',
|
|
Surrogate: 'Cs',
|
|
Symbol: 'S',
|
|
Titlecase_Letter: 'Lt',
|
|
Unassigned: 'Cn',
|
|
Uppercase_Letter: 'Lu'
|
|
};
|
|
|
|
var GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES = inverseMap(GENERAL_CATEGORY_VALUE_TO_ALIASES);
|
|
|
|
var SCRIPT_VALUE_TO_ALIASES = {
|
|
Adlam: 'Adlm',
|
|
Ahom: 'Ahom',
|
|
Anatolian_Hieroglyphs: 'Hluw',
|
|
Arabic: 'Arab',
|
|
Armenian: 'Armn',
|
|
Avestan: 'Avst',
|
|
Balinese: 'Bali',
|
|
Bamum: 'Bamu',
|
|
Bassa_Vah: 'Bass',
|
|
Batak: 'Batk',
|
|
Bengali: 'Beng',
|
|
Bhaiksuki: 'Bhks',
|
|
Bopomofo: 'Bopo',
|
|
Brahmi: 'Brah',
|
|
Braille: 'Brai',
|
|
Buginese: 'Bugi',
|
|
Buhid: 'Buhd',
|
|
Canadian_Aboriginal: 'Cans',
|
|
Carian: 'Cari',
|
|
Caucasian_Albanian: 'Aghb',
|
|
Chakma: 'Cakm',
|
|
Cham: 'Cham',
|
|
Cherokee: 'Cher',
|
|
Common: 'Zyyy',
|
|
Coptic: ['Copt', 'Qaac'],
|
|
Cuneiform: 'Xsux',
|
|
Cypriot: 'Cprt',
|
|
Cyrillic: 'Cyrl',
|
|
Deseret: 'Dsrt',
|
|
Devanagari: 'Deva',
|
|
Dogra: 'Dogr',
|
|
Duployan: 'Dupl',
|
|
Egyptian_Hieroglyphs: 'Egyp',
|
|
Elbasan: 'Elba',
|
|
Ethiopic: 'Ethi',
|
|
Georgian: 'Geor',
|
|
Glagolitic: 'Glag',
|
|
Gothic: 'Goth',
|
|
Grantha: 'Gran',
|
|
Greek: 'Grek',
|
|
Gujarati: 'Gujr',
|
|
Gunjala_Gondi: 'Gong',
|
|
Gurmukhi: 'Guru',
|
|
Han: 'Hani',
|
|
Hangul: 'Hang',
|
|
Hanifi_Rohingya: 'Rohg',
|
|
Hanunoo: 'Hano',
|
|
Hatran: 'Hatr',
|
|
Hebrew: 'Hebr',
|
|
Hiragana: 'Hira',
|
|
Imperial_Aramaic: 'Armi',
|
|
Inherited: ['Zinh', 'Qaai'],
|
|
Inscriptional_Pahlavi: 'Phli',
|
|
Inscriptional_Parthian: 'Prti',
|
|
Javanese: 'Java',
|
|
Kaithi: 'Kthi',
|
|
Kannada: 'Knda',
|
|
Katakana: 'Kana',
|
|
Kayah_Li: 'Kali',
|
|
Kharoshthi: 'Khar',
|
|
Khmer: 'Khmr',
|
|
Khojki: 'Khoj',
|
|
Khudawadi: 'Sind',
|
|
Lao: 'Laoo',
|
|
Latin: 'Latn',
|
|
Lepcha: 'Lepc',
|
|
Limbu: 'Limb',
|
|
Linear_A: 'Lina',
|
|
Linear_B: 'Linb',
|
|
Lisu: 'Lisu',
|
|
Lycian: 'Lyci',
|
|
Lydian: 'Lydi',
|
|
Mahajani: 'Mahj',
|
|
Makasar: 'Maka',
|
|
Malayalam: 'Mlym',
|
|
Mandaic: 'Mand',
|
|
Manichaean: 'Mani',
|
|
Marchen: 'Marc',
|
|
Medefaidrin: 'Medf',
|
|
Masaram_Gondi: 'Gonm',
|
|
Meetei_Mayek: 'Mtei',
|
|
Mende_Kikakui: 'Mend',
|
|
Meroitic_Cursive: 'Merc',
|
|
Meroitic_Hieroglyphs: 'Mero',
|
|
Miao: 'Plrd',
|
|
Modi: 'Modi',
|
|
Mongolian: 'Mong',
|
|
Mro: 'Mroo',
|
|
Multani: 'Mult',
|
|
Myanmar: 'Mymr',
|
|
Nabataean: 'Nbat',
|
|
New_Tai_Lue: 'Talu',
|
|
Newa: 'Newa',
|
|
Nko: 'Nkoo',
|
|
Nushu: 'Nshu',
|
|
Ogham: 'Ogam',
|
|
Ol_Chiki: 'Olck',
|
|
Old_Hungarian: 'Hung',
|
|
Old_Italic: 'Ital',
|
|
Old_North_Arabian: 'Narb',
|
|
Old_Permic: 'Perm',
|
|
Old_Persian: 'Xpeo',
|
|
Old_Sogdian: 'Sogo',
|
|
Old_South_Arabian: 'Sarb',
|
|
Old_Turkic: 'Orkh',
|
|
Oriya: 'Orya',
|
|
Osage: 'Osge',
|
|
Osmanya: 'Osma',
|
|
Pahawh_Hmong: 'Hmng',
|
|
Palmyrene: 'Palm',
|
|
Pau_Cin_Hau: 'Pauc',
|
|
Phags_Pa: 'Phag',
|
|
Phoenician: 'Phnx',
|
|
Psalter_Pahlavi: 'Phlp',
|
|
Rejang: 'Rjng',
|
|
Runic: 'Runr',
|
|
Samaritan: 'Samr',
|
|
Saurashtra: 'Saur',
|
|
Sharada: 'Shrd',
|
|
Shavian: 'Shaw',
|
|
Siddham: 'Sidd',
|
|
SignWriting: 'Sgnw',
|
|
Sinhala: 'Sinh',
|
|
Sogdian: 'Sogd',
|
|
Sora_Sompeng: 'Sora',
|
|
Soyombo: 'Soyo',
|
|
Sundanese: 'Sund',
|
|
Syloti_Nagri: 'Sylo',
|
|
Syriac: 'Syrc',
|
|
Tagalog: 'Tglg',
|
|
Tagbanwa: 'Tagb',
|
|
Tai_Le: 'Tale',
|
|
Tai_Tham: 'Lana',
|
|
Tai_Viet: 'Tavt',
|
|
Takri: 'Takr',
|
|
Tamil: 'Taml',
|
|
Tangut: 'Tang',
|
|
Telugu: 'Telu',
|
|
Thaana: 'Thaa',
|
|
Thai: 'Thai',
|
|
Tibetan: 'Tibt',
|
|
Tifinagh: 'Tfng',
|
|
Tirhuta: 'Tirh',
|
|
Ugaritic: 'Ugar',
|
|
Vai: 'Vaii',
|
|
Warang_Citi: 'Wara',
|
|
Yi: 'Yiii',
|
|
Zanabazar_Square: 'Zanb'
|
|
};
|
|
|
|
var SCRIPT_VALUE_ALIASES_TO_VALUE = inverseMap(SCRIPT_VALUE_TO_ALIASES);
|
|
|
|
function inverseMap(data) {
|
|
var inverse = {};
|
|
|
|
for (var name in data) {
|
|
if (!data.hasOwnProperty(name)) {
|
|
continue;
|
|
}
|
|
var value = data[name];
|
|
if (Array.isArray(value)) {
|
|
for (var i = 0; i < value.length; i++) {
|
|
inverse[value[i]] = name;
|
|
}
|
|
} else {
|
|
inverse[value] = name;
|
|
}
|
|
}
|
|
|
|
return inverse;
|
|
}
|
|
|
|
function isValidName(name) {
|
|
return NON_BINARY_PROP_NAMES_TO_ALIASES.hasOwnProperty(name) || NON_BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name) || BINARY_PROP_NAMES_TO_ALIASES.hasOwnProperty(name) || BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name);
|
|
}
|
|
|
|
function isValidValue(name, value) {
|
|
if (isGeneralCategoryName(name)) {
|
|
return isGeneralCategoryValue(value);
|
|
}
|
|
|
|
if (isScriptCategoryName(name)) {
|
|
return isScriptCategoryValue(value);
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
function isAlias(name) {
|
|
return NON_BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name) || BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name);
|
|
}
|
|
|
|
function isGeneralCategoryName(name) {
|
|
return name === 'General_Category' || name == 'gc';
|
|
}
|
|
|
|
function isScriptCategoryName(name) {
|
|
return name === 'Script' || name === 'Script_Extensions' || name === 'sc' || name === 'scx';
|
|
}
|
|
|
|
function isGeneralCategoryValue(value) {
|
|
return GENERAL_CATEGORY_VALUE_TO_ALIASES.hasOwnProperty(value) || GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES.hasOwnProperty(value);
|
|
}
|
|
|
|
function isScriptCategoryValue(value) {
|
|
return SCRIPT_VALUE_TO_ALIASES.hasOwnProperty(value) || SCRIPT_VALUE_ALIASES_TO_VALUE.hasOwnProperty(value);
|
|
}
|
|
|
|
function isBinaryPropertyName(name) {
|
|
return BINARY_PROP_NAMES_TO_ALIASES.hasOwnProperty(name) || BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name);
|
|
}
|
|
|
|
function getCanonicalName(name) {
|
|
if (NON_BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name)) {
|
|
return NON_BINARY_ALIASES_TO_PROP_NAMES[name];
|
|
}
|
|
|
|
if (BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name)) {
|
|
return BINARY_ALIASES_TO_PROP_NAMES[name];
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
function getCanonicalValue(value) {
|
|
if (GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES.hasOwnProperty(value)) {
|
|
return GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES[value];
|
|
}
|
|
|
|
if (SCRIPT_VALUE_ALIASES_TO_VALUE.hasOwnProperty(value)) {
|
|
return SCRIPT_VALUE_ALIASES_TO_VALUE[value];
|
|
}
|
|
|
|
if (BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(value)) {
|
|
return BINARY_ALIASES_TO_PROP_NAMES[value];
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
module.exports = {
|
|
isAlias: isAlias,
|
|
isValidName: isValidName,
|
|
isValidValue: isValidValue,
|
|
isGeneralCategoryValue: isGeneralCategoryValue,
|
|
isScriptCategoryValue: isScriptCategoryValue,
|
|
isBinaryPropertyName: isBinaryPropertyName,
|
|
getCanonicalName: getCanonicalName,
|
|
getCanonicalValue: getCanonicalValue,
|
|
|
|
NON_BINARY_PROP_NAMES_TO_ALIASES: NON_BINARY_PROP_NAMES_TO_ALIASES,
|
|
NON_BINARY_ALIASES_TO_PROP_NAMES: NON_BINARY_ALIASES_TO_PROP_NAMES,
|
|
|
|
BINARY_PROP_NAMES_TO_ALIASES: BINARY_PROP_NAMES_TO_ALIASES,
|
|
BINARY_ALIASES_TO_PROP_NAMES: BINARY_ALIASES_TO_PROP_NAMES,
|
|
|
|
GENERAL_CATEGORY_VALUE_TO_ALIASES: GENERAL_CATEGORY_VALUE_TO_ALIASES,
|
|
GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES: GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES,
|
|
|
|
SCRIPT_VALUE_TO_ALIASES: SCRIPT_VALUE_TO_ALIASES,
|
|
SCRIPT_VALUE_ALIASES_TO_VALUE: SCRIPT_VALUE_ALIASES_TO_VALUE
|
|
}; |