'use strict'; /** * The MIT License (MIT) * Copyright (c) 2017-present Dmitry Soshnikov */ 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 };