re2js 2.1.1 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +103 -8
- package/build/index.cjs.cjs +271 -70
- package/build/index.cjs.cjs.map +1 -1
- package/build/index.esm.d.ts +11 -1
- package/build/index.esm.d.ts.map +1 -1
- package/build/index.esm.js +271 -70
- package/build/index.esm.js.map +1 -1
- package/build/index.umd.js +271 -70
- package/build/index.umd.js.map +1 -1
- package/package.json +2 -2
package/build/index.esm.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* re2js
|
|
3
3
|
* RE2JS is the JavaScript port of RE2, a regular expression engine that provides linear time matching
|
|
4
4
|
*
|
|
5
|
-
* @version v2.
|
|
5
|
+
* @version v2.2.0
|
|
6
6
|
* @author Alexey Vasiliev
|
|
7
7
|
* @homepage https://github.com/le0pard/re2js#readme
|
|
8
8
|
* @repository github:le0pard/re2js
|
|
@@ -40,6 +40,8 @@ class RE2Flags {
|
|
|
40
40
|
static UNICODE_GROUPS = 0x80;
|
|
41
41
|
// Regexp END_TEXT was $, not \z. Internal use only.
|
|
42
42
|
static WAS_DOLLAR = 0x100;
|
|
43
|
+
// Allow captureless Lookbehinds (?<=) and (?<!)
|
|
44
|
+
static LOOKBEHIND = 0x200;
|
|
43
45
|
static MATCH_NL = RE2Flags.CLASS_NL | RE2Flags.DOT_NL;
|
|
44
46
|
// As close to Perl as possible.
|
|
45
47
|
static PERL = RE2Flags.CLASS_NL | RE2Flags.ONE_LINE | RE2Flags.PERL_X | RE2Flags.UNICODE_GROUPS;
|
|
@@ -51,6 +53,23 @@ class RE2Flags {
|
|
|
51
53
|
static ANCHOR_BOTH = 2;
|
|
52
54
|
}
|
|
53
55
|
|
|
56
|
+
/**
|
|
57
|
+
* Public flags for RE2JS and RE2Set compilation.
|
|
58
|
+
*/
|
|
59
|
+
const PublicFlags = {
|
|
60
|
+
CASE_INSENSITIVE: 1,
|
|
61
|
+
// case insensitive matching
|
|
62
|
+
DOTALL: 2,
|
|
63
|
+
// dot matches all characters, including newline
|
|
64
|
+
MULTILINE: 4,
|
|
65
|
+
// multiline matching
|
|
66
|
+
DISABLE_UNICODE_GROUPS: 8,
|
|
67
|
+
// unicode groups will be syntax errors
|
|
68
|
+
LONGEST_MATCH: 16,
|
|
69
|
+
// matches longest possible string
|
|
70
|
+
LOOKBEHINDS: 512 // enable linear-time captureless lookbehinds
|
|
71
|
+
};
|
|
72
|
+
|
|
54
73
|
/**
|
|
55
74
|
* Various constants and helper for unicode codepoints.
|
|
56
75
|
*/
|
|
@@ -201,52 +220,52 @@ class UnicodeTables {
|
|
|
201
220
|
static _CASE_ORBIT = null;
|
|
202
221
|
static get CASE_ORBIT() {
|
|
203
222
|
if (!this._CASE_ORBIT) {
|
|
204
|
-
this._CASE_ORBIT = decodeOrbit('rCrDIzDYqpII-LiC8cQlHa+0HGrpI6EzClClOBmOBkOBoOBpOBnOBrOBsOBqOlByPBzPBxPyK5crCz+HCydD1dD4dB5dB6dC8dEgeBheCieDmeDpeHj-HCweD1fDxeB+9HBwfC1FE2eBxfBjeBjdD1eDmpIHycB0fEmdBgda6cBhdD4cB1cdyhBC0hBK+hBDhiBBiiBIqiBIgkHChkHKikHDjkHBkkHImkHYjjBBnkH9gGygBB0gBB+gBBhhBBlkHBihBBqhBBijBBqypB4OhzHB70H6BgzHD-GiHo8HBp8HBq8HBr8HBs8HBt8HBu8HBv8HBg8HBh8HBi8HBj8HBk8HBl8HBm8HBn8HB48HB58HB68HB78HB88HB98HB+8HB-8HBw8HBx8HBy8HBz8HB08HB18HB28HB38HBo9HBp9HBq9HBr9HBs9HBt9HBu9HBv9HBg9HBh9HBi9HBj9HBk9HBl9HBm9HBn9HE89HJz9HClaFs+HJj+HHwcQwdQ8-HJz-HqJpdErCBlG-ohBrypBBokH6lVm4+BBl4+B6nCohhCBphhCBqhhCBrhhCBshhCBthhCBuhhCBvhhCBwhhCBxhhCByhhCBzhhCB0hhCB1hhCB2hhCB3hhCB4hhCB5hhCB6hhCB7hhCB8hhCB9hhCB+hhCB-hhCBgihCBhihCBiihCBjihCBkihCBlihCBmihCBnihCBoihCBpihCBqihCBrihCBsihCBtihCBuihCBvihCBgghCBhghCBighCBjghCBkghCBlghCBmghCBnghCBoghCBpghCBqghCBrghCBsghCBtghCBughCBvghCBwghCBxghCByghCBzghCB0ghCB1ghCB2ghCB3ghCB4ghCB5ghCB6ghCB7ghCB8ghCB9ghCB+ghCB-ghCBghhCBhhhCBihhCBjhhCBkhhCBlhhCBmhhCBnhhChD4mhCB5mhCB6mhCB7mhCB8mhCB9mhCB+mhCB-mhCBgnhCBhnhCBinhCBjnhCBknhCBlnhCBmnhCBnnhCBonhCBpnhCBqnhCBrnhCBsnhCBtnhCBunhCBvnhCBwnhCBxnhCBynhCBznhCB0nhCB1nhCB2nhCB3nhCB4nhCB5nhCB6nhCB7nhCFwlhCBxlhCBylhCBzlhCB0lhCB1lhCB2lhCB3lhCB4lhCB5lhCB6lhCB7lhCB8lhCB9lhCB+lhCB-lhCBgmhCBhmhCBimhCBjmhCBkmhCBlmhCBmmhCBnmhCBomhCBpmhCBqmhCBrmhCBsmhCBtmhCBumhCBvmhCBwmhCBxmhCBymhCBzmhC1D3shCB4shCB5shCB6shCB7shCB8shCB9shCB+shCB-shCBgthCBhthCCjthCBkthCBlthCBmthCBnthCBothCBpthCBqthCBrthCBsthCBtthCButhCBvthCBwthCBxthCCzthCB0thCB1thCB2thCB3thCB4thCB5thCC7thCB8thCCwrhCBxrhCByrhCBzrhCB0rhCB1rhCB2rhCB3rhCB4rhCB5rhCB6rhCC8rhCB9rhCB+rhCB-rhCBgshCBhshCBishCBjshCBkshCBlshCBmshCBnshCBoshCBpshCBqshCCsshCBtshCBushCBvshCBwshCBxshCByshCC0shCB1shCk2BgmjCBhmjCBimjCBjmjCBkmjCBlmjCBmmjCBnmjCBomjCBpmjCBqmjCBrmjCBsmjCBtmjCBumjCBvmjCBwmjCBxmjCBymjCBzmjCB0mjCB1mjCB2mjCB3mjCB4mjCB5mjCB6mjCB7mjCB8mjCB9mjCB+mjCB-mjCBgnjCBhnjCBinjCBjnjCBknjCBlnjCBmnjCBnnjCBonjCBpnjCBqnjCBrnjCBsnjCBtnjCBunjCBvnjCBwnjCBxnjCBynjCOgkjCBhkjCBikjCBjkjCBkkjCBlkjCBmkjCBnkjCBokjCBpkjCBqkjCBrkjCBskjCBtkjCBukjCBvkjCBwkjCBxkjCBykjCBzkjCB0kjCB1kjCB2kjCB3kjCB4kjCB5kjCB6kjCB7kjCB8kjCB9kjCB+kjCB-kjCBgljCBhljCBiljCBjljCBkljCBlljCBmljCBnljCBoljCBpljCBqljCBrljCBsljCBtljCBuljCBvljCBwljCBxljCByljC+CwrjCBxrjCByrjCBzrjCB0rjCB1rjCB2rjCB3rjCB4rjCB5rjCB6rjCB7rjCB8rjCB9rjCB+rjCB-rjCBgsjCBhsjCBisjCBjsjCBksjCBlsjCLwqjCBxqjCByqjCBzqjCB0qjCB1qjCB2qjCB3qjCB4qjCB5qjCB6qjCB7qjCB8qjCB9qjCB+qjCB-qjCBgrjCBhrjCBirjCBjrjCBkrjCBlrjC74CgmmCBhmmCBimmCBjmmCBkmmCBlmmCBmmmCBnmmCBommCBpmmCBqmmCBrmmCBsmmCBtmmCBummCBvmmCBwmmCBxmmCBymmCBzmmCB0mmCB1mmCB2mmCB3mmCB4mmCB5mmCB6mmCB7mmCB8mmCB9mmCB+mmCB-mmCBglmCBhlmCBilmCBjlmCBklmCBllmCBmlmCBnlmCBolmCBplmCBqlmCBrlmCBslmCBtlmCBulmCBvlmCBwlmCBxlmCBylmCBzlmCB0lmCB1lmCB2lmCB3lmCB4lmCB5lmCB6lmCB7lmCB8lmCB9lmCB+lmCB-lmChrVgz7CBhz7CBiz7CBjz7CBkz7CBlz7CBmz7CBnz7CBoz7CBpz7CBqz7CBrz7CBsz7CBtz7CBuz7CBvz7CBwz7CBxz7CByz7CBzz7CB0z7CB1z7CB2z7CB3z7CB4z7CB5z7CB6z7CB7z7CB8z7CB9z7CB+z7CB-z7CBgy7CBhy7CBiy7CBjy7CBky7CBly7CBmy7CBny7CBoy7CBpy7CBqy7CBry7CBsy7CBty7CBuy7CBvy7CBwy7CBxy7CByy7CBzy7CB0y7CB1y7CB2y7CB3y7CB4y7CB5y7CB6y7CB7y7CB8y7CB9y7CB+y7CB-
|
|
223
|
+
this._CASE_ORBIT = decodeOrbit('rCrDIzDYqpII-LiC8cQlHa+0HGrpI6EzClClOBmOBkOBoOBpOBnOBrOBsOBqOlByPBzPBxPyK5crCz+HCydD1dD4dB5dB6dC8dEgeBheCieDmeDpeHj-HCweD1fDxeB+9HBwfC1FE2eBxfBjeBjdD1eDmpIHycB0fEmdBgda6cBhdD4cB1cdyhBC0hBK+hBDhiBBiiBIqiBIgkHChkHKikHDjkHBkkHImkHYjjBBnkH9gGygBB0gBB+gBBhhBBlkHBihBBqhBBijBBqypB4OhzHB70H6BgzHD-GiHo8HBp8HBq8HBr8HBs8HBt8HBu8HBv8HBg8HBh8HBi8HBj8HBk8HBl8HBm8HBn8HB48HB58HB68HB78HB88HB98HB+8HB-8HBw8HBx8HBy8HBz8HB08HB18HB28HB38HBo9HBp9HBq9HBr9HBs9HBt9HBu9HBv9HBg9HBh9HBi9HBj9HBk9HBl9HBm9HBn9HE89HJz9HClaFs+HJj+HHwcQwdQ8-HJz-HqJpdErCBlG-ohBrypBBokH6lVm4+BBl4+B6nCohhCBphhCBqhhCBrhhCBshhCBthhCBuhhCBvhhCBwhhCBxhhCByhhCBzhhCB0hhCB1hhCB2hhCB3hhCB4hhCB5hhCB6hhCB7hhCB8hhCB9hhCB+hhCB-hhCBgihCBhihCBiihCBjihCBkihCBlihCBmihCBnihCBoihCBpihCBqihCBrihCBsihCBtihCBuihCBvihCBgghCBhghCBighCBjghCBkghCBlghCBmghCBnghCBoghCBpghCBqghCBrghCBsghCBtghCBughCBvghCBwghCBxghCByghCBzghCB0ghCB1ghCB2ghCB3ghCB4ghCB5ghCB6ghCB7ghCB8ghCB9ghCB+ghCB-ghCBghhCBhhhCBihhCBjhhCBkhhCBlhhCBmhhCBnhhChD4mhCB5mhCB6mhCB7mhCB8mhCB9mhCB+mhCB-mhCBgnhCBhnhCBinhCBjnhCBknhCBlnhCBmnhCBnnhCBonhCBpnhCBqnhCBrnhCBsnhCBtnhCBunhCBvnhCBwnhCBxnhCBynhCBznhCB0nhCB1nhCB2nhCB3nhCB4nhCB5nhCB6nhCB7nhCFwlhCBxlhCBylhCBzlhCB0lhCB1lhCB2lhCB3lhCB4lhCB5lhCB6lhCB7lhCB8lhCB9lhCB+lhCB-lhCBgmhCBhmhCBimhCBjmhCBkmhCBlmhCBmmhCBnmhCBomhCBpmhCBqmhCBrmhCBsmhCBtmhCBumhCBvmhCBwmhCBxmhCBymhCBzmhC1D3shCB4shCB5shCB6shCB7shCB8shCB9shCB+shCB-shCBgthCBhthCCjthCBkthCBlthCBmthCBnthCBothCBpthCBqthCBrthCBsthCBtthCButhCBvthCBwthCBxthCCzthCB0thCB1thCB2thCB3thCB4thCB5thCC7thCB8thCCwrhCBxrhCByrhCBzrhCB0rhCB1rhCB2rhCB3rhCB4rhCB5rhCB6rhCC8rhCB9rhCB+rhCB-rhCBgshCBhshCBishCBjshCBkshCBlshCBmshCBnshCBoshCBpshCBqshCCsshCBtshCBushCBvshCBwshCBxshCByshCC0shCB1shCk2BgmjCBhmjCBimjCBjmjCBkmjCBlmjCBmmjCBnmjCBomjCBpmjCBqmjCBrmjCBsmjCBtmjCBumjCBvmjCBwmjCBxmjCBymjCBzmjCB0mjCB1mjCB2mjCB3mjCB4mjCB5mjCB6mjCB7mjCB8mjCB9mjCB+mjCB-mjCBgnjCBhnjCBinjCBjnjCBknjCBlnjCBmnjCBnnjCBonjCBpnjCBqnjCBrnjCBsnjCBtnjCBunjCBvnjCBwnjCBxnjCBynjCOgkjCBhkjCBikjCBjkjCBkkjCBlkjCBmkjCBnkjCBokjCBpkjCBqkjCBrkjCBskjCBtkjCBukjCBvkjCBwkjCBxkjCBykjCBzkjCB0kjCB1kjCB2kjCB3kjCB4kjCB5kjCB6kjCB7kjCB8kjCB9kjCB+kjCB-kjCBgljCBhljCBiljCBjljCBkljCBlljCBmljCBnljCBoljCBpljCBqljCBrljCBsljCBtljCBuljCBvljCBwljCBxljCByljC+CwrjCBxrjCByrjCBzrjCB0rjCB1rjCB2rjCB3rjCB4rjCB5rjCB6rjCB7rjCB8rjCB9rjCB+rjCB-rjCBgsjCBhsjCBisjCBjsjCBksjCBlsjCLwqjCBxqjCByqjCBzqjCB0qjCB1qjCB2qjCB3qjCB4qjCB5qjCB6qjCB7qjCB8qjCB9qjCB+qjCB-qjCBgrjCBhrjCBirjCBjrjCBkrjCBlrjC74CgmmCBhmmCBimmCBjmmCBkmmCBlmmCBmmmCBnmmCBommCBpmmCBqmmCBrmmCBsmmCBtmmCBummCBvmmCBwmmCBxmmCBymmCBzmmCB0mmCB1mmCB2mmCB3mmCB4mmCB5mmCB6mmCB7mmCB8mmCB9mmCB+mmCB-mmCBglmCBhlmCBilmCBjlmCBklmCBllmCBmlmCBnlmCBolmCBplmCBqlmCBrlmCBslmCBtlmCBulmCBvlmCBwlmCBxlmCBylmCBzlmCB0lmCB1lmCB2lmCB3lmCB4lmCB5lmCB6lmCB7lmCB8lmCB9lmCB+lmCB-lmChrVgz7CBhz7CBiz7CBjz7CBkz7CBlz7CBmz7CBnz7CBoz7CBpz7CBqz7CBrz7CBsz7CBtz7CBuz7CBvz7CBwz7CBxz7CByz7CBzz7CB0z7CB1z7CB2z7CB3z7CB4z7CB5z7CB6z7CB7z7CB8z7CB9z7CB+z7CB-z7CBgy7CBhy7CBiy7CBjy7CBky7CBly7CBmy7CBny7CBoy7CBpy7CBqy7CBry7CBsy7CBty7CBuy7CBvy7CBwy7CBxy7CByy7CBzy7CB0y7CB1y7CB2y7CB3y7CB4y7CB5y7CB6y7CB7y7CB8y7CB9y7CB+y7CB-y7ChB717CB817CB917CB+17CB-17CBg27CBh27CBi27CBj27CBk27CBl27CBm27CBn27CBo27CBp27CBq27CBr27CBs27CBt27CBu27CBv27CBw27CBx27CBy27CBz27CDg17CBh17CBi17CBj17CBk17CBl17CBm17CBn17CBo17CBp17CBq17CBr17CBs17CBt17CBu17CBv17CBw17CBx17CBy17CBz17CB017CB117CB217CB317CB417Ctxeip6DBjp6DBkp6DBlp6DBmp6DBnp6DBop6DBpp6DBqp6DBrp6DBsp6DBtp6DBup6DBvp6DBwp6DBxp6DByp6DBzp6DB0p6DB1p6DB2p6DB3p6DB4p6DB5p6DB6p6DB7p6DB8p6DB9p6DB+p6DB-p6DBgq6DBhq6DBiq6DBjq6DBgo6DBho6DBio6DBjo6DBko6DBlo6DBmo6DBno6DBoo6DBpo6DBqo6DBro6DBso6DBto6DBuo6DBvo6DBwo6DBxo6DByo6DBzo6DB0o6DB1o6DB2o6DB3o6DB4o6DB5o6DB6o6DB7o6DB8o6DB9o6DB+o6DB-o6DBgp6DBhp6D');
|
|
205
224
|
}
|
|
206
225
|
return this._CASE_ORBIT;
|
|
207
226
|
}
|
|
208
227
|
static _Print = null;
|
|
209
228
|
static get Print() {
|
|
210
229
|
if (!this._Print) {
|
|
211
|
-
this._Print = new UnicodeRangeTable(decodeRanges('hB9CBjBLBCpWBDFBFGBCCCBSBCsMBClBBDxBBDCBC2BBJaBFFBSVBC-
|
|
230
|
+
this._Print = new UnicodeRangeTable(decodeRanges('hB9CBjBLBCpWBDFBFGBCCCBSBCsMBClBBDxBBDCBC2BBJaBFFBSVBC-FBCvBBD6BBDkDBP6BBDwBBDOBCbBDCCBJBGfBIqCBCgFBCHBDBBDVBCGBCEEBCBDIBDBBDDBJFFBCCBDBDYBDCBCFBFBBDVBCGBCBBCBBCBBDCCBDBFBBDCBEIIBCBCIIBPBLCBCIBCCBCVBCGBCBBCEBDJBCCBCCBDQQBCBDLBIGBCCBCHBDBBDVBCGBCBBCEBDIBDBBDCBICBFBBCEBDRBLBBCFBECBCDBEBBCCCBEEBEEBBBELBFEBECBCDBDHHPUBGMBCCBCWBCPBDIBCCBCDBIBBCCBCBBDDBDJBIVBCCBCWBCJBCEBDIBCCBCDBIBBGCBCDBDJBCCBNMBCCBCyBBCCBCFBFPBDZBCCBCRBEXBCIBCDDBFBEFFBEBCCCBGBHJBDCBN5BBFcBmBBBCCCBDBCXBCCCBVBDEBCCCBFBCJBDDBhBnCBCjBBFmBBCjBBCOBCMBmBlGBCGGD4LBCDBDGBCCCBCBDoBBCDBDgBBCDBDGBCCCBCBDOBC4BBCDBDiCBDfBEZBH1CBDFBD-TBCbBE4CBIVBKXBKTBNMBCCBCBBN9CBDJBHJBHNBCKBH4CBIqBBGlCBLeBCLBFLBFEEBoBBDEBMrBBFZBHKBE9BBDgCBCcBDKBHJBHNBDtBBDLBVsCBClFBJ7BBEOBE9BBGqBBDKBJqBBG1QBDFBDlBBDFBDHBCGCBdBD0BBCOBCNBDFBCSBDCBCIBSXBJuBBSBBDaBCMBEhBBPgBBQrEBF5UBXKBWz4BBD9LBGsBBCGGD3BBIBBPXBKGBCGBCGBCGBCGBCGBCGBCGBC9DBjBZBC4CBN1GBbPBC+BBC1CBDmDBGqBBC9CBC1CBKvBBCszcBE2BBK7KBV3FBJ8GBV7BBEJBH3BBJlCBJLBHzDBMdBEtCBCKBFgBBC2BBKNBDJBDmDBZbBLFBDFBDFBKGBCGBC7BBF9DBDJBHj9KBNWBFwBBloItLBDpDBnBGBNEBGZBCEBCCCBCCBCCBoUBhBpBBHyBBCSBCDBFEBCmEBF9FBEFBDFBDFBDCBEGBCGBOBBDLBCZBCSBCBBCOBDNBjB6DBGCBFsBBE3CBCMBEwBwBBsBBjEcBEwBBQbBFjBBKdBGqBBGdBCkBBFNBrB9EBDJBHjBBFjBBFnBBJzBBMLBCOBCGBCBBCKBCOBCGBCBBEzBBN2JBKVBLHBZFBCpBBCIBmCFBDCCBqBBCBBEDDBVBCnCBJIBxBSBCBBGgBBEaBGaBnB3BBFTBDxBBCBBGHBCCBCcBDCBFJBIIBI-BBhBmBBFLBK1BBEcBDaBGZBIDBNGBxCoCB4ByBBOyBBItBBJJBHlBBEcBJBBxGeBCpBBCCBDBBRFBJIBiBtBBJpBBXZBnBbBVWBKtCBFjBBK9BBCEBOYBIJBH0BBCRBJmBBK-CBCTBMRBCuBB-BGBCCCBCBCOBCKBH6BBGJBHDBCHBDBBDVBCGBCBBCEBCJBDBBDCBDHHGGBDGBEEBMJBCDDClBBCJBCDDCDBCJBCBBJBBe7CBCEBfnCBJJBnF1BBDlBBjBkCBMJBHMBU5BBHJBHTBdaBDOBFWB6F7BBlDyCBNHBDDDBGBCBBCdBCBBDLBKJBnCHBDtBBDKBcnCBJyCBOoCBIJB3CHB5ChBBPJBHIBCsBBCNBLcBEfBDVBCNBqCGBCBBCrBBECCBCCBHBJJBHFBCBBCkBBCBBCFBIJBHrBBFJB3HYBIQBCoBBEcB2CQQBwBBO6cBnDuDBCEBMjGBtyCiDBOvhBBRVBL68DBGmSB61G5BBn2B4RBIeBCJBFwCBCJBHdBDFBLlCBLJBCGBCUBGSBxN5BBnG6CBGYBDYBtBqCBF4BBIQBhCEBMGBK1mHBqBfBiDyDB+vIDBCGBCBBCiJBQeeBBBDPPBCBJrMBloCqDBGMBEIBIJBDDBh7D8HBEzNBHWBQQBQtBBDWBKzDB9B1HBLmBBDpCBJvDBWlCB7DTBNTBN2CBKYBoE0CBCmCBCBBDDDBDDBCBCLBCCCBFBCgCBCDBDHBCGBCbBCDBCEBCEEBFBCzKBDjJBD9VBQEBCOBxiBeBHFB2GGBCQBDGBCBBCEBG9BBiBxDxDBrBBENBDJBFBBhKeBS5BBGxOxOBoBB3GqBBFhGhGBdBCVBJBBhHGBCDBCBBCOBCkGBDPBqBrCBFJBFBByYjCBtC8BBjGDBCaBCBBCDDCJBCDBCCCHFFCECBBBCBBCDDCICBCCDDBCGBCDBCDBCCCBIBCQBGCBCEBCQB1BBBvIrBBFjDBNOBDOBCOBCkBBLtFB5BcBOrBBFIBIBBPFB7E4eBEQBEMBE5GBHLBFQQBKBF3BBJJBHnBBJdBDLBFBBPIBoB3KBJNBDMBEKBE4BBCFFBOBDLBFJBIyEBCmDBmgB-2pBBhB9oEBDt0FBDwpHBQtTBjtC9QBjvBq6EBGppIBnkzVvHB', false));
|
|
212
231
|
}
|
|
213
232
|
return this._Print;
|
|
214
233
|
}
|
|
215
234
|
static CATEGORIES = new LazyMap({
|
|
216
|
-
C: () => new UnicodeRangeTable(decodeRanges('
|
|
235
|
+
C: () => new UnicodeRangeTable(decodeRanges('AfBgDgBBOrWrWBHHBCBICCVuMuMnBBBzBBBE4B4BBGBcDBHQBXhGhGxBBB8BBBmDNB8BBByBBBQddBCCMEBhBGBsCiFiFJBBDBBXIICCBFBBKBBDBBFHBCDBDGGBaaBEEHDBDBBXIIDGDBCCGDBDBBECBCGBFCCBFBSJBEKKEXXIDDGBBLIEBCCBNBFBBNGBIEEJBBDBBXIIDGGBKKBDDBEEBFBEDBDGGBTTBIBDHHBBBEFFBBBDCCDCBDCBECBNDBGCBEFFBCCBEBCNBWEBOEEYRRBKKEFFBFBDEEDBBFBBLGBXEEYLLGBBKEEFGBDEBEFFBLLELBOEE0BEEHDBRBBbEETCBZKKCBBICBCDBHCCJFBLBBELB7BDBekBBDCCGZZCYYBGGCIILBBFfBpClBlBBCBoBlBlBQOOBjBBnGCCBDBCBB6LFFBIICFFBqBqBFBBiBFFBIICFFBQQ6BFFBkCkCBhBhBBBBbFB3CBBHBB+UCB6CGBXIBZIBVLBOEEDLB-CBBLFBLFBPMMBEB6CGBsBEBnCJBgBNNBCBNDBCCBrBBBGKBtBDBbFBMCB-BBBiCeeBMMBEBLFBPBBvBBBNTBuCnFnFBGB9BCBQCB-BEBsBBBMHBsBEB3QBBHBBnBBBHBBJGCgBBB2BQQPBBHUUBEEKMMBDBbEByBPBDBBcOOBBBjBNBiBOBtEDB7UVBMUB14BBB-LEBuBCCBDBCBB5BGBDNBZIBI4BI-DhBBb6C6CBKB3GZBxC3C3CBoDoDBDBsB-C-C3CIBxBuzcuzcBBB4BIB9KTB5FHB+GTB9BCBLFB5BHBnCHBNFB1DKBfCBvCMMBCBiB4B4BBHBPBBLBBoDXBdJBHBBHBBHIBIII9BDB-DBBLFBl9KLBYDByBjoIBvLBBrDlBBILBGEBbGGCGDrUfBrBFB0BUUFDBGoEoEBCB-FCBHBBHBBHBBECBIIIBLBDBBNbbUDDQBBPhBB8DEBEDBuBCB5COOBBBCuBBvBhEBeCByBOBdDBlBIBfEBsBEBfmBmBBCBPpBB-EBBLFBlBDBlBDBpBHB1BKBNQQIDDMQQIDDBBB1BLB4JIBXJBJXBHrBrBKkCBHBBCtBtBDCBCBBYpCpCBGBKvBBUDDBDBiBCBcEBclBB5BDBVBBzBDDBDBJEEeBBEDBLGBKGBhCfBoBDBNIB3BCBeBBcEBbGBFLBIvCBqC2BB0BMB0BGBvBHBLFBnBCBeHBDvGBgBrBrBEBBDPBHHBKgBBvBHBrBVBblBBdTBYIBvCDBlBIB-BGGBLBaGBLFB2BTTBGBoBIBhDVVBJBTwBwBB8BBICCFQQMFB8BEBLFBFJJBDDBXXIDDGLLBDDBEEBCCBEBCEBIBBICBGKBLCCBCCnBLLCBBCFFLDDBGBDcB9CGGBcBpCHBLlFB3BBBnBhBBmCKBLFBOSB7BFBLFBVbBcBBQDBY4FB9BjDB0CLBJBBCBBJDDfDDBNNBHBLlCBJBBvBBBMaBpCHB0CMBqCGBL1CBJ3CBjBNBLFBKuBuBPJBeCBhBBBXPPBnCBIDDtBCBCDDKHBLFBHDDmBDDHGBLFBtBDBL1HBaGBSqBqBBBBe0CBCOBzBMB8clDBwDGGBJBlGryCBkDMBxhBPBXJB88DEBoS41GB7Bl2BB6RGBgBLLBCByCLLBEBfBBHJBnCJBLIIWEBUvNB7BlGB8CEBaBBarBBsCDB6BGBS-BBGKBIIB3mHoBBhBgDB0D8vIBFIIDkJkJBNBCcBEBBCNBFHBtMjoCBsDEBOCBKGBLBBF-6DB+HCB1NFBYOBSOBvBBBYIB1D7BB3HJBoBBBrCHBxDUBnC5DBVLBVLB4CIBamEB2CoCoCDBBCBBDBBFNNCIIiCFFBJJIddFGGCCBI1K1KBlJlJB-V-VBNBGQQBuiBBgBFBH0GBISSBIIDGGBDB-BgBBCvDBuBCBPBBLDBD-JBgBQB7BEBCvOBrB1GBsBDBC-FBgBXXBGBD-GBIFFDQQmGBBRoBBtCDBLDBDwYBlCrCB+BhGBFccDCCBCCLFFCCCBEBCDBCECEDDCBBCICDCCBFFIKFCLLSEBEGGSzBBDtIBtBDBlDLBQBBQQQmBJBvF3BBeMBtBDBKGBDNBH5EB6eCBSCBOCB7GFBNDBCOBNDB5BHBLFBpBHBfBBNDBDNBKmBB5KHBPBBOCBMCB6BCCBCBRBBNDBLGB0EoDoDBjgBBh3pBfB-oEBBv0FBBypHOBvThtCB-QhvBBs6EEBrpIlkzVBxHvw-FB', false)),
|
|
217
236
|
Cc: () => new UnicodeRangeTable(decodeRanges('AfgDgB', true)),
|
|
218
237
|
Cf: () => new UnicodeRangeTable(decodeRanges('tFzqBzqBBEBXhGhGyBhMhMBxCxCs5D9-B9-BBDBbEByBEBCJBw03B6H6HBBBimEQQj7IPBhjiBDBwmFHBn0rYffB+CB', false)),
|
|
219
|
-
Cn: () => new UnicodeRangeTable(decodeRanges('
|
|
238
|
+
Cn: () => new UnicodeRangeTable(decodeRanges('4bBBHDBICCVuMuMnBBBzBBBE4B4BBGBcDBHKBvI9B9BBmDmDBMB8BBByBBBQddBCCMEBjBEBuHJJBDDBXXICCBBBFBBKBBDBBFHBCDBDGGBaaBEEHDBDBBXIIDGDBCCGDBDBBECBCGBFCCBFBSJBEKKEXXIDDGBBLIEBCCBNBFBBNGBIEEJBBDBBXIIDGGBKKBDDBEEBFBEDBDGGBTTBIBDHHBBBEFFBBBDCCDCBDCBECBNDBGCBEFFBCCBEBCNBWEBOEEYRRBKKEFFBFBDEEDBBFBBLGBXEEYLLGBBKEEFGBDEBEFFBLLELBOEE0BEEHDBRBBbEETCBZKKCBBICBCDBHCCJFBLBBELB7BDBekBBDCCGZZCYYBGGCIILBBFfBpClBlBBCBoBlBlBQOOBjBBnGCCBDBCBB6LFFBIICFFBqBqBFBBiBFFBIICFFBQQ6BFFBkCkCBhBhBBBBbFB3CBBHBB+UCB6CGBXIBZIBVLBOEEDLB-CBBLFBLFBbFB6CGBsBEBnCJBgBNNBCBNDBCCBrBBBGKBtBDBbFBMCB-BBBiCeeBMMBEBLFBPBBvBBBNTBuCnFnFBGB9BCBQCB-BEBsBBBMHBsBEB3QBBHBBnBBBHBBJGCgBBB2BQQPBBHUUBEEKmDmDNBBcOOBBBjBNBiBOBtEDB7UVBMUB14BBB-LEBuBCCBDBCBB5BGBDNBZIBI4BI-DhBBb6C6CBKB3GZBxC3C3CBoDoDBDBsB-C-C3CIBxBuzcuzcBBB4BIB9KTB5FHB+GTB9BCBLFB5BHBnCHBNFB1DKBfCBvCMMBCBiB4B4BBHBPBBLBBoDXBdJBHBBHBBHIBIII9BDB-DBBLFBl9KLBYDByBDBvzIBBrDlBBILBGEBbGGCGDrUfBrBFB0BUUFDBGoEoEBCC-FCBHBBHBBHBBECBIIIBIBGBBNbbUDDQBBPhBB8DEBEDBuBCB5COOBBBCuBBvBhEBeCByBOBdDBlBIBfEBsBEBfmBmBBCBPpBB-EBBLFBlBDBlBDBpBHB1BKBNQQIDDMQQIDDBBB1BLB4JIBXJBJXBHrBrBKkCBHBBCtBtBDCBCBBYpCpCBGBKvBBUDDBDBiBCBcEBclBB5BDBVBBzBDDBDBJEEeBBEDBLGBKGBhCfBoBDBNIB3BCBeBBcEBbGBFLBIvCBqC2BB0BMB0BGBvBHBLFBnBCBeHBDvGBgBrBrBEBBDPBHHBKgBBvBHBrBVBblBBdTBYIBvCDBlBIBlCJBCBBaGBLFB2BTTBGBoBIBhDVVBJBTwBwBB8BBICCFQQMFB8BEBLFBFJJBDDBXXIDDGLLBDDBEEBCCBEBCEBIBBICBGKBLCCBCCnBLLCBBCFFLDDBGBDcB9CGGBcBpCHBLlFB3BBBnBhBBmCKBLFBOSB7BFBLFBVbBcBBQDBY4FB9BjDB0CLBJBBCBBJDDfDDBNNBHBLlCBJBBvBBBMaBpCHB0CMBqCGBL1CBJ3CBjBNBLFBKuBuBPJBeCBhBBBXPPBnCBIDDtBCBCDDKHBLFBHDDmBDDHGBLFBtBDBL1HBaGBSqBqBBBBe0CBCOBzBMB8clDBwDGGBJBlGryCBkDMB3iBJB88DEBoS41GB7Bl2BB6RGBgBLLBCByCLLBEBfBBHJBnCJBLIIWEBUvNB7BlGB8CEBaBBarBBsCDB6BGBS-BBGKBIIB3mHoBBhBgDB0D8vIBFIIDkJkJBNBCcBEBBCNBFHBtMjoCBsDEBOCBKGBLBBJ76DB+HCB1NFBYOBSOBvBBBYIB1D7BB3HJBoBBBjGUBnC5DBVLBVLB4CIBamEB2CoCoCDBBCBBDBBFNNCIIiCFFBJJIddFGGCCBI1K1KBlJlJB-V-VBNBGQQBuiBBgBFBH0GBISSBIIDGGBDB-BgBBCvDBuBCBPBBLDBD-JBgBQB7BEBCvOBrB1GBsBDBC-FBgBXXBGBD-GBIFFDQQmGBBRoBBtCDBLDBDwYBlCrCB+BhGBFccDCCBCCLFFCCCBEBCDBCECEDDCBBCICDCCBFFIKFCLLSEBEGGSzBBDtIBtBDBlDLBQBBQQQmBJBvF3BBeMBtBDBKGBDNBH5EB6eCBSCBOCB7GFBNDBCOBNDB5BHBLFBpBHBfBBNDBDNBKmBB5KHBPBBOCBMCB6BCCBCBRBBNDBLGB0EoDoDBjgBBh3pBfB-oEBBv0FBBypHOBvThtCB-QhvBBs6EEBrpIm8yVBCdBhD-DBxHvw-BB---BBB---BBB', false)),
|
|
220
239
|
Co: () => new UnicodeRangeTable(decodeRanges('gg4B-nGh4hc9--BD9--B', true)),
|
|
221
240
|
Cs: () => new UnicodeRangeTable(decodeRanges('gg2B--B', true)),
|
|
222
|
-
L: () => new UnicodeRangeTable(decodeRanges('
|
|
223
|
-
LC: () => new UnicodeRangeTable(decodeRanges('
|
|
224
|
-
Ll: () => new UnicodeRangeTable(decodeRanges('
|
|
225
|
-
Lm: () => new UnicodeRangeTable(decodeRanges('wVRBFLBPEBICCmEGG-OnHnHlFBBuIBBFgBgBKEEhFoFoF1mBgEgE2R72B72BsDkTkTxOFBvF+BBOjBjBBjBByVOORMBg-CBByHgGgG2OsBsBBDBGiDiDB+C+
|
|
226
|
-
Lo: () => new UnicodeRangeTable(decodeRanges('
|
|
241
|
+
L: () => new UnicodeRangeTable(decodeRanges('hCZBHZBwBLLFGGBVBCeBCpOBFLBPEBICCiEEBCBBDDBCHHCCBCCCBSBCyCBCqEBJlFBClBBDHHBnBBoCaBFDBuBqBBkBBBCiDBCQQBIIBLLBBBDRRCdBe4CBMZZBfBKBBFGGBUBFKKEYYBXBIKBGXBCGBRpBB7B1BBETTIJBQPBFHBDBBDVBCGBCEEBCBERROBBCCBPBBLJJBEBFBBDVBCGBCBBCBBCBBgBDBCUUBBBRIBCCBCVBCGBCBBCEBETTQBBYMMBGBDBBDVBCGBCBBCEBEffBCCBBBQSSCFBECBCDBEBBCCCBEEBEEBBBELBX1B1BBGBCCBCWBCPBEbbBBBCBBDBBfFFBGBCCBCWBCJBCEBEffBBBCBBQBBSIBCCBCoBBDRRGCBJCBZFBGRBEXBCIBCDDBFB7BvBBCBBNGB7BBBCCCBDBCXBCCCBIBCBBKDDBDBCWWBCBhBgCgCBGBCjBBcEB0DqBBVRRBEBFDBEEEBIIBBBFMBNSSBkBBCGGDqBBCsKBCDBDGBCCCBCBDoBBCDBDgBBCDBDGBCCCBCBDOBC4BBCDBDiCBmBPBR1CBDFBErTBDQBCZBGqCBHHBIRBOSBPRBPMBCCBQzBBkBFFkC4CBIEBDhBBCGGBkCBLeByBdBDEBMrBBFZB3BWBK0BBzC+C+CBtBBSHB3BdBOBBLrBBbjBBqBCBLjBBDKBGqBBDCBqBDBCFBCBBEGGB+FBhC1IBDFBDlBBDFBDHBCGCBdBD0BBCGBCEEBBBCGBEDBDFBFMBGCBCGB1DOORMBmDFFDJBCEEBDBHGCBCBCKBDDBGEBF1B1BB8zC8zCBjHBHDBEBBNlBBCGGD3BBIRRBVBKGBCGBCGBCGBCGBCGBCGBCGBxC2O2OBrBrBBDBGBBF1CBHCBC5CBCDBGqBBC9CBSfBxBPBhQ-tGBhCs0VBkCtBBDsIBEPBLBBVuBBReBDlCByBIBDmDBDxCBVQBCCBCDBCWBezBBPxBB-BFBECCBMMBaBLWBacBIuBBdRRBDBCJBLEBCoBBYCBCHBVWBEEEBwBBCEEBDDBDBDCCZCBDKBICBNFBDFBDFBKGBCGBCqBBCNBHyDBej9KBNWBFwBBloItLBDpDBnBGBNEBGCCBIBCMBCEBCCCBCCBCCBqDBiBqLBT-BBD1BBpBLB1DEBCmEBlBZBHZBM4CBEFBDFBDFBDCBkBLBCZBCSBCBBCOBDNBjB6DBmMcBEwBBwBfBOTBCHBHlBBLdBDjBBFHBxB9EBTjBBFjBBFnBBJzBBNKBCOBCGBCBBCKBCOBCGBCBBEzBBN2JBKVBLHBZFBCpBBCIBmCFBDCCBqBBCBBEDDBVBLWBKeBiCSBCBBLVBLZBHZBnB3BBHBBhCQQBCBCCBCcBrBcBEcBkBHBCbBc1BBLVBLSBORBvDoCB4ByBBOyBBOjBBnBbBKWB7HpBBHBBRFB5BcBLJJBUBrBRBvBUBcWBN0BB6BBBDOOBrBBhBYBbjBBeDDJiBBENNBuBBPDBWCCkBRBCYBUBBgCGBCCCBCBCOBCJBIuBBnBHBDBBDVBCGBCBBCEBETTNEBfJBCDDClBBCaaCtBtBBzBBTDBVCBfvBBVBBC5F5FBtBBqBDBlBvBBV8B8BBpBBOoCoCBZBmBGB6FrBB1D-BBgBHBDDDBGBCBBCXBQCC-CHBDmBBRCCdLLBmBBIWWMtBBUTTBnCBoGgBBgBIBCkBBSyByBBcBxDGBCBBClBBWaaBEBCBBCfBPYYBqBBlISBQCCBLBChBB9DwCwCB4cBnHjGBtyCgDBQvhBBSFBa68DBGmSB61GdBj3B4RBIeBSuCBSdBTvBBRDBgBUBGSBxNsBB0G-BBhBYBDYBtBqCBGjCjCBLBhCBBCPPBNNB0mHBqBfBiDyDB+vIDBCGBCBBCiJBQeeBBBDPPBCBJrMBloCqDBGMBEIBIJBn7F0CBCmCBCBBDDDBDDBCBCLBCCCBFBCgCBCDBDHBCGBCbBCDBCEBCEEBFBCzKBDYBCYBCeBCYBCeBCYBCeBCYBCeBCYBCHB15BeBHFBmI9BBzEsBBLGBRiKiKBcBTrBBlPbBlHdBDwGwGBdBCCBCBBCGBDEBKBBhHGBCDBCBBCOBCkGB8BjCBI1lB1lBBCBCaBCBBCDDCJBCDBCCCHFFCECBBBCBBCDDCICBCCDDBCGBCDBCDBCCCBIBCQBGCBCEBCQBlqE-2pBBhB9oEBDt0FBDwpHBQtTBjtC9QBjvBq6EBGppIB', false)),
|
|
242
|
+
LC: () => new UnicodeRangeTable(decodeRanges('hCZBHZB7BLLBVBCeBCiGBCDBFvGBDZBhGDBDBBECBCHHCCBCCCBSBCyCBCqEBJlFBClBBKoBB44ClBBCGGDqBBDCBhV1CBDFBjkCKBGqBBDCBhCrBBgCMBChBBmD1IBDFBDlBBDFBDHBCGCBdBD0BBCGBCEEBBBCGBEDBDFBFMBGCBCGBmIFFDJBCEEBDBHGCBCBCFBFDDBCBGEBF1B1BB8zC8zCB6DBDmDBHDBEBBNlBBCGGzoetBBTbBnEtCBCWBEDBCsCBZBBE2Z2ZBpBBGIBIvCBh6TGBNEBqgBZBHZBmlBvCBhDjBBFjBB1DKBCOBCGBCBBCKBCOBCGBCBBk2ByBBOyBB+CVBLVB74C-BBhrV-BBhBYBDYBtpZ0CBCmCBCBBDDDBDDBCBCLBCCCBFBCgCBCDBDHBCGBCbBCDBCEBCEEBFBCzKBDYBCYBCeBCYBCeBCYBCeBCYBCeBCYBCHB15BJBCTBHFB2uCjCB', false)),
|
|
243
|
+
Ll: () => new UnicodeRangeTable(decodeRanges('hDZB7BqBqBBWBCHBC2BCBQCBuBCDECBBBDCCDEEBFFDEEBBBDDDCCCDCCBCCDEECDDBDDBBBHGDCOCBSCBDDCEEC4BCBFBDDDBCCFICBjCBDZBiGCCEEEBBBTccBhBBCBBECBCWCBDBCGDB0B0BBuBBCgBCK0BCDMCBgDCxBoBBo6CqBBDCB5XFBjkCIBC2D2DBqBBgCMBChBBnD0ECBHBCgDCBHBJFBLHBJHBJFBLHBJHBJNBDHBJHBJHBJEBCBBHEEBBBCBBJDBDBBJHBLCBCBBzIEEBEEcKFDBBJDBF2B2Bs1CvBBCEEBGCFCCBCCBEBGiDCBIICFFNlBBCGG0oesBCUaCoEMCBBBC+BCBGBCCCDICFCCDCCBBBCSCGGGCMCFCCDOCbEE2ZqBBGIBIvCBh6TGBNEBqhBZBumBnBBpEjBB8EKBCOBCGBCBBk4ByBB+DVB75CfBhsVfB8BYBnqZZBbGBCRBbZBbDBCCCBFBCKBbZBbZBbZBbZBbZBbZBbZBbZBbbBdYBCFBbYBCFBbYBCFBbYBCFBbYBCFBC15B15BBIBCTBHFB4vChBB', false)),
|
|
244
|
+
Lm: () => new UnicodeRangeTable(decodeRanges('wVRBFLBPEBICCmEGG-OnHnHlFBBuIBBFgBgBKEEhFoFoF1mBgEgE2R72B72BsDkTkTxOFBvF+BBOjBjBBjBByVOORMBg-CBByHgGgG2OsBsBBDBGiDiDB+C+CBBB34bjnBjnBBEBvIzDzDdBB6DIBxCYYpDDBEBB2OXXqEtDtDWBBoDDBKngVngVuBBBh-BFBCpBBCIB0sBhBhB2K04D04DnrTDB9PCBpBBBnRMBhCBBCPPB9-P9-PBCBCGBCBByhM9BBqGGBud0Q0QsSAB', false)),
|
|
245
|
+
Lo: () => new UnicodeRangeTable(decodeRanges('qFQQhIFFBCBxGBB7ZaBFDBuBfBCJBkBBBCiDBCZZBLLBBBDRRCdBe4CBMZZBfBWVBrBYBIKBGXBCGBRoBB8B1BBETTIJBROBFHBDBBDVBCGBCEEBCBERROBBCCBPBBLJJBEBFBBDVBCGBCBBCBBCBBgBDBCUUBBBRIBCCBCVBCGBCBBCEBETTQBBYMMBGBDBBDVBCGBCBBCEBEffBCCBBBQSSCFBECBCDBEBBCCCBEEBEEBBBELBX1B1BBGBCCBCWBCPBEbbBBBCBBDBBfFFBGBCCBCWBCJBCEBEffBBBCBBQBBSIBCCBCoBBDRRGCBJCBZFBGRBEXBCIBCDDBFB7BvBBCBBNFB8BBBCCCBDBCXBCCCBIBCBBKDDBDBYDBhBgCgCBGBCjBBcEB0DqBBVRRBEBFDBEEEBIIBBBFMBNyDyDBnKBCDBDGBCCCBCBDoBBCDBDgBBCDBDGBCCCBCBDOBC4BBCDBDiCBmBPByDrTBDQBCZBGqCBHHBIRBOSBPRBPMBCCBQzBBpBkCkCBhBBC0BBIEBDhBBCGGBkCBLeByBdBDEBMrBBFZB3BWBK0BBxFuBBSHB3BdBOBBLrBBbjBBqBCBLdByDDBCFBCBBE7hB7hBBCB4-C3BBZWBKGBCGBCGBCGBCGBCGBCGBCGBoR2B2BF1CBJCCB4CBFGGBpBBC9CBSfBxBPBhQ-tGBhC0wUBC2jBBkCnBBJrIBFPBLBBjCyByBBkCBqFoDoDEGBCCBCDBCWBezBBPxBB-BFBECCBMMBaBLWBacBIuBBuBEBDIBLEBCoBBYCBCHBVPBCFBEEEBwBBCEEBDDBDBDCCZBBEKBIPPBEBDFBDFBKGBCGByEiBBej9KBNWBFwBBloItLBDpDBkCCCBIBCMBCEBCCCBCCBCCBqDBiBqLBT-BBD1BBpBLB1DEBCmEBqDJBCsBBDeBEFBDFBDFBDCBkBLBCZBCSBCBBCOBDNBjB6DBmMcBEwBBwBfBOTBCHBHlBBLdBDjBBFHBhEtCBjDnBBJzBB9CzBBN2JBKVBLHB5EFBDCCBqBBCBBEDDBVBLWBKeBiCSBCBBLVBLZBHZBnB3BBHBBhCQQBCBCCBCcBrBcBEcBkBHBCbBc1BBLVBLSBORBvDoCB4FjBBnBDBCxJxJBoBBHBBRCBCBB5BcBLJJBUBrBRBvBUBcWBN0BB6BBBDOOBrBBhBYBbjBBeDDJiBBENNBuBBPDBWCCkBRBCYBUBBgCGBCCCBCBCOBCJBIuBBnBHBDBBDVBCGBCBBCEBETTNEBfJBCDDClBBCaaCtBtBBzBBTDBVCBfvBBVBBC5F5FBtBBqBDBlBvBBV8B8BBpBBOoCoCBZBmBGB6FrBB0GHBDDDBGBCBBCXBQCC-CHBDmBBRCCdLLBmBBIWWMtBBUTTBnCBoGgBBgBIBCkBBSyByBBcBxDGBCBBClBBWaaBEBCBBCfBPYYBnBBCBBlISBQCCBLBChBB9DwCwCB4cBnHjGBtyCgDBQvhBBSFBa68DBGmSB61GdBj3B4RBIeBSuCBSdBTvBB0BUBGSB0NnBB2MqCBGwFwFB0mHBqBfBiDyDBuwIiJBQeeBBBDPPBCBJrMBloCqDBGMBEIBIJBxzI2P2PBrBBiBiKiKBcBTrBBlPaBmHdBDwGwGBdBCCBCBBCGBDEBKiHiHBFBCDBCBBCOBCkGB8pBDBCaBCBBCDDCJBCDBCCCHFFCECBBBCBBCDDCICBCCDDBCGBCDBCDBCCCBIBCQBGCBCEBCQBlqE-2pBBhB9oEBDt0FBDwpHBQtTBjtC9QBjvBq6EBGppIB', false)),
|
|
227
246
|
Lt: () => new UnicodeRangeTable(decodeRanges('lOGDnB2sH2sHBGBJHBJHBNQQwBAB', false)),
|
|
228
|
-
Lu: () => new UnicodeRangeTable(decodeRanges('hCZBmDWBCGBiB2BCDOCDuBCBECEBBCCCBCCBBBDDBCBBCCBEBBCBBCECBCCDCCBCCBBBCCCBEEIJDCMCDQCDDDCCBC4BCIBBCBBDCCBCBCGCiJCCEJJHCCBBBCCCBCCBPBCIBkBDDBBBEWCGDDCBBDyBBxBgBCK2BCBMCD+CCDlBBq6ClBBCGGzW1CB0kCHHBpBBDCBhK0ECKgDCKHBJFBLHBJHBJFBMGCJHBpCDBNDBNDBNEBMDBnIFFECBDCBDEEBDBHGCBCBDDBLBBG+B+
|
|
229
|
-
M: () => new UnicodeRangeTable(decodeRanges('gYvDB0IGBoIsBBCCCBCCBCCpCKBxBUBRmDmDBFBDFBDBBCDBkBffBZB8CKB7BIBKZZBCBCIBCCBCEBsBCB8BIBrBXBCgBB3BCBCRBCGBLBBeCB5BCCBFBDBBDCBKLLBbbDCB5BCCBDBFBBDCBEffBEEMCB5BCCBGBCCBCCBVBBXFBCCB5BCCBFBDBBDCBICBLBBf8B8BBDBECBCDBKpBpBBDB4BCCBFBCCBCDBIBBMBBeCB5BCCBFBCCBCDBIBBMBBQNNBCB4BBBCGBCCBCDBKLLBeeBBBnCFFBEBCCCBGBTBB+
|
|
230
|
-
Mc: () => new UnicodeRangeTable(decodeRanges('joC4B4BDCBJDBCBBzBBB7BCBHBBDBBLsBsB7BCBjC7B7BBBBJCCB2B2BB7B7BCHHBDDBLLnDBBCBBECBCCBLqBqBBBB+BDB+BBB7BCCBDBDBBCBBKBBdPPB7B7BBBBGCBCCBLrBrBBsCsCBBBHHBTBBrKBBgCsFsFBFFHDDBaaBLLBBBDGBWBBDFBDLLBBB5zBffiEIIBGBCBB7KDBDCBFBBCFBhHBB7BCCKCCBJJBEByExBxBGCCBDBCBB+BffFBBD9B9BDCBCEEBxBxBBGBJBBsFWW35EBB0-dBBD5C5CBzBzBBOBvEBBwBxBxBBFFBDDBBBvDBBDBBZuBuBCuDuDDBBGuHuHBCCBCCBCC0gZCCgEuBuBBBBFBB0DZZB8B8BxBCBKBBO+C+CBBBEBBCrFrFBBBgBBB7BBBCDBDBBDCBKLLB1C1CBBBIDDCDBCBBCmDmDBBBJBBErDrDBBBHCCBCBDuHuHBBBHDBDyDyDBBBJBBCuDuDCBBHoDoDCBBFmImIBBBK4H4HBEBCBBFDDCvEvEBBBJDBF1C1CeBB-
|
|
247
|
+
Lu: () => new UnicodeRangeTable(decodeRanges('hCZBmDWBCGBiB2BCDOCDuBCBECEBBCCCBCCBBBDDBCBBCCBEBBCBBCECBCCDCCBCCBBBCCCBEEIJDCMCDQCDDDCCBC4BCIBBCBBDCCBCBCGCiJCCEJJHCCBBBCCCBCCBPBCIBkBDDBBBEWCGDDCBBDyBBxBgBCK2BCBMCD+CCDlBBq6ClBBCGGzW1CB0kCHHBpBBDCBhK0ECKgDCKHBJFBLHBJHBJFBMGCJHBpCDBNDBNDBNEBMDBnIFFECBDCBDEEBDBHGCBCBDDBLBBG+B+B9zCvBBxBCCBBBDGCBCBCDDJCBCgDCJCCFuqeuqeCqBCUaCoEMCE8BCLECBICFCCDCCEUCBDBCEBCOCBCBCCCBQCZs5Vs5VBYBmmBnBBpEjBB9EKBCOBCGBCBBr3ByBB+EVB75CfBhsVfBhCYBoqZZBbZBbZBbCCBGDBDDBCBCHBbZBbBBCDBDHBCGBcBBCDBCEBCEEBFBcZBbZBbZBbZBbZBbZBfYBiBYBiBYBiBYBiBYBiB2pE2pEBgBB', false)),
|
|
248
|
+
M: () => new UnicodeRangeTable(decodeRanges('gYvDB0IGBoIsBBCCCBCCBCCpCKBxBUBRmDmDBFBDFBDBBCDBkBffBZB8CKB7BIBKZZBCBCIBCCBCEBsBCB8BIBrBXBCgBB3BCBCRBCGBLBBeCB5BCCBFBDBBDCBKLLBbbDCB5BCCBDBFBBDCBEffBEEMCB5BCCBGBCCBCCBVBBXFBCCB5BCCBFBDBBDCBICBLBBf8B8BBDBECBCDBKpBpBBDB4BCCBFBCCBCDBIBBMBBeCB5BCCBFBCCBCDBIBBMBBQNNBCB4BBBCGBCCBCDBKLLBeeBBBnCFFBEBCCCBGBTBB+BDDBFBNHBjDDDBHBMGBqCBBcECFBByBTBCBBGKBCjBBKlDlDBSBYDBFCBCCBDGBEDBOLBCLLBCBgWCBzdDBdCBeBBfBBhCfBKuBuBBBBC2D2DBjBjB3DLBFLB8GEB6BJBCcBDxBxBBsBBDLBVEBwBQBnBIBNCBfMB5BNBxBTB5ECBCUBFHHDCBnG-BBxWgBB--CCBuEhDhDBeBrRFBqDBB1udDBCJBhBBBxCBBxIEEFYYBDBF0C0CBzBzBBQBbRBOnBnBBGBaMBtBDBwBNBlBkCkCBMBNJJBuBuBBBBzBCCBBBDBBGBBCqBqBBDBGBBtHHBCBBx5TiXiXBOBRPBuejHjH2EEBn0BCBCBBGDBpBCBFmFmFB+R+RBCBiCEB+JBBuCFBnCKByBDB7DCB2BOBqBDDBLLBCBuBKBI+B+BBBBlBNBRBBtBNNBBBxBNBJDBCBB9CLBHDD+ELBWDB4BBBCGBDBBDCBKLLBDDBFBEEBkCIBCDDCDBCEBCPPBzCzCBQBYyCyCBSBsHGBDIBcBBzCQBrDMBmDOBhIOB2HFBCBBDDBCCCBuEuEBFBDGBEddBIBpBGBCDBJKKBJBvBPBnGHBoGHBCHBzCVBCNB7DFBECCBCCBFBCjCjCBDBCBBCEB8KDBKBBCxBxBBFBEEBYmnFmnFHOBpmLRBhuCEB8BGB5gBCCB1BBIDByCMMBslTslTBizEizEBsBBDWB-QEBEFBJHBDGBfDB1ECB89B2BBFxBBJPPXEBCOBxqBGBCQBDGBCBBCEBlDhFhFBFB4L+B+BBCB9PDB-HBB0HDDIBBG7O7OBFBuDGB29lYvHB', false)),
|
|
249
|
+
Mc: () => new UnicodeRangeTable(decodeRanges('joC4B4BDCBJDBCBBzBBB7BCBHBBDBBLsBsB7BCBjC7B7BBBBJCCB2B2BB7B7BCHHBDDBLLnDBBCBBECBCCBLqBqBBBB+BDB+BBB7BCCBDBDBBCBBKBBdPPB7B7BBBBGCBCCBLrBrBBsCsCBBBHHBTBBrKBBgCsFsFBFFHDDBaaBLLBBBDGBWBBDFBDLLBBB5zBffiEIIBGBCBB7KDBDCBFBBCFBhHBB7BCCKCCBJJBEByExBxBGCCBDBCBB+BffFBBD9B9BDCBCEEBxBxBBGBJBBsFWW35EBB0-dBBD5C5CBzBzBBOBvEBBwBxBxBBFFBDDBBBvDBBDBBZuBuBCuDuDDBBGuHuHBCCBCCBCC0gZCCgEuBuBBBBFBB0DZZB8B8BxBCBKBBO+C+CBBBEBBCrFrFBBBgBBB7BBBCDBDBBDCBKLLB1C1CBBBIDDCDBCBBCmDmDBBBJBBErDrDBBBHCCBCBDuHuHBBBHDBDyDyDBBBJBBCuDuDCBBHoDoDCBBFmImIBBBK4H4HBEBCBBFDDCvEvEBBBJDBF1C1CeBB-BqGqGECCoGPPrDIID2G2GBDBFBBC-K-KBNNxBBBJBBCpvQpvQBBBlxD2BBpDBB0rYBBHFB', false)),
|
|
231
250
|
Me: () => new UnicodeRangeTable(decodeRanges('okBBB1xF-wB-wBBCBCCBsshBCB', false)),
|
|
232
|
-
Mn: () => new UnicodeRangeTable(decodeRanges('gYvDB0IEBqIsBBCCCBCCBCCpCKBxBUBRmDmDBFBDFBDBBCDBkBffBZB8CKB7BIBKZZBCBCIBCCBCEBsBCB8BIBrBXBCfB4BCCFHBFEEBFBLBBe7B7BFDBJVVBbbDBB6BFFBFFBDDBBBEffBEEMBB6BFFBDBCBBFVVBXXBEBC7B7BDCCBCBJIIBMMBff+
|
|
233
|
-
N: () => new UnicodeRangeTable(decodeRanges('wBJB5DBBGDDBBBitBJBnEJBnGJB9MJB3DJBFFBtDJB3DJB3DJBDFBvDMB0DJBJGBoDJBpDGBISBuDJBhDJB3DJBnCTBtIJBnCJBwWTBybCBwHJBHJBXJBtJJBhEKBmFJBHJB3FJB3CJBnEJBHJB3gBEEBEBHJBnGyBBDEB3W7BBvCVB3TdBqrBqYqYaIBPCB4KDBrEJBfHBCOBhBJBoBOBh7cJB9FJBhKFB7EJBnBJBnGJBXJB3CJB3MJB34UJBuPsBBN4BBSBB2KaBlBDBeJJnEEBrGJBvdHBaGBoBIBsCEBXFBhFBBDPBDtBBhCIB1BBBfCBsCEBpDHBZHBqBGBrKFBxBJBHJB3IeB-EJBrBDBxDGBnEdBhEJB9BJBxEJBITB8HJB3KJB3DJB3LJBnDJBHTBtCLBlNSB+
|
|
234
|
-
Nd: () => new UnicodeRangeTable(decodeRanges('
|
|
235
|
-
Nl: () => new UnicodeRangeTable(decodeRanges('u3FCBwzCiBBDDB-
|
|
251
|
+
Mn: () => new UnicodeRangeTable(decodeRanges('gYvDB0IEBqIsBBCCCBCCBCCpCKBxBUBRmDmDBFBDFBDBBCDBkBffBZB8CKB7BIBKZZBCBCIBCCBCEBsBCB8BIBrBXBCfB4BCCFHBFEEBFBLBBe7B7BFDBJVVBbbDBB6BFFBFFBDDBBBEffBEEMBB6BFFBDBCBBFVVBXXBEBC7B7BDCCBCBJIIBMMBff+BNNzBEE4BCCBBBGCBCDBIBBMBBe7B7BDHHGBBVBBdBB6BBBFDBJVVBeepCIIBBBC7C7CDGBNHBjDDDBHBMGBqCBBcEC4BNBCEBCBBGKBCjBBKnDnDBCBCFBCBBDBBaBBFCBRDBODDBHHQgWgWBBBzdCBeBBfBBfBBhCBBCGBJDDBJBKuBuBBBBC2D2DBjBjB3DCBFBBKHHBBB8GBBD7B7BCGBCCCDHBHJBDxBxBBMBCeBDLBVDBxBCCBDBCGGpBIBNBBhBDBDBBCCB5BCCBEECCB7BHBDBB5ECBCMBCGBFHHEBBnG-BBxWMBFEEBKB--CCBuEhDhDBeBrRDBsDBB1udFFBIBhBBBxCBBxIEEFaaBGG4EBBbRBOnBnBBGBaKBvBCBxBDDBCBDBBoBkCkCBEBDBBDBBNJJwB0B0BCCBDBBGBBCrBrBBJJvHDDFx5Tx5TiXPBRPBuejHjH2EEBn0BCBCBBGDBpBCBFmFmFB+R+RBCBiCEB+JBBuCFBnCKByBDB8D3B3BBNBqBDDBLLBBByBDBDBBI+B+BBBBlBEBCHB-BNNB1B1BBHBLDBDgDgDBBBDCCBHHD+E+EEHBWBB6BBBEmBmBBFBEEBnCFBOECPBB2CHBDCBCYY1CFBCFFBCCBvHvHBCBHBBCBBcBB2CHBDCCBrDrDCDDBEBCmDmDCDDBCBCEBkIIBCBBhIBBCFFxEDBDBBFhBhBBIBpBFBDDBJKKBEBDCBvBMBCBBnGCCBBBCqGqGBFBCFBCzCzCBUBDGBCBBCBB7DFBECCBCCBFBCpCpCBEEC8K8KBMMB1B1BBDBGCCYmnFmnFHOBpmLLBECBhuCEB8BGB5gBgCgCBCByC5lT5lTBizEizEBsBBDWBhRCBSHBDGBfDB1ECB89B2BBFxBBJPPXEBCOBxqBGBCQBDGBCBBCEBlDhFhFBFB4L+B+BBCB9PDB-HBB0HDDIBBG7O7OBFBuDGB29lYvHB', false)),
|
|
252
|
+
N: () => new UnicodeRangeTable(decodeRanges('wBJB5DBBGDDBBBitBJBnEJBnGJB9MJB3DJBFFBtDJB3DJB3DJBDFBvDMB0DJBJGBoDJBpDGBISBuDJBhDJB3DJBnCTBtIJBnCJBwWTBybCBwHJBHJBXJBtJJBhEKBmFJBHJB3FJB3CJBnEJBHJB3gBEEBEBHJBnGyBBDEB3W7BBvCVB3TdBqrBqYqYaIBPCB4KDBrEJBfHBCOBhBJBoBOBh7cJB9FJBhKFB7EJBnBJBnGJBXJB3CJB3MJB34UJBuPsBBN4BBSBB2KaBlBDBeJJnEEBrGJBvdHBaGBoBIBsCEBXFBhFBBDPBDtBBhCIB1BBBfCBsCEBpDHBZHBqBGBrKFBxBJBHJB3IeB-EJBrBDBxDGBnEdBhEJB9BJBxEJBITB8HJB3KJB3DJB3LJBnDJBHTBtCLBlNSB+CJB3UJB3CcBkHJBnCJB3BJBnLJBnDUBshBuDBimPJBnpCJB3CJBnEJBCGBvQJBnIWB+KCB6nXJBnuBTBNTBtDYB2iBxBBhqCJBnNJB3PJB4HJBtWIBhEJB4Y6BBCCBCDBtCsBBCOBjeMBk3CJB', false)),
|
|
253
|
+
Nd: () => new UnicodeRangeTable(decodeRanges('wBJnxBJnEJnGJ9MJ3DJ3DJ3DJ3DJ3DJ3DJ3DJ3DJ3DJhDJ3DJnCJ3IJnCJn6BJnBJtJJhEJnFJHJ3FJ3CJnEJHJnuiBJnVJnBJnGJXJ3CJ3MJ34UJnsBJnkCJHJ9YJhEJ9BJxEJ3IJ3KJ3DJ3LJnDJHTtCJnNJnDJ3UJ3CJ3HJnCJ3BJnLJ3uQJnpCJ3CJnEJ3QJ37XJ12CxBhqCJnNJ3PJ4HJ2aJ30EJ', true)),
|
|
254
|
+
Nl: () => new UnicodeRangeTable(decodeRanges('u3FCBwzCiBBDDB-zDaaBHBPCBs1dJBxyW0BBtOJJnEEBrhIuDBm8SCB', false)),
|
|
236
255
|
No: () => new UnicodeRangeTable(decodeRanges('yFBBGDDBBB2pCFB5LFB5DCBmEGB6GGBSIByNJB2hBTB0jBJBhP20B20BEFBHJBnGPBqB3W3WB6BBvCVB3TdBqrB1kB1kBBCBrEJBfHBCOBhBJBoBOBxrdFBymWsBBiCDBSBB2KaBlBDB1pBHBaGBoBIBsCEBXFBhFBBDPBDtBBhCIB1BBBfCBsCEBpDHBZHBqBGBrKFBhLeB-EJBrBDBxDGBnETB8LTBmqBBBvNIBobSB0aUBn8SGB-YWBqhZTBNTBtDYBvqFIBid6BBCCBCDBtCsBBCOBjeMB', false)),
|
|
237
|
-
P: () => new UnicodeRangeTable(decodeRanges('hBCBCFBCDBLBBEBBbCBCccCkBkBGEELBBEEE-VJJzOFBqBBB0BCCDDDtBBBVBBCBBOCCBBBrCDBnDsBsBBMBqHCB3BOBgBmImIBLLtE5D5D6DnMnMNwLwL7CLLBpFpFBNBCmBmBBCBoCrCrCBDBFBBwDFBsFlTlTBHB4EuTuTtBBBvCCBoCBB+ECBCCBmBKB6JBB5GBBhEGBCFBhFBBLGBdCB9DDB8BEB-BBBhCHBM9Z9ZBWBJTBCMBCLBfBBPBB6TDBeBB+hBNBwCBBgBJB0MVBgCDBhBBB8XDBCBBxDwEwEBtBBCfBDLBkNCBFJBDLBRNNjD7C7CjgdBBuICBkDLL0DFB9LDB3CBBpBCBCyByBBwBwBiDMBRBB9DDB-DBBRBB6HzqUzqUBxGxGBIBXiBBCNBCFFCBB2ECBCFBCDBLBBEBBbCBCccCCCBFB7MCB9UxBxB-MoXoXoGgBgBxIIBnBxDxDBFBjCGB6CDByO-J-
|
|
256
|
+
P: () => new UnicodeRangeTable(decodeRanges('hBCBCFBCDBLBBEBBbCBCccCkBkBGEELBBEEE-VJJzOFBqBBB0BCCDDDtBBBVBBCBBOCCBBBrCDBnDsBsBBMBqHCB3BOBgBmImIBLLtE5D5D6DnMnMNwLwL7CLLBpFpFBNBCmBmBBCBoCrCrCBDBFBBwDFBsFlTlTBHB4EuTuTtBBBvCCBoCBB+ECBCCBmBKB6JBB5GBBhEGBCFBhFBBLGBdCB9DDB8BEB-BBBhCHBM9Z9ZBWBJTBCMBCLBfBBPBB6TDBeBB+hBNBwCBBgBJB0MVBgCDBhBBB8XDBCBBxDwEwEBtBBCfBDLBkNCBFJBDLBRNNjD7C7CjgdBBuICBkDLL0DFB9LDB3CBBpBCBCyByBBwBwBiDMBRBB9DDB-DBBRBB6HzqUzqUBxGxGBIBXiBBCNBCFFCBB2ECBCFBCDBLBBEBBbCBCccCCCBFB7MCB9UxBxB-MoXoXoGgBgBxIIBnBxDxDBFBjCGB6CDByO-J-JjBlElEBDBtBDB+FGBuDBBCDB-DDBxBBBwCDBFOOCCB5CFBsDrJrJBCCBzDzDBDBLBBCpDpD7HWBqDCBdMBtCjEjEBBB9HpIpIBBB8E9C9CBGB0CCBCEB+CJB4GgDgDBDBrBBBmUBBrCMBwFxjBxjBBDB97CBB8zOBBmEiCiCBDBJpRpRBBBoJDBoK9lT9lTovHEB07C-a-aBAB', false)),
|
|
238
257
|
Pc: () => new UnicodeRangeTable(decodeRanges('-Cg-Hg-HBUU-u3BBBZCBwHAB', false)),
|
|
239
258
|
Pd: () => new UnicodeRangeTable(decodeRanges('tB9qB9qB0BiyDiyDmgBqgCqgCBEBiwDDDgBBBFdd-NUUwDxszBxszBBmBmBLqFqFhzD-J-J', false)),
|
|
240
259
|
Pe: () => new UnicodeRangeTable(decodeRanges('pB0B0BgB+1D+1DC-6B-6BqtC4B4BQ7T7TCff-hBMCxChBhBCGC1MUChCCCiBmhBmhBCECtBGCtNICEGCDBB-ozB6G6GeOCESSCCCrF0B0BgBGD', false)),
|
|
241
260
|
Pf: () => new UnicodeRangeTable(decodeRanges('7F+6H+6HEddpuDCCFDDQEE', false)),
|
|
242
261
|
Pi: () => new UnicodeRangeTable(decodeRanges('rFt7Ht7HDBBDaapuDCCFDDQEE', false)),
|
|
243
|
-
Po: () => new UnicodeRangeTable(decodeRanges('hBCBCCBDECBLLBEEBcclCGGPBBI-V-VJzOzOBEBqB3B3BDDDtBBBVBBCBBOCCBBBrCDBnDsBsBBMBqHCB3BOBgBmImIBLLtE5D5D6DnMnMNwLwL7CLLBpFpFBNBCxDxDrCEBFBBwDFBsFlTlTBHBmY9D9DBBBoCBB+ECBCCBmBFBCDB6JBB5GBBhEGBCFBhFBBLGBdCB9DDB8BEB-BBBhCHBMjajaBJJBGBJIBDDBDCBEKBCCCBIB7kDDBCBBxDwEwEBFFBBBDDDBHBCBBCDDBLLBDBCJBDDBCCCBLBDCBtNCB6B+F+FjgdBBuICBkDLL0DFB9LDB3CBBpBCBCyByBBwBwBiDMBRBB9DDB-DBBRBB6HlxUlxUBFBDXXVBBDDBECBCDBICBHCCB2E2EBBBCCBDECBLLBEEBcclBDDB7M7MBBB9UxBxB-
|
|
262
|
+
Po: () => new UnicodeRangeTable(decodeRanges('hBCBCCBDECBLLBEEBcclCGGPBBI-V-VJzOzOBEBqB3B3BDDDtBBBVBBCBBOCCBBBrCDBnDsBsBBMBqHCB3BOBgBmImIBLLtE5D5D6DnMnMNwLwL7CLLBpFpFBNBCxDxDrCEBFBBwDFBsFlTlTBHBmY9D9DBBBoCBB+ECBCCBmBFBCDB6JBB5GBBhEGBCFBhFBBLGBdCB9DDB8BEB-BBBhCHBMjajaBJJBGBJIBDDBDCBEKBCCCBIB7kDDBCBBxDwEwEBFFBBBDDDBHBCBBCDDBLLBDBCJBDDBCCCBLBDCBtNCB6B+F+FjgdBBuICBkDLL0DFB9LDB3CBBpBCBCyByBBwBwBiDMBRBB9DDB-DBBRBB6HlxUlxUBFBDXXVBBDDBECBCDBICBHCCB2E2EBBBCCBDECBLLBEEBcclBDDB7M7MBBB9UxBxB-MoXoXoGgBgBxIIBnBxDxDBFBjCGB6CDB0ZlElEBDBtBDB+FGBuDBBCDB-DDBxBBBwCDBFOOCCB5CFBsDrJrJBCCBzDzDBDBLBBCpDpD7HWBqDCBdMBtCjEjEBBB9HpIpIBBB8E9C9CBGB0CCBCEB+CJB4GgDgDBDBrBBBmUBBrCMBwFxjBxjBBDB97CBB8zOBBmEiCiCBDBJpRpRBBBoJDBoK9lT9lTovHEB07C-a-aBAB', false)),
|
|
244
263
|
Ps: () => new UnicodeRangeTable(decodeRanges('oBzBzBgB-1D-1DC-6B-6B-rCEEnB4B4BQ7T7TCff-hBMCxChBhBCGC1MUChCCCiBmhBmhBCECaTTCECtNICEGCDipzBipzB4GeeCMCESSCCCrFzBzBgBEEDAB', false)),
|
|
245
|
-
S: () => new UnicodeRangeTable(decodeRanges('kBHHRCBgBCCcCCkBEBCBBDCCBCBDEEfgBgBrODBNNBGGBCCCBPB2DPPBxDxDsErIrIBBB3DCBDDDBvGvGLUUB4H4HIBBpEqLqLBHHB2H2H-DjEjEBGBlEwGwGqBmGmGiGCBQCCBBBDFBVECmEHBCFBCBBGDBmGBBxXJB0WuLuLlL+E+
|
|
246
|
-
Sc: () => new UnicodeRangeTable(decodeRanges('kB+D+
|
|
264
|
+
S: () => new UnicodeRangeTable(decodeRanges('kBHHRCBgBCCcCCkBEBCBBDCCBCBDEEfgBgBrODBNNBGGBCCCBPB2DPPBxDxDsErIrIBBB3DCBDDDBvGvGLUUB4H4HIBBpEqLqLBHHB2H2H-DjEjEBGBlEwGwGqBmGmGiGCBQCCBBBDFBVECmEHBCFBCBBGDBmGBBxXJB0WuLuLlL+E+EBgBBiLJBKIBhiBCCBBBMCBOCBOCBOBBmCOOoBCBOCBUhBB-BBBCDBCBBLCCBBBGFBCECFMMBFFBDBGDBC7B7BBFFB2LBFcBD+HBXKByCtCBXnTBtBwBBDeBLyMBX+BBFfBD1LBDpEBmHFBmLBBvBZBC4CBN1GBbPBFOOBNNWBBHBB8CBB0HBBFJBhBlBBKRRBdBMdBJQQBeBLmBBQ-JBhuG-BBx0V2BB6RWBKBBoDBB+EDBLDB+RCBiHPPB+9T+9TpEgBBuLPBhCBB3BHBtBDBjDCCBBBD7E7EHRRBBBgBCCcCCiEGBCGBOBB6JIB6BQBDCBCMBEwBwBBrBB7zBBBwSmWmWBiKiKBGBnjC2kC2kCBbBr6SDBG3qU3qUk7DvHBLCBEzNBHWBQQBgDzDB9B1HBLmBBD7BBGCBXBBIdBF8BBWhCBE7F7FB1CBrbaagBaagBaagBaagBaa9B-PB4BDBzBHBCNBCBBp2BwNwNttCEE+DiOiOBvIvIBqBBFjDBNOBDOBCOBCkBBYgFB5BcBOrBBFIBIBBPFB7E4eBEQBEMBE5GBHLBFQQBKBF3BBJJBHnBBJdBDLBFBBPIBoB3KBJNBDMBEKBE4BBCFFBOBDLBFJBIyEBC7CBLAB', false)),
|
|
265
|
+
Sc: () => new UnicodeRangeTable(decodeRanges('kB+D+DBCBqnB8D8DzPBBzPBBI2H2HoImSmS8sClmClmCBgBB37hBkuVkuVtD7E7E8GBBEBB3-HDB-4wBxtCxtC', false)),
|
|
247
266
|
Sk: () => new UnicodeRangeTable(decodeRanges('+CCCoCHHFEEqQDBNNBGGBCCCBPB2DPPBjoBjoB15FCCBBBMCBOCBOCBOBB9kEBBkzdWBKBBoDBBxePPBniUniUBPB8bCCjF4g9B4g9BBDB', false)),
|
|
248
|
-
Sm: () => new UnicodeRangeTable(decodeRanges('rBRRBBB+BCCuBFFmBgBgB-XwQwQBBB8xGOOoBCBOCBsEoBoBBDBHlClCBDBGBBFGDIgBgBBDDCgBgBBqIBhBBB7CffBXBpBFB2OKK3BHBwDxKxKBDBDeBLPBhIiEBX+BBFfBDhIBxBUBDFB9+zB5Z5ZCCBlFRRBBB+
|
|
249
|
-
So: () => new UnicodeRangeTable(decodeRanges('mFDDFCCyerIrIBgEgEBvGvGLUUB4H4HkQ2L2LjEFBClElEwGqBqBoMCBQCCBBBDFBVECmEHBCFBCBBGDBmGBBxXJB0WzWzW+EhBBiLJBKIBksBBBCDBCBBLCCBHHBEBCECFMMBPPCBBC7B7BBKKBDBDDBCBBCBBCGBCeBDBBCCCBdBtIHBFTBDGBDwCBCdBanBBHnCBXKByCtCBX2FBCIBC1BBJuDBC3HBtBrBBhC-
|
|
267
|
+
Sm: () => new UnicodeRangeTable(decodeRanges('rBRRBBB+BCCuBFFmBgBgB-XwQwQBBB8xGOOoBCBOCBsEoBoBBDBHlClCBDBGBBFGDIgBgBBDDCgBgBBqIBhBBB7CffBXBpBFB2OKK3BHBwDxKxKBDBDeBLPBhIiEBX+BBFfBDhIBxBUBDFB9+zB5Z5ZCCBlFRRBBB+BCCkEHHBCBitDBBhrwBx+Bx+BagBgBagBgBagBgBagBgBat5Ft5FB-uC-uCBHB', false)),
|
|
268
|
+
So: () => new UnicodeRangeTable(decodeRanges('mFDDFCCyerIrIBgEgEBvGvGLUUB4H4HkQ2L2LjEFBClElEwGqBqBoMCBQCCBBBDFBVECmEHBCFBCBBGDBmGBBxXJB0WzWzW+EhBBiLJBKIBksBBBCDBCBBLCCBHHBEBCECFMMBPPCBBC7B7BBKKBDBDDBCBBCBBCGBCeBDBBCCCBdBtIHBFTBDGBDwCBCdBanBBHnCBXKByCtCBX2FBCIBC1BBJuDBC3HBtBrBBhC-HBhQvBBWBBHmBBDpEBmHFBmLBBvBZBC4CBN1GBbPBFOOBNNWBBHBBxKBBFJBhBlBBKRRBdBMdBJQQBeBLmBBQ-JBhuG-BBx0V2BBibDBLBBC+R+RBBBqqUPBuLPBhCBB3BHBuBCBlPEEFBBOBB6JIB6BQBDCBCMBEwBwBBrBB7zBBBwSpgBpgBBGBnjC2kC2kCBGBFQBr6SDBG3qU3qUk7DvHBLCBEzNBHWBQPBhDzDB9B1HBLmBBD7BBGCBXBBIdBF8BBWhCBE7F7FB1CBqlB-PB4BDBzBHBCNBCBBp2B96C96CiEyWyWBqBBFjDBNOBDOBCOBCkBBYgFB5BcBOrBBFIBIBBPFB7E6HBG4WBEQBEMBE5GBHLBFQQBKBF3BBJJBHnBBJdBDLBFBB-B3KBJNBDMBEKBE4BBCFFBOBDLBFJBIyEBC7CBLAB', false)),
|
|
250
269
|
Z: () => new UnicodeRangeTable(decodeRanges('gBgEgEgvFgsCgsCBJBeBBGwBwBh9DAB', false)),
|
|
251
270
|
Zl: () => new UnicodeRangeTable(decodeRanges('ohIA', true)),
|
|
252
271
|
Zp: () => new UnicodeRangeTable(decodeRanges('phIA', true)),
|
|
@@ -259,7 +278,7 @@ class UnicodeTables {
|
|
|
259
278
|
Adlam: () => new UnicodeRangeTable(decodeRanges('go6DrCFJFB', true)),
|
|
260
279
|
Ahom: () => new UnicodeRangeTable(decodeRanges('g4lCaDOFW', true)),
|
|
261
280
|
Anatolian_Hieroglyphs: () => new UnicodeRangeTable(decodeRanges('ggxCmS', true)),
|
|
262
|
-
Arabic: () => new UnicodeRangeTable(decodeRanges('
|
|
281
|
+
Arabic: () => new UnicodeRangeTable(decodeRanges('gwBEBCFBCNBCCBCfBCJBMZBCrDBChBBxCvBBxHhBBGqCBCcBxy8BtPBDvEBhBPBxDEBCmEBk7DeBkCFBJIBiBFBh43BDBCaBCBBCDDCJBCDBCCCHFFCECBBBCBBCDDCICBCCDDBCGBCDBCDBCCCBIBCQBGCBCEBCQB1BBB', false)),
|
|
263
282
|
Armenian: () => new UnicodeRangeTable(decodeRanges('xpBlBDxBDCks9BE', true)),
|
|
264
283
|
Avestan: () => new UnicodeRangeTable(decodeRanges('g4iC1BEG', true)),
|
|
265
284
|
Balinese: () => new UnicodeRangeTable(decodeRanges('g4GsCCxB', true)),
|
|
@@ -267,6 +286,7 @@ class UnicodeTables {
|
|
|
267
286
|
Bassa_Vah: () => new UnicodeRangeTable(decodeRanges('w26CdDF', true)),
|
|
268
287
|
Batak: () => new UnicodeRangeTable(decodeRanges('g+GzBJD', true)),
|
|
269
288
|
Bengali: () => new UnicodeRangeTable(decodeRanges('gsCDBCHBDBBDVBCGBCEEBCBDIBDBBDDBJFFBCCBDBDYB', false)),
|
|
289
|
+
Beria_Erfe: () => new UnicodeRangeTable(decodeRanges('g17CYDY', true)),
|
|
270
290
|
Bhaiksuki: () => new UnicodeRangeTable(decodeRanges('ggnCICsBCNLc', true)),
|
|
271
291
|
Bopomofo: () => new UnicodeRangeTable(decodeRanges('qXB6wLqBxDf', true)),
|
|
272
292
|
Brahmi: () => new UnicodeRangeTable(decodeRanges('ggkCtCFjBKA', true)),
|
|
@@ -280,7 +300,7 @@ class UnicodeTables {
|
|
|
280
300
|
Cham: () => new UnicodeRangeTable(decodeRanges('gwqB2BKNDJDD', true)),
|
|
281
301
|
Cherokee: () => new UnicodeRangeTable(decodeRanges('g9E1CDFz7lBvC', true)),
|
|
282
302
|
Chorasmian: () => new UnicodeRangeTable(decodeRanges('w9jCb', true)),
|
|
283
|
-
Common: () => new UnicodeRangeTable(decodeRanges('AgCBbFBbuBBCOBCEBYgBgBiOmBBGEBDTB1DKKHCC+
|
|
303
|
+
Common: () => new UnicodeRangeTable(decodeRanges('AgCBbFBbuBBCOBCEBYgBgBiOmBBGEBDTB1DKKHCC+THHPEEhB9E9ElQiEiEB6mB6mB2MDBjJwvBwvBBBBoCBBsGBBCumBumBOIIBCBCFBCCBDmYmYBKBD2CBCKBEKBCOBShBB-BlBBCCBDFBCaBCQBqBCBF5UBXKBW-cBhIzTBDpEBhQ9CBzMUBCCCBXBQHBFDB8CBBE7C7CB0E0EBOBhBlBBKxBxBB+BBgBwCBwB5C5CBmFBhuG-BBhoWhBBnDCBmFJB1HhFhFsMPPBzuUzuUBxGxGBIBXiBBCSBCDB0ECCBeBbFBbKBLuBuBBhChCBFBCGBLEBjICBFsBBEIBxCMB0BsBBlHaBltuBDB96D8HBEzNBHWBQQBgDzDB9B1HBLmBBD9BBEQBJBBIdBF8BB2GTBNTBN2CBKYBoE0CBCmCBCBBDDDBDDBCBCLBCCCBFBCgCBCDBDHBCGBCbBCDBCEBCEEBFBCzKBDjJBDxBByjFjCBtC8BBjWrBBFjDBNOBDOBCOBCkBBLtFB5BZBCBBOrBBFIBIBBPFB7E4eBEQBEMBE5GBHLBFQQBKBF3BBJJBHnBBJdBDLBFBBPIBoB3KBJNBDMBEKBE4BBCFFBOBDLBFJBIyEBCmDBnghYffB+CB', false)),
|
|
284
304
|
Coptic: () => new UnicodeRangeTable(decodeRanges('ifNxkKzDGG', true)),
|
|
285
305
|
Cuneiform: () => new UnicodeRangeTable(decodeRanges('ggoC5cnDuDCEMjG', true)),
|
|
286
306
|
Cypriot: () => new UnicodeRangeTable(decodeRanges('ggiCFBDCCBqBBCBBEDD', false)),
|
|
@@ -305,7 +325,7 @@ class UnicodeTables {
|
|
|
305
325
|
Gunjala_Gondi: () => new UnicodeRangeTable(decodeRanges('grnCFCBCkBCBCFIJ', true)),
|
|
306
326
|
Gurmukhi: () => new UnicodeRangeTable(decodeRanges('hwCCBCFBFBBDVBCGBCBBCBBCBBDCCBDBFBBDCBEIIBCBCIIBPB', false)),
|
|
307
327
|
Gurung_Khema: () => new UnicodeRangeTable(decodeRanges('go4C5B', true)),
|
|
308
|
-
Han: () => new UnicodeRangeTable(decodeRanges('g0LZBC4CBN1GBwBCCaIBPDBle-tGBhC-
|
|
328
|
+
Han: () => new UnicodeRangeTable(decodeRanges('g0LZBC4CBN1GBwBCCaIBPDBle-tGBhC-vUBhoWtLBDpDBpodBBNGBqgkB-2pBBhB9oEBDt0FBDwpHBQtTBjtC9QBjvBq6EBGppIB', false)),
|
|
309
329
|
Hangul: () => new UnicodeRangeTable(decodeRanges('goE-HvxHBiI9CyDeiCei3dckUj9KNWFwBl9JeEFDFDFDC', true)),
|
|
310
330
|
Hanifi_Rohingya: () => new UnicodeRangeTable(decodeRanges('gojCnBJJ', true)),
|
|
311
331
|
Hanunoo: () => new UnicodeRangeTable(decodeRanges('g5FU', true)),
|
|
@@ -313,12 +333,12 @@ class UnicodeTables {
|
|
|
313
333
|
Hebrew: () => new UnicodeRangeTable(decodeRanges('xsB2BBJaBFFBpp9BZBCEBCCCBCCBCCBIB', false)),
|
|
314
334
|
Hiragana: () => new UnicodeRangeTable(decodeRanges('hiM1CBHCBi7-C+IBTeeBBBulQAB', false)),
|
|
315
335
|
Imperial_Aramaic: () => new UnicodeRangeTable(decodeRanges('giiCVCI', true)),
|
|
316
|
-
Inherited: () => new UnicodeRangeTable(decodeRanges('
|
|
336
|
+
Inherited: () => new UnicodeRangeTable(decodeRanges('gYvDB2IBBlOKBbhXhXBCB8qEtBBDLBlPCBCMBCGBFHHEBBnG-BBtQBBjGgBB65DDBsDBBmrzBPBRNBwejHjH7iEl+uBl+uBBsBBDWBhRCBSHBDGBfDBz6rYvHB', false)),
|
|
317
337
|
Inscriptional_Pahlavi: () => new UnicodeRangeTable(decodeRanges('g7iCSGH', true)),
|
|
318
338
|
Inscriptional_Parthian: () => new UnicodeRangeTable(decodeRanges('g6iCVDH', true)),
|
|
319
339
|
Javanese: () => new UnicodeRangeTable(decodeRanges('gsqBtCDJFB', true)),
|
|
320
340
|
Kaithi: () => new UnicodeRangeTable(decodeRanges('gkkCiCLA', true)),
|
|
321
|
-
Kannada: () => new UnicodeRangeTable(decodeRanges('
|
|
341
|
+
Kannada: () => new UnicodeRangeTable(decodeRanges('gkDMCCCWCJCEDICCCDIBGCCDDJCC', true)),
|
|
322
342
|
Katakana: () => new UnicodeRangeTable(decodeRanges('hlM5CBDCBxHPBxGuBBC3CBvgzBJBCsBBzisBDBCGBCBBCgJgJBBBzBPPBCB', false)),
|
|
323
343
|
Kawi: () => new UnicodeRangeTable(decodeRanges('g4nCQCoBEc', true)),
|
|
324
344
|
Kayah_Li: () => new UnicodeRangeTable(decodeRanges('goqBtBCA', true)),
|
|
@@ -329,7 +349,7 @@ class UnicodeTables {
|
|
|
329
349
|
Khudawadi: () => new UnicodeRangeTable(decodeRanges('w1kC6BGJ', true)),
|
|
330
350
|
Kirat_Rai: () => new UnicodeRangeTable(decodeRanges('gq7C5B', true)),
|
|
331
351
|
Lao: () => new UnicodeRangeTable(decodeRanges('h0DBBCCCBDBCXBCCCBVBDEBCCCBFBCJBDDB', false)),
|
|
332
|
-
Latin: () => new UnicodeRangeTable(decodeRanges('hCZBHZBwBQQGWBCeBCgOBoBEB8wGlBBHwBBGDBGMBClCBiC-
|
|
352
|
+
Latin: () => new UnicodeRangeTable(decodeRanges('hCZBHZBwBQQGWBCeBCgOBoBEB8wGlBBHwBBGDBGMBClCBiC-HByLOORMBuEBBHccSoBB42CfBj1elDBExCBVOBxZqBBCIBCDB38TGB7gBZBHZBmhCFBCpBBCIBm61BeBHFB', false)),
|
|
333
353
|
Lepcha: () => new UnicodeRangeTable(decodeRanges('ggH3BEOEC', true)),
|
|
334
354
|
Limbu: () => new UnicodeRangeTable(decodeRanges('goGeBCLBFLBFEEBKB', false)),
|
|
335
355
|
Linear_A: () => new UnicodeRangeTable(decodeRanges('gwhC2JKVLH', true)),
|
|
@@ -388,9 +408,10 @@ class UnicodeTables {
|
|
|
388
408
|
Runic: () => new UnicodeRangeTable(decodeRanges('g1FqCEK', true)),
|
|
389
409
|
Samaritan: () => new UnicodeRangeTable(decodeRanges('ggCtBDO', true)),
|
|
390
410
|
Saurashtra: () => new UnicodeRangeTable(decodeRanges('gkqBlCJL', true)),
|
|
391
|
-
Sharada: () => new UnicodeRangeTable(decodeRanges('gskC-
|
|
411
|
+
Sharada: () => new UnicodeRangeTable(decodeRanges('gskC-ChsCH', true)),
|
|
392
412
|
Shavian: () => new UnicodeRangeTable(decodeRanges('wihCvB', true)),
|
|
393
413
|
Siddham: () => new UnicodeRangeTable(decodeRanges('gslC1BDlB', true)),
|
|
414
|
+
Sidetic: () => new UnicodeRangeTable(decodeRanges('gqiCZ', true)),
|
|
394
415
|
SignWriting: () => new UnicodeRangeTable(decodeRanges('gg2DrUQECO', true)),
|
|
395
416
|
Sinhala: () => new UnicodeRangeTable(decodeRanges('hsDCBCRBEXBCIBCDDBFBEFFBEBCCCBGBHJBDCBt-gCTB', false)),
|
|
396
417
|
Sogdian: () => new UnicodeRangeTable(decodeRanges('w5jCpB', true)),
|
|
@@ -405,21 +426,23 @@ class UnicodeTables {
|
|
|
405
426
|
Tai_Le: () => new UnicodeRangeTable(decodeRanges('wqGdDE', true)),
|
|
406
427
|
Tai_Tham: () => new UnicodeRangeTable(decodeRanges('gxG+BCcDKHJHN', true)),
|
|
407
428
|
Tai_Viet: () => new UnicodeRangeTable(decodeRanges('g0qBiCZE', true)),
|
|
429
|
+
Tai_Yo: () => new UnicodeRangeTable(decodeRanges('g25DeCVJB', true)),
|
|
408
430
|
Takri: () => new UnicodeRangeTable(decodeRanges('g0lC5BHJ', true)),
|
|
409
431
|
Tamil: () => new UnicodeRangeTable(decodeRanges('i8CBBCFBECBCDBEBBCCCBEEBEEBBBELBFEBECBCDBDHHPUBm+kCxBBOAB', false)),
|
|
410
432
|
Tangsa: () => new UnicodeRangeTable(decodeRanges('wz6CuCCJ', true)),
|
|
411
|
-
Tangut: () => new UnicodeRangeTable(decodeRanges('g-
|
|
412
|
-
Telugu: () => new UnicodeRangeTable(decodeRanges('
|
|
433
|
+
Tangut: () => new UnicodeRangeTable(decodeRanges('g-7CgBgBB+3GBhQeBiDyDB', false)),
|
|
434
|
+
Telugu: () => new UnicodeRangeTable(decodeRanges('ggDMCCCWCPDICCCDIBCCCBDDDJII', true)),
|
|
413
435
|
Thaana: () => new UnicodeRangeTable(decodeRanges('g8BxB', true)),
|
|
414
436
|
Thai: () => new UnicodeRangeTable(decodeRanges('hwD5BGb', true)),
|
|
415
437
|
Tibetan: () => new UnicodeRangeTable(decodeRanges('g4DnCCjBFmBCjBCOCGFB', true)),
|
|
416
438
|
Tifinagh: () => new UnicodeRangeTable(decodeRanges('wpL3BIBPA', true)),
|
|
417
439
|
Tirhuta: () => new UnicodeRangeTable(decodeRanges('gklCnCJJ', true)),
|
|
418
440
|
Todhri: () => new UnicodeRangeTable(decodeRanges('guhCzB', true)),
|
|
441
|
+
Tolong_Siki: () => new UnicodeRangeTable(decodeRanges('wtnCrBFJ', true)),
|
|
419
442
|
Toto: () => new UnicodeRangeTable(decodeRanges('w04De', true)),
|
|
420
443
|
Tulu_Tigalari: () => new UnicodeRangeTable(decodeRanges('g8kCJBCDDClBBCJBCDDCDBCJBCBBJBB', false)),
|
|
421
444
|
Ugaritic: () => new UnicodeRangeTable(decodeRanges('g8gCdCA', true)),
|
|
422
|
-
Unknown: () => new UnicodeRangeTable(decodeRanges('
|
|
445
|
+
Unknown: () => new UnicodeRangeTable(decodeRanges('4bBBHDBICCVuMuMnBBBzBBBE4B4BBGBcDBHKBvI9B9BBmDmDBMB8BBByBBBQddBCCMEBjBEBuHJJBDDBXXICCBBBFBBKBBDBBFHBCDBDGGBaaBEEHDBDBBXIIDGDBCCGDBDBBECBCGBFCCBFBSJBEKKEXXIDDGBBLIEBCCBNBFBBNGBIEEJBBDBBXIIDGGBKKBDDBEEBFBEDBDGGBTTBIBDHHBBBEFFBBBDCCDCBDCBECBNDBGCBEFFBCCBEBCNBWEBOEEYRRBKKEFFBFBDEEDBBFBBLGBXEEYLLGBBKEEFGBDEBEFFBLLELBOEE0BEEHDBRBBbEETCBZKKCBBICBCDBHCCJFBLBBELB7BDBekBBDCCGZZCYYBGGCIILBBFfBpClBlBBCBoBlBlBQOOBjBBnGCCBDBCBB6LFFBIICFFBqBqBFBBiBFFBIICFFBQQ6BFFBkCkCBhBhBBBBbFB3CBBHBB+UCB6CGBXIBZIBVLBOEEDLB-CBBLFBLFBbFB6CGBsBEBnCJBgBNNBCBNDBCCBrBBBGKBtBDBbFBMCB-BBBiCeeBMMBEBLFBPBBvBBBNTBuCnFnFBGB9BCBQCB-BEBsBBBMHBsBEB3QBBHBBnBBBHBBJGCgBBB2BQQPBBHUUBEEKmDmDNBBcOOBBBjBNBiBOBtEDB7UVBMUB14BBB-LEBuBCCBDBCBB5BGBDNBZIBI4BI-DhBBb6C6CBKB3GZBxC3C3CBoDoDBDBsB-C-C3CIBxBuzcuzcBBB4BIB9KTB5FHB+GTB9BCBLFB5BHBnCHBNFB1DKBfCBvCMMBCBiB4B4BBHBPBBLBBoDXBdJBHBBHBBHIBIII9BDB-DBBLFBl9KLBYDByBjoIBvLBBrDlBBILBGEBbGGCGDrUfBrBFB0BUUFDBGoEoEBCC-FCBHBBHBBHBBECBIIIBIBGBBNbbUDDQBBPhBB8DEBEDBuBCB5COOBBBCuBBvBhEBeCByBOBdDBlBIBfEBsBEBfmBmBBCBPpBB-EBBLFBlBDBlBDBpBHB1BKBNQQIDDMQQIDDBBB1BLB4JIBXJBJXBHrBrBKkCBHBBCtBtBDCBCBBYpCpCBGBKvBBUDDBDBiBCBcEBclBB5BDBVBBzBDDBDBJEEeBBEDBLGBKGBhCfBoBDBNIB3BCBeBBcEBbGBFLBIvCBqC2BB0BMB0BGBvBHBLFBnBCBeHBDvGBgBrBrBEBBDPBHHBKgBBvBHBrBVBblBBdTBYIBvCDBlBIBlCJBCBBaGBLFB2BTTBGBoBIBhDVVBJBTwBwBB8BBICCFQQMFB8BEBLFBFJJBDDBXXIDDGLLBDDBEEBCCBEBCEBIBBICBGKBLCCBCCnBLLCBBCFFLDDBGBDcB9CGGBcBpCHBLlFB3BBBnBhBBmCKBLFBOSB7BFBLFBVbBcBBQDBY4FB9BjDB0CLBJBBCBBJDDfDDBNNBHBLlCBJBBvBBBMaBpCHB0CMBqCGBL1CBJ3CBjBNBLFBKuBuBPJBeCBhBBBXPPBnCBIDDtBCBCDDKHBLFBHDDmBDDHGBLFBtBDBL1HBaGBSqBqBBBBe0CBCOBzBMB8clDBwDGGBJBlGryCBkDMB3iBJB88DEBoS41GB7Bl2BB6RGBgBLLBCByCLLBEBfBBHJBnCJBLIIWEBUvNB7BlGB8CEBaBBarBBsCDB6BGBS-BBGKBIIB3mHoBBhBgDB0D8vIBFIIDkJkJBNBCcBEBBCNBFHBtMjoCBsDEBOCBKGBLBBJ76DB+HCB1NFBYOBSOBvBBBYIB1D7BB3HJBoBBBjGUBnC5DBVLBVLB4CIBamEB2CoCoCDBBCBBDBBFNNCIIiCFFBJJIddFGGCCBI1K1KBlJlJB-V-VBNBGQQBuiBBgBFBH0GBISSBIIDGGBDB-BgBBCvDBuBCBPBBLDBD-JBgBQB7BEBCvOBrB1GBsBDBC-FBgBXXBGBD-GBIFFDQQmGBBRoBBtCDBLDBDwYBlCrCB+BhGBFccDCCBCCLFFCCCBEBCDBCECEDDCBBCICDCCBFFIKFCLLSEBEGGSzBBDtIBtBDBlDLBQBBQQQmBJBvF3BBeMBtBDBKGBDNBH5EB6eCBSCBOCB7GFBNDBCOBNDB5BHBLFBpBHBfBBNDBDNBKmBB5KHBPBBOCBMCB6BCCBCBRBBNDBLGB0EoDoDBjgBBh3pBfB-oEBBv0FBBypHOBvThtCB-QhvBBs6EEBrpIm8yVBCdBhD-DBxHvw-FB', false)),
|
|
423
446
|
Vai: () => new UnicodeRangeTable(decodeRanges('gopBrJ', true)),
|
|
424
447
|
Vithkuqi: () => new UnicodeRangeTable(decodeRanges('wrhCKCOCGCBCKCOCGCB', true)),
|
|
425
448
|
Wancho: () => new UnicodeRangeTable(decodeRanges('g24D5BGA', true)),
|
|
@@ -429,22 +452,18 @@ class UnicodeTables {
|
|
|
429
452
|
Zanabazar_Square: () => new UnicodeRangeTable(decodeRanges('gwmCnC', true))
|
|
430
453
|
});
|
|
431
454
|
static FOLD_CATEGORIES = new LazyMap({
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
LC: () => new UnicodeRangeTable(decodeRanges('latkpBtkpBCAB', false)),
|
|
436
|
-
Ll: () => new UnicodeRangeTable(decodeRanges('hCZBmDWBCGBiBuBCEECDOCDuBCBECEBBCCCBCCBBBDDBCBBCCBEBBCBBCECBCCDCCBCCBBBCCCBEEIBBCBBCBBCOCDQCDBBCCCBBBC4BCIBBCBBDCCBCBCGC3HrBrBCEEJHHCCBCCCBCCBPBCIBkBJJCUCGDDCBBDyBBxBgBCK2BCBMCD+CCDlBBq6ClBBCGGzW1CB0kCHHBpBBDCBhK0ECKgDCKHBJFBLHBJHBJFBMGCJHBZHBJHBJHBJEBMEBMDBNEBMEBqJEEBHHxC9zC9zCBuBBxBCCBBBDGCBCBCDDJCBCgDCJCCFuqeuqeCqBCUaCoEMCE8BCLECBICFCCDCCEUCBDBCEBCOCBCBCCCBEECKCZs5Vs5VBYBmmBnBBpEjBB9EKBCOBCGBCBBr3ByBB+EVB75CfBhsVfBh1ehBB', false)),
|
|
455
|
+
L: () => new UnicodeRangeTable(decodeRanges('laA', true)),
|
|
456
|
+
LC: () => new UnicodeRangeTable(decodeRanges('laA', true)),
|
|
457
|
+
Ll: () => new UnicodeRangeTable(decodeRanges('hCZBmDWBCGBiBuBCEECDOCDuBCBECEBBCCCBCCBBBDDBCBBCCBEBBCBBCECBCCDCCBCCBBBCCCBEEIBBCBBCBBCOCDQCDBBCCCBBBC4BCIBBCBBDCCBCBCGC3HrBrBCEEJHHCCBCCCBCCBPBCIBkBJJCUCGDDCBBDyBBxBgBCK2BCBMCD+CCDlBBq6ClBBCGGzW1CB0kCHHBpBBDCBhK0ECKgDCKHBJFBLHBJHBJFBMGCJHBZHBJHBJHBJEBMEBMDBNEBMEBqJEEBHHxC9zC9zCBuBBxBCCBBBDGCBCBCDDJCBCgDCJCCFuqeuqeCqBCUaCoEMCE8BCLECBICFCCDCCEUCBDBCEBCOCBCBCCCBQCZs5Vs5VBYBmmBnBBpEjBB9EKBCOBCGBCBBr3ByBB+EVB75CfBhsVfBhCYBoyehBB', false)),
|
|
437
458
|
Lt: () => new UnicodeRangeTable(decodeRanges('kOCCBCCBCClBCCtsHHBJHBJHBMQQwBAB', false)),
|
|
438
|
-
Lu: () => new UnicodeRangeTable(decodeRanges('
|
|
459
|
+
Lu: () => new UnicodeRangeTable(decodeRanges('hDZB7BqBqBBWBCHBCuBCEECDOCDsBCDECBBBDCCDEEGDDECBDDDCCCDFFDEECDDECCGBBCBBCBBCOCBSCDBBCEECkBCEQCJDDBCCFICBEBCBBCCCBEEBCCBCBCEBDCCBDDIDDCBBEFBGLLBnFnFsBCCEEEBBBvBDBCdBCBBECBCWCBDBCGD1BvBBCgBCK0BCDMCBgDCyBlBBq6CqBBDCB5XFBjkCIBCvHvHERRzD0ECGGGC8CCBHBJFBLHBJHBJFBMGCJHBJNBzBBBNSSBPPBEEpL2B2Bs1CvBBCEEBGCHDDLiDCJCCFNNBkBBCGG0oesBCUaCoEMCE8BCLCCDICFFFCBBDSCMOCFCCDOCb9a9advCBi8UZBumBnBBpEjBB8EKBCOBCGBCBBk4ByBB+DVB75CfBhsVfB8BYBvyehBB', false)),
|
|
439
460
|
M: () => new UnicodeRangeTable(decodeRanges('5cgBgBlgHAB', false)),
|
|
440
461
|
Mn: () => new UnicodeRangeTable(decodeRanges('5cgBgBlgHAB', false))
|
|
441
462
|
});
|
|
442
463
|
static FOLD_SCRIPT = new LazyMap({
|
|
443
464
|
Common: () => new UnicodeRangeTable(decodeRanges('8cgBgB', false)),
|
|
444
465
|
Greek: () => new UnicodeRangeTable(decodeRanges('1FwUwU', false)),
|
|
445
|
-
Inherited: () => new UnicodeRangeTable(decodeRanges('5cgBgBlgHAB', false))
|
|
446
|
-
Latin: () => new UnicodeRangeTable(decodeRanges('y+pBCC', false)),
|
|
447
|
-
Unknown: () => new UnicodeRangeTable(decodeRanges('z+pBCC', false))
|
|
466
|
+
Inherited: () => new UnicodeRangeTable(decodeRanges('5cgBgBlgHAB', false))
|
|
448
467
|
});
|
|
449
468
|
}
|
|
450
469
|
|
|
@@ -1563,14 +1582,16 @@ class Matcher {
|
|
|
1563
1582
|
* @private
|
|
1564
1583
|
*/
|
|
1565
1584
|
genMatch(startByte, anchor) {
|
|
1566
|
-
const
|
|
1585
|
+
const hasLookbehinds = this.patternInput.re2().prog.numLb > 0;
|
|
1586
|
+
const ngroup = hasLookbehinds ? 1 + this.patternGroupCount : 1;
|
|
1587
|
+
const res = this.patternInput.re2().matchMachineInput(this.matcherInput, startByte, this.matcherInputLength, anchor, ngroup);
|
|
1567
1588
|
const ok = res[0];
|
|
1568
1589
|
if (!ok) {
|
|
1569
1590
|
return false;
|
|
1570
1591
|
}
|
|
1571
1592
|
this.groups = res[1];
|
|
1572
1593
|
this.hasMatch = true;
|
|
1573
|
-
this.hasGroups =
|
|
1594
|
+
this.hasGroups = hasLookbehinds || this.patternGroupCount === 0;
|
|
1574
1595
|
this.anchorFlag = anchor;
|
|
1575
1596
|
return true;
|
|
1576
1597
|
}
|
|
@@ -1857,6 +1878,8 @@ class Inst {
|
|
|
1857
1878
|
static RUNE1 = 9;
|
|
1858
1879
|
static RUNE_ANY = 10;
|
|
1859
1880
|
static RUNE_ANY_NOT_NL = 11;
|
|
1881
|
+
static LB_WRITE = 12;
|
|
1882
|
+
static LB_CHECK = 13;
|
|
1860
1883
|
static isRuneOp(op) {
|
|
1861
1884
|
return Inst.RUNE <= op && op <= Inst.RUNE_ANY_NOT_NL;
|
|
1862
1885
|
}
|
|
@@ -1980,6 +2003,10 @@ class Inst {
|
|
|
1980
2003
|
return 'fail';
|
|
1981
2004
|
case Inst.NOP:
|
|
1982
2005
|
return `nop -> ${this.out}`;
|
|
2006
|
+
case Inst.LB_WRITE:
|
|
2007
|
+
return `lbwrite ${this.lb} -> ${this.out}`;
|
|
2008
|
+
case Inst.LB_CHECK:
|
|
2009
|
+
return `lbcheck ${this.lb} -> ${this.out}, ${this.arg}`;
|
|
1983
2010
|
case Inst.RUNE:
|
|
1984
2011
|
if (this.runes === null) {
|
|
1985
2012
|
return 'rune <null>';
|
|
@@ -2079,6 +2106,14 @@ class Machine {
|
|
|
2079
2106
|
} else {
|
|
2080
2107
|
this.resetCap();
|
|
2081
2108
|
}
|
|
2109
|
+
|
|
2110
|
+
// Initialize the Lookbehind tracking table
|
|
2111
|
+
if (this.prog.numLb > 0) {
|
|
2112
|
+
if (!this.lbTable || this.lbTable.length < this.prog.numLb + 1) {
|
|
2113
|
+
this.lbTable = new Int32Array(this.prog.numLb + 1);
|
|
2114
|
+
}
|
|
2115
|
+
this.lbTable.fill(-1);
|
|
2116
|
+
}
|
|
2082
2117
|
}
|
|
2083
2118
|
|
|
2084
2119
|
// Wipes existing typed array memory without reallocating
|
|
@@ -2169,7 +2204,10 @@ class Machine {
|
|
|
2169
2204
|
if (this.matched) {
|
|
2170
2205
|
break;
|
|
2171
2206
|
}
|
|
2172
|
-
|
|
2207
|
+
// Disable Prefix Acceleration if the regex contains lookbehinds
|
|
2208
|
+
// Fast-forwarding the string pointer will skip over the positions where
|
|
2209
|
+
// the parallel lookbehind automata need to be spawned.
|
|
2210
|
+
if (this.prog.numLb === 0 && !(this.re2.prefix.length === 0) && rune1 !== this.re2.prefixRune && input.canCheckPrefix()) {
|
|
2173
2211
|
const advance = input.index(this.re2, pos);
|
|
2174
2212
|
if (advance < 0) {
|
|
2175
2213
|
break;
|
|
@@ -2187,6 +2225,10 @@ class Machine {
|
|
|
2187
2225
|
if (this.ncap > 0) {
|
|
2188
2226
|
this.matchcap[0] = pos;
|
|
2189
2227
|
}
|
|
2228
|
+
// Spawn Lookbehind threads BEFORE the main pattern
|
|
2229
|
+
for (let i = 0; i < this.prog.lbStarts.length; i++) {
|
|
2230
|
+
this.add(runq, this.prog.lbStarts[i], pos, this.matchcap, flag, null);
|
|
2231
|
+
}
|
|
2190
2232
|
this.add(runq, this.prog.start, pos, this.matchcap, flag, null);
|
|
2191
2233
|
}
|
|
2192
2234
|
const nextPos = pos + width;
|
|
@@ -2238,6 +2280,10 @@ class Machine {
|
|
|
2238
2280
|
if ((startCond & Utils.EMPTY_BEGIN_TEXT) !== 0 && pos !== 0) break;
|
|
2239
2281
|
}
|
|
2240
2282
|
if (pos === 0 || anchor === RE2Flags.UNANCHORED) {
|
|
2283
|
+
// Spawn Lookbehind threads BEFORE the main pattern
|
|
2284
|
+
for (let i = 0; i < this.prog.lbStarts.length; i++) {
|
|
2285
|
+
this.add(runq, this.prog.lbStarts[i], pos, this.matchcap, flag, null);
|
|
2286
|
+
}
|
|
2241
2287
|
this.add(runq, this.prog.start, pos, this.matchcap, flag, null);
|
|
2242
2288
|
}
|
|
2243
2289
|
const nextPos = pos + width;
|
|
@@ -2381,6 +2427,21 @@ class Machine {
|
|
|
2381
2427
|
t = this.add(q, inst.out, pos, cap, cond, t);
|
|
2382
2428
|
}
|
|
2383
2429
|
break;
|
|
2430
|
+
case Inst.LB_WRITE:
|
|
2431
|
+
this.lbTable[Math.abs(inst.lb)] = pos;
|
|
2432
|
+
t = this.add(q, inst.out, pos, cap, cond, t);
|
|
2433
|
+
break;
|
|
2434
|
+
case Inst.LB_CHECK:
|
|
2435
|
+
if (inst.lb > 0) {
|
|
2436
|
+
// Positive Lookbehind
|
|
2437
|
+
if (this.lbTable[inst.lb] === pos) {
|
|
2438
|
+
t = this.add(q, inst.out, pos, cap, cond, t);
|
|
2439
|
+
}
|
|
2440
|
+
} else if (this.lbTable[-inst.lb] !== pos) {
|
|
2441
|
+
// Negative Lookbehind
|
|
2442
|
+
t = this.add(q, inst.out, pos, cap, cond, t);
|
|
2443
|
+
}
|
|
2444
|
+
break;
|
|
2384
2445
|
case Inst.MATCH:
|
|
2385
2446
|
case Inst.RUNE:
|
|
2386
2447
|
case Inst.RUNE1:
|
|
@@ -2475,6 +2536,8 @@ class DFA {
|
|
|
2475
2536
|
// Bailing out on complex empty-width assertions to keep DFA fast.
|
|
2476
2537
|
// Engine will seamlessly fall back to the NFA.
|
|
2477
2538
|
case Inst.EMPTY_WIDTH:
|
|
2539
|
+
case Inst.LB_WRITE:
|
|
2540
|
+
case Inst.LB_CHECK:
|
|
2478
2541
|
return null;
|
|
2479
2542
|
}
|
|
2480
2543
|
}
|
|
@@ -3220,6 +3283,8 @@ const cleanupOnePass = (p, original) => {
|
|
|
3220
3283
|
class OnePass {
|
|
3221
3284
|
static compile(prog) {
|
|
3222
3285
|
if (prog.start === 0) return null;
|
|
3286
|
+
// OnePass cannot evaluate Lookbehinds
|
|
3287
|
+
if (prog.numLb > 0) return null;
|
|
3223
3288
|
const startInst = prog.inst[prog.start];
|
|
3224
3289
|
// onepass regexps must be strictly anchored
|
|
3225
3290
|
if (startInst.op !== Inst.EMPTY_WIDTH || (startInst.arg & Utils.EMPTY_BEGIN_TEXT) === 0) {
|
|
@@ -3399,6 +3464,10 @@ class Regexp {
|
|
|
3399
3464
|
// Matches concatenation of subs[]
|
|
3400
3465
|
'ALTERNATE',
|
|
3401
3466
|
// Matches union of subs[]
|
|
3467
|
+
'PLB',
|
|
3468
|
+
// Positive LookBehind
|
|
3469
|
+
'NLB',
|
|
3470
|
+
// Negative LookBehind
|
|
3402
3471
|
// Pseudo ops, used internally by Parser for parsing stack:
|
|
3403
3472
|
'LEFT_PAREN', 'VERTICAL_BAR']);
|
|
3404
3473
|
static isPseudoOp(op) {
|
|
@@ -3423,6 +3492,7 @@ class Regexp {
|
|
|
3423
3492
|
regex.max = re.max;
|
|
3424
3493
|
regex.name = re.name;
|
|
3425
3494
|
regex.namedGroups = re.namedGroups;
|
|
3495
|
+
regex.lb = re.lb; // Track lookbehind index
|
|
3426
3496
|
return regex;
|
|
3427
3497
|
}
|
|
3428
3498
|
constructor(op) {
|
|
@@ -3437,6 +3507,7 @@ class Regexp {
|
|
|
3437
3507
|
this.cap = 0; // capturing index, for CAPTURE
|
|
3438
3508
|
this.name = null; // capturing name, for CAPTURE
|
|
3439
3509
|
this.namedGroups = Object.create(null); // map of group name -> capturing index
|
|
3510
|
+
this.lb = 0; // Lookbehind index tracking
|
|
3440
3511
|
}
|
|
3441
3512
|
reinit() {
|
|
3442
3513
|
this.flags = 0;
|
|
@@ -3447,6 +3518,7 @@ class Regexp {
|
|
|
3447
3518
|
this.max = 0;
|
|
3448
3519
|
this.name = null;
|
|
3449
3520
|
this.namedGroups = Object.create(null);
|
|
3521
|
+
this.lb = 0;
|
|
3450
3522
|
}
|
|
3451
3523
|
toString() {
|
|
3452
3524
|
return this.appendTo();
|
|
@@ -3537,6 +3609,12 @@ class Regexp {
|
|
|
3537
3609
|
case Regexp.Op.ANY_CHAR:
|
|
3538
3610
|
out += '(?s:.)';
|
|
3539
3611
|
break;
|
|
3612
|
+
case Regexp.Op.PLB:
|
|
3613
|
+
out += `(?<=${this.subs[0].appendTo()})`;
|
|
3614
|
+
break;
|
|
3615
|
+
case Regexp.Op.NLB:
|
|
3616
|
+
out += `(?<!${this.subs[0].appendTo()})`;
|
|
3617
|
+
break;
|
|
3540
3618
|
case Regexp.Op.CAPTURE:
|
|
3541
3619
|
if (this.name === null || this.name.length === 0) {
|
|
3542
3620
|
out += '(';
|
|
@@ -3701,6 +3779,14 @@ class Regexp {
|
|
|
3701
3779
|
}
|
|
3702
3780
|
break;
|
|
3703
3781
|
}
|
|
3782
|
+
case Regexp.Op.PLB:
|
|
3783
|
+
case Regexp.Op.NLB:
|
|
3784
|
+
{
|
|
3785
|
+
if (this.lb !== that.lb || !this.subs[0].equals(that.subs[0])) {
|
|
3786
|
+
return false;
|
|
3787
|
+
}
|
|
3788
|
+
break;
|
|
3789
|
+
}
|
|
3704
3790
|
}
|
|
3705
3791
|
return true;
|
|
3706
3792
|
}
|
|
@@ -3748,6 +3834,8 @@ class PrefilterTree {
|
|
|
3748
3834
|
static fromRegexp(re) {
|
|
3749
3835
|
if (!re) return new Prefilter(Prefilter.Type.NONE);
|
|
3750
3836
|
switch (re.op) {
|
|
3837
|
+
case Regexp.Op.PLB:
|
|
3838
|
+
case Regexp.Op.NLB:
|
|
3751
3839
|
case Regexp.Op.NO_MATCH:
|
|
3752
3840
|
case Regexp.Op.EMPTY_MATCH:
|
|
3753
3841
|
case Regexp.Op.BEGIN_LINE:
|
|
@@ -3898,6 +3986,8 @@ class Prog {
|
|
|
3898
3986
|
// number of CAPTURE insts in re
|
|
3899
3987
|
// 2 => implicit ( and ) for whole match $0
|
|
3900
3988
|
this.numCap = 2;
|
|
3989
|
+
this.lbStarts = []; // Track starting PCs of lookbehind automata
|
|
3990
|
+
this.numLb = 0; // Total number of lookbehinds
|
|
3901
3991
|
}
|
|
3902
3992
|
|
|
3903
3993
|
// Returns the instruction at the specified pc.
|
|
@@ -4230,6 +4320,26 @@ class Compiler {
|
|
|
4230
4320
|
}
|
|
4231
4321
|
return f;
|
|
4232
4322
|
}
|
|
4323
|
+
lookBehind(a, lb) {
|
|
4324
|
+
const id = this.newInst(Inst.LB_WRITE);
|
|
4325
|
+
this.prog.getInst(id.i).lb = lb;
|
|
4326
|
+
|
|
4327
|
+
// Create the prefix wildcard `.*` for the lookbehind automaton
|
|
4328
|
+
const any = this.rune(Compiler.ANY_RUNE(), 0);
|
|
4329
|
+
const dotStar = this.star(any, true); // nongreedy = true
|
|
4330
|
+
const lbAutomaton = this.cat(dotStar, a);
|
|
4331
|
+
this.prog.patch(lbAutomaton.out, id.i);
|
|
4332
|
+
const checkId = this.newInst(Inst.LB_CHECK);
|
|
4333
|
+
this.prog.getInst(checkId.i).lb = lb;
|
|
4334
|
+
|
|
4335
|
+
// Save the starting point of this lookbehind automaton
|
|
4336
|
+
this.prog.lbStarts.push(lbAutomaton.i);
|
|
4337
|
+
if (Math.abs(lb) > this.prog.numLb) {
|
|
4338
|
+
this.prog.numLb = Math.abs(lb);
|
|
4339
|
+
}
|
|
4340
|
+
checkId.out = new PatchList(checkId.i << 1, checkId.i << 1);
|
|
4341
|
+
return checkId;
|
|
4342
|
+
}
|
|
4233
4343
|
compile(re) {
|
|
4234
4344
|
switch (re.op) {
|
|
4235
4345
|
case Regexp.Op.NO_MATCH:
|
|
@@ -4265,6 +4375,9 @@ class Compiler {
|
|
|
4265
4375
|
return this.empty(Utils.EMPTY_WORD_BOUNDARY);
|
|
4266
4376
|
case Regexp.Op.NO_WORD_BOUNDARY:
|
|
4267
4377
|
return this.empty(Utils.EMPTY_NO_WORD_BOUNDARY);
|
|
4378
|
+
case Regexp.Op.PLB:
|
|
4379
|
+
case Regexp.Op.NLB:
|
|
4380
|
+
return this.lookBehind(this.compile(re.subs[0]), re.lb);
|
|
4268
4381
|
case Regexp.Op.CAPTURE:
|
|
4269
4382
|
{
|
|
4270
4383
|
const bra = this.cap(re.cap << 1);
|
|
@@ -4324,6 +4437,8 @@ class Simplify {
|
|
|
4324
4437
|
return null;
|
|
4325
4438
|
}
|
|
4326
4439
|
switch (re.op) {
|
|
4440
|
+
case Regexp.Op.PLB:
|
|
4441
|
+
case Regexp.Op.NLB:
|
|
4327
4442
|
case Regexp.Op.CAPTURE:
|
|
4328
4443
|
{
|
|
4329
4444
|
const sub = Simplify.simplify(re.subs[0]);
|
|
@@ -5401,6 +5516,7 @@ class Parser {
|
|
|
5401
5516
|
this.repeats = 0; // product of all repetitions seen
|
|
5402
5517
|
this.height = null; // regexp height, for height limit check
|
|
5403
5518
|
this.size = null; // regexp compiled size, for size limit check
|
|
5519
|
+
this.nlb = 0; // Number of lookbehinds seen
|
|
5404
5520
|
}
|
|
5405
5521
|
|
|
5406
5522
|
// Allocate a Regexp, from the free list if possible.
|
|
@@ -5463,7 +5579,7 @@ class Parser {
|
|
|
5463
5579
|
// We need to start tracking size.
|
|
5464
5580
|
// Make the map and belatedly populate it
|
|
5465
5581
|
// with info about everything we've constructed so far.
|
|
5466
|
-
this.size =
|
|
5582
|
+
this.size = Object.create(null);
|
|
5467
5583
|
for (let reEx of this.stack) {
|
|
5468
5584
|
this.checkSize(reEx);
|
|
5469
5585
|
}
|
|
@@ -5473,7 +5589,7 @@ class Parser {
|
|
|
5473
5589
|
}
|
|
5474
5590
|
}
|
|
5475
5591
|
calcSize(re, force = false) {
|
|
5476
|
-
if (!force) {
|
|
5592
|
+
if (!force && this.size !== null) {
|
|
5477
5593
|
if (Object.prototype.hasOwnProperty.call(this.size, re)) {
|
|
5478
5594
|
return this.size[re];
|
|
5479
5595
|
}
|
|
@@ -5485,6 +5601,8 @@ class Parser {
|
|
|
5485
5601
|
size = re.runes.length;
|
|
5486
5602
|
break;
|
|
5487
5603
|
}
|
|
5604
|
+
case Regexp.Op.PLB:
|
|
5605
|
+
case Regexp.Op.NLB:
|
|
5488
5606
|
case Regexp.Op.CAPTURE:
|
|
5489
5607
|
case Regexp.Op.STAR:
|
|
5490
5608
|
{
|
|
@@ -5532,6 +5650,9 @@ class Parser {
|
|
|
5532
5650
|
}
|
|
5533
5651
|
}
|
|
5534
5652
|
size = Math.max(1, size);
|
|
5653
|
+
if (this.size === null) {
|
|
5654
|
+
this.size = Object.create(null);
|
|
5655
|
+
}
|
|
5535
5656
|
this.size[re] = size;
|
|
5536
5657
|
return size;
|
|
5537
5658
|
}
|
|
@@ -5540,7 +5661,7 @@ class Parser {
|
|
|
5540
5661
|
return;
|
|
5541
5662
|
}
|
|
5542
5663
|
if (this.height === null) {
|
|
5543
|
-
this.height =
|
|
5664
|
+
this.height = Object.create(null);
|
|
5544
5665
|
for (let reEx of this.stack) {
|
|
5545
5666
|
this.checkHeight(reEx);
|
|
5546
5667
|
}
|
|
@@ -5550,7 +5671,7 @@ class Parser {
|
|
|
5550
5671
|
}
|
|
5551
5672
|
}
|
|
5552
5673
|
calcHeight(re, force = false) {
|
|
5553
|
-
if (!force) {
|
|
5674
|
+
if (!force && this.height !== null) {
|
|
5554
5675
|
if (Object.prototype.hasOwnProperty.call(this.height, re)) {
|
|
5555
5676
|
return this.height[re];
|
|
5556
5677
|
}
|
|
@@ -5562,6 +5683,9 @@ class Parser {
|
|
|
5562
5683
|
h = 1 + hsub;
|
|
5563
5684
|
}
|
|
5564
5685
|
}
|
|
5686
|
+
if (this.height === null) {
|
|
5687
|
+
this.height = Object.create(null);
|
|
5688
|
+
}
|
|
5565
5689
|
this.height[re] = h;
|
|
5566
5690
|
return h;
|
|
5567
5691
|
}
|
|
@@ -6130,6 +6254,19 @@ class Parser {
|
|
|
6130
6254
|
let repeatPos = -1;
|
|
6131
6255
|
bigswitch: switch (t.peek()) {
|
|
6132
6256
|
case Codepoint.CODES.get('('):
|
|
6257
|
+
// Intercept Lookbehinds if the flag is enabled
|
|
6258
|
+
if ((this.flags & RE2Flags.LOOKBEHIND) !== 0) {
|
|
6259
|
+
if (t.lookingAt('(?<=')) {
|
|
6260
|
+
this.parsePosLookBehind();
|
|
6261
|
+
t.skip(4); // Skip over '(?<='
|
|
6262
|
+
break;
|
|
6263
|
+
}
|
|
6264
|
+
if (t.lookingAt('(?<!')) {
|
|
6265
|
+
this.parseNegLookBehind();
|
|
6266
|
+
t.skip(4); // Skip over '(?<!'
|
|
6267
|
+
break;
|
|
6268
|
+
}
|
|
6269
|
+
}
|
|
6133
6270
|
if ((this.flags & RE2Flags.PERL_X) !== 0 && t.lookingAt('(?')) {
|
|
6134
6271
|
// Flag changes and non-capturing groups.
|
|
6135
6272
|
this.parsePerlFlags(t);
|
|
@@ -6410,6 +6547,20 @@ class Parser {
|
|
|
6410
6547
|
throw new RE2JSSyntaxException(Parser.ERR_INVALID_PERL_OP, t.from(startPos));
|
|
6411
6548
|
}
|
|
6412
6549
|
|
|
6550
|
+
// Lookbehinds parsing
|
|
6551
|
+
parsePosLookBehind() {
|
|
6552
|
+
const re = this.newRegexp(Regexp.Op.LEFT_PAREN);
|
|
6553
|
+
re.flags = this.flags;
|
|
6554
|
+
re.lb = ++this.nlb;
|
|
6555
|
+
return this.push(re);
|
|
6556
|
+
}
|
|
6557
|
+
parseNegLookBehind() {
|
|
6558
|
+
const re = this.newRegexp(Regexp.Op.LEFT_PAREN);
|
|
6559
|
+
re.flags = this.flags;
|
|
6560
|
+
re.lb = -++this.nlb;
|
|
6561
|
+
return this.push(re);
|
|
6562
|
+
}
|
|
6563
|
+
|
|
6413
6564
|
// parseVerticalBar handles a | in the input.
|
|
6414
6565
|
parseVerticalBar() {
|
|
6415
6566
|
this.concat();
|
|
@@ -6479,6 +6630,18 @@ class Parser {
|
|
|
6479
6630
|
}
|
|
6480
6631
|
// Restore flags at time of paren.
|
|
6481
6632
|
this.flags = re2.flags;
|
|
6633
|
+
|
|
6634
|
+
// Handle lookbehinds
|
|
6635
|
+
if (re2.lb !== 0) {
|
|
6636
|
+
if (re2.lb > 0) {
|
|
6637
|
+
re2.op = Regexp.Op.PLB;
|
|
6638
|
+
} else {
|
|
6639
|
+
re2.op = Regexp.Op.NLB;
|
|
6640
|
+
}
|
|
6641
|
+
re2.subs = [re1];
|
|
6642
|
+
this.push(re2);
|
|
6643
|
+
return;
|
|
6644
|
+
}
|
|
6482
6645
|
if (re2.cap === 0) {
|
|
6483
6646
|
// Just for grouping.
|
|
6484
6647
|
this.push(re1);
|
|
@@ -6877,21 +7040,25 @@ class RE2 {
|
|
|
6877
7040
|
// We must use the NFA.
|
|
6878
7041
|
if (ncap > 0) {
|
|
6879
7042
|
// Backtracker bit-state execution bounds check
|
|
6880
|
-
if (input.endPos() <= Backtracker.maxBitStateLen(this.prog)) {
|
|
7043
|
+
if (this.prog.numLb === 0 && input.endPos() <= Backtracker.maxBitStateLen(this.prog)) {
|
|
6881
7044
|
return Backtracker.execute(this, input, pos, anchor, ncap);
|
|
6882
7045
|
}
|
|
6883
7046
|
// NFA execution
|
|
6884
7047
|
return this.doExecuteNFA(input, pos, anchor, ncap);
|
|
6885
7048
|
}
|
|
6886
|
-
const dfaResult = this.dfa.match(input, pos, anchor);
|
|
6887
|
-
if (dfaResult !== null) {
|
|
6888
|
-
// DFA succeeded (returned true or false)
|
|
6889
|
-
return dfaResult ? [] : null; // Return empty array to signify "matched but no captures"
|
|
6890
|
-
}
|
|
6891
7049
|
|
|
6892
|
-
//
|
|
6893
|
-
if (
|
|
6894
|
-
|
|
7050
|
+
// The DFA will safely return null (bailout) if it encounters a lookbehind
|
|
7051
|
+
if (this.prog.numLb === 0) {
|
|
7052
|
+
const dfaResult = this.dfa.match(input, pos, anchor);
|
|
7053
|
+
if (dfaResult !== null) {
|
|
7054
|
+
// DFA succeeded (returned true or false)
|
|
7055
|
+
return dfaResult ? [] : null; // Return empty array to signify "matched but no captures"
|
|
7056
|
+
}
|
|
7057
|
+
|
|
7058
|
+
// Backtracker bit-state execution bounds check
|
|
7059
|
+
if (input.endPos() <= Backtracker.maxBitStateLen(this.prog)) {
|
|
7060
|
+
return Backtracker.execute(this, input, pos, anchor, ncap);
|
|
7061
|
+
}
|
|
6895
7062
|
}
|
|
6896
7063
|
|
|
6897
7064
|
// Fallback to NFA
|
|
@@ -7475,9 +7642,20 @@ class RE2 {
|
|
|
7475
7642
|
}
|
|
7476
7643
|
|
|
7477
7644
|
class RE2Set {
|
|
7478
|
-
|
|
7645
|
+
static UNANCHORED = RE2Flags.UNANCHORED;
|
|
7646
|
+
static ANCHOR_START = RE2Flags.ANCHOR_START;
|
|
7647
|
+
static ANCHOR_BOTH = RE2Flags.ANCHOR_BOTH;
|
|
7648
|
+
constructor(anchor = RE2Set.UNANCHORED, flags = 0) {
|
|
7479
7649
|
this.anchor = anchor;
|
|
7480
|
-
this.
|
|
7650
|
+
this.jsFlags = flags;
|
|
7651
|
+
let re2Flags = RE2Flags.PERL;
|
|
7652
|
+
if ((flags & PublicFlags.DISABLE_UNICODE_GROUPS) !== 0) {
|
|
7653
|
+
re2Flags &= -129;
|
|
7654
|
+
}
|
|
7655
|
+
if ((flags & PublicFlags.LOOKBEHINDS) !== 0) {
|
|
7656
|
+
re2Flags |= RE2Flags.LOOKBEHIND;
|
|
7657
|
+
}
|
|
7658
|
+
this.re2Flags = re2Flags;
|
|
7481
7659
|
this.regexps = [];
|
|
7482
7660
|
this.prog = null;
|
|
7483
7661
|
this.dfa = null;
|
|
@@ -7487,7 +7665,17 @@ class RE2Set {
|
|
|
7487
7665
|
if (this.prog) {
|
|
7488
7666
|
throw new RE2JSCompileException('Cannot add patterns after compile');
|
|
7489
7667
|
}
|
|
7490
|
-
|
|
7668
|
+
let fregex = pattern;
|
|
7669
|
+
if ((this.jsFlags & PublicFlags.CASE_INSENSITIVE) !== 0) {
|
|
7670
|
+
fregex = `(?i)${fregex}`;
|
|
7671
|
+
}
|
|
7672
|
+
if ((this.jsFlags & PublicFlags.DOTALL) !== 0) {
|
|
7673
|
+
fregex = `(?s)${fregex}`;
|
|
7674
|
+
}
|
|
7675
|
+
if ((this.jsFlags & PublicFlags.MULTILINE) !== 0) {
|
|
7676
|
+
fregex = `(?m)${fregex}`;
|
|
7677
|
+
}
|
|
7678
|
+
const re = Parser.parse(fregex, this.re2Flags);
|
|
7491
7679
|
this.regexps.push(Simplify.simplify(re));
|
|
7492
7680
|
return this.regexps.length - 1;
|
|
7493
7681
|
}
|
|
@@ -7506,15 +7694,21 @@ class RE2Set {
|
|
|
7506
7694
|
match(input) {
|
|
7507
7695
|
if (!this.prog) this.compile();
|
|
7508
7696
|
const machineInput = Array.isArray(input) ? MachineInput.fromUTF8(input) : MachineInput.fromUTF16(input);
|
|
7697
|
+
let internalAnchor = RE2Flags.UNANCHORED;
|
|
7698
|
+
if (this.anchor === RE2Set.ANCHOR_START) {
|
|
7699
|
+
internalAnchor = RE2Flags.ANCHOR_START;
|
|
7700
|
+
} else if (this.anchor === RE2Set.ANCHOR_BOTH) {
|
|
7701
|
+
internalAnchor = RE2Flags.ANCHOR_BOTH;
|
|
7702
|
+
}
|
|
7509
7703
|
|
|
7510
7704
|
// Fast path: Try the blistering fast DFA
|
|
7511
|
-
const dfaResult = this.dfa.matchSet(machineInput, 0,
|
|
7705
|
+
const dfaResult = this.dfa.matchSet(machineInput, 0, internalAnchor);
|
|
7512
7706
|
if (dfaResult !== null) return dfaResult;
|
|
7513
7707
|
|
|
7514
7708
|
// Safe Fallback: Handle boundaries (\b) or massive state explosions via NFA
|
|
7515
7709
|
const machine = Machine.fromRE2(this.dummyRe2);
|
|
7516
7710
|
machine.init(0);
|
|
7517
|
-
return machine.matchSet(machineInput, 0,
|
|
7711
|
+
return machine.matchSet(machineInput, 0, internalAnchor);
|
|
7518
7712
|
}
|
|
7519
7713
|
}
|
|
7520
7714
|
|
|
@@ -7644,24 +7838,28 @@ class RE2JS {
|
|
|
7644
7838
|
/**
|
|
7645
7839
|
* Flag: case insensitive matching.
|
|
7646
7840
|
*/
|
|
7647
|
-
static CASE_INSENSITIVE =
|
|
7841
|
+
static CASE_INSENSITIVE = PublicFlags.CASE_INSENSITIVE;
|
|
7648
7842
|
/**
|
|
7649
7843
|
* Flag: dot ({@code .}) matches all characters, including newline.
|
|
7650
7844
|
*/
|
|
7651
|
-
static DOTALL =
|
|
7845
|
+
static DOTALL = PublicFlags.DOTALL;
|
|
7652
7846
|
/**
|
|
7653
7847
|
* Flag: multiline matching: {@code ^} and {@code $} match at beginning and end of line, not just
|
|
7654
7848
|
* beginning and end of input.
|
|
7655
7849
|
*/
|
|
7656
|
-
static MULTILINE =
|
|
7850
|
+
static MULTILINE = PublicFlags.MULTILINE;
|
|
7657
7851
|
/**
|
|
7658
7852
|
* Flag: Unicode groups (e.g. {@code \p\ Greek\} ) will be syntax errors.
|
|
7659
7853
|
*/
|
|
7660
|
-
static DISABLE_UNICODE_GROUPS =
|
|
7854
|
+
static DISABLE_UNICODE_GROUPS = PublicFlags.DISABLE_UNICODE_GROUPS;
|
|
7661
7855
|
/**
|
|
7662
7856
|
* Flag: matches longest possible string.
|
|
7663
7857
|
*/
|
|
7664
|
-
static LONGEST_MATCH =
|
|
7858
|
+
static LONGEST_MATCH = PublicFlags.LONGEST_MATCH;
|
|
7859
|
+
/**
|
|
7860
|
+
* Flag: enable linear-time captureless lookbehinds.
|
|
7861
|
+
*/
|
|
7862
|
+
static LOOKBEHINDS = PublicFlags.LOOKBEHINDS;
|
|
7665
7863
|
|
|
7666
7864
|
/**
|
|
7667
7865
|
* Returns a literal pattern string for the specified string.
|
|
@@ -7724,13 +7922,16 @@ class RE2JS {
|
|
|
7724
7922
|
if ((flags & RE2JS.MULTILINE) !== 0) {
|
|
7725
7923
|
fregex = `(?m)${fregex}`;
|
|
7726
7924
|
}
|
|
7727
|
-
if ((flags & ~(RE2JS.MULTILINE | RE2JS.DOTALL | RE2JS.CASE_INSENSITIVE | RE2JS.DISABLE_UNICODE_GROUPS | RE2JS.LONGEST_MATCH)) !== 0) {
|
|
7728
|
-
throw new RE2JSFlagsException('Flags should only be a combination of MULTILINE, DOTALL, CASE_INSENSITIVE, DISABLE_UNICODE_GROUPS, LONGEST_MATCH');
|
|
7925
|
+
if ((flags & ~(RE2JS.MULTILINE | RE2JS.DOTALL | RE2JS.CASE_INSENSITIVE | RE2JS.DISABLE_UNICODE_GROUPS | RE2JS.LONGEST_MATCH | RE2JS.LOOKBEHINDS)) !== 0) {
|
|
7926
|
+
throw new RE2JSFlagsException('Flags should only be a combination of MULTILINE, DOTALL, CASE_INSENSITIVE, DISABLE_UNICODE_GROUPS, LONGEST_MATCH, LOOKBEHINDS');
|
|
7729
7927
|
}
|
|
7730
7928
|
let re2Flags = RE2Flags.PERL;
|
|
7731
7929
|
if ((flags & RE2JS.DISABLE_UNICODE_GROUPS) !== 0) {
|
|
7732
7930
|
re2Flags &= -129;
|
|
7733
7931
|
}
|
|
7932
|
+
if ((flags & RE2JS.LOOKBEHINDS) !== 0) {
|
|
7933
|
+
re2Flags |= RE2Flags.LOOKBEHIND;
|
|
7934
|
+
}
|
|
7734
7935
|
const p = new RE2JS(regex, flags);
|
|
7735
7936
|
// The compiled RE2 regexp.
|
|
7736
7937
|
p.re2Input = RE2.compileImpl(fregex, re2Flags, (flags & RE2JS.LONGEST_MATCH) !== 0);
|