// XRegExp plugin: Unicode 0.4
// (c) 2008-2010 Steven Levithan
// <http://xregexp.com>
// MIT License
// Uses the Unicode 5.2 character database

/*
This XRegExp plugin enables use of the following Unicode categories:

\p{L} - Letter
\p{M} - Mark
\p{N} - Number
\p{P} - Punctuation
\p{S} - Symbol
\p{Z} - Separator
\p{C} - Other

It also enables all 150 blocks that Unicode 5.2 divides the code points U+0000 through U+FFFF into.
Unicode blocks use the prefix "In". For example:

\p{InMongolian}
\p{InLatin Extended-A}

Case, spaces, hyphens, and underscores are ignored when comparing block names.

All categories and blocks can be inverted by using an uppercase P. For example, \P{N} matches any
code point that is not in the Number category. \P{InBasicLatin} matches code points that are not in
the Basic Latin block.

Known issues:
- Unicode tokens are not yet supported within character classes. Use alternation instead.
- Unicode subcategories (\p{Nd}, etc.) and scripts (\p{Latin}, etc.) are not supported.
*/

if (!window.XRegExp) {
	throw Error("XRegExp must be loaded before the Unicode plugin");
}

// anonymous function to avoid creating global variables
(function () {

var unicode = {
	// categories
	c: "0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF",
	l: "0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",
	m: "0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26",
	n: "0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",
	p: "0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65",
	s: "0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD",
	z: "002000A01680180E2000-200A20282029202F205F3000",

	// blocks
	inbasiclatin: "0000-007F",
	inlatin1supplement: "0080-00FF",
	inlatinextendeda: "0100-017F",
	inlatinextendedb: "0180-024F",
	inipaextensions: "0250-02AF",
	inspacingmodifierletters: "02B0-02FF",
	incombiningdiacriticalmarks: "0300-036F",
	ingreekandcoptic: "0370-03FF",
	incyrillic: "0400-04FF",
	incyrillicsupplement: "0500-052F",
	inarmenian: "0530-058F",
	inhebrew: "0590-05FF",
	inarabic: "0600-06FF",
	insyriac: "0700-074F",
	inarabicsupplement: "0750-077F",
	inthaana: "0780-07BF",
	innko: "07C0-07FF",
	insamaritan: "0800-083F",
	indevanagari: "0900-097F",
	inbengali: "0980-09FF",
	ingurmukhi: "0A00-0A7F",
	ingujarati: "0A80-0AFF",
	inoriya: "0B00-0B7F",
	intamil: "0B80-0BFF",
	intelugu: "0C00-0C7F",
	inkannada: "0C80-0CFF",
	inmalayalam: "0D00-0D7F",
	insinhala: "0D80-0DFF",
	inthai: "0E00-0E7F",
	inlao: "0E80-0EFF",
	intibetan: "0F00-0FFF",
	inmyanmar: "1000-109F",
	ingeorgian: "10A0-10FF",
	inhanguljamo: "1100-11FF",
	inethiopic: "1200-137F",
	inethiopicsupplement: "1380-139F",
	incherokee: "13A0-13FF",
	inunifiedcanadianaboriginalsyllabics: "1400-167F",
	inogham: "1680-169F",
	inrunic: "16A0-16FF",
	intagalog: "1700-171F",
	inhanunoo: "1720-173F",
	inbuhid: "1740-175F",
	intagbanwa: "1760-177F",
	inkhmer: "1780-17FF",
	inmongolian: "1800-18AF",
	inunifiedcanadianaboriginalsyllabicsextended: "18B0-18FF",
	inlimbu: "1900-194F",
	intaile: "1950-197F",
	innewtailue: "1980-19DF",
	inkhmersymbols: "19E0-19FF",
	inbuginese: "1A00-1A1F",
	intaitham: "1A20-1AAF",
	inbalinese: "1B00-1B7F",
	insundanese: "1B80-1BBF",
	inlepcha: "1C00-1C4F",
	inolchiki: "1C50-1C7F",
	invedicextensions: "1CD0-1CFF",
	inphoneticextensions: "1D00-1D7F",
	inphoneticextensionssupplement: "1D80-1DBF",
	incombiningdiacriticalmarkssupplement: "1DC0-1DFF",
	inlatinextendedadditional: "1E00-1EFF",
	ingreekextended: "1F00-1FFF",
	ingeneralpunctuation: "2000-206F",
	insuperscriptsandsubscripts: "2070-209F",
	incurrencysymbols: "20A0-20CF",
	incombiningdiacriticalmarksforsymbols: "20D0-20FF",
	inletterlikesymbols: "2100-214F",
	innumberforms: "2150-218F",
	inarrows: "2190-21FF",
	inmathematicaloperators: "2200-22FF",
	inmiscellaneoustechnical: "2300-23FF",
	incontrolpictures: "2400-243F",
	inopticalcharacterrecognition: "2440-245F",
	inenclosedalphanumerics: "2460-24FF",
	inboxdrawing: "2500-257F",
	inblockelements: "2580-259F",
	ingeometricshapes: "25A0-25FF",
	inmiscellaneoussymbols: "2600-26FF",
	indingbats: "2700-27BF",
	inmiscellaneousmathematicalsymbolsa: "27C0-27EF",
	insupplementalarrowsa: "27F0-27FF",
	inbraillepatterns: "2800-28FF",
	insupplementalarrowsb: "2900-297F",
	inmiscellaneousmathematicalsymbolsb: "2980-29FF",
	insupplementalmathematicaloperators: "2A00-2AFF",
	inmiscellaneoussymbolsandarrows: "2B00-2BFF",
	inglagolitic: "2C00-2C5F",
	inlatinextendedc: "2C60-2C7F",
	incoptic: "2C80-2CFF",
	ingeorgiansupplement: "2D00-2D2F",
	intifinagh: "2D30-2D7F",
	inethiopicextended: "2D80-2DDF",
	incyrillicextendeda: "2DE0-2DFF",
	insupplementalpunctuation: "2E00-2E7F",
	incjkradicalssupplement: "2E80-2EFF",
	inkangxiradicals: "2F00-2FDF",
	inideographicdescriptioncharacters: "2FF0-2FFF",
	incjksymbolsandpunctuation: "3000-303F",
	inhiragana: "3040-309F",
	inkatakana: "30A0-30FF",
	inbopomofo: "3100-312F",
	inhangulcompatibilityjamo: "3130-318F",
	inkanbun: "3190-319F",
	inbopomofoextended: "31A0-31BF",
	incjkstrokes: "31C0-31EF",
	inkatakanaphoneticextensions: "31F0-31FF",
	inenclosedcjklettersandmonths: "3200-32FF",
	incjkcompatibility: "3300-33FF",
	incjkunifiedideographsextensiona: "3400-4DBF",
	inyijinghexagramsymbols: "4DC0-4DFF",
	incjkunifiedideographs: "4E00-9FFF",
	inyisyllables: "A000-A48F",
	inyiradicals: "A490-A4CF",
	inlisu: "A4D0-A4FF",
	invai: "A500-A63F",
	incyrillicextendedb: "A640-A69F",
	inbamum: "A6A0-A6FF",
	inmodifiertoneletters: "A700-A71F",
	inlatinextendedd: "A720-A7FF",
	insylotinagri: "A800-A82F",
	incommonindicnumberforms: "A830-A83F",
	inphagspa: "A840-A87F",
	insaurashtra: "A880-A8DF",
	indevanagariextended: "A8E0-A8FF",
	inkayahli: "A900-A92F",
	inrejang: "A930-A95F",
	inhanguljamoextendeda: "A960-A97F",
	injavanese: "A980-A9DF",
	incham: "AA00-AA5F",
	inmyanmarextendeda: "AA60-AA7F",
	intaiviet: "AA80-AADF",
	inmeeteimayek: "ABC0-ABFF",
	inhangulsyllables: "AC00-D7AF",
	inhanguljamoextendedb: "D7B0-D7FF",
	inhighsurrogates: "D800-DB7F",
	inhighprivateusesurrogates: "DB80-DBFF",
	inlowsurrogates: "DC00-DFFF",
	inprivateusearea: "E000-F8FF",
	incjkcompatibilityideographs: "F900-FAFF",
	inalphabeticpresentationforms: "FB00-FB4F",
	inarabicpresentationformsa: "FB50-FDFF",
	invariationselectors: "FE00-FE0F",
	inverticalforms: "FE10-FE1F",
	incombininghalfmarks: "FE20-FE2F",
	incjkcompatibilityforms: "FE30-FE4F",
	insmallformvariants: "FE50-FE6F",
	inarabicpresentationformsb: "FE70-FEFF",
	inhalfwidthandfullwidthforms: "FF00-FFEF",
	inspecials: "FFF0-FFFF"
}, p;

for (p in unicode) {
	if (typeof unicode[p] === "string") {
		unicode[p] = unicode[p].replace(/\w{4}/g, "\\u$&");
	}
}

XRegExp.addToken(
	/\\[pP]{(\^?)([^}]+)}/,
	function (match, scope) {
		if (scope === XRegExp.INSIDE_CLASS)
			throw SyntaxError("XRegExp doesn't support \\p within character classes: " + match[0]);

		// \p{L}, \P{L}, and \p{^L} are valid, but \P{^L} is not
		if (/^\\P{\^/.test(match[0]))
			throw SyntaxError("erroneous characters: " + match[0]);

		var inv = (match[0].charAt(1) === "P" || match[1]) ? "^" : "";
		var token = match[2].replace(/[- _]+/g, "").toLowerCase();

		return "[" + inv + unicode[token] + "]";
	},
	XRegExp.INSIDE_CLASS | XRegExp.OUTSIDE_CLASS
);

})();

