UNPKG

5.53 kBMarkdownView Raw
1# Hangul.js
2
3Hangul.js는 한글로 이루어진 문장의 자음과 모음을 분리하는 자바스크립트 라이브러리입니다. 이 라이브러리를 이용하여 한글검색, 초성검색 등을 할 수 있습니다.
4
5## 설치
6
7웹 페이지에 Hangul.js 파일을 삽입합니다.
8```html
9<script src="Hangul.js" type="text/javascript"></script>
10```
11
12## 사용법
13
14### Hangul Namespace
15
16Hangul.js 스크립트를 실행하면 전역 네임스페이스에 Hangul이라는 객체가 노출됩니다.
17
18### Hangul.disassemble ( String ) => Array
19
20문자열을 인자로 받아 문자열에 있는 한글을 자음/모음으로 분리하여 배열로 돌려줍니다. 이 때 한글이 아닌 문자는 그대로 반환됩니다.
21
22```js
23Hangul.disassemble('가나다'); // ['ㄱ','ㅏ','ㄴ','ㅏ','ㄷ','ㅏ']
24
25Hangul.disassemble('ab가c'); // ['a','b','ㄱ','ㅏ','c']
26
27Hangul.disassemble('ab@!23X.'); // ['a','b','@','!','2','3','X','.']
28```
29
30같은 홑낱자로 이루어진 겹낱자는 분리되지 않습니다.
31
32```js
33Hangul.disassemble('ㄲ'); // ['ㄲ']
34```
35
36다른 홑낱자로 이루어진 겹낱자는 분리됩니다.
37
38```js
39Hangul.disassemble('ㄳ'); // ['ㄱ','ㅅ']
40
41Hangul.disassemble('ㅚ'); // ['ㅗ','ㅣ']
42```
43
44두벌식 키보드로 주어진 문자열을 입력할 때 누르는 키들의 배열이라고 생각하면 쉽습니다.
45
46### Hangul.assemble ( Array ) => String
47
48한글 자음/모음들의 배열을 인자로 받아 조립한 문자열을 돌려줍니다. 이 때 한글이 아닌 문자는 그대로 반환됩니다.
49
50```js
51Hangul.assemble(['ㄱ','ㅏ','ㄴ','ㅏ','ㄷ','ㅏ']); // '가나다'
52
53Hangul.assemble(['a','b','ㄱ','ㅏ','c']); // 'ab가c'
54
55Hangul.assemble(['a','b','@','!','2','3','X','.']); // 'ab@123X.'
56```
57
58이 경우에도 두벌식 키보드에서 주어진 키들을 누를 때 만들어지는 문자열을 돌려준다고 생각하면 쉽습니다.
59
60```js
61Hangul.assemble(['ㅗ','ㅐ']); // 'ㅙ'
62
63Hangul.assemble(['ㄹ','ㅂ','ㅅ']); // 'ㄼㅅ'
64```
65
66`Hangul.disassemble` 함수와 역함수 관계가 아닙니다.
67
68```js
69Hangul.assemble(Hangul.disassemble('옽ㅏ')); // '오타' ('옽ㅏ' 가 아님)
70```
71
72### Hangul.search ( String a, String b ) => Number
73
74a문자열이 b문자열을 포함하는지 검사합니다. 이때 'a문자열이 b문자열을 포함한다'는 '두벌식 키보드 기준으로 a문자열을 입력할 때 누르는 키들의 배열이 b문자열을 입력할 때 누르는 키들의 배열을 포함한다'로 정의합니다. 반환값이 0보다 크거나 같다면 포함합니다.
75
76```js
77Hangul.search('달걀','닭'); // 0
78
79Hangul.search('달걀','알'); // -1
80```
81
82`indexOf`함수와 다릅니다.
83
84```js
85var a = '도우미'
86 , b = '도움';
87
88a.indexOf(b); // -1
89
90Hangul.search(a, b); // 0
91```
92
93사실 구현은 간단하게 되어있습니다.
94
95```js
96var search = function(a, b){
97 var ad = disassemble(a).join('')
98 , bd = disassemble(b).join('');
99
100 return ad.indexOf(bd);
101 };
102}
103```
104
105실제 사용할 때에는 하나의 단어를 여러개의 문자열과 비교하므로 `Hangul.Searcher`를 사용하는게 편합니다.
106
107```js
108var searcher = new Hangul.Searcher('닭');
109
110searcher.search('달걀'); // 0
111searcher.search('달구지'); // 0
112searcher.search('달무리'); // -1
113```
114
115### 기타 한글 체크 함수
116
117이하 함수들은 인자로 문자를 받습니다. 자바스크립트에서는 문자 타입이 없으므로 문자열로 대체합니다. 길이가 2 이상인 문자열의 경우 첫 한글자에 대해 판단합니다.
118
119#### Hangul.isHangul ( String ) => Boolean
120
121주어진 문자가 완성된 한글인지 아닌지 판단합니다. 완성된 한글이란 유니코드로 '가'(0xAC00) ~ '힣'(0xD7A3) 사이에 있는 문자를 말합니다. 'ㄱ', 'ㅙ' 등은 완성된 한글이 아닙니다.
122
123#### Hangul.isConsonant ( String ) => Boolean
124
125주어진 문자가 자음인지 판단합니다.
126
127#### Hangul.isVowel ( String ) => Boolean
128
129주어진 문자가 모음인지 판단합니다.
130
131#### Hangul.isCho ( String ) => Boolean
132
133주어진 문자가 초성으로 쓰일 수 있는지 판단합니다. 'ㄲ'은 초성으로 쓰일 수 있지만 'ㄳ'는 초성으로 쓰일 수 없습니다.
134
135#### Hangul.isJong( String ) => Boolean
136
137주어진 문자가 종성으로 쓰일 수 있는지 판단합니다. 'ㄲ'은 종성으로 쓰일 수 있지만 'ㄸ'는 종성으로 쓰일 수 없습니다.
138
139## License
140
141(The MIT License)
142
143Copyright (c) 2014 Jaemin Jo
144
145Permission is hereby granted, free of charge, to any person
146obtaining a copy of this software and associated documentation
147files (the "Software"), to deal in the Software without
148restriction, including without limitation the rights to use,
149copy, modify, merge, publish, distribute, sublicense, and/or sell
150copies of the Software, and to permit persons to whom the
151Software is furnished to do so, subject to the following
152conditions:
153
154The above copyright notice and this permission notice shall be
155included in all copies or substantial portions of the Software.
156
157THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
158EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
159OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
160NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
161HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
162WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
163FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
164OTHER DEALINGS IN THE SOFTWARE.