diff --git a/examples/search.html b/examples/search.html new file mode 100644 index 0000000..2ca1a82 --- /dev/null +++ b/examples/search.html @@ -0,0 +1,43 @@ + + + + + + + + +
+ + disassemble + 초성 +
+
+
+ + 초성검색 : + On + Off +
+ search +
+
+ + \ No newline at end of file diff --git a/hangul.js b/hangul.js index aeaa7d2..22d144d 100644 --- a/hangul.js +++ b/hangul.js @@ -377,7 +377,7 @@ return result.join(''); }; - var search = function(a, b){ + var _search = function(a, b){ var ad = disassemble(a).join(''), bd = disassemble(b).join('') ; @@ -385,7 +385,22 @@ return ad.indexOf(bd); }; - var rangeSearch = function(haystack, needle){ + var _searchCho = function(a, b){ + var adc = disassemble(a, true).map(function(t){return t[0]}).join(''), + bd = disassemble(b).join('') + ; + return adc.indexOf(bd); + } + + var search = function(a, b, cho){ + if(cho && _checkString(_isConsonantB, b, 'ALL')){ + return _searchCho(a,b); + } else { + return _search(a,b); + } + }; + + var _rangeSearch = function(haystack, needle){ var hex = disassemble(haystack).join(''), nex = disassemble(needle).join(''), grouped = disassemble(haystack, true), @@ -393,8 +408,6 @@ indices = [], result; - if(!needle.length) return []; - while((result = re.exec(hex))) { indices.push(result.index); } @@ -417,14 +430,42 @@ return [findStart(i), findEnd(i)]; }); }; + + var _rangeSearchCho = function(a, b){ + var adc = disassemble(a, true).map(function(t){return t[0]}).join(''), + bd = disassemble(b).join(''), + re = new RegExp(bd, 'gi'), + indices = [], + result; + while((result = re.exec(adc))) { + indices.push(result.index); + } + return indices.map(function(i) { + return [i, i+bd.length-1] + }); + }; - function Searcher(string) { + var rangeSearch = function(haystack, needle, cho){ + if(!needle.length) return []; + if(cho && _checkString(_isConsonantB, needle, 'ALL')){ + return _rangeSearchCho(haystack,needle); + } else { + return _rangeSearch(haystack,needle); + } + }; + + function Searcher(string, cho) { this.string = string; this.disassembled = disassemble(string).join(''); + this.cho = cho && _checkString(_isConsonantB, string, 'ALL'); } Searcher.prototype.search = function(string) { - return disassemble(string).join('').indexOf(this.disassembled); + if(this.cho){ + return disassemble(string, true).map(function(t){return t[0]}).join('').indexOf(this.disassembled); + } else { + return disassemble(string).join('').indexOf(this.disassembled); + } }; var endsWithConsonant = function (string) { @@ -446,6 +487,38 @@ return false; }; + var _option = function(o){ + return (typeof o === 'string')?o.replace(/[-_ ]/,'').toUpperCase():o; + }; + + var _checkStringAll = function(f, c){ + for(var i=0; i