1
|
{"version":3,"sources":["../../../src/php/strings/similar_text.js"],"names":["module","exports","similar_text","first","second","percent","pos1","pos2","max","firstLength","length","secondLength","p","q","l","sum","charAt","substr"],"mappings":";;AAAAA,OAAOC,OAAP,GAAiB,SAASC,YAAT,CAAuBC,KAAvB,EAA8BC,MAA9B,EAAsCC,OAAtC,EAA+C;AAAE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAIF,UAAU,IAAV,IACFC,WAAW,IADT,IAEF,OAAOD,KAAP,KAAiB,WAFf,IAGF,OAAOC,MAAP,KAAkB,WAHpB,EAGiC;AAC/B,WAAO,CAAP;AACD;;AAEDD,WAAS,EAAT;AACAC,YAAU,EAAV;;AAEA,MAAIE,OAAO,CAAX;AACA,MAAIC,OAAO,CAAX;AACA,MAAIC,MAAM,CAAV;AACA,MAAIC,cAAcN,MAAMO,MAAxB;AACA,MAAIC,eAAeP,OAAOM,MAA1B;AACA,MAAIE,CAAJ;AACA,MAAIC,CAAJ;AACA,MAAIC,CAAJ;AACA,MAAIC,GAAJ;;AAEA,OAAKH,IAAI,CAAT,EAAYA,IAAIH,WAAhB,EAA6BG,GAA7B,EAAkC;AAChC,SAAKC,IAAI,CAAT,EAAYA,IAAIF,YAAhB,EAA8BE,GAA9B,EAAmC;AACjC,WAAKC,IAAI,CAAT,EAAaF,IAAIE,CAAJ,GAAQL,WAAT,IAA0BI,IAAIC,CAAJ,GAAQH,YAAlC,IAAoDR,MAAMa,MAAN,CAAaJ,IAAIE,CAAjB,MAAwBV,OAAOY,MAAP,CAAcH,IAAIC,CAAlB,CAAxF,EAA+GA,GAA/G,EAAoH,CAAE;AACpH;AACD;AACD,UAAIA,IAAIN,GAAR,EAAa;AACXA,cAAMM,CAAN;AACAR,eAAOM,CAAP;AACAL,eAAOM,CAAP;AACD;AACF;AACF;;AAEDE,QAAMP,GAAN;;AAEA,MAAIO,GAAJ,EAAS;AACP,QAAIT,QAAQC,IAAZ,EAAkB;AAChBQ,aAAOb,aAAaC,MAAMc,MAAN,CAAa,CAAb,EAAgBX,IAAhB,CAAb,EAAoCF,OAAOa,MAAP,CAAc,CAAd,EAAiBV,IAAjB,CAApC,CAAP;AACD;;AAED,QAAKD,OAAOE,GAAP,GAAaC,WAAd,IAA+BF,OAAOC,GAAP,GAAaG,YAAhD,EAA+D;AAC7DI,aAAOb,aACLC,MAAMc,MAAN,CAAaX,OAAOE,GAApB,EAAyBC,cAAcH,IAAd,GAAqBE,GAA9C,CADK,EAELJ,OAAOa,MAAP,CAAcV,OAAOC,GAArB,EACAG,eAAeJ,IAAf,GAAsBC,GADtB,CAFK,CAAP;AAID;AACF;;AAED,MAAI,CAACH,OAAL,EAAc;AACZ,WAAOU,GAAP;AACD;;AAED,SAAQA,MAAM,GAAP,IAAeN,cAAcE,YAA7B,CAAP;AACD,CAhED","file":"similar_text.js","sourcesContent":["module.exports = function similar_text (first, second, percent) { // eslint-disable-line camelcase\n // discuss at: http://locutus.io/php/similar_text/\n // original by: Rafał Kukawski (http://blog.kukawski.pl)\n // bugfixed by: Chris McMacken\n // bugfixed by: Jarkko Rantavuori original by findings in stackoverflow (http://stackoverflow.com/questions/14136349/how-does-similar-text-work)\n // improved by: Markus Padourek (taken from http://www.kevinhq.com/2012/06/php-similartext-function-in-javascript_16.html)\n // example 1: similar_text('Hello World!', 'Hello locutus!')\n // returns 1: 8\n // example 2: similar_text('Hello World!', null)\n // returns 2: 0\n\n if (first === null ||\n second === null ||\n typeof first === 'undefined' ||\n typeof second === 'undefined') {\n return 0\n }\n\n first += ''\n second += ''\n\n var pos1 = 0\n var pos2 = 0\n var max = 0\n var firstLength = first.length\n var secondLength = second.length\n var p\n var q\n var l\n var sum\n\n for (p = 0; p < firstLength; p++) {\n for (q = 0; q < secondLength; q++) {\n for (l = 0; (p + l < firstLength) && (q + l < secondLength) && (first.charAt(p + l) === second.charAt(q + l)); l++) { // eslint-disable-line max-len\n // @todo: ^-- break up this crazy for loop and put the logic in its body\n }\n if (l > max) {\n max = l\n pos1 = p\n pos2 = q\n }\n }\n }\n\n sum = max\n\n if (sum) {\n if (pos1 && pos2) {\n sum += similar_text(first.substr(0, pos1), second.substr(0, pos2))\n }\n\n if ((pos1 + max < firstLength) && (pos2 + max < secondLength)) {\n sum += similar_text(\n first.substr(pos1 + max, firstLength - pos1 - max),\n second.substr(pos2 + max,\n secondLength - pos2 - max))\n }\n }\n\n if (!percent) {\n return sum\n }\n\n return (sum * 200) / (firstLength + secondLength)\n}\n"]}
|