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