hangulx
Version:
Providing various utilities for Hangul
228 lines (190 loc) β’ 9.46 kB
Markdown
# hangulx π
**hangulx** is a TypeScript library designed to work with Hangul (Korean characters) in various formats, providing utility functions for detecting, parsing, and manipulating Korean syllables and jamo (individual consonant and vowel components). This package can be especially useful for applications that need to handle Hangul text at a granular level, linguistic research, and educational tools for learning Korean.
# Installation
#### Install the package using package manager
```bash
npm install hangulx
```
```bash
yarn add hangulx
```
### Browser
#### Script tag (using CDN)
```bash
<script src="https://unpkg.com/hangulx" type="text/javascript"></script>
```
#### Script tag
```bash
<script src="hangulx.min.js" type="text/javascript"></script>
```
## Usage
#### Node.js
```javascript
import {Hangul} from 'hangulx';
```
```javascript
import * as hangulx from 'hangulx';
```
#### AMD
```html
<script type="text/javascript">
(function () {
hangulx.Hangul.disassemble('νκΈ'); // ['γ
', 'γ
', 'γ΄', 'γ±', 'γ
‘', 'γΉ']
})();
</script>
```
# API
## Hangul
### import
```typescript
import {Hangul} from 'hangulx';
```
```html
<script type="text/javascript">
(function () {
var Hangul = hangulx.Hangul; // or
const {Hangul} = hangulx;
})();
</script>
```
### Hangul.disassemble(str: string, option?: Hangul.DisassembleOption): string[]
νκΈμ μλͺ¨λ‘ λΆλ¦¬ν©λλ€.
Splits Korean Hangul characters into their phonetic components(jamo)
```typescript
Hangul.disassemble('κ°'); // [ 'γ±', 'γ
', 'γ
' ]
Hangul.disassemble('μ»'); // [ 'γ
', 'γ
', 'γ½' ]
```
νκΈμ΄ μλ λ¬Έμλ λ°νλ©λλ€.
Non-Hangul characters are returned as they are.
```typescript
Hangul.disassemble('ABC123θ!'); // [ 'A', 'B', 'C', '1', '2', '3', 'θ', '!' ]
Hangul.disassemble('νκΈA'); // [ 'γ
', 'γ
', 'γ΄', 'γ±', 'γ
‘', 'γΉ', 'A' ]
```
**볡ν©μμ**_(μμμ)_ (γ², γΈ, γ
... ) λΆλ¦¬
splitting complex consonants (double consonants) such as γ², γΈ, γ
.
```typescript
Hangul.disassemble('κΉλ', {doubleConsonant: true}); // [ 'γ±', 'γ±', 'γ
', 'γ·', 'γ
', 'γΊ' ]
Hangul.disassemble('κΊΎλ€', {doubleConsonant: true}); // [ 'γ±', 'γ±', 'γ
', 'γ±', 'γ±', 'γ·', 'γ
' ]
```
**μμκ΅°**_(κ²Ήλ°μΉ¨)_ (γ³, γ΅, γ
... ) λΆλ¦¬
splitting consonant clusters (compound final consonants) such as γ³, γ΅, γ
.
```typescript
Hangul.disassemble('κΉλ', {clusterConsonant: true}); // [ 'γ²', 'γ
', 'γ·', 'γ
', 'γΉ', 'γ±' ]
Hangul.disassemble('μ½λ€', {clusterConsonant: true}); // [ 'γ
', 'γ
£', 'γΉ', 'γ±', 'γ·', 'γ
' ]
```
**볡ν©μμ**_(μμμ)_ λ° **μμκ΅°**_(κ²Ήλ°μΉ¨)_ λΆλ¦¬
splitting complex consonants (double consonants) and consonant clusters (compound final consonants) such as γ², γΈ, γ
, γ³, γ΅, γ
.
```typescript
const option: Hangul.DisassembleOption = {
doubleConsonant: true, // μμμ(γ², γΈ, γ
, γ
, γ
) λΆλ¦¬ μ¬λΆ(κ°μ λ³μ)
clusterConsonant: true, // 볡ν©μμ(γ³, γ΅, γΆ, γΊ ...) λΆλ¦¬ μ¬λΆ(ν©μ© λ³μ)
};
Hangul.disassemble('μ»', option); // [ 'γ
', 'γ
', 'γ
', 'γ±', 'γ
' ]
Hangul.disassemble('λλ³Άμν', option); // [ 'γ·', 'γ
', 'γΉ', 'γ±', 'γ
', 'γ
', 'γ±', 'γ±', 'γ
', 'γ
‘', 'γ
', 'γ
', 'γ
', 'γ
' ]
```
### Hangul.disassembleToString(str: string, option?: Hangul.DisassembleToStringOption): string
νκΈμ λΆν΄νμ¬ μλͺ¨λ‘ λΆλ¦¬λ λ¬Έμμ΄λ‘ λ°νν©λλ€.
```typescript
Hangul.disassembleToString('νκΈ'); // γ
γ
γ΄γ±γ
‘γΉ
Hangul.disassembleToString('ꡬκΈ'); // γ±γ
γ±γ
‘γΉ
```
Separator μ¬μ©
```typescript
Hangul.disassembleToString('νκΈ', {separator: ','}); // γ
,γ
,γ΄,γ±,γ
‘,γΉ
Hangul.disassembleToString('ꡬκΈ', {separator: ','}); // γ±,γ
,γ±,γ
‘,γΉ
```
### Hangul.disassembleToGroup(str: string, option?: Hangul.DisassembleOption): string[][]
νκΈμ **κΈμλ³λ‘** μλͺ¨λ‘ λΆλ¦¬ν©λλ€.
Splits Korean Hangul into individual jamos for **each character.**
```typescript
Hangul.disassembleToGroup('νλμ€'); // [['γ
', 'γ
‘'], ['γΉ', 'γ
', 'γ
'], ['γ
', 'γ
‘']]
```
### Interface: Hangul.DisassembleOption
| Option | Description | Required |
|------------------|-----------------------------------------------------------------------------------------------------------------|----------|
| doubleConsonant | μμμ(γ², γΈ, γ
, γ
, γ
) λΆλ¦¬ μ¬λΆ <br> Determines whether double consonants (e.g., γ², γΈ, γ
, γ
, γ
) should be disassembled | N |
| clusterConsonant | 볡ν©μμ(γ³, γ΅, γΆ, γΊ ...) λΆλ¦¬ μ¬λΆ <br> Determines whether cluster consonants (e.g., γ³, γ΅, γΆ, γΊ) should be disassembled | N |
| risingJDiphthong | γ
£(οΌ»jοΌ½)κ³ μμΉμ΄μ€λͺ¨μ(γ
, γ
, γ
, γ
, γ
, γ
) λΆλ¦¬ μ¬λΆ<br> Determines whether rising diphthongs with γ
£[j] should be disassembled | N |
| risingWDiphthong | γ
/γ
([w])κ³ μμΉμ΄μ€λͺ¨μ(γ
, γ
, γ
, γ
) λΆλ¦¬ μ¬λΆ <br> Determines whether rising diphthongs with γ
/γ
[w] should be disassembled | N |
| fallingDiphthong | νκ°μ΄μ€λͺ¨μ(γ
’) λΆλ¦¬ μ¬λΆ <br> Determines whether falling diphthongs should be disassembled | N |
## Syllable
νκΈμ μμ λΆλ¦¬/μ‘°ν© λ° κΈ°ν κΈ°λ₯μ μ 곡ν©λλ€.
Provides functions for splitting and combining Korean Hangul syllables, along with other features.
### import
```typescript
import {Syllable} from 'hangulx';
```
```html
<script type="text/javascript">
(function () {
var Syllable = hangulx.Syllable; // or
const {Syllable} = hangulx;
})();
</script>
```
### Syllable.disassemble(str: string): ISyllable[]
λ¬Έμμ΄μ μμ (μ΄μ±, μ€μ±, μ’
μ±)λ‘ λΆλ¦¬ν©λλ€.
Splits a string into syllables consisting of initial sounds (cho), medial sounds (jung), and final sounds (jong).
```typescript
Syllable.disassemble('κ°μ'); // [{ cho: 'γ±', jung: 'γ
', jong: undefined }, { cho: 'γ
', jung: 'γ
', jong: undefined }]
```
μμ λ‘ λλ μ μλ λ¬Έμλ μ κ±°λμ΄ λ°νλ©λλ€.
Characters that cannot be divided into syllables are removed and not returned.
```typescript
Syllable.disassemble('κ°-A1γ
'); // [{ cho: 'γ±', jung: 'γ
', jong: 'γ
' }]
Syllable.disassemble('γ±γ³A1'); // []
```
### Syllable.disassembleFromChar(char: string): ISyllable | null
λ¬Έμλ₯Ό μμ (μ΄μ±, μ€μ±, μ’
μ±)λ‘ λΆλ¦¬ν©λλ€.
Splits **single character** into syllables consisting of initial sounds (cho), medial sounds (jung), and final sounds (jong).
```typescript
Syllable.disassembleFromChar('κ°'); // { cho: 'γ±', jung: 'γ
', jong: 'γ
' }
Syllable.disassembleFromChar('λ'); // { cho: 'γ·', jung: 'γ
', jong: undefined }
```
κΈΈμ΄κ° 1μ μ΄κ³Όνλ κ²½μ° μ²«λ²μ§Έ λ¬Έμλ₯Ό λΆλ¦¬ν©λλ€. 1κ° μ΄μμ λ¬Έμλ₯Ό μμ λΆλ¦¬νλ €λ©΄ Syllable.disassemble ν¨μλ₯Ό μ¬μ©ν©λλ€.
If the length exceeds 1, only the first character is split into syllables. To disassemble more than one character into syllables, use the Syllable.disassemble function.
```typescript
Syllable.disassembleFromChar('μΈμ’
λμ'); // { cho: 'γ
', jung: 'γ
', jong: undefined }
```
λΆλ¦¬ν μ μλ λ¬Έμλ null λ°νλ©λλ€.
Characters that cannot be split are returned as null.
```typescript
Syllable.disassembleFromChar('γ
'); // null
Syllable.disassembleFromChar('A'); // null
Syllable.disassembleFromChar('7'); // null
Syllable.disassembleFromChar('-'); // null
```
### Syllable.assemble(syllable: ISyllable | ISyllable[]): string
μμ (μ΄μ±, μ€μ±, μ’
μ±)μ λ³ν©νμ¬ λ¬Έμμ΄λ‘ λ°νν©λλ€.
Merges syllables consisting of initial sounds (cho), medial sounds (jung), and final sounds (jong) into a string.
```typescript
Syllable.assemble({cho: 'γ±', jung: 'γ
'}); // κ°
Syllable.assemble({cho: 'γ
', jung: 'γ
', jong: 'γ
'}); // ν©
Syllable.assemble({cho: 'γ
', jung: 'γ
', jong: 'γ²'}); // μ
Syllable.assemble({cho: 'γ
', jung: 'γ
', jong: 'γΌ'}); // λ°
Syllable.assemble({cho: 'A', jung: 'γ
', jong: 'γ΄'}) // Error - Invalid cho("A" can not be cho)
Syllable.assemble({cho: 'γ±', jung: 'γ
', jong: 'γ
'}) // Error - Invalid jong("γ
" can not be jong)
Syllable.assemble({cho: 'γ
', jung: 'A', jong: 'γ΄'}) // Error - Invalid jung("A" can not be jung)
```
μ¬λ¬κ°μ μμ μ λ³ν©ν μ μμ΅λλ€.
Multiple syllables can be merged.
```typescript
const syllables: ISyllable[] = [
{cho: 'γ±', jung: 'γ
', jong: 'γ
'},
{cho: 'γ
', jung: 'γ
', jong: undefined},
{cho: 'γ΄', jung: 'γ
', jong: 'γ΄'},
];
Syllable.assemble(syllables); // κ°μ€λ
```
[Syllable.disassemble]() ν¨μλ‘ λΆλ¦¬ν μμ μ λ€μ ν©μΉ μ μμ΅λλ€.
Syllables split using the [Syllable.disassemble]() function can be recombined.
```typescript
const syllables: ISyllable[] = Syllable.disassemble('μΈμ’
λμ');
/* [
{ cho: 'γ
', jung: 'γ
', jong: undefined },
{ cho: 'γ
', jung: 'γ
', jong: 'γ
' },
{ cho: 'γ·', jung: 'γ
', jong: undefined },
{ cho: 'γ
', jung: 'γ
', jong: 'γ
' }
] */
Syllable.assemble(syllables); // μΈμ’
λμ
```