1 | # Hangul.js
|
2 |
|
3 | Hangul.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 |
|
16 | Hangul.js 스크립트를 실행하면 전역 네임스페이스에 Hangul이라는 객체가 노출됩니다.
|
17 |
|
18 | ### Hangul.disassemble ( String ) => Array
|
19 |
|
20 | 문자열을 인자로 받아 문자열에 있는 한글을 자음/모음으로 분리하여 배열로 돌려줍니다. 이 때 한글이 아닌 문자는 그대로 반환됩니다.
|
21 |
|
22 | ```js
|
23 | Hangul.disassemble('가나다'); // ['ㄱ','ㅏ','ㄴ','ㅏ','ㄷ','ㅏ']
|
24 |
|
25 | Hangul.disassemble('ab가c'); // ['a','b','ㄱ','ㅏ','c']
|
26 |
|
27 | Hangul.disassemble('ab@!23X.'); // ['a','b','@','!','2','3','X','.']
|
28 | ```
|
29 |
|
30 | 같은 홑낱자로 이루어진 겹낱자는 분리되지 않습니다.
|
31 |
|
32 | ```js
|
33 | Hangul.disassemble('ㄲ'); // ['ㄲ']
|
34 | ```
|
35 |
|
36 | 다른 홑낱자로 이루어진 겹낱자는 분리됩니다.
|
37 |
|
38 | ```js
|
39 | Hangul.disassemble('ㄳ'); // ['ㄱ','ㅅ']
|
40 |
|
41 | Hangul.disassemble('ㅚ'); // ['ㅗ','ㅣ']
|
42 | ```
|
43 |
|
44 | 두벌식 키보드로 주어진 문자열을 입력할 때 누르는 키들의 배열이라고 생각하면 쉽습니다.
|
45 |
|
46 | ### Hangul.assemble ( Array ) => String
|
47 |
|
48 | 한글 자음/모음들의 배열을 인자로 받아 조립한 문자열을 돌려줍니다. 이 때 한글이 아닌 문자는 그대로 반환됩니다.
|
49 |
|
50 | ```js
|
51 | Hangul.assemble(['ㄱ','ㅏ','ㄴ','ㅏ','ㄷ','ㅏ']); // '가나다'
|
52 |
|
53 | Hangul.assemble(['a','b','ㄱ','ㅏ','c']); // 'ab가c'
|
54 |
|
55 | Hangul.assemble(['a','b','@','!','2','3','X','.']); // 'ab@123X.'
|
56 | ```
|
57 |
|
58 | 이 경우에도 두벌식 키보드에서 주어진 키들을 누를 때 만들어지는 문자열을 돌려준다고 생각하면 쉽습니다.
|
59 |
|
60 | ```js
|
61 | Hangul.assemble(['ㅗ','ㅐ']); // 'ㅙ'
|
62 |
|
63 | Hangul.assemble(['ㄹ','ㅂ','ㅅ']); // 'ㄼㅅ'
|
64 | ```
|
65 |
|
66 | `Hangul.disassemble` 함수와 역함수 관계가 아닙니다.
|
67 |
|
68 | ```js
|
69 | Hangul.assemble(Hangul.disassemble('옽ㅏ')); // '오타' ('옽ㅏ' 가 아님)
|
70 | ```
|
71 |
|
72 | ### Hangul.search ( String a, String b ) => Number
|
73 |
|
74 | a문자열이 b문자열을 포함하는지 검사합니다. 이때 'a문자열이 b문자열을 포함한다'는 '두벌식 키보드 기준으로 a문자열을 입력할 때 누르는 키들의 배열이 b문자열을 입력할 때 누르는 키들의 배열을 포함한다'로 정의합니다. 반환값이 0보다 크거나 같다면 포함합니다.
|
75 |
|
76 | ```js
|
77 | Hangul.search('달걀','닭'); // 0
|
78 |
|
79 | Hangul.search('달걀','알'); // -1
|
80 | ```
|
81 |
|
82 | `indexOf`함수와 다릅니다.
|
83 |
|
84 | ```js
|
85 | var a = '도우미'
|
86 | , b = '도움';
|
87 |
|
88 | a.indexOf(b); // -1
|
89 |
|
90 | Hangul.search(a, b); // 0
|
91 | ```
|
92 |
|
93 | 사실 구현은 간단하게 되어있습니다.
|
94 |
|
95 | ```js
|
96 | var 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
|
108 | var searcher = new Hangul.Searcher('닭');
|
109 |
|
110 | searcher.search('달걀'); // 0
|
111 | searcher.search('달구지'); // 0
|
112 | searcher.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 |
|
143 | Copyright (c) 2014 Jaemin Jo
|
144 |
|
145 | Permission is hereby granted, free of charge, to any person
|
146 | obtaining a copy of this software and associated documentation
|
147 | files (the "Software"), to deal in the Software without
|
148 | restriction, including without limitation the rights to use,
|
149 | copy, modify, merge, publish, distribute, sublicense, and/or sell
|
150 | copies of the Software, and to permit persons to whom the
|
151 | Software is furnished to do so, subject to the following
|
152 | conditions:
|
153 |
|
154 | The above copyright notice and this permission notice shall be
|
155 | included in all copies or substantial portions of the Software.
|
156 |
|
157 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
158 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
159 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
160 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
161 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
162 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
163 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
164 | OTHER DEALINGS IN THE SOFTWARE.
|