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 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ 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