az
Version:
A NLP library for Russian language
4 lines (3 loc) • 42.7 kB
JavaScript
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define("Az",e):t.Az=e()}(this,function(){"use strict";if("undefined"!=typeof require&&"object"==typeof exports&&"undefined"!=typeof module)var t=require("fs");var e={load:function(e,n,r){if(t)return void t.readFile(e,{encoding:"json"==n?"utf8":null},function(t,e){if(t)return void r(t);if("json"==n)r(null,JSON.parse(e));else if("arraybuffer"==n)if(e.buffer)r(null,e.buffer);else{for(var i=new ArrayBuffer(e.length),s=new Uint8Array(i),o=0;o<e.length;++o)s[o]=e[o];r(null,i)}else r(new Error("Unknown responseType"))});var i=new XMLHttpRequest;i.open("GET",e,!0),i.responseType=n,i.onload=function(t){i.response&&r&&r(null,i.response)},i.send(null)},extend:function(){for(var t={},e=0;e<arguments.length;e++)for(var n in arguments[e])t[n]=arguments[e][n];return t}};return e}),function(t,e){"object"==typeof exports&&"undefined"!=typeof module?(module.exports=module.exports||{})&&(module.exports.DAWG=e(module.exports)):"function"==typeof define&&define.amd?define("Az.DAWG",["Az"],e):(t.Az=t.Az||{})&&(t.Az.DAWG=e(t.Az))}(this,function(t){"use strict";function e(t){return t>>10<<((t&h)>>6)&a}function n(t){return t&(255|u)&a}function r(t){return 0!=(t&l&a)}function i(t){return t&~u&a}var s=0,o=-1,a=4294967295,l=256,h=512,u=1<<31,p={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,10:10,11:11,12:12,13:13,14:14,15:15,16:16,17:17,18:18,19:19,20:20,21:21,22:22,23:23,24:24,25:25,26:26,27:27,28:28,29:29,30:30,31:31,32:32,33:33,34:34,35:35,36:36,37:37,38:38,39:39,40:40,41:41,42:42,43:43,44:44,45:45,46:46,47:47,48:48,49:49,50:50,51:51,52:52,53:53,54:54,55:55,56:56,57:57,58:58,59:59,60:60,61:61,62:62,63:63,64:64,65:65,66:66,67:67,68:68,69:69,70:70,71:71,72:72,73:73,74:74,75:75,76:76,77:77,78:78,79:79,80:80,81:81,82:82,83:83,84:84,85:85,86:86,87:87,88:88,89:89,90:90,91:91,92:92,93:93,94:94,95:95,96:96,97:97,98:98,99:99,100:100,101:101,102:102,103:103,104:104,105:105,106:106,107:107,108:108,109:109,110:110,111:111,112:112,113:113,114:114,115:115,116:116,117:117,118:118,119:119,120:120,121:121,122:122,123:123,124:124,125:125,126:126,127:127,1027:129,8225:135,1046:198,8222:132,1047:199,1168:165,1048:200,1113:154,1049:201,1045:197,1050:202,1028:170,160:160,1040:192,1051:203,164:164,166:166,167:167,169:169,171:171,172:172,173:173,174:174,1053:205,176:176,177:177,1114:156,181:181,182:182,183:183,8221:148,187:187,1029:189,1056:208,1057:209,1058:210,8364:136,1112:188,1115:158,1059:211,1060:212,1030:178,1061:213,1062:214,1063:215,1116:157,1064:216,1065:217,1031:175,1066:218,1067:219,1068:220,1069:221,1070:222,1032:163,8226:149,1071:223,1072:224,8482:153,1073:225,8240:137,1118:162,1074:226,1110:179,8230:133,1075:227,1033:138,1076:228,1077:229,8211:150,1078:230,1119:159,1079:231,1042:194,1080:232,1034:140,1025:168,1081:233,1082:234,8212:151,1083:235,1169:180,1084:236,1052:204,1085:237,1035:142,1086:238,1087:239,1088:240,1089:241,1090:242,1036:141,1041:193,1091:243,1092:244,8224:134,1093:245,8470:185,1094:246,1054:206,1095:247,1096:248,8249:139,1097:249,1098:250,1044:196,1099:251,1111:191,1055:207,1100:252,1038:161,8220:147,1101:253,8250:155,1102:254,8216:145,1103:255,1043:195,1105:184,1039:143,1026:128,1106:144,8218:130,1107:131,8217:146,1108:186,1109:190},c={};for(var f in p)c[p[f]]=String.fromCharCode(f),delete c[0],delete c[1];var g={"й":"ёцыф","ц":"йфыву","у":"цывак","к":"увапе","е":"капрн","н":"епрог","г":"нролш","ш":"голдщ","щ":"шлджз","з":"щджэх-","х":"зжэъ-","ъ":"хэ-ё","ф":"йцычяё","ы":"йцувсчяф","в":"цукамсчы","а":"укепимсв","п":"кенртима","р":"енгоьтип","о":"нгшлбьтр","л":"гшщдюбьо","д":"шщзжюбл","ж":"щзхэюд","э":"зхъжё","ё":"йфяъэ","я":"ёфыч","ч":"яфывс","с":"чывам","м":"свапи","и":"мапрт","т":"ипроь","ь":"тролб","б":"ьолдю","ю":"блдж",1:"ёйц",2:"йцу",3:"цук",4:"уке",5:"кен",6:"енг",7:"нгш",8:"гшщ",9:"шщз",0:"щзх-","-":"зхъ","=":"-хъ","\\":"ъэ",".":"южэ"},d=function(t,e,n){this.units=t,this.guide=e,this.format=n};return d.fromArrayBuffer=function(t,e){var n=new DataView(t),r=n.getUint32(0,!0),i=n.getUint32(4*r+4,!0);return new d(new Uint32Array(t,4,r),new Uint8Array(t,4*r+8,2*i),e)},d.load=function(e,n,r){t.load(e,"arraybuffer",function(t,e){r(t,t?null:d.fromArrayBuffer(e,n))})},d.prototype.followByte=function(t,r){var i=e(this.units[r]),s=(r^i^255&t)&a;return n(this.units[s])!=(255&t)?o:s},d.prototype.followString=function(t,e){e=e||s;for(var n=0;n<t.length;n++){var r=t.charCodeAt(n);if(!(r in p))return o;if(e=this.followByte(p[r],e),e==o)return o}return e},d.prototype.hasValue=function(t){return r(this.units[t])},d.prototype.value=function(t){var n=e(this.units[t]),r=(t^n)&a;return i(this.units[r])},d.prototype.find=function(t){var e=this.followString(t);return e==o?o:this.hasValue(e)?this.value(e):o},d.prototype.iterateAll=function(t){for(var e,n=[],r=[t],i=[],a=s;;){if(t=r[r.length-1],a!=s)if(e=this.guide[t<<1]){if(t=this.followByte(e,t),t==o)return n;i.push(e),r.push(t)}else do{if(e=this.guide[(t<<1)+1],i.pop(),r.pop(),!r.length)return n;if(t=r[r.length-1],e){if(t=this.followByte(e,t),t==o)return n;i.push(e),r.push(t)}}while(!e);for(;!this.hasValue(t);){var e=this.guide[t<<1];if(t=this.followByte(e,t),t==o)return n;i.push(e),r.push(t)}"words"==this.format?n.push([((1^i[0])<<6)+(i[1]>>1),((1^i[2])<<6)+(i[3]>>1)]):"probs"==this.format?n.push([((1^i[0])<<6)+(i[1]>>1),((1^i[2])<<6)+(i[3]>>1),((1^i[4])<<6)+(i[5]>>1)]):n.push(i.slice()),a=t}},d.prototype.findAll=function(t,e,n,r){r=r||0,n=n||0;for(var i,a,l,h,u,f,d,m=[],y=[["",0,0,0,s]];y.length;)if(i=y.pop(),a=i[4],d=i[3],f=i[2],l=i[1],i=i[0],l!=t.length){if(e&&t[l]in e&&(h=e[t[l]].charCodeAt(0),h in p&&(u=this.followByte(p[h],a),u!=o&&y.push([i+e[t[l]],l+1,f,d,u]))),r>f&&!d){y.push([i,l+1,f+1,d,a]);var b=this.guide[a<<1];do u=this.followByte(b,a),u!=o&&b in c&&y.push([i+c[b],l,f+1,d,u]),b=this.guide[(u<<1)+1];while(u!=o);var v=g[t[l]];if(v)for(var w=0;w<v.length;w++)h=v.charCodeAt(w),h in p&&(u=this.followByte(p[h],a),u!=o&&y.push([i+v[w],l+1,f+1,d,u]));l<t.length-1&&(h=t.charCodeAt(l+1),h in p&&(u=this.followByte(p[h],a),u!=o&&(h=t.charCodeAt(l),h in p&&(u=this.followByte(p[h],u),u!=o&&y.push([i+t[l+1]+t[l],l+2,f+1,d,u])))))}if(h=t.charCodeAt(l),h in p&&(u=this.followByte(p[h],a),u!=o))for(y.push([i+t[l],l+1,f,d,u]);n>d&&!f&&l<t.length-1;){if(t[l]==t[l+1])y.push([i+t[l],l+2,f,d+1,u]),l++;else{if(!(l<t.length-2&&"-"==t[l+1]&&t[l]==t[l+2]))break;y.push([i+t[l],l+3,f,d+1,u]),l+=2}d++}}else{if(r>f&&!d){var b=this.guide[a<<1];do u=this.followByte(b,a),u!=o&&b in c&&y.push([i+c[b],l,f+1,d,u]),b=this.guide[(u<<1)+1];while(u!=o)}if("int"==this.format){this.hasValue(a)&&m.push([i,this.value(a)]);continue}if(("words"==this.format||"probs"==this.format)&&(a=this.followByte(1,a),a==o))continue;m.push([i,this.iterateAll(a),d,f])}return m},d}),function(t,e){"object"==typeof exports&&"undefined"!=typeof module?(module.exports=module.exports||{})&&(module.exports.Morph=e(module.exports)):"function"==typeof define&&define.amd?define("Az.Morph",["Az","Az.DAWG"],e):(t.Az=t.Az||{})&&(t.Az.Morph=e(t.Az))}(this,function(t){"use strict";function e(t){if("freeze"in Object){var n=Object.getOwnPropertyNames(t);return n.forEach(function(n){var r=t[n];"object"==typeof r&&null!==r&&e(r)}),Object.freeze(t)}}function n(t,n){var r=new k(t);return r.ext=new k(n),e(r)}function r(t,e,n){var r;if("auto"==n.typos){r=t.findAll(e,n.replacements,n.stutter,0);for(var i=0;i<b.length&&!r.length&&e.length>b[i];i++)r=t.findAll(e,n.replacements,n.stutter,i+1)}else r=t.findAll(e,n.replacements,n.stutter,n.typos);return r}function i(t,e){return Math.pow(.3,Math.min(t,1)+e)}var s,o,a,l,h,u,p,c=new Array(3),f=["","по","наи"],g={ignoreCase:!1,replacements:{"е":"ё"},stutter:1/0,typos:0,parsers:["Dictionary?","AbbrName?","AbbrPatronymic","IntNumber","RealNumber","Punctuation","RomanNumber?","Latin","HyphenParticle","HyphenAdverb","HyphenWords","PrefixKnown","PrefixUnknown?","SuffixKnown?","Abbr"],forceParse:!1,normalizeScore:!0},d="АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЭЮЯ",m=["-то","-ка","-таки","-де","-тко","-тка","-с","-ста"],y=["авиа","авто","аква","анти","анти-","антропо","архи","арт","арт-","астро","аудио","аэро","без","бес","био","вело","взаимо","вне","внутри","видео","вице-","вперед","впереди","гекто","гелио","гео","гетеро","гига","гигро","гипер","гипо","гомо","дву","двух","де","дез","дека","деци","дис","до","евро","за","зоо","интер","инфра","квази","квази-","кило","кино","контр","контр-","космо","космо-","крипто","лейб-","лже","лже-","макро","макси","макси-","мало","меж","медиа","медиа-","мега","мета","мета-","метео","метро","микро","милли","мини","мини-","моно","мото","много","мульти","нано","нарко","не","небез","недо","нейро","нео","низко","обер-","обще","одно","около","орто","палео","пан","пара","пента","пере","пиро","поли","полу","после","пост","пост-","порно","пра","пра-","пред","пресс-","противо","противо-","прото","псевдо","псевдо-","радио","разно","ре","ретро","ретро-","само","санти","сверх","сверх-","спец","суб","супер","супер-","супра","теле","тетра","топ-","транс","транс-","ультра","унтер-","штаб-","экзо","эко","эндо","эконом-","экс","экс-","экстра","экстра-","электро","энерго","этно"],b=[4,9],v=[],w=!1,k=function(t){var e,n=t.split(" ");this.stat=n[0].split(","),this.flex=n[1]?n[1].split(","):[];for(var r=0;2>r;r++)for(var i=this[["stat","flex"][r]],s=0;s<i.length;s++){var o=i[s];for(this[o]=!0;l[o]&&(e=l[o].parent);)this[e]=o,o=e}"POST"in this&&(this.POS=this.POST)};k.prototype.toString=function(){return(this.stat.join(",")+" "+this.flex.join(",")).trim()},k.prototype.matches=function(t,e){if(!e){if("[object Array]"===Object.prototype.toString.call(t)){for(var n=0;n<t.length;n++)if(!this[t[n]])return!1;return!0}for(var r in t)if("[object Array]"===Object.prototype.toString.call(t[r])){if(!t[r].indexOf(this[r]))return!1}else if(t[r]!=this[r])return!1;return!0}t instanceof A&&(t=t.tag);for(var n=0;n<e.length;n++)if(t[e[n]]!=this[e[n]])return!1;return!0},k.prototype.isProductive=function(){return!(this.NUMR||this.NPRO||this.PRED||this.PREP||this.CONJ||this.PRCL||this.INTJ||this.Apro||this.NUMB||this.ROMN||this.LATN||this.PNCT||this.UNKN)},k.prototype.isCapitalized=function(){return this.Name||this.Surn||this.Patr||this.Geox||this.Init};var x=function(e,n){if(!w)throw new Error("Please call Az.Morph.init() before using this module.");n=n?t.extend(g,n):g;for(var r=[],s=!1,a=0;a<n.parsers.length;a++){var l=n.parsers[a],h="?"!=l[l.length-1];if(l=h?l:l.slice(0,-1),l in x.Parsers){for(var u=x.Parsers[l](e,n),c=0;c<u.length;c++)u[c].parser=l,u[c].stutterCnt||u[c].typosCnt||(s=!0);if(r=r.concat(u),s&&h)break}else console.warn('Parser "'+l+'" is not found. Skipping')}!r.length&&n.forceParse&&r.push(new A(e.toLocaleLowerCase(),p));for(var f=0,a=0;a<r.length;a++)if("Dictionary"==r[a].parser){var d=o.findAll(r[a]+":"+r[a].tag);d&&d[0]&&(r[a].score=d[0][1]/1e6*i(r[a].stutterCnt,r[a].typosCnt),f+=r[a].score)}if(n.normalizeScore){if(f>0)for(var a=0;a<r.length;a++)"Dictionary"==r[a].parser&&(r[a].score/=f);f=0;for(var a=0;a<r.length;a++)"Dictionary"!=r[a].parser&&(f+=r[a].score);if(f>0)for(var a=0;a<r.length;a++)"Dictionary"!=r[a].parser&&(r[a].score/=f)}return r.sort(function(t,e){return e.score-t.score}),r};x.Parsers={};var A=function(t,e,n,r,i){this.word=t,this.tag=e,this.stutterCnt=r||0,this.typosCnt=i||0,this.score=n||0};A.prototype.normalize=function(t){return this.inflect(t?{POS:this.tag.POS}:0)},A.prototype.inflect=function(t,e){return this},A.prototype.pluralize=function(t){return this.tag.NOUN||this.tag.ADJF||this.tag.PRTF?("number"==typeof t&&(t%=100,t=t%10==0||t%10>4||t>4&&21>t?"many":t%10==1?"one":"few"),!this.tag.NOUN||this.tag.nomn||this.tag.accs?"one"==t?this.inflect(["sing",this.tag.nomn?"nomn":"accs"]):this.tag.NOUN&&"few"==t?this.inflect(["sing","gent"]):(this.tag.ADJF||this.tag.PRTF)&&this.tag.femn&&"few"==t?this.inflect(["plur","nomn"]):this.inflect(["plur","gent"]):this.inflect(["one"==t?"sing":"plur",this.tag.CAse])):this},A.prototype.matches=function(t,e){return this.tag.matches(t,e)},A.prototype.toString=function(){return this.word},A.prototype.log=function(){console.group(this.toString()),console.log("Stutter?",this.stutterCnt,"Typos?",this.typosCnt),console.log(this.tag.ext.toString()),console.groupEnd()};var C=function(t,e,n,r,s,o,a){this.word=t,this.paradigmIdx=e,this.paradigm=h[e],this.formIdx=n,this.formCnt=this.paradigm.length/3,this.tag=u[this.paradigm[this.formCnt+n]],this.stutterCnt=r||0,this.typosCnt=s||0,this.score=i(this.stutterCnt,this.typosCnt),this.prefix=o||"",this.suffix=a||""};C.prototype=Object.create(A.prototype),C.prototype.constructor=C,C.prototype.base=function(){return this._base?this._base:this._base=this.word.substring(f[this.paradigm[(this.formCnt<<1)+this.formIdx]].length,this.word.length-a[this.paradigm[this.formIdx]].length)},C.prototype.inflect=function(t,e){if(!e&&"number"==typeof t)return new C(f[this.paradigm[(this.formCnt<<1)+t]]+this.base()+a[this.paradigm[t]],this.paradigmIdx,t,0,0,this.prefix,this.suffix);for(var n=0;n<this.formCnt;n++)if(u[this.paradigm[this.formCnt+n]].matches(t,e))return new C(f[this.paradigm[(this.formCnt<<1)+n]]+this.base()+a[this.paradigm[n]],this.paradigmIdx,n,0,0,this.prefix,this.suffix);return!1},C.prototype.log=function(){console.group(this.toString()),console.log("Stutter?",this.stutterCnt,"Typos?",this.typosCnt),console.log(f[this.paradigm[(this.formCnt<<1)+this.formIdx]]+"|"+this.base()+"|"+a[this.paradigm[this.formIdx]]),console.log(this.tag.ext.toString());var t=this.normalize();console.log("=> ",t+" ("+t.tag.ext.toString()+")"),t=this.normalize(!0),console.log("=> ",t+" ("+t.tag.ext.toString()+")"),console.groupCollapsed("Все формы: "+this.formCnt);for(var e=0;e<this.formCnt;e++){var n=this.inflect(e);console.log(n+" ("+n.tag.ext.toString()+")")}console.groupEnd(),console.groupEnd()},C.prototype.toString=function(){if(this.prefix){var t=f[this.paradigm[(this.formCnt<<1)+this.formIdx]];return t+this.prefix+this.word.substr(t.length)+this.suffix}return this.word+this.suffix};var T=function(t,e){this.left=t,this.right=e,this.tag=e.tag,this.score=t.score*e.score*.8,this.stutterCnt=t.stutterCnt+e.stutterCnt,this.typosCnt=t.typosCnt+e.typosCnt,"formCnt"in e&&(this.formCnt=e.formCnt)};return T.prototype=Object.create(A.prototype),T.prototype.constructor=T,T.prototype.inflect=function(t,e){var n,r,r=this.right.inflect(t,e);return n=e||"number"!=typeof t?this.left.inflect(t,e):this.left.inflect(r.tag,["POST","NMbr","CAse","PErs","TEns"]),n&&r?new T(n,r):!1},T.prototype.toString=function(){return this.left.word+"-"+this.right.word},v.push(function(){x.Parsers.Dictionary=function(t,e){var n=!e.ignoreCase&&t.length&&t[0].toLocaleLowerCase()!=t[0]&&t.substr(1).toLocaleUpperCase()!=t.substr(1);t=t.toLocaleLowerCase();for(var i=r(s,t,e),o=[],a=0;a<i.length;a++)for(var l=0;l<i[a][1].length;l++){var h=new C(i[a][0],i[a][1][l][0],i[a][1][l][1],i[a][2],i[a][3]);(e.ignoreCase||!h.tag.isCapitalized()||n)&&o.push(h)}return o};for(var t=[],e=0;2>=e;e++)for(var i=0;5>=i;i++)for(var o=0;1>=o;o++)t.push(n("NOUN,inan,"+["masc","femn","neut"][e]+",Fixd,Abbr "+["sing","plur"][o]+","+["nomn","gent","datv","accs","ablt","loct"][i],"СУЩ,неод,"+["мр","жр","ср"][e]+",0,аббр "+["ед","мн"][o]+","+["им","рд","дт","вн","тв","пр"][i]));x.Parsers.Abbr=function(e,n){if(e.length<2)return[];if(e.indexOf("-")>-1)return[];if(d.indexOf(e[0])>-1&&d.indexOf(e[e.length-1])>-1){for(var r=0,i=0;i<e.length;i++)d.indexOf(e[i])>-1&&r++;if(5>=r){for(var s=[],i=0;i<t.length;i++){var o=new A(e,t[i],.5);s.push(o)}return s}}if(!n.ignoreCase||e.length>5)return[];e=e.toLocaleUpperCase();for(var i=0;i<e.length;i++)if(-1==d.indexOf(e[i]))return[];for(var s=[],i=0;i<t.length;i++){var o=new A(e,t[i],.2);s.push(o)}return s};var a=function(t,e){for(var r=[],i=0;1>=i;i++)for(var s=0;5>=s;s++)r.push(n("NOUN,anim,"+["masc","femn"][i]+",Sgtm,Name,Fixd,Abbr,Init sing,"+["nomn","gent","datv","accs","ablt","loct"][s],"СУЩ,од,"+["мр","жр"][i]+",sg,имя,0,аббр,иниц ед,"+["им","рд","дт","вн","тв","пр"][s]));return function(t,n){if(1!=t.length)return[];if(n.ignoreCase&&(t=t.toLocaleUpperCase()),-1==d.indexOf(t))return[];for(var i=[],s=0;s<r.length;s++){var o=new A(t,r[s],e);i.push(o)}return i}};x.Parsers.AbbrName=a(!1,.1),x.Parsers.AbbrPatronymic=a(!0,.1);var h=function(t,e,n){return function(n,r){return r.ignoreCase&&(n=n.toLocaleUpperCase()),n.length&&n.match(t)?[new A(n,e)]:[]}};l.NUMB=l["ЧИСЛО"]=l.ROMN=l["РИМ"]=l.LATN=l["ЛАТ"]=l.PNCT=l["ЗПР"]=l.UNKN=l["НЕИЗВ"]={parent:"POST"},x.Parsers.IntNumber=h(/^[−-]?[0-9]+$/,n("NUMB,intg","ЧИСЛО,цел"),.9),x.Parsers.RealNumber=h(/^[−-]?([0-9]*[.,][0-9]+)$/,n("NUMB,real","ЧИСЛО,вещ"),.9),x.Parsers.Punctuation=h(/^[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,\-.\/:;<=>?@\[\]^_`{|}~]+$/,n("PNCT","ЗПР"),.9),x.Parsers.RomanNumber=h(/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,n("ROMN","РИМ"),.9),x.Parsers.Latin=h(/[A-Za-z\u00C0-\u00D6\u00D8-\u00f6\u00f8-\u024f]$/,n("LATN","ЛАТ"),.9),x.Parsers.HyphenParticle=function(t,e){t=t.toLocaleLowerCase();for(var n=[],i=0;i<m.length;i++)if(t.substr(t.length-m[i].length)==m[i])for(var o=t.slice(0,-m[i].length),a=r(s,o,e),l=0;l<a.length;l++)for(var h=0;h<a[l][1].length;h++){var u=new C(a[l][0],a[l][1][h][0],a[l][1][h][1],a[l][2],a[l][3],"",m[i]);u.score*=.9,n.push(u)}return n};var u=n("ADVB","Н");x.Parsers.HyphenAdverb=function(t,e){if(t=t.toLocaleLowerCase(),t.length<5||"по-"!=t.substr(0,3))return[];for(var n=r(s,t.substr(3),e),i=[],o={},a=0;a<n.length;a++)if(!o[n[a][0]])for(var l=0;l<n[a][1].length;l++){var h=new C(n[a][0],n[a][1][l][0],n[a][1][l][1],n[a][2],n[a][3]);if(h.matches(["ADJF","sing","datv"])){o[n[a][0]]=!0,h=new A("по-"+n[a][0],u,.9*h.score,n[a][2],n[a][3]),i.push(h);break}}return i},x.Parsers.HyphenWords=function(t,e){t=t.toLocaleLowerCase();for(var n=0;n<y.length;n++)if("-"==y[n][y[n].length-1]&&t.substr(0,y[n].length)==y[n])return[];var r=[],i=t.split("-");if(2!=i.length||!i[0].length||!i[1].length){if(i.length>2)for(var s=i[i.length-1],o=x.Parsers.Dictionary(s,e),a=0;a<o.length;a++)o[a]instanceof C&&(o[a].score*=.2,o[a].prefix=t.substr(0,t.length-s.length-1)+"-",r.push(o[a]));return r}for(var l=x.Parsers.Dictionary(i[0],e),o=x.Parsers.Dictionary(i[1],e),n=0;n<l.length;n++)if(!l[n].tag.Abbr)for(var a=0;a<o.length;a++)l[n].matches(o[a],["POST","NMbr","CAse","PErs","TEns"])&&(l[n].stutterCnt+o[a].stutterCnt>e.stutter||l[n].typosCnt+o[a].typosCnt>e.typos||r.push(new T(l[n],o[a])));for(var a=0;a<o.length;a++)o[a]instanceof C&&(o[a].score*=.3,o[a].prefix=i[0]+"-",r.push(o[a]));return r},x.Parsers.PrefixKnown=function(t,e){var n=!e.ignoreCase&&t.length&&t[0].toLocaleLowerCase()!=t[0]&&t.substr(1).toLocaleUpperCase()!=t.substr(1);t=t.toLocaleLowerCase();for(var r=[],i=0;i<y.length;i++)if(!(t.length-y[i].length<3)&&t.substr(0,y[i].length)==y[i])for(var s=t.substr(y[i].length),o=x.Parsers.Dictionary(s,e),a=0;a<o.length;a++)o[a].tag.isProductive()&&(e.ignoreCase||!o[a].tag.isCapitalized()||n)&&(o[a].score*=.7,o[a].prefix=y[i],r.push(o[a]));return r},x.Parsers.PrefixUnknown=function(t,e){var n=!e.ignoreCase&&t.length&&t[0].toLocaleLowerCase()!=t[0]&&t.substr(1).toLocaleUpperCase()!=t.substr(1);t=t.toLocaleLowerCase();for(var r=[],i=1;5>=i&&!(t.length-i<3);i++)for(var s=t.substr(i),o=x.Parsers.Dictionary(s,e),a=0;a<o.length;a++)o[a].tag.isProductive()&&(e.ignoreCase||!o[a].tag.isCapitalized()||n)&&(o[a].score*=.3,o[a].prefix=t.substr(0,i),r.push(o[a]));return r},x.Parsers.SuffixKnown=function(t,e){if(t.length<4)return[];var n=!e.ignoreCase&&t.length&&t[0].toLocaleLowerCase()!=t[0]&&t.substr(1).toLocaleUpperCase()!=t.substr(1);t=t.toLocaleLowerCase();for(var r=[],i=1,s=[0,.2,.3,.4,.5,.6],o={},a=0;a<f.length;a++)if(!f[a].length||t.substr(0,f[a].length)==f[a])for(var l=t.substr(f[a].length),h=5;h>=i;h--)if(!(h>=l.length)){var u=l.substr(0,l.length-h),p=l.substr(l.length-h),g=c[a].findAll(p,e.replacements,0,0);if(g){for(var d=[],m=1,y=0;y<g.length;y++)for(var b=g[y][0],v=g[y][1],w=0;w<v.length;w++){var k=new C(f[a]+u+b,v[w][1],v[w][2]);if(k.tag.isProductive()&&(e.ignoreCase||!k.tag.isCapitalized()||n)){var x=k.toString()+":"+v[w][1]+":"+v[w][2];x in o||(m=Math.max(m,v[w][0]),k.score=v[w][0]*s[h],d.push(k),o[x]=!0)}}if(d.length>0){for(var y=0;y<d.length;y++)d[y].score/=m;r=r.concat(d),i=Math.max(h-1,1)}}}return r},p=n("UNKN","НЕИЗВ")}),x.setDefaults=function(t){g=t},x.init=function(n,r){function i(){if(!--g){u=Array(p.length);for(var t=0;t<p.length;t++)u[t]=new k(p[t]),u[t].ext=new k(f[t]);u=e(u);for(var t=0;t<v.length;t++)v[t]();w=!0,r&&r(null,x)}}var p,f,g=0;r||"function"!=typeof n||(r=n,n="string"==typeof __dirname?__dirname+"/../dicts":"dicts"),g++,t.DAWG.load(n+"/words.dawg","words",function(t,e){return t?void r(t):(s=e,void i())});for(var d=0;3>d;d++)!function(e){g++,t.DAWG.load(n+"/prediction-suffixes-"+e+".dawg","probs",function(t,n){return t?void r(t):(c[e]=n,void i())})}(d);g++,t.DAWG.load(n+"/p_t_given_w.intdawg","int",function(t,e){return t?void r(t):(o=e,void i())}),g++,t.load(n+"/grammemes.json","json",function(t,e){if(t)return void r(t);l={};for(var n=0;n<e.length;n++)l[e[n][0]]=l[e[n][2]]={parent:e[n][1],internal:e[n][0],external:e[n][2],externalFull:e[n][3]};i()}),g++,t.load(n+"/gramtab-opencorpora-int.json","json",function(t,e){return t?void r(t):(p=e,void i())}),g++,t.load(n+"/gramtab-opencorpora-ext.json","json",function(t,e){return t?void r(t):(f=e,void i())}),g++,t.load(n+"/suffixes.json","json",function(t,e){return t?void r(t):(a=e,void i())}),g++,t.load(n+"/paradigms.array","arraybuffer",function(t,e){if(t)return void r(t);var n=new Uint16Array(e),s=n[0],o=1;h=[];for(var a=0;s>a;a++){var l=n[o++];h.push(n.subarray(o,o+l)),o+=l}i()})},x}),function(t,e){"object"==typeof exports&&"undefined"!=typeof module?(module.exports=module.exports||{})&&(module.exports.Syntax=e(module.exports)):"function"==typeof define&&define.amd?define("Az.Syntax",["Az"],e):(t.Az=t.Az||{})&&(t.Az.Syntax=e(t.Az))}(this,function(t){"use strict";var e=function(){};return e}),function(t,e){"object"==typeof exports&&"undefined"!=typeof module?(module.exports=module.exports||{})&&(module.exports.Tokens=e()):"function"==typeof define&&define.amd?define("Az.Tokens",["Az"],e):(t.Az=t.Az||{})&&(t.Az.Tokens=e())}(this,function(){"use strict";function t(){return!0}function e(e,n){if(!e)return t();if("function"==typeof e)return e;var r,i=e;if("length"in e){r=!n,i={};for(var s=0;s<e.length;s++)i[e[s]]=!0}else r=n,n=!1;return function(t,e,s){if(t.subType){var o=t.type+"."+t.subType;if(o in i)return i[o]!=n}return t.type in i?i[t.type]!=n:!r}}for(var n="ac|ad|ae|aero|af|ag|ai|al|am|ao|aq|ar|arpa|as|asia|at|au|aw|ax|az|ba|bb|be|bf|bg|bh|bi|biz|bj|bm|bo|br|bs|bt|bv|bw|by|bz|ca|cat|cc|cd|cf|cg|ch|ci|cl|cm|cn|co|com|coop|cr|cu|cv|cw|cx|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|es|et|eu|fi|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|info|int|io|iq|ir|is|it|je|jo|jobs|jp|kg|ki|km|kn|kp|kr|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mil|mk|ml|mn|mo|mobi|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|na|name|nc|ne|net|nf|ng|nl|no|nr|nu|nz|om|org|pa|pe|pf|ph|pk|pl|pm|pn|post|pr|pro|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sx|sy|sz|tc|td|tel|tf|tg|th|tj|tk|tl|tm|tn|to|tr|travel|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|yt|امارات|հայ|বাংলা|бел|中国|中國|الجزائر|مصر|ею|გე|ελ|香港|भारत|بھارت|భారత్|ભારત|ਭਾਰਤ|ভারত|இந்தியா|ایران|ايران|عراق|الاردن|한국|қаз|ලංකා|இலங்கை|المغرب|мкд|мон|澳門|澳门|مليسيا|عمان|پاکستان|پاكستان|فلسطين|срб|рф|قطر|السعودية|السعودیة|السعودیۃ|السعوديه|سودان|新加坡|சிங்கப்பூர்|سورية|سوريا|ไทย|تونس|台灣|台湾|臺灣|укр|اليمن|xxx|zm|aaa|aarp|abarth|abb|abbott|abbvie|abc|able|abogado|abudhabi|academy|accenture|accountant|accountants|aco|active|actor|adac|ads|adult|aeg|aetna|afamilycompany|afl|africa|africamagic|agakhan|agency|aig|aigo|airbus|airforce|airtel|akdn|alfaromeo|alibaba|alipay|allfinanz|allstate|ally|alsace|alstom|americanexpress|americanfamily|amex|amfam|amica|amsterdam|analytics|android|anquan|anz|aol|apartments|app|apple|aquarelle|arab|aramco|archi|army|art|arte|asda|associates|athleta|attorney|auction|audi|audible|audio|auspost|author|auto|autos|avianca|aws|axa|azure|baby|baidu|banamex|bananarepublic|band|bank|bar|barcelona|barclaycard|barclays|barefoot|bargains|baseball|basketball|bauhaus|bayern|bbc|bbt|bbva|bcg|bcn|beats|beauty|beer|bentley|berlin|best|bestbuy|bet|bharti|bible|bid|bike|bing|bingo|bio|black|blackfriday|blanco|blockbuster|blog|bloomberg|blue|bms|bmw|bnl|bnpparibas|boats|boehringer|bofa|bom|bond|boo|book|booking|boots|bosch|bostik|boston|bot|boutique|box|bradesco|bridgestone|broadway|broker|brother|brussels|budapest|bugatti|build|builders|business|buy|buzz|bzh|cab|cafe|cal|call|calvinklein|camera|camp|cancerresearch|canon|capetown|capital|capitalone|car|caravan|cards|care|career|careers|cars|cartier|casa|case|caseih|cash|casino|catering|catholic|cba|cbn|cbre|cbs|ceb|center|ceo|cern|cfa|cfd|chanel|channel|chase|chat|cheap|chintai|chloe|christmas|chrome|chrysler|church|cipriani|circle|cisco|citadel|citi|citic|city|cityeats|claims|cleaning|click|clinic|clinique|clothing|cloud|club|clubmed|coach|codes|coffee|college|cologne|comcast|commbank|community|company|compare|computer|comsec|condos|construction|consulting|contact|contractors|cooking|cookingchannel|cool|corsica|country|coupon|coupons|courses|credit|creditcard|creditunion|cricket|crown|crs|cruise|cruises|csc|cuisinella|cymru|cyou|dabur|dad|dance|date|dating|datsun|day|dclk|dds|deal|dealer|deals|degree|delivery|dell|deloitte|delta|democrat|dental|dentist|desi|design|dev|dhl|diamonds|diet|digital|direct|directory|discount|discover|dish|diy|dnp|docs|dodge|dog|doha|domains|dot|download|drive|dstv|dtv|dubai|duck|dunlop|duns|dupont|durban|dvag|dwg|earth|eat|edeka|education|email|emerck|emerson|energy|engineer|engineering|enterprises|epost|epson|equipment|ericsson|erni|esq|estate|esurance|etisalat|eurovision|eus|events|everbank|exchange|expert|exposed|express|extraspace|fage|fail|fairwinds|faith|family|fan|fans|farm|farmers|fashion|fast|fedex|feedback|ferrari|ferrero|fiat|fidelity|fido|film|final|finance|financial|fire|firestone|firmdale|fish|fishing|fit|fitness|flickr|flights|flir|florist|flowers|flsmidth|fly|foo|foodnetwork|football|ford|forex|forsale|forum|foundation|fox|free|fresenius|frl|frogans|frontdoor|frontier|ftr|fujitsu|fujixerox|fun|fund|furniture|futbol|fyi|gal|gallery|gallo|gallup|game|games|gap|garden|gbiz|gdn|gea|gent|genting|george|ggee|gift|gifts|gives|giving|glade|glass|gle|global|globo|gmail|gmbh|gmo|gmx|godaddy|gold|goldpoint|golf|goo|goodhands|goodyear|goog|google|gop|got|gotv|grainger|graphics|gratis|green|gripe|group|guardian|gucci|guge|guide|guitars|guru|hair|hamburg|hangout|haus|hbo|hdfc|hdfcbank|health|healthcare|help|helsinki|here|hermes|hgtv|hiphop|hisamitsu|hitachi|hiv|hkt|hockey|holdings|holiday|homedepot|homegoods|homes|homesense|honda|honeywell|horse|host|hosting|hot|hoteles|hotmail|house|how|hsbc|htc|hughes|hyatt|hyundai|ibm|icbc|ice|icu|ieee|ifm|iinet|ikano|imamat|imdb|immo|immobilien|industries|infiniti|ing|ink|institute|insurance|insure|intel|international|intuit|investments|ipiranga|irish|iselect|ismaili|ist|istanbul|itau|itv|iveco|iwc|jaguar|java|jcb|jcp|jeep|jetzt|jewelry|jio|jlc|jll|jmp|jnj|joburg|jot|joy|jpmorgan|jprs|juegos|juniper|kaufen|kddi|kerryhotels|kerrylogistics|kerryproperties|kfh|kia|kim|kinder|kindle|kitchen|kiwi|koeln|komatsu|kosher|kpmg|kpn|krd|kred|kuokgroup|kyknet|kyoto|lacaixa|ladbrokes|lamborghini|lamer|lancaster|lancia|lancome|land|landrover|lanxess|lasalle|lat|latino|latrobe|law|lawyer|lds|lease|leclerc|lefrak|legal|lego|lexus|lgbt|liaison|lidl|life|lifeinsurance|lifestyle|lighting|like|lilly|limited|limo|lincoln|linde|link|lipsy|live|living|lixil|loan|loans|locker|locus|loft|lol|london|lotte|lotto|love|lpl|lplfinancial|ltd|ltda|lundbeck|lupin|luxe|luxury|macys|madrid|maif|maison|makeup|man|management|mango|market|marketing|markets|marriott|marshalls|maserati|mattel|mba|mcd|mcdonalds|mckinsey|med|media|meet|melbourne|meme|memorial|men|menu|meo|metlife|miami|microsoft|mini|mint|mit|mitsubishi|mlb|mls|mma|mnet|mobily|moda|moe|moi|mom|monash|money|monster|montblanc|mopar|mormon|mortgage|moscow|moto|motorcycles|mov|movie|movistar|msd|mtn|mtpc|mtr|multichoice|mutual|mutuelle|mzansimagic|nab|nadex|nagoya|naspers|nationwide|natura|navy|nba|nec|netbank|netflix|network|neustar|new|newholland|news|next|nextdirect|nexus|nfl|ngo|nhk|nico|nike|nikon|ninja|nissan|nissay|nokia|northwesternmutual|norton|now|nowruz|nowtv|nra|nrw|ntt|nyc|obi|observer|off|office|okinawa|olayan|olayangroup|oldnavy|ollo|omega|one|ong|onl|online|onyourside|ooo|open|oracle|orange|organic|orientexpress|origins|osaka|otsuka|ott|ovh|page|pamperedchef|panasonic|panerai|paris|pars|partners|parts|party|passagens|pay|payu|pccw|pet|pfizer|pharmacy|philips|photo|photography|photos|physio|piaget|pics|pictet|pictures|pid|pin|ping|pink|pioneer|pizza|place|play|playstation|plumbing|plus|pnc|pohl|poker|politie|porn|pramerica|praxi|press|prime|prod|productions|prof|progressive|promo|properties|property|protection|pru|prudential|pub|pwc|qpon|quebec|quest|qvc|racing|raid|read|realestate|realtor|realty|recipes|red|redstone|redumbrella|rehab|reise|reisen|reit|reliance|ren|rent|rentals|repair|report|republican|rest|restaurant|review|reviews|rexroth|rich|richardli|ricoh|rightathome|ril|rio|rip|rmit|rocher|rocks|rodeo|rogers|room|rsvp|ruhr|run|rwe|ryukyu|saarland|safe|safety|sakura|sale|salon|samsclub|samsung|sandvik|sandvikcoromant|sanofi|sap|sapo|sarl|sas|save|saxo|sbi|sbs|sca|scb|schaeffler|schmidt|scholarships|school|schule|schwarz|science|scjohnson|scor|scot|seat|secure|security|seek|select|sener|services|ses|seven|sew|sex|sexy|sfr|shangrila|sharp|shaw|shell|shia|shiksha|shoes|shopping|shouji|show|showtime|shriram|silk|sina|singles|site|ski|skin|sky|skype|sling|smart|smile|sncf|soccer|social|softbank|software|sohu|solar|solutions|song|sony|soy|space|spiegel|spot|spreadbetting|srl|srt|stada|staples|star|starhub|statebank|statefarm|statoil|stc|stcgroup|stockholm|storage|store|stream|studio|study|style|sucks|supersport|supplies|supply|support|surf|surgery|suzuki|swatch|swiftcover|swiss|sydney|symantec|systems|tab|taipei|talk|taobao|target|tatamotors|tatar|tattoo|tax|taxi|tci|tdk|team|tech|technology|telecity|telefonica|temasek|tennis|teva|thd|theater|theatre|theguardian|tiaa|tickets|tienda|tiffany|tips|tires|tirol|tjmaxx|tjx|tkmaxx|tmall|today|tokyo|tools|top|toray|toshiba|total|tours|town|toyota|toys|trade|trading|training|travelchannel|travelers|travelersinsurance|trust|trv|tube|tui|tunes|tushu|tvs|ubank|ubs|uconnect|unicom|university|uno|uol|ups|vacations|vana|vanguard|vegas|ventures|verisign|versicherung|vet|viajes|video|vig|viking|villas|vin|vip|virgin|visa|vision|vista|vistaprint|viva|vivo|vlaanderen|vodka|volkswagen|volvo|vote|voting|voto|voyage|vuelos|wales|walmart|walter|wang|wanggou|warman|watch|watches|weather|weatherchannel|webcam|weber|website|wed|wedding|weibo|weir|whoswho|wien|wiki|williamhill|win|windows|wine|winners|wme|wolterskluwer|woodside|work|works|world|wow|wtc|wtf|xbox|xerox|xfinity|xihuan|xin|कॉम|セール|佛山|慈善|集团|在线|大众汽车|点看|คอม|八卦|موقع|一号店|公益|公司|香格里拉|网站|移动|我爱你|москва|католик|онлайн|сайт|联通|קום|时尚|微博|淡马锡|ファッション|орг|नेट|ストア|삼성|商标|商店|商城|дети|ポイント|新闻|工行|家電|كوم|中文网|中信|娱乐|谷歌|電訊盈科|购物|クラウド|通販|网店|संगठन|餐厅|网络|ком|诺基亚|食品|飞利浦|手表|手机|ارامكو|العليان|اتصالات|بازار|موبايلي|ابوظبي|كاثوليك|همراه|닷컴|政府|شبكة|بيتك|عرب|机构|组织机构|健康|рус|珠宝|大拿|みんな|グーグル|世界|書籍|网址|닷넷|コム|天主教|游戏|vermögensberater|vermögensberatung|企业|信息|嘉里大酒店|嘉里|广东|政务|xperia|xyz|yachts|yahoo|yamaxun|yandex|yodobashi|yoga|yokohama|you|youtube|yun|zappos|zara|zero|zip|zippo|zone|zuerich".split("|"),r={html:!1,wiki:!1,markdown:!1,hashtags:!0,mentions:!0,emails:!0,links:{protocols:!0,www:!1,tlds:{}}},i={nbsp:" ",quot:'"',gt:">",lt:"<",amp:"&",ndash:"–"},s=0;s<n.length;s++)r.links.tlds[n[s]]=!0;var o=function(t,e,n,r,i,s,o,a){this.source=t,this.st=e,this.length=n,this.index=r,this.firstUpper=i,this.allUpper=s,
this.type=o,a&&(this.subType=a)};o.prototype.toString=function(){return"_str"in this&&this._str.length==this.length?this._str:this._str=this.source.substr(this.st,this.length)},o.prototype.indexOf=function(t){if(1==t.length){for(var e=0;e<this.length;e++)if(this.source[this.st+e]==t)return e;return-1}return this.toString().indexOf(t)},o.prototype.toLowerCase=function(){return this.toString().toLocaleLowerCase()},o.prototype.isCapitalized=function(){return this.firstUpper&&!this.allUpper},o.prototype.en=function(){return this.st+this.length-1};var a=function(t,e){return this instanceof a?(this.tokens=[],this.source="","string"==typeof t?(this.config=e?Az.extend(r,e):r,this.append(t)):this.config=t?Az.extend(r,t):r,this.index=-1,void 0):new a(t,e)};return a.WORD=new String("WORD"),a.NUMBER=new String("NUMBER"),a.OTHER=new String("OTHER"),a.DIGIT=new String("DIGIT"),a.CYRIL=new String("CYRIL"),a.LATIN=new String("LATIN"),a.MIXED=new String("MIXED"),a.PUNCT=new String("PUNCT"),a.SPACE=new String("SPACE"),a.MARKUP=new String("MARKUP"),a.NEWLINE=new String("NEWLINE"),a.EMAIL=new String("EMAIL"),a.LINK=new String("LINK"),a.HASHTAG=new String("HASHTAG"),a.MENTION=new String("MENTION"),a.TAG=new String("TAG"),a.CONTENT=new String("CONTENT"),a.SCRIPT=new String("SCRIPT"),a.STYLE=new String("STYLE"),a.COMMENT=new String("COMMENT"),a.CLOSING=new String("CLOSING"),a.TEMPLATE=new String("TEMPLATE"),a.RANGE=new String("RANGE"),a.ENTITY=new String("ENTITY"),a.prototype.append=function(t,e){e=e?Az.extend(this.config,e):this.config,e.links&&e.links.tlds===!0&&(e.links.tlds=r.links.tlds);var n=this.source.length;this.source+=t;for(var s=this.source,l=this.tokens,h=n;h<s.length;h++){var u=s[h],p=s.charCodeAt(h),c=!1,f=l.length-1,g=l[f],d=h;if(e.html&&";"==u)if(f>0&&g.type===a.WORD&&1==l[f-1].length&&"&"==s[l[f-1].st]){var m=g.toLowerCase();m in i&&(u=i[m],p=u.charCodeAt(0),f-=2,g=l[f],l.length=f+1)}else f>1&&(g.type===a.NUMBER||g.type===a.WORD&&"x"==s[g.st])&&1==l[f-1].length&&"#"==s[l[f-1].st]&&1==l[f-1].length&&"&"==s[l[f-1].st]&&(p="x"==s[g.st]?parseInt(g.toString().substr(1),16):parseInt(g.toString(),10),u=String.fromCharCode(p),f-=3,g=l[f],l.length=f+1);var y=a.OTHER,b=u.toLocaleLowerCase()!=u;p>=1024&&1279>=p&&(y=a.CYRIL),(p>=65&&90>=p||p>=97&&122>=p||p>=192&&591>=p)&&(y=a.LATIN),p>=48&&57>=p&&(y=a.DIGIT),(32>=p||p>=128&&160>=p)&&(y=a.SPACE),"‐-−‒–—―.…,:;?!¿¡()[]«»\"'’‘’“”/⁄".indexOf(u)>-1&&(y=a.PUNCT);var v=y,w=!1;y===a.CYRIL||y===a.LATIN?(v=a.WORD,w=y):y===a.DIGIT&&(v=a.NUMBER);var k=!g||"\n"==s[g.st+g.length-1];if(e.wiki&&(k&&":;*#~|".indexOf(u)>-1&&(v=a.MARKUP,w=a.NEWLINE),"={[|]}".indexOf(u)>-1&&(v=a.MARKUP)),e.markdown&&(k&&"=-#>+-".indexOf(u)>-1&&(v=a.MARKUP,w=a.NEWLINE),"[]*~_`\\".indexOf(u)>-1&&(v=a.MARKUP)),g)if(e.wiki&&"'"!=u&&1==g.length&&"'"==s[g.st]&&f>0&&l[f-1].type===a.WORD&&l[f-1].subType===a.LATIN&&(l[f-1].length+=g.length,f-=1,l.length=f+1,g=l[f]),e.links&&e.links.tlds&&(y===a.PUNCT||y===a.SPACE)&&l.length>2&&l[f-2].type===a.WORD&&1==l[f-1].length&&"."==s[l[f-1].st]&&l[f].type===a.WORD&&g.toString()in e.links.tlds){for(;f>=2&&l[f-2].type===a.WORD&&1==l[f-1].length&&("."==s[l[f-1].st]||"@"==s[l[f-1].st]||":"==s[l[f-1].st]);)f-=2,g=l[f],g.length+=l[f+1].length+l[f+2].length,g.allUpper=g.allUpper&&l[f+1].allUpper&&l[f+2].allUpper;e.emails&&g.indexOf("@")>-1&&-1==g.indexOf(":")?g.type=a.EMAIL:(g.type=a.LINK,"/"==u&&(c=!0)),l.length=f+1}else if(g.type===a.LINK)")"==u&&f>=1&&l[f-1].type===a.MARKUP&&1==l[f-1].length&&"("==s[l[f-1].st]?v=a.MARKUP:y!==a.SPACE&&","!=u&&"<"!=u&&(c=!0);else if(g.type===a.EMAIL)y!==a.CYRIL&&y!==a.LATIN&&"."!=u||(c=!0);else if(g.type===a.HASHTAG||g.type===a.MENTION)(y===a.CYRIL||y==a.LATIN||y==a.DIGIT||"_"==u||"@"==u&&-1==g.indexOf("@"))&&(c=!0);else if(g.type!==a.TAG||!g.quote&&">"==s[g.en()])if(g.type===a.CONTENT)c=!0,g.quote?u==g.quote&&"\\"!=s[g.en()]&&delete g.quote:'"'==u||"'"==u?g.quote=u:">"==u&&(g.length>=8&&"</script"==g.toString().substr(-8)?(g.length-=8,d-=8,c=!1,v=a.TAG,w=a.CLOSING):g.length>=7&&"</style"==g.toString().substr(-7)&&(g.length-=7,d-=7,c=!1,v=a.TAG,w=a.CLOSING));else if(g.type===a.TAG&&g.type!==a.CLOSING&&g.length>=8&&"script"==g.toLowerCase().substr(1,6))v=a.CONTENT,w=a.SCRIPT;else if(g.type===a.TAG&&g.type!==a.CLOSING&&g.length>=7&&"style"==g.toLowerCase().substr(1,5))v=a.CONTENT,w=a.STYLE;else if(!e.html||1!=g.length||"<"!=s[g.st]||y!==a.LATIN&&"!"!=u&&"/"!=u)if(g.type===a.CONTENT)c=!0;else if(g.type!==a.MARKUP||g.subType!=a.TEMPLATE||"}"==s[g.en()]&&"}"==s[g.en()-1]){if(g.type===a.MARKUP&&g.type===a.LINK&&")"!=s[g.en()])c=!0;else if(g.type===a.MARKUP&&"`"==s[g.st]&&g.subType===a.NEWLINE&&y===a.LATIN)c=!0;else if(y===a.CYRIL||y===a.LATIN)g.type===a.WORD?(c=!0,g.subType=g.subType==y?g.subType:a.MIXED):g.type===a.NUMBER?(c=!0,g.subType=g.subType&&g.subType!=y?a.MIXED:y):e.hashtags&&1==g.length&&"#"==s[g.st]?(c=!0,g.type=a.HASHTAG):!e.mentions||1!=g.length||"@"!=s[g.st]||0!=f&&l[f-1].type!==a.SPACE?y!==a.LATIN||1!=g.length||"'"!=s[g.st]&&"’"!=s[g.st]?1==g.length&&"-"==s[g.st]&&(c=!0,f>0&&l[f-1].type===a.NUMBER&&(g=l[f-1],g.length+=l[f].length,l.length-=1),g.type=a.WORD,g.subType=y):(c=!0,g.type=a.WORD,g.subType=a.LATIN):(c=!0,g.type=a.MENTION);else if(y===a.DIGIT)g.type===a.WORD?(c=!0,g.subType=a.MIXED):g.type===a.NUMBER?c=!0:1!=g.length||"+"!=s[g.st]&&"-"!=s[g.st]?1==g.length&&(","==s[g.st]||"."==s[g.st])&&l.length>1&&l[f-1].type===a.NUMBER&&(c=!0,g=l[f-1],g.length+=l[f].length,l.length-=1):(c=!0,f>0&&l[f-1].type===a.NUMBER&&(g=l[f-1],g.length+=l[f].length,g.subType=a.RANGE,l.length-=1),g.type=a.NUMBER);else if(y===a.SPACE)g.type===a.SPACE&&(c=!0);else if(g.type===a.MARKUP&&s[g.st]==u&&"=-~:*#`'>_".indexOf(u)>-1)c=!0;else if("."==u)e.links&&e.links.www&&3==g.length&&"www"==g.toLowerCase()&&(c=!0,g.type=a.LINK);else if(e.wiki&&"'"==u&&"'"==s[g.en()])g.length>1?(g.length--,d--,v=a.MARKUP):(c=!0,g.type=a.MARKUP);else if("-"==u||g.subType==a.LATIN&&("’"==u||"'"==u))g.type===a.WORD&&(c=!0);else if("/"==u)e.links&&e.links.protocols&&l.length>2&&l[f-2].type===a.WORD&&l[f-2].subType==a.LATIN&&1==l[f-1].length&&":"==s[l[f-1].st]&&1==l[f].length&&"/"==s[l[f].st]&&(c=!0,g=l[f-2],g.length+=l[f-1].length+l[f].length,g.allUpper=g.allUpper&&l[f-1].allUpper&&l[f].allUpper,g.type=a.LINK,l.length-=2);else if(e.html&&";"==u)f>0&&g.type===a.WORD&&1==l[f-1].length&&"&"==s[l[f-1].st]?(c=!0,g=l[f-1],g.length+=l[f].length,g.allUpper=g.allUpper&&l[f-1].allUpper,g.type=a.ENTITY,l.length-=1):f>1&&(g.type===a.WORD||g.type===a.NUMBER)&&1==l[f-1].length&&"#"==s[l[f-1].st]&&1==l[f-2].length&&"&"==s[l[f-2].st]&&(c=!0,g=l[f-2],g.length+=l[f-1].length+l[f].length,g.allUpper=g.allUpper&&l[f-1].allUpper&&l[f].allUpper,g.type=a.ENTITY,l.length-=2);else if(e.markdown&&"["==u&&1==g.length&&"!"==s[g.st])c=!0,g.type=a.MARKUP;else if(e.markdown&&"("==u&&1==g.length&&"]"==s[g.st])v=a.MARKUP,w=a.LINK;else if(e.wiki&&"{"==u&&1==g.length&&"{"==s[g.st])c=!0,g.type=a.MARKUP,g.subType=a.TEMPLATE;else if(e.wiki&&"["==u&&1==g.length&&"["==s[g.st])c=!0;else if(e.wiki&&"]"==u&&1==g.length&&"]"==s[g.st])c=!0;else if(e.wiki&&"|"==u&&!k){for(var x=-1,A=f-1;A>=0;A--){if(2==l[A].length&&"["==s[l[A].st]&&"["==s[l[A].st+1]){x=A;break}if(1==l[A].length&&"|"==s[l[A].st]||l[A].indexOf("\n")>-1)break}if(x>-1){c=!0;for(var A=f-1;A>=x;A--)g=l[A],g.length+=l[A+1].length,g.allUpper=g.allUpper&&l[A+1].allUpper;f=x,l.length=f+1,g.subType=a.LINK}}}else c=!0;else c=!0,g.type=a.TAG,"!"==u?g.subType=a.COMMENT:"/"==u&&(g.subType=a.CLOSING);else c=!0,g.quote?u==g.quote&&"\\"!=s[g.en()]&&delete g.quote:'"'!=u&&"'"!=u||(g.quote=u);c?(g.length++,g.allUpper=g.allUpper&&b):(g=new o(s,d,h+1-d,l.length,b,b,v,w),l.push(g))}return this},a.prototype.done=function(t,n){if(!t)return this.tokens;for(var r=e(t,n),i=[],s=0;s<this.tokens.length;s++)r(this.tokens[s],s,this.tokens)&&i.push(this.tokens[s]);return i},a.prototype.count=function(t,n){if(!t)return this.tokens.length;for(var r=e(t,n),i=0,s=0;s<this.tokens.length;s++)r(this.tokens[s],s,this.tokens)&&i++;return i},a.prototype.nextToken=function(t,n,r){var i=e(n,r),s=this.index;for(s++;s<this.tokens.length&&i(this.tokens[s],s,this.tokens);)s++;return s<this.tokens.length?(t&&(this.index=s),this.tokens[s]):null},a.prototype.punctAhead=function(){var t=this.nextToken(!1,["SPACE"],!0);return t&&"PUNCT"==t.type&&t},a.prototype.prevToken=function(t,n,r){var i=e(n,r),s=this.index;for(s--;s>=0&&i(this.tokens[s],s,this.tokens);)s--;return s>=0?(t&&(this.index=s),this.tokens[s]):null},a.prototype.punctBehind=function(){var t=this.prevToken(!1,["SPACE"],!0);return t&&"PUNCT"==t.type&&t},a.prototype.hasTokensAhead=function(t,e){return null!=this.nextToken(!1,t,e)},a.prototype.hasTokensBehind=function(t,e){return null!=this.prevToken(!1,t,e)},a});
//# sourceMappingURL=az.min.js.map