diff options
author | Jacob Moody <moody@posixcafe.org> | 2022-07-17 14:52:11 +0000 |
---|---|---|
committer | Jacob Moody <moody@posixcafe.org> | 2022-07-17 14:52:11 +0000 |
commit | c147614656b9c1b4338099a69c35e42c1f4313a5 (patch) | |
tree | 7a74217a2dfc87b1896a7256d4a969227cd9f138 /sys/src/cmd | |
parent | ccbabf1c16caa4917c97b8d8f5cadfb8759610b3 (diff) |
ktrans: 你好
This consolidates jisho and map lookups
to use the same structure and removes
the old jisho code.
Diffstat (limited to 'sys/src/cmd')
-rw-r--r-- | sys/src/cmd/ktrans/hash.c | 210 | ||||
-rw-r--r-- | sys/src/cmd/ktrans/hash.h | 23 | ||||
-rw-r--r-- | sys/src/cmd/ktrans/jisho.c | 211 | ||||
-rw-r--r-- | sys/src/cmd/ktrans/jisho.h | 41 | ||||
-rw-r--r-- | sys/src/cmd/ktrans/ktrans.h | 5685 | ||||
-rw-r--r-- | sys/src/cmd/ktrans/main.c | 265 | ||||
-rw-r--r-- | sys/src/cmd/ktrans/mkfile | 4 |
7 files changed, 3261 insertions, 3178 deletions
diff --git a/sys/src/cmd/ktrans/hash.c b/sys/src/cmd/ktrans/hash.c new file mode 100644 index 000000000..dcfa67cdd --- /dev/null +++ b/sys/src/cmd/ktrans/hash.c @@ -0,0 +1,210 @@ +#include <u.h> +#include <libc.h> +#include "hash.h" + +typedef struct Hnode Hnode; +struct Hnode { + int filled; + int next; + void *key; +}; + +enum{ + Tagsize = sizeof(Hnode), +}; + +uvlong +shash(char *s) +{ + uvlong hash; + + hash = 7; + for(; *s; s++) + hash = hash*31 + *s; + return hash; +} + +Hmap* +hmapalloc(int nbuckets, int size) +{ + void *store; + Hmap *h; + int nsz; + + nsz = Tagsize + size; + store = mallocz(sizeof(*h) + (nbuckets * nsz), 1); + if(store == nil) + return nil; + + h = store; + h->nbs = nbuckets; + h->nsz = nsz; + h->len = h->cap = nbuckets; + + h->nodes = store; + h->nodes += sizeof(*h); + return store; +} + +int +hmapset(Hmap **store, char *key, void *new, void *old) +{ + Hnode *n; + uchar *v; + uchar *oldv; + Hmap *h; + int next; + vlong diff; + + h = *store; + oldv = nil; + v = h->nodes + (shash(key)%h->nbs) * h->nsz; + for(;;){ + n = (Hnode*)v; + next = n->next; + + if(n->filled == 0) + goto replace; + if(strcmp(n->key, key) == 0){ + oldv = v + Tagsize; + goto replace; + } + if(next == 0) + break; + v = h->nodes + next*h->nsz; + } + + if(h->cap == h->len){ + /* figure out way back from a relocation */ + diff = v - h->nodes; + + h->cap *= 2; + *store = realloc(*store, sizeof(*h) + h->cap*h->nsz); + h = *store; + h->nodes = (uchar*)*store + sizeof(*h); + memset(h->nodes + h->len*h->nsz, 0, h->nsz); + + v = h->nodes + diff; + n = (Hnode*)v; + } + n->next = h->len; + h->len++; + assert(h->len <= h->cap); + v = h->nodes + n->next*h->nsz; + n = (Hnode*)v; + +replace: + memmove(v + Tagsize, new, h->nsz - Tagsize); + n->filled++; + n->key = key; + n->next = next; + if(old != nil && oldv != nil){ + memmove(old, oldv, h->nsz - Tagsize); + return 1; + } + return 0; +} + +void* +_hmapget(Hmap *h, char *key) +{ + Hnode *n; + uchar *v; + + v = h->nodes + (shash(key)%h->nbs)*h->nsz; + for(;;){ + n = (Hnode*)v; + if(n->filled != 0 && strcmp(n->key, key) == 0) + return v; + if(n->next == 0) + break; + v = h->nodes + n->next*h->nsz; + } + return nil; +} + +int +hmapget(Hmap *h, char *key, void *dst) +{ + uchar *v; + + v = _hmapget(h, key); + if(v == nil) + return -1; + if(dst != nil) + memmove(dst, v + Tagsize, h->nsz - Tagsize); + return 0; +} + +int +hmapdel(Hmap *h, char *key, void *dst, int freekey) +{ + uchar *v; + Hnode *n; + + v = _hmapget(h, key); + if(v == nil) + return -1; + + n = (Hnode*)v; + n->filled = 0; + if(freekey) + free(n->key); + if(dst != nil) + memmove(dst, v + Tagsize, h->nsz - Tagsize); + return 0; +} + +char* +hmapkey(Hmap *h, char *key) +{ + uchar *v; + Hnode *n; + + v = _hmapget(h, key); + if(v == nil) + return nil; + + n = (Hnode*)v; + return n->key; +} + +Hmap* +hmaprehash(Hmap *old, int buckets) +{ + int i; + uchar *v; + Hnode *n; + Hmap *new; + + if(buckets == 0) + buckets = old->len; + + new = hmapalloc(buckets, old->nsz - Tagsize); + for(i=0 ; i < old->len; i++){ + v = old->nodes + i*old->nsz; + n = (Hnode*)v; + hmapset(&new, n->key, v + Tagsize, nil); + } + free(old); + return new; +} + +void +hmapreset(Hmap *h, int freekeys) +{ + Hnode *n; + uchar *v; + int i; + + for(i=0; i < h->len; i++){ + v = h->nodes + i*h->nsz; + n = (Hnode*)v; + if(n->filled == 0) + continue; + if(freekeys) + free(n->key); + n->filled = 0; + } + h->len = 0; +} diff --git a/sys/src/cmd/ktrans/hash.h b/sys/src/cmd/ktrans/hash.h new file mode 100644 index 000000000..66e9e78db --- /dev/null +++ b/sys/src/cmd/ktrans/hash.h @@ -0,0 +1,23 @@ +typedef union Hkey Hkey; +union Hkey { + void *p; + int v; +}; + +typedef struct Hmap Hmap; +struct Hmap { + int nbs; + int nsz; + + int len; + int cap; + uchar *nodes; +}; + +Hmap* hmapalloc(int nbuckets, int size); +int hmapget(Hmap *h, char *key, void *dst); +int hmapset(Hmap **h, char *key, void *new, void *old); +int hmapdel(Hmap *h, char *key, void *dst, int freekey); +void hmapfree(Hmap *h, int freekeys); +char* hmapkey(Hmap *h, char *key); +void hmapreset(Hmap *h, int freekeys); diff --git a/sys/src/cmd/ktrans/jisho.c b/sys/src/cmd/ktrans/jisho.c deleted file mode 100644 index 0d4f5325e..000000000 --- a/sys/src/cmd/ktrans/jisho.c +++ /dev/null @@ -1,211 +0,0 @@ -/* - * open jisho file, and set the size of this jisho etc - * - * Kenji Okamoto August 4, 2000 - * Osaka Prefecture Univ. - * okamoto@granite.cias.osakafu-u.ac.jp - */ - -#include <u.h> -#include <libc.h> -#include <bio.h> -#include "jisho.h" - -Dictionary *openQDIC(char *); -void freeQDIC(Dictionary*); -KouhoList *getKouhoHash(Dictionary*, char *); -KouhoList *getKouhoFile(DicList*, char *); -void selectKouho(KouhoList **, KouhoList*); -int hashVal(char *); -void addHash(Hash **, DicList*); - - - -/* - * Open QuickDIC (hashed personal dictionary) - * open skk styled ktrans dictionary file, and make its hash table - * based on individual header kana strings - * - * KouhoList - * |---------| - * Hash |---->kouho---->kouhotop - * |-------| | - * dic---->dhash---->dicindex---->kanahead - * |--------| |--------| - * Dictionary DicList - * - */ -Dictionary * -openQDIC(char *dicname) -{ - Biobuf *f; - void *Bbuf; - Dictionary *dic; - DicList *dicitem; /* for a future extension */ - char buf[1024], *startstr, *endstr; - int i; - - SET(dicitem); /* yes, I know I'm wrong, but... */ - - dic = (Dictionary*)malloc(sizeof(Dictionary)); - /* make room for pointer array (size=HASHSIZE) of hash table */ - for(i=0; i< HASHSIZE; i++) dic->dhash[i] = 0; - dic->dlist = 0; /* for a future extension (more than one dics ^_^ */ - - if ((f = Bopen(dicname, OREAD)) == 0) - return dic; - - /* make hash table by the dic's header word */ - - while(Bbuf = Brdline(f, '\n')) { - strncpy(buf, (char *)Bbuf, Blinelen(f)); - - if (buf[0] == ';') /* comment line */ - continue; - else { - /* get header word from jisho */ - startstr = buf; - if(!(endstr = utfutf(startstr, "\t"))) break; - *endstr = '\0'; - /* dicitem includes each header word from the jisho */ - - dicitem = (DicList*)malloc(sizeof(DicList)+(endstr-startstr+1)); - dicitem->nextitem = 0; /* for a future extension */ - strcpy(dicitem->kanahead, startstr); - - dicitem->kouho = getKouhoFile(dicitem, endstr); /* read kouho from jisho */ - addHash(dic->dhash, dicitem); - } - continue; - } - dic->dlist = dicitem; - Bterm(f); - return dic; -} - -/* - * free dynamically allocated memory - */ -void -freeQDIC(Dictionary *dic) -{ - Hash *hash1, *hash2; - DicList *dlist, *dlist2; - int l; - - for (dlist = dic->dlist; - dlist != 0; - dlist2 = dlist, dlist = dlist->nextitem, free((void *)dlist2)); - for (l = 0; l < HASHSIZE; l++) { - for (hash1 = dic->dhash[l]; hash1; hash1 = hash2) { - if (hash1->next !=0) { - hash2 = hash1->next; - free((void *)hash1); - }else - break; - } - } - free((void *)dic); -} - -int -hashVal(char *s) -{ - uint h; - - h = 0x811c9dc5; - while(*s != 0) - h = (h^(uchar)*s++) * 0x1000193; - return h % HASHSIZE; -} - -void -addHash(Hash **hash, DicList *ditem) -{ - Hash *h; - int v; - - v = hashVal(ditem->kanahead); - h = (Hash*)malloc(sizeof(Hash)); - h->dicindex = ditem; - h->length = strlen(ditem->kanahead); - h->next = hash[v]; - hash[v] = h; -} - -/* - * read Kouho list from the jisho file defined by Biobuf descriptor f - * - * revised for Plan 9 by K.Okamoto - */ -KouhoList * -getKouhoFile(DicList *dicitem, char * endstr) -{ - char *kouhostart, *kouhoend; - KouhoList *kouhoitem, *currntkouhoitem=0, *prevkouhoitem; - - prevkouhoitem = 0; - kouhostart = endstr + 1; - while((kouhoend = utfutf(kouhostart, " ")) || - (kouhoend = utfutf(kouhostart, "\n"))) { - *kouhoend = '\0'; - - kouhoitem = (KouhoList*)malloc(sizeof(KouhoList)+(kouhoend-kouhostart+1)); - kouhoitem->nextkouho = 0; - kouhoitem->prevkouho = prevkouhoitem; - kouhoitem->dicitem = dicitem; - strcpy(kouhoitem->kouhotop, kouhostart); - if (prevkouhoitem) - prevkouhoitem->nextkouho = kouhoitem; - else - currntkouhoitem = kouhoitem; - prevkouhoitem = kouhoitem; - kouhostart = kouhoend + 1; - } - return currntkouhoitem; -} - -/* - * get matched kouho from the hash table of header word of the dict - * if found, returns pointer to the first candidate in the hash table. - * if not found, returns 0. - * - * from getCand() in skklib.c by Akinori Ito et al.,(aito@ei5sun.yz.yamagata-u.ac.jp) - */ -KouhoList * -getKouhoHash(Dictionary *dic, char *s) -{ - int l, v; - Hash *h; - - l = strlen(s); - v = hashVal(s); - for (h = dic->dhash[v]; h != 0; h = h->next) { - if (h->length != l || - strcmp(h->dicindex->kanahead, s)) continue; - return h->dicindex->kouho; /* return matched kouho */ - } - return 0; -} - -/* - * from skklib.c by Akinori Ito et al.,(aito@ei5sun.yz.yamagata-u.ac.jp) - * just modified to read easier for current purpose - */ -void -selectKouho(KouhoList **first, KouhoList *current) -{ - /* take off currentkouho from the kouholist table */ - if (current->prevkouho) { - current->prevkouho->nextkouho = current->nextkouho; - if (current->nextkouho) - current->nextkouho->prevkouho = current->prevkouho; - current->prevkouho = 0; - } - /* take place of firstkouho by currentkouho */ - if (*first != current) { - (*first)->prevkouho = current; - current->nextkouho = *first; - *first = current; - } -} diff --git a/sys/src/cmd/ktrans/jisho.h b/sys/src/cmd/ktrans/jisho.h deleted file mode 100644 index d9d7ca36d..000000000 --- a/sys/src/cmd/ktrans/jisho.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Kenji Okamoto August 4, 2000 - * Osaka Prefecture Univ. - * okamoto@granite.cias.osakafu-u.ac.jp - */ - -#define HASHSIZE 257 - -/* - * Structure for Dictionary's header word (in Hiragana) - */ -typedef struct DicList DicList; -struct DicList { - struct KouhoList *kouho; - struct DicList *nextitem; /* for a future extension */ - char kanahead[1]; -}; - -/* - * Structure for Kouho of each index word in the dictionary - */ -typedef struct KouhoList KouhoList; -struct KouhoList { - struct KouhoList *nextkouho; - struct KouhoList *prevkouho; - struct DicList *dicitem; - char kouhotop[1]; /* top of the kouhos */ -} ; - -typedef struct Hash Hash; -struct Hash { - DicList *dicindex; /* pointer to a KouhoList and kanahead etc */ - short length; - struct Hash *next; -}; - -typedef struct Dictionary Dictionary; -struct Dictionary { - DicList *dlist; /* for a future extension, having more than one dictionaries */ - Hash *dhash[HASHSIZE]; -}; diff --git a/sys/src/cmd/ktrans/ktrans.h b/sys/src/cmd/ktrans/ktrans.h index e2ab7865b..d9f59040f 100644 --- a/sys/src/cmd/ktrans/ktrans.h +++ b/sys/src/cmd/ktrans/ktrans.h @@ -2,2863 +2,2870 @@ typedef struct Map Map; struct Map { char *roma; char *kana; - char advance; + char leadstomore; }; +Hmap *hanzi; +/* hazi is 'natural' input with explicit inference */ -Map kata[] = { - "a", "ア", 1, - "-", "ー", 1, - "i", "イ", 1, - "u", "ウ", 1, - "e", "エ", 1, - "o", "オ", 1, - "ka", "カ", 2, - "ga", "ガ", 2, - "ki", "キ", 2, - "kya", "キャ", 3, - "kyu", "キュ", 3, - "kyo", "キョ", 3, - "gi", "ギ", 2, - "gya", "ギャ", 3, - "gyu", "ギュ", 3, - "gyo", "ギョ", 3, - "ku", "ク", 2, - "gu", "グ", 2, - "ke", "ケ", 2, - "ge", "ゲ", 2, - "ko", "コ", 2, - "go", "ゴ", 2, - "sa", "サ", 2, - "za", "ザ", 2, - "si", "シ", 2, - "shi", "シ", 3, - "ji", "ジ", 2, - "sha", "シャ", 3, - "she", "シェ", 3, - "shu", "シュ", 3, - "je", "ジェ", 2, - "sho", "ショ", 3, - "syo", "ショ", 3, - "ja", "ジャ", 2, - "ju", "ジュ", 2, - "je", "ジェ", 2, - "jo", "ジョ", 2, - "su", "ス", 2, - "zu", "ズ", 2, - "se", "セ", 2, - "ze", "ゼ", 2, - "so", "ソ", 2, - "zo", "ゾ", 2, - "ta", "タ", 2, - "da", "ダ", 2, - "ti", "ティ", 2, - "chi", "チ", 3, - "zi", "ヂ", 2, - "cha", "チャ", 3, - "chu", "チュ", 3, - "tyu", "チュ", 3, - "che", "チェ", 3, - "cho", "チョ", 3, - "tu", "ツ", 2, - "tsu", "ツ", 3, - "du", "ヅ", 2, - "te", "テ", 2, - "de", "デ", 2, - "to", "ト", 2, - "do", "ド", 2, - "na", "ナ", 2, - "ni", "ニ", 2, - "nya", "ニャ", 3, - "nyu", "ニュ", 3, - "nyo", "ニョ", 3, - "nu", "ヌ", 2, - "ne", "ネ", 2, - "no", "ノ", 2, - "ha", "ハ", 2, - "ba", "バ", 2, - "pa", "パ", 2, - "hi", "ヒ", 2, - "hya", "ヒャ", 3, - "hyu", "ヒュ", 3, - "hyo", "ヒョ", 3, - "bi", "ビ", 2, - "bya", "ビャ", 3, - "byu", "ビュ", 3, - "byo", "ビョ", 3, - "pi", "ピ", 2, - "pya", "ピャ", 3, - "pyu", "ピュ", 3, - "pyo", "ピョ", 3, - "hu", "フ", 2, - "fu", "フ", 2, - "bu", "ブ", 2, - "pu", "プ", 2, - "he", "ヘ", 2, - "be", "ベ", 2, - "pe", "ペ", 2, - "ho", "ホ", 2, - "bo", "ボ", 2, - "po", "ポ", 2, - "ma", "マ", 2, - "mi", "ミ", 2, - "mya", "ミャ", 3, - "myu", "ミュ", 3, - "myo", "ミョ", 3, - "mu", "ム", 2, - "me", "メ", 2, - "mo", "モ", 2, - "ya", "ヤ", 2, - "yu", "ユ", 2, - "yo", "ヨ", 2, - "ra", "ラ", 2, - "ri", "リ", 2, - "rya", "リャ", 3, - "ryu", "リュ", 3, - "ryo", "リョ", 3, - "ru", "ル", 2, - "re", "レ", 2, - "ro", "ロ", 2, - "wa", "ワ", 2, - "wi", "ヰ", 2, - "we", "ヱ", 2, - "wo", "ヲ", 2, - "n", "ン", 1, - "xn", "ン", 2, - "v", "ヴ", 1, - "xa", "ァ", 2, - "xi", "ィ", 2, - "xe", "ェ", 2, - "xo", "ォ", 2, - "cc", "ッ", 1, - "dd", "ッ", 1, - "kk", "ッ", 1, - "pp", "ッ", 1, - "tt", "ッ", 1, - "tch", "ッ", 1, - "ss", "ッ", 1, - "xn", "ン", 2, - "di", "ディ", 2, - "fa", "ファ", 2, - "fi", "フィ", 2, - "fe", "フェ", 2, - "fo", "フォ", 2, - "va", "ヴァ", 2, - "vi", "ヴィ", 2, - "ve", "ヴェ", 2, - "vo", "ヴォ", 2, - ".", "。", 1, - ",", "、", 1, +Hmap *kata; +Map mkata[] = { + "a", "ア", 0, + "-", "ー", 0, + "i", "イ", 0, + "u", "ウ", 0, + "e", "エ", 0, + "o", "オ", 0, + "ka", "カ", 0, + "ga", "ガ", 0, + "ki", "キ", 0, + "kya", "キャ", 0, + "kyu", "キュ", 0, + "kyo", "キョ", 0, + "gi", "ギ", 0, + "gya", "ギャ", 0, + "gyu", "ギュ", 0, + "gyo", "ギョ", 0, + "ku", "ク", 0, + "gu", "グ", 0, + "ke", "ケ", 0, + "ge", "ゲ", 0, + "ko", "コ", 0, + "go", "ゴ", 0, + "sa", "サ", 0, + "za", "ザ", 0, + "si", "シ", 0, + "shi", "シ", 0, + "ji", "ジ", 0, + "sha", "シャ", 0, + "she", "シェ", 0, + "shu", "シュ", 0, + "je", "ジェ", 0, + "sho", "ショ", 0, + "syo", "ショ", 0, + "ja", "ジャ", 0, + "ju", "ジュ", 0, + "je", "ジェ", 0, + "jo", "ジョ", 0, + "su", "ス", 0, + "zu", "ズ", 0, + "se", "セ", 0, + "ze", "ゼ", 0, + "so", "ソ", 0, + "zo", "ゾ", 0, + "ta", "タ", 0, + "da", "ダ", 0, + "ti", "ティ", 0, + "chi", "チ", 0, + "zi", "ヂ", 0, + "cha", "チャ", 0, + "chu", "チュ", 0, + "tyu", "チュ", 0, + "che", "チェ", 0, + "cho", "チョ", 0, + "tu", "ツ", 0, + "tsu", "ツ", 0, + "du", "ヅ", 0, + "te", "テ", 0, + "de", "デ", 0, + "to", "ト", 0, + "do", "ド", 0, + "na", "ナ", 0, + "ni", "ニ", 0, + "nya", "ニャ", 0, + "nyu", "ニュ", 0, + "nyo", "ニョ", 0, + "nu", "ヌ", 0, + "ne", "ネ", 0, + "no", "ノ", 0, + "ha", "ハ", 0, + "ba", "バ", 0, + "pa", "パ", 0, + "hi", "ヒ", 0, + "hya", "ヒャ", 0, + "hyu", "ヒュ", 0, + "hyo", "ヒョ", 0, + "bi", "ビ", 0, + "bya", "ビャ", 0, + "byu", "ビュ", 0, + "byo", "ビョ", 0, + "pi", "ピ", 0, + "pya", "ピャ", 0, + "pyu", "ピュ", 0, + "pyo", "ピョ", 0, + "hu", "フ", 0, + "fu", "フ", 0, + "bu", "ブ", 0, + "pu", "プ", 0, + "he", "ヘ", 0, + "be", "ベ", 0, + "pe", "ペ", 0, + "ho", "ホ", 0, + "bo", "ボ", 0, + "po", "ポ", 0, + "ma", "マ", 0, + "mi", "ミ", 0, + "mya", "ミャ", 0, + "myu", "ミュ", 0, + "myo", "ミョ", 0, + "mu", "ム", 0, + "me", "メ", 0, + "mo", "モ", 0, + "ya", "ヤ", 0, + "yu", "ユ", 0, + "yo", "ヨ", 0, + "ra", "ラ", 0, + "ri", "リ", 0, + "rya", "リャ", 0, + "ryu", "リュ", 0, + "ryo", "リョ", 0, + "ru", "ル", 0, + "re", "レ", 0, + "ro", "ロ", 0, + "wa", "ワ", 0, + "wi", "ヰ", 0, + "we", "ヱ", 0, + "wo", "ヲ", 0, + "n", "ン", 0, + "xn", "ン", 0, + "v", "ヴ", 0, + "xa", "ァ", 0, + "xi", "ィ", 0, + "xe", "ェ", 0, + "xo", "ォ", 0, + "cc", "ッ", 0, + "dd", "ッ", 0, + "kk", "ッ", 0, + "pp", "ッ", 0, + "tt", "ッ", 0, + "tch", "ッ", 0, + "ss", "ッ", 0, + "xn", "ン", 0, + "di", "ディ", 0, + "fa", "ファ", 0, + "fi", "フィ", 0, + "fe", "フェ", 0, + "fo", "フォ", 0, + "va", "ヴァ", 0, + "vi", "ヴィ", 0, + "ve", "ヴェ", 0, + "vo", "ヴォ", 0, + ".", "。", 0, + ",", "、", 0, 0 }; -Map hira[] = { - "a", "あ", 1, - "-", "ー", 1, - "i", "い", 1, - "u", "う", 1, - "e", "え", 1, - "o", "お", 1, - "ka", "か", 2, - "ga", "が", 2, - "ki", "き", 2, - "kya", "きゃ", 3, - "kyu", "きゅ", 3, - "kyo", "きょ", 3, - "gi", "ぎ", 2, - "gya", "ぎゃ", 3, - "gyu", "ぎゅ", 3, - "gyo", "ぎょ", 3, - "ku", "く", 2, - "gu", "ぐ", 2, - "ke", "け", 2, - "ge", "げ", 2, - "ko", "こ", 2, - "go", "ご", 2, - "sa", "さ", 2, - "za", "ざ", 2, - "si", "し", 2, - "shi", "し", 3, - "sha", "しゃ", 3, - "shu", "しゅ", 3, - "she", "しぇ", 3, - "sho", "しょ", 3, - "syo", "しょ", 3, - "zi", "ぢ", 2, - "ja", "じゃ", 2, - "ju", "じゅ", 2, - "je", "じぇ", 2, - "jo", "じょ", 2, - "su", "す", 2, - "zu", "ず", 2, - "se", "せ", 2, - "ze", "ぜ", 2, - "so", "そ", 2, - "zo", "ぞ", 2, - "ta", "た", 2, - "da", "だ", 2, - "ti", "ち", 2, - "chi", "ち", 3, - "cha", "ちゃ", 3, - "chu", "ちゅ", 3, - "tyu", "ちゅ", 3, - "cho", "ちょ", 3, - "ji", "じ", 2, - "tu", "つ", 2, - "tsu", "つ", 3, - "du", "づ", 2, - "te", "て", 2, - "de", "で", 2, - "to", "と", 2, - "do", "ど", 2, - "na", "な", 2, - "ni", "に", 2, - "nya", "にゃ", 3, - "nyu", "にゅ", 3, - "nyo", "にょ", 3, - "nu", "ぬ", 2, - "ne", "ね", 2, - "no", "の", 2, - "ha", "は", 2, - "ba", "ば", 2, - "va", "ば", 2, - "pa", "ぱ", 2, - "hi", "ひ", 2, - "hya", "ひゃ", 3, - "hyu", "ひゅ", 3, - "hyo", "ひょ", 3, - "bi", "び", 2, - "bya", "びゃ", 3, - "byu", "びゅ", 3, - "byo", "びょ", 3, - "vi", "び", 2, - "pi", "ぴ", 2, - "pya", "ぴゃ", 3, - "pyu", "ぴゅ", 3, - "pyo", "ぴょ", 3, - "hu", "ふ", 2, - "fu", "ふ", 2, - "bu", "ぶ", 2, - "vu", "ぶ", 2, - "pu", "ぷ", 2, - "he", "へ", 2, - "be", "べ", 2, - "ve", "べ", 2, - "pe", "ぺ", 2, - "ho", "ほ", 2, - "bo", "ぼ", 2, - "vo", "ぼ", 2, - "po", "ぽ", 2, - "ma", "ま", 2, - "mi", "み", 2, - "mya", "みゃ", 3, - "myu", "みゅ", 3, - "myo", "みょ", 3, - "mu", "む", 2, - "me", "め", 2, - "mo", "も", 2, - "ya", "や", 2, - "yu", "ゆ", 2, - "yo", "よ", 2, - "ra", "ら", 2, - "ri", "り", 2, - "rya", "りゃ", 3, - "ryu", "りゅ", 3, - "ryo", "りょ", 3, - "ru", "る", 2, - "re", "れ", 2, - "ro", "ろ", 2, - "wa", "わ", 2, - "wi", "ゐ", 2, - "we", "ゑ", 2, - "wo", "を", 2, - "n", "ん", 1, - "xn", "ん", 2, - "v", "\x80", 1, - "xa", "ぁ", 2, - "xi", "ぃ", 2, - "xu", "ぅ", 2, - "xe", "ぇ", 2, - "xo", "ぉ", 2, - "cc", "っ", 1, - "dd", "っ", 1, - "kk", "っ", 1, - "pp", "っ", 1, - "tt", "っ", 1, - "ss", "っ", 1, - ".", "。", 1, - ",", "、", 1, +Hmap *hira; +Map mhira[] = { + "a", "あ", 0, + "-", "ー", 0, + "i", "い", 0, + "u", "う", 0, + "e", "え", 0, + "o", "お", 0, + "ka", "か", 0, + "ga", "が", 0, + "ki", "き", 0, + "kya", "きゃ", 0, + "kyu", "きゅ", 0, + "kyo", "きょ", 0, + "gi", "ぎ", 0, + "gya", "ぎゃ", 0, + "gyu", "ぎゅ", 0, + "gyo", "ぎょ", 0, + "ku", "く", 0, + "gu", "ぐ", 0, + "ke", "け", 0, + "ge", "げ", 0, + "ko", "こ", 0, + "go", "ご", 0, + "sa", "さ", 0, + "za", "ざ", 0, + "si", "し", 0, + "shi", "し", 0, + "sha", "しゃ", 0, + "shu", "しゅ", 0, + "she", "しぇ", 0, + "sho", "しょ", 0, + "syo", "しょ", 0, + "zi", "ぢ", 0, + "ja", "じゃ", 0, + "ju", "じゅ", 0, + "je", "じぇ", 0, + "jo", "じょ", 0, + "su", "す", 0, + "zu", "ず", 0, + "se", "せ", 0, + "ze", "ぜ", 0, + "so", "そ", 0, + "zo", "ぞ", 0, + "ta", "た", 0, + "da", "だ", 0, + "ti", "ち", 0, + "chi", "ち", 0, + "cha", "ちゃ", 0, + "chu", "ちゅ", 0, + "tyu", "ちゅ", 0, + "cho", "ちょ", 0, + "ji", "じ", 0, + "tu", "つ", 0, + "tsu", "つ", 0, + "du", "づ", 0, + "te", "て", 0, + "de", "で", 0, + "to", "と", 0, + "do", "ど", 0, + "na", "な", 0, + "ni", "に", 0, + "nya", "にゃ", 0, + "nyu", "にゅ", 0, + "nyo", "にょ", 0, + "nu", "ぬ", 0, + "ne", "ね", 0, + "no", "の", 0, + "ha", "は", 0, + "ba", "ば", 0, + "va", "ば", 0, + "pa", "ぱ", 0, + "hi", "ひ", 0, + "hya", "ひゃ", 0, + "hyu", "ひゅ", 0, + "hyo", "ひょ", 0, + "bi", "び", 0, + "bya", "びゃ", 0, + "byu", "びゅ", 0, + "byo", "びょ", 0, + "vi", "び", 0, + "pi", "ぴ", 0, + "pya", "ぴゃ", 0, + "pyu", "ぴゅ", 0, + "pyo", "ぴょ", 0, + "hu", "ふ", 0, + "fu", "ふ", 0, + "bu", "ぶ", 0, + "vu", "ぶ", 0, + "pu", "ぷ", 0, + "he", "へ", 0, + "be", "べ", 0, + "ve", "べ", 0, + "pe", "ぺ", 0, + "ho", "ほ", 0, + "bo", "ぼ", 0, + "vo", "ぼ", 0, + "po", "ぽ", 0, + "ma", "ま", 0, + "mi", "み", 0, + "mya", "みゃ", 0, + "myu", "みゅ", 0, + "myo", "みょ", 0, + "mu", "む", 0, + "me", "め", 0, + "mo", "も", 0, + "ya", "や", 0, + "yu", "ゆ", 0, + "yo", "よ", 0, + "ra", "ら", 0, + "ri", "り", 0, + "rya", "りゃ", 0, + "ryu", "りゅ", 0, + "ryo", "りょ", 0, + "ru", "る", 0, + "re", "れ", 0, + "ro", "ろ", 0, + "wa", "わ", 0, + "wi", "ゐ", 0, + "we", "ゑ", 0, + "wo", "を", 0, + "n", "ん", 0, + "xn", "ん", 0, + "v", "\x80", 0, + "xa", "ぁ", 0, + "xi", "ぃ", 0, + "xu", "ぅ", 0, + "xe", "ぇ", 0, + "xo", "ぉ", 0, + "cc", "っ", 0, + "dd", "っ", 0, + "kk", "っ", 0, + "pp", "っ", 0, + "tt", "っ", 0, + "ss", "っ", 0, + ".", "。", 0, + ",", "、", 0, 0, }; -Map cyril[] = { - "YO", "Ё", 2, - "Yo", "Ё", 2, - "A", "А", 1, - "B", "Б", 1, - "V", "В", 1, - "G", "Г", 1, - "D", "Д", 1, - "Ye", "Е", 1, - "YE", "Е", 2, - "E", "Е", 1, - "Zh", "Ж", 2, - "ZH", "Ж", 2, - "Z", "З", 1, - "I", "И", 1, - "J", "Й", 1, - "K", "К", 1, - "L", "Л", 1, - "M", "М", 1, - "N", "Н", 1, - "O", "О", 1, - "P", "П", 1, - "R", "Р", 1, - "S", "С", 1, - "T", "Т", 1, - "U", "У", 1, - "F", "Ф", 1, - "Kh", "Х", 2, - "KH", "Х", 2, - "X", "Х", 1, - "Ts", "Ц", 2, - "TS", "Ц", 2, - "Ch", "Ч", 2, - "CH", "Ч", 2, - "Sh", "Ш", 2, - "SH", "Ш", 2, +Hmap *cyril; +Map mcyril[] = { + "YO", "Ё", 0, + "Yo", "Ё", 0, + "A", "А", 0, + "B", "Б", 0, + "V", "В", 0, + "G", "Г", 0, + "D", "Д", 0, + "Ye", "Е", 0, + "YE", "Е", 0, + "E", "Е", 0, + "Zh", "Ж", 0, + "ZH", "Ж", 0, + "Z", "З", 0, + "I", "И", 0, + "J", "Й", 0, + "K", "К", 0, + "L", "Л", 0, + "M", "М", 0, + "N", "Н", 0, + "O", "О", 0, + "P", "П", 0, + "R", "Р", 0, + "S", "С", 0, + "T", "Т", 0, + "U", "У", 0, + "F", "Ф", 0, + "Kh", "Х", 0, + "KH", "Х", 0, + "X", "Х", 0, + "Ts", "Ц", 0, + "TS", "Ц", 0, + "Ch", "Ч", 0, + "CH", "Ч", 0, + "Sh", "Ш", 0, + "SH", "Ш", 0, "Shch", "Щ", 4, "SHCH", "Щ", 4, - "''", "ъ", 2, - "Y", "Ы", 1, - "'", "ь", 1, - "EH", "Э", 2, - "Eh", "Э", 2, - "Yu", "Ю", 2, - "YU", "Ю", 2, - "Ya", "Я", 2, - "YA", "Я", 2, - "a", "а", 1, - "b", "б", 1, - "v", "в", 1, - "g", "г", 1, - "d", "д", 1, - "ye", "е", 2, - "e", "е", 1, - "zh", "ж", 2, - "z", "з", 1, - "i", "и", 1, - "j", "й", 1, - "k", "к", 1, - "l", "л", 1, - "m", "м", 1, - "n", "н", 1, - "o", "о", 1, - "p", "п", 1, - "r", "р", 1, - "s", "с", 1, - "t", "т", 1, - "u", "у", 1, - "f", "ф", 1, - "kh", "х", 2, - "x", "х", 1, - "ts", "ц", 2, - "ch", "ч", 2, - "sh", "ш", 2, + "''", "ъ", 0, + "Y", "Ы", 0, + "'", "ь", 0, + "EH", "Э", 0, + "Eh", "Э", 0, + "Yu", "Ю", 0, + "YU", "Ю", 0, + "Ya", "Я", 0, + "YA", "Я", 0, + "a", "а", 0, + "b", "б", 0, + "v", "в", 0, + "g", "г", 0, + "d", "д", 0, + "ye", "е", 0, + "e", "е", 0, + "zh", "ж", 0, + "z", "з", 0, + "i", "и", 0, + "j", "й", 0, + "k", "к", 0, + "l", "л", 0, + "m", "м", 0, + "n", "н", 0, + "o", "о", 0, + "p", "п", 0, + "r", "р", 0, + "s", "с", 0, + "t", "т", 0, + "u", "у", 0, + "f", "ф", 0, + "kh", "х", 0, + "x", "х", 0, + "ts", "ц", 0, + "ch", "ч", 0, + "sh", "ш", 0, "shch", "щ", 4, - "''", "ъ", 2, - "y", "ы", 1, - "'", "ь", 1, - "eh", "э", 2, - "yu", "ю", 2, - "ya", "я", 2, - "yo", "ё", 2, + "''", "ъ", 0, + "y", "ы", 0, + "'", "ь", 0, + "eh", "э", 0, + "yu", "ю", 0, + "ya", "я", 0, + "yo", "ё", 0, 0, }; -Map greek[] = { - "A", "Α", 1, - "'A", "Ά", 2, - "B", "Β", 1, - "G", "Γ", 1, - "D", "Δ", 1, - "E", "Ε", 1, - "'E", "Έ", 2, - "Z", "Ζ", 1, - "E!", "Η", 2, - "'E!", "Έ", 3, - "TH", "Θ", 2, - "Th", "Θ", 2, - "I", "Ι", 1, - "'I", "Ί", 2, - "K", "Κ", 1, - "L", "Λ", 1, - "M", "Μ", 1, - "N", "Ν", 1, - "KS", "Ξ", 2, - "Ks", "Ξ", 2, - "O", "Ο", 1, - "'O", "Ό", 2, - "P", "Π", 1, - "R", "Ρ", 1, - "S", "Σ", 1, - "T", "Τ", 1, - "U", "Υ", 1, - "'U", "Ύ", 2, - "F", "Φ", 1, - "CH", "Χ", 2, - "Ch", "Χ", 2, - "PS", "Ψ", 2, - "Ps", "Ψ", 2, - "O!", "Ω", 2, - "W", "Ω", 1, - "'O!", "Ώ", 3, - "'W", "Ώ", 2, - "a", "α", 1, - "'a", "ά", 2, - "b", "β", 1, - "v", "β", 1, - "g", "γ", 1, - "d", "δ", 1, - "e", "ε", 1, - "'e", "έ", 2, - "z", "ζ", 1, - "e!", "η", 2, - "'e!", "ή", 3, - "ii", "η", 2, - "'ii", "ή", 3, - "h", "η", 1, - "'h", "ή", 2, - "th", "θ", 2, - "i", "ι", 1, - "'i", "ί", 2, - "k", "κ", 1, - "l", "λ", 1, - "m", "μ", 1, - "n", "ν", 1, - "ks", "ξ", 2, - "x", "ξ", 1, - "o", "ο", 1, - "'o", "ό", 2, - "p", "π", 1, - "r", "ρ", 1, - "s ", "ς", 1, - "s.", "ς", 1, - "s,", "ς", 1, - "s\n", "ς", 1, - "s", "σ", 1, - "t", "τ", 1, - "u", "υ", 1, - "'u", "ΰ", 2, - "y", "υ", 1, - "'y", "ΰ", 2, - "f", "φ", 1, - "ch", "χ", 2, - "ps", "ψ", 2, - "o!", "ω", 2, - "w", "ω", 1, - "'o!", "ώ", 3, - "'w", "ώ", 2, +Hmap *greek; +Map mgreek[] = { + "A", "Α", 0, + "'A", "Ά", 0, + "B", "Β", 0, + "G", "Γ", 0, + "D", "Δ", 0, + "E", "Ε", 0, + "'E", "Έ", 0, + "Z", "Ζ", 0, + "E!", "Η", 0, + "'E!", "Έ", 0, + "TH", "Θ", 0, + "Th", "Θ", 0, + "I", "Ι", 0, + "'I", "Ί", 0, + "K", "Κ", 0, + "L", "Λ", 0, + "M", "Μ", 0, + "N", "Ν", 0, + "KS", "Ξ", 0, + "Ks", "Ξ", 0, + "O", "Ο", 0, + "'O", "Ό", 0, + "P", "Π", 0, + "R", "Ρ", 0, + "S", "Σ", 0, + "T", "Τ", 0, + "U", "Υ", 0, + "'U", "Ύ", 0, + "F", "Φ", 0, + "CH", "Χ", 0, + "Ch", "Χ", 0, + "PS", "Ψ", 0, + "Ps", "Ψ", 0, + "O!", "Ω", 0, + "W", "Ω", 0, + "'O!", "Ώ", 0, + "'W", "Ώ", 0, + "a", "α", 0, + "'a", "ά", 0, + "b", "β", 0, + "v", "β", 0, + "g", "γ", 0, + "d", "δ", 0, + "e", "ε", 0, + "'e", "έ", 0, + "z", "ζ", 0, + "e!", "η", 0, + "'e!", "ή", 0, + "ii", "η", 0, + "'ii", "ή", 0, + "h", "η", 0, + "'h", "ή", 0, + "th", "θ", 0, + "i", "ι", 0, + "'i", "ί", 0, + "k", "κ", 0, + "l", "λ", 0, + "m", "μ", 0, + "n", "ν", 0, + "ks", "ξ", 0, + "x", "ξ", 0, + "o", "ο", 0, + "'o", "ό", 0, + "p", "π", 0, + "r", "ρ", 0, + "s ", "ς", 0, + "s.", "ς", 0, + "s,", "ς", 0, + "s\n", "ς", 0, + "s", "σ", 0, + "t", "τ", 0, + "u", "υ", 0, + "'u", "ΰ", 0, + "y", "υ", 0, + "'y", "ΰ", 0, + "f", "φ", 0, + "ch", "χ", 0, + "ps", "ψ", 0, + "o!", "ω", 0, + "w", "ω", 0, + "'o!", "ώ", 0, + "'w", "ώ", 0, 0 }; -Map hangul[] = { - "A", "A", 1, - "B", "ㅟ", 1, - "C", "ㅊ", 1, - "E", "ㄸ", 1, - "F", "F", 1, - "G", "G", 1, - "H", "ㅙ", 1, - "J", "ㅝ", 1, - "K", "ㅘ", 1, - "L", "ㅚ", 1, - "M", "ㅢ", 1, - "N", "ㅞ", 1, - "O", "ㅒ", 1, - "P", "ㅖ", 1, - "Q", "ㅃ", 1, - "R", "ㄲ", 1, - "S", "S", 1, - "T", "ㅆ", 1, - "V", "V", 1, - "W", "ㅉ", 1, - "a", "ㅁ", 1, - "b", "ㅠ", 1, - "c", "c", 1, - "d", "ㅇ", 1, - "e", "ㄷ", 1, - "f", "ㄹ", 1, - "g", "ㅎ", 1, - "h", "ㅗ", 1, - "i", "ㅑ", 1, - "j", "ㅓ", 1, - "k", "ㅏ", 1, - "l", "ㅣ", 1, - "m", "ㅡ", 1, - "n", "ㅜ", 1, - "o", "ㅐ", 1, - "p", "ㅔ", 1, - "q", "ㅂ", 1, - "r", "ㄱ", 1, - "s", "ㄴ", 1, - "t", "t", 1, - "u", "ㅕ", 1, - "v", "ㅍ", 1, - "w", "ㅈ", 1, - "x", "ㅌ", 1, - "y", "ㅛ", 1, - "z", "ㅋ", 1, - "rk", "가", 2, - "ro", "개", 2, - "ri", "갸", 2, - "rO", "걔", 2, - "rj", "거", 2, - "rp", "게", 2, - "ru", "겨", 2, - "rP", "계", 2, - "rh", "고", 2, - "rK", "과", 2, - "rH", "괘", 2, - "rL", "괴", 2, - "ry", "교", 2, - "rn", "구", 2, - "rJ", "궈", 2, - "rN", "궤", 2, - "rB", "귀", 2, - "rb", "규", 2, - "rm", "그", 2, - "rM", "긔", 2, - "rl", "기", 2, - "Rk", "까", 2, - "Ro", "깨", 2, - "Ri", "꺄", 2, - "Rj", "꺼", 2, - "Rp", "께", 2, - "Ru", "껴", 2, - "RP", "꼐", 2, - "Rh", "꼬", 2, - "RK", "꽈", 2, - "RH", "꽤", 2, - "RL", "꾀", 2, - "Ry", "꾜", 2, - "Rn", "꾸", 2, - "RJ", "꿔", 2, - "RN", "꿰", 2, - "RB", "뀌", 2, - "Rb", "뀨", 2, - "Rm", "끄", 2, - "Rl", "끼", 2, - "sk", "나", 2, - "so", "내", 2, - "si", "냐", 2, - "sj", "너", 2, - "sp", "네", 2, - "su", "녀", 2, - "sP", "녜", 2, - "sh", "노", 2, - "sK", "놔", 2, - "sL", "뇌", 2, - "sy", "뇨", 2, - "sn", "누", 2, - "sJ", "눠", 2, - "sN", "눼", 2, - "sB", "뉘", 2, - "sb", "뉴", 2, - "sm", "느", 2, - "sM", "늬", 2, - "sl", "니", 2, - "ek", "다", 2, - "eo", "대", 2, - "ei", "댜", 2, - "ej", "더", 2, - "ep", "데", 2, - "eu", "뎌", 2, - "eP", "뎨", 2, - "eh", "도", 2, - "eK", "돠", 2, - "eH", "돼", 2, - "eL", "되", 2, - "ey", "됴", 2, - "en", "두", 2, - "eJ", "둬", 2, - "eN", "뒈", 2, - "eB", "뒤", 2, - "eb", "듀", 2, - "em", "드", 2, - "eM", "듸", 2, - "el", "디", 2, - "Ek", "따", 2, - "Eo", "때", 2, - "Ej", "떠", 2, - "Ep", "떼", 2, - "Eu", "뗘", 2, - "Eh", "또", 2, - "EK", "똬", 2, - "EH", "뙈", 2, - "EL", "뙤", 2, - "En", "뚜", 2, - "EN", "뛔", 2, - "EB", "뛰", 2, - "Em", "뜨", 2, - "EM", "띄", 2, - "El", "띠", 2, - "fk", "라", 2, - "fo", "래", 2, - "fi", "랴", 2, - "fj", "러", 2, - "fp", "레", 2, - "fu", "려", 2, - "fP", "례", 2, - "fh", "로", 2, - "fK", "롸", 2, - "fL", "뢰", 2, - "fy", "료", 2, - "fn", "루", 2, - "fJ", "뤄", 2, - "fN", "뤠", 2, - "fB", "뤼", 2, - "fb", "류", 2, - "fm", "르", 2, - "fl", "리", 2, - "ak", "마", 2, - "ao", "매", 2, - "ai", "먀", 2, - "aj", "머", 2, - "ap", "메", 2, - "au", "며", 2, - "aP", "몌", 2, - "ah", "모", 2, - "aK", "뫄", 2, - "aL", "뫼", 2, - "ay", "묘", 2, - "an", "무", 2, - "aJ", "뭐", 2, - "aN", "뭬", 2, - "aB", "뮈", 2, - "ab", "뮤", 2, - "am", "므", 2, - "al", "미", 2, - "qk", "바", 2, - "qo", "배", 2, - "qi", "뱌", 2, - "qj", "버", 2, - "qp", "베", 2, - "qu", "벼", 2, - "qP", "볘", 2, - "qh", "보", 2, - "qK", "봐", 2, - "qH", "봬", 2, - "qL", "뵈", 2, - "qy", "뵤", 2, - "qn", "부", 2, - "qJ", "붜", 2, - "qN", "붸", 2, - "qB", "뷔", 2, - "qb", "뷰", 2, - "qm", "브", 2, - "ql", "비", 2, - "Qk", "빠", 2, - "Qo", "빼", 2, - "Qi", "뺘", 2, - "Qj", "뻐", 2, - "Qp", "뻬", 2, - "Qu", "뼈", 2, - "Qh", "뽀", 2, - "QL", "뾔", 2, - "Qy", "뾰", 2, - "Qn", "뿌", 2, - "Qb", "쀼", 2, - "Qm", "쁘", 2, - "Ql", "삐", 2, - "tk", "사", 2, - "to", "새", 2, - "ti", "샤", 2, - "tO", "섀", 2, - "tj", "서", 2, - "tp", "세", 2, - "tu", "셔", 2, - "tP", "셰", 2, - "th", "소", 2, - "tK", "솨", 2, - "tH", "쇄", 2, - "tL", "쇠", 2, - "ty", "쇼", 2, - "tn", "수", 2, - "tJ", "숴", 2, - "tN", "쉐", 2, - "tB", "쉬", 2, - "tb", "슈", 2, - "tm", "스", 2, - "tl", "시", 2, - "Tk", "싸", 2, - "To", "쌔", 2, - "Tj", "써", 2, - "Tp", "쎄", 2, - "Th", "쏘", 2, - "TK", "쏴", 2, - "TH", "쐐", 2, - "TL", "쐬", 2, - "Ty", "쑈", 2, - "Tn", "쑤", 2, - "TJ", "쒀", 2, - "TN", "쒜", 2, - "TB", "쒸", 2, - "Tm", "쓰", 2, - "TM", "씌", 2, - "Tl", "씨", 2, - "dk", "아", 2, - "do", "애", 2, - "di", "야", 2, - "dO", "얘", 2, - "dj", "어", 2, - "dp", "에", 2, - "du", "여", 2, - "dP", "예", 2, - "dh", "오", 2, - "dK", "와", 2, - "dH", "왜", 2, - "dL", "외", 2, - "dy", "요", 2, - "dn", "우", 2, - "dJ", "워", 2, - "dN", "웨", 2, - "dB", "위", 2, - "db", "유", 2, - "dm", "으", 2, - "dM", "의", 2, - "dl", "이", 2, - "wk", "자", 2, - "wo", "재", 2, - "wi", "쟈", 2, - "wO", "쟤", 2, - "wj", "저", 2, - "wp", "제", 2, - "wu", "져", 2, - "wP", "졔", 2, - "wh", "조", 2, - "wK", "좌", 2, - "wH", "좨", 2, - "wL", "죄", 2, - "wy", "죠", 2, - "wn", "주", 2, - "wJ", "줘", 2, - "wN", "줴", 2, - "wB", "쥐", 2, - "wb", "쥬", 2, - "wm", "즈", 2, - "wl", "지", 2, - "Wk", "짜", 2, - "Wo", "째", 2, - "Wi", "쨔", 2, - "Wj", "쩌", 2, - "Wp", "쩨", 2, - "Wu", "쪄", 2, - "Wh", "쪼", 2, - "WK", "쫘", 2, - "WH", "쫴", 2, - "WL", "쬐", 2, - "Wn", "쭈", 2, - "WJ", "쭤", 2, - "WB", "쮜", 2, - "Wb", "쮸", 2, - "Wm", "쯔", 2, - "Wl", "찌", 2, - "ck", "차", 2, - "co", "채", 2, - "ci", "챠", 2, - "cj", "처", 2, - "cp", "체", 2, - "cu", "쳐", 2, - "cP", "쳬", 2, - "ch", "초", 2, - "cK", "촤", 2, - "cL", "최", 2, - "cy", "쵸", 2, - "cn", "추", 2, - "cJ", "춰", 2, - "cN", "췌", 2, - "cB", "취", 2, - "cb", "츄", 2, - "cm", "츠", 2, - "cl", "치", 2, - "zk", "카", 2, - "zo", "캐", 2, - "zi", "캬", 2, - "zj", "커", 2, - "zp", "케", 2, - "zu", "켜", 2, - "zP", "켸", 2, - "zh", "코", 2, - "zK", "콰", 2, - "zH", "쾌", 2, - "zL", "쾨", 2, - "zy", "쿄", 2, - "zn", "쿠", 2, - "zJ", "쿼", 2, - "zN", "퀘", 2, - "zB", "퀴", 2, - "zb", "큐", 2, - "zm", "크", 2, - "zl", "키", 2, - "xk", "타", 2, - "xo", "태", 2, - "xi", "탸", 2, - "xj", "터", 2, - "xp", "테", 2, - "xu", "텨", 2, - "xP", "톄", 2, - "xh", "토", 2, - "xK", "톼", 2, - "xH", "퇘", 2, - "xL", "퇴", 2, - "xy", "툐", 2, - "xn", "투", 2, - "xJ", "퉈", 2, - "xN", "퉤", 2, - "xB", "튀", 2, - "xb", "튜", 2, - "xm", "트", 2, - "xM", "틔", 2, - "xl", "티", 2, - "vk", "파", 2, - "vo", "패", 2, - "vi", "퍄", 2, - "vj", "퍼", 2, - "vp", "페", 2, - "vu", "펴", 2, - "vP", "폐", 2, - "vh", "포", 2, - "vK", "퐈", 2, - "vL", "푀", 2, - "vy", "표", 2, - "vn", "푸", 2, - "vJ", "풔", 2, - "vB", "퓌", 2, - "vb", "퓨", 2, - "vm", "프", 2, - "vl", "피", 2, - "gk", "하", 2, - "go", "해", 2, - "gi", "햐", 2, - "gj", "허", 2, - "gp", "헤", 2, - "gu", "혀", 2, - "gP", "혜", 2, - "gh", "호", 2, - "gK", "화", 2, - "gH", "홰", 2, - "gL", "회", 2, - "gy", "효", 2, - "gn", "후", 2, - "gJ", "훠", 2, - "gN", "훼", 2, - "gB", "휘", 2, - "gb", "휴", 2, - "gm", "흐", 2, - "gM", "희", 2, - "gl", "히", 2, - "rkr", "각", 3, - "rks", "간", 3, - "rke", "갇", 3, - "rkf", "갈", 3, - "rkG", "갉", 3, - "rkM", "갊", 3, - "rka", "감", 3, - "rkq", "갑", 3, - "rkC", "값", 3, - "rkt", "갓", 3, - "rkT", "갔", 3, - "rkd", "강", 3, - "rkw", "갖", 3, - "rkc", "갗", 3, - "rkx", "같", 3, - "rkv", "갚", 3, - "rkg", "갛", 3, - "ror", "객", 3, - "ros", "갠", 3, - "rof", "갤", 3, - "roa", "갬", 3, - "roq", "갭", 3, - "rot", "갯", 3, - "roT", "갰", 3, - "rod", "갱", 3, - "rir", "갹", 3, - "ris", "갼", 3, - "rif", "걀", 3, - "rit", "걋", 3, - "rid", "걍", 3, - "rOs", "걘", 3, - "rOf", "걜", 3, - "rjr", "걱", 3, - "rjs", "건", 3, - "rje", "걷", 3, - "rjf", "걸", 3, - "rjM", "걺", 3, - "rja", "검", 3, - "rjq", "겁", 3, - "rjt", "것", 3, - "rjT", "겄", 3, - "rjd", "겅", 3, - "rjw", "겆", 3, - "rjx", "겉", 3, - "rjv", "겊", 3, - "rjg", "겋", 3, - "rps", "겐", 3, - "rpf", "겔", 3, - "rpa", "겜", 3, - "rpq", "겝", 3, - "rpt", "겟", 3, - "rpT", "겠", 3, - "rpd", "겡", 3, - "rur", "격", 3, - "ruR", "겪", 3, - "rus", "견", 3, - "rue", "겯", 3, - "ruf", "결", 3, - "rua", "겸", 3, - "ruq", "겹", 3, - "rut", "겻", 3, - "ruT", "겼", 3, - "rud", "경", 3, - "rux", "곁", 3, - "rPs", "곈", 3, - "rPf", "곌", 3, - "rPq", "곕", 3, - "rPt", "곗", 3, - "rhr", "곡", 3, - "rhs", "곤", 3, - "rhe", "곧", 3, - "rhf", "골", 3, - "rhM", "곪", 3, - "rhN", "곬", 3, - "rhF", "곯", 3, - "rha", "곰", 3, - "rhq", "곱", 3, - "rht", "곳", 3, - "rhd", "공", 3, - "rhw", "곶", 3, - "rKr", "곽", 3, - "rKs", "관", 3, - "rKf", "괄", 3, - "rKM", "괆", 3, - "rKa", "괌", 3, - "rKq", "괍", 3, - "rKt", "괏", 3, - "rKd", "광", 3, - "rHs", "괜", 3, - "rHf", "괠", 3, - "rHq", "괩", 3, - "rHT", "괬", 3, - "rHd", "괭", 3, - "rLr", "괵", 3, - "rLs", "괸", 3, - "rLf", "괼", 3, - "rLa", "굄", 3, - "rLq", "굅", 3, - "rLt", "굇", 3, - "rLd", "굉", 3, - "rys", "굔", 3, - "ryf", "굘", 3, - "ryq", "굡", 3, - "ryt", "굣", 3, - "rnr", "국", 3, - "rns", "군", 3, - "rne", "굳", 3, - "rnf", "굴", 3, - "rnG", "굵", 3, - "rnM", "굶", 3, - "rnF", "굻", 3, - "rna", "굼", 3, - "rnq", "굽", 3, - "rnt", "굿", 3, - "rnd", "궁", 3, - "rnw", "궂", 3, - "rJr", "궉", 3, - "rJs", "권", 3, - "rJf", "궐", 3, - "rJT", "궜", 3, - "rJd", "궝", 3, - "rNt", "궷", 3, - "rBr", "귁", 3, - "rBs", "귄", 3, - "rBf", "귈", 3, - "rBa", "귐", 3, - "rBq", "귑", 3, - "rBt", "귓", 3, - "rbs", "균", 3, - "rbf", "귤", 3, - "rmr", "극", 3, - "rms", "근", 3, - "rme", "귿", 3, - "rmf", "글", 3, - "rmG", "긁", 3, - "rma", "금", 3, - "rmq", "급", 3, - "rmt", "긋", 3, - "rmd", "긍", 3, - "rlr", "긱", 3, - "rls", "긴", 3, - "rle", "긷", 3, - "rlf", "길", 3, - "rlM", "긺", 3, - "rla", "김", 3, - "rlq", "깁", 3, - "rlt", "깃", 3, - "rld", "깅", 3, - "rlw", "깆", 3, - "rlv", "깊", 3, - "Rkr", "깍", 3, - "RkR", "깎", 3, - "Rks", "깐", 3, - "Rkf", "깔", 3, - "RkM", "깖", 3, - "Rka", "깜", 3, - "Rkq", "깝", 3, - "Rkt", "깟", 3, - "RkT", "깠", 3, - "Rkd", "깡", 3, - "Rkx", "깥", 3, - "Ror", "깩", 3, - "Ros", "깬", 3, - "Rof", "깰", 3, - "Roa", "깸", 3, - "Roq", "깹", 3, - "Rot", "깻", 3, - "RoT", "깼", 3, - "Rod", "깽", 3, - "Rir", "꺅", 3, - "Rif", "꺌", 3, - "Rjr", "꺽", 3, - "RjR", "꺾", 3, - "Rjs", "껀", 3, - "Rjf", "껄", 3, - "Rja", "껌", 3, - "Rjq", "껍", 3, - "Rjt", "껏", 3, - "RjT", "껐", 3, - "Rjd", "껑", 3, - "Rpr", "껙", 3, - "Rps", "껜", 3, - "Rpa", "껨", 3, - "Rpt", "껫", 3, - "Rpd", "껭", 3, - "Rus", "껸", 3, - "Ruf", "껼", 3, - "Rut", "꼇", 3, - "RuT", "꼈", 3, - "Rux", "꼍", 3, - "Rhr", "꼭", 3, - "Rhs", "꼰", 3, - "RhH", "꼲", 3, - "Rhf", "꼴", 3, - "Rha", "꼼", 3, - "Rhq", "꼽", 3, - "Rht", "꼿", 3, - "Rhd", "꽁", 3, - "Rhw", "꽂", 3, - "Rhc", "꽃", 3, - "RKr", "꽉", 3, - "RKf", "꽐", 3, - "RKT", "꽜", 3, - "RKd", "꽝", 3, - "RHr", "꽥", 3, - "RHd", "꽹", 3, - "RLs", "꾄", 3, - "RLf", "꾈", 3, - "RLa", "꾐", 3, - "RLq", "꾑", 3, - "RLd", "꾕", 3, - "Rnr", "꾹", 3, - "Rns", "꾼", 3, - "Rnf", "꿀", 3, - "RnF", "꿇", 3, - "Rna", "꿈", 3, - "Rnq", "꿉", 3, - "Rnt", "꿋", 3, - "Rnd", "꿍", 3, - "Rnw", "꿎", 3, - "RJf", "꿜", 3, - "RJT", "꿨", 3, - "RJd", "꿩", 3, - "RNr", "꿱", 3, - "RNs", "꿴", 3, - "RNf", "꿸", 3, - "RNa", "뀀", 3, - "RNq", "뀁", 3, - "RNT", "뀄", 3, - "RBs", "뀐", 3, - "RBf", "뀔", 3, - "RBa", "뀜", 3, - "RBq", "뀝", 3, - "Rmr", "끅", 3, - "Rms", "끈", 3, - "RmH", "끊", 3, - "Rmf", "끌", 3, - "RmM", "끎", 3, - "RmF", "끓", 3, - "Rma", "끔", 3, - "Rmq", "끕", 3, - "Rmt", "끗", 3, - "Rmd", "끙", 3, - "Rmx", "끝", 3, - "Rlr", "끽", 3, - "Rls", "낀", 3, - "Rlf", "낄", 3, - "Rla", "낌", 3, - "Rlq", "낍", 3, - "Rlt", "낏", 3, - "Rld", "낑", 3, - "skr", "낙", 3, - "skR", "낚", 3, - "sks", "난", 3, - "ske", "낟", 3, - "skf", "날", 3, - "skG", "낡", 3, - "skM", "낢", 3, - "ska", "남", 3, - "skq", "납", 3, - "skt", "낫", 3, - "skT", "났", 3, - "skd", "낭", 3, - "skw", "낮", 3, - "skc", "낯", 3, - "skx", "낱", 3, - "skg", "낳", 3, - "sor", "낵", 3, - "sos", "낸", 3, - "sof", "낼", 3, - "soa", "냄", 3, - "soq", "냅", 3, - "sot", "냇", 3, - "soT", "냈", 3, - "sod", "냉", 3, - "sir", "냑", 3, - "sis", "냔", 3, - "sif", "냘", 3, - "sia", "냠", 3, - "sid", "냥", 3, - "sjr", "넉", 3, - "sjS", "넋", 3, - "sjs", "넌", 3, - "sjf", "널", 3, - "sjM", "넒", 3, - "sjA", "넓", 3, - "sja", "넘", 3, - "sjq", "넙", 3, - "sjt", "넛", 3, - "sjT", "넜", 3, - "sjd", "넝", 3, - "sjg", "넣", 3, - "spr", "넥", 3, - "sps", "넨", 3, - "spf", "넬", 3, - "spa", "넴", 3, - "spq", "넵", 3, - "spt", "넷", 3, - "spT", "넸", 3, - "spd", "넹", 3, - "sur", "녁", 3, - "sus", "년", 3, - "suf", "녈", 3, - "sua", "념", 3, - "suq", "녑", 3, - "suT", "녔", 3, - "sud", "녕", 3, - "suz", "녘", 3, - "sPs", "녠", 3, - "shr", "녹", 3, - "shs", "논", 3, - "shf", "놀", 3, - "shM", "놂", 3, - "sha", "놈", 3, - "shq", "놉", 3, - "sht", "놋", 3, - "shd", "농", 3, - "shv", "높", 3, - "shg", "놓", 3, - "sKs", "놘", 3, - "sKf", "놜", 3, - "sKT", "놨", 3, - "sLs", "뇐", 3, - "sLf", "뇔", 3, - "sLa", "뇜", 3, - "sLq", "뇝", 3, - "sLt", "뇟", 3, - "syr", "뇩", 3, - "sys", "뇬", 3, - "syf", "뇰", 3, - "syq", "뇹", 3, - "syt", "뇻", 3, - "syd", "뇽", 3, - "snr", "눅", 3, - "sns", "눈", 3, - "sne", "눋", 3, - "snf", "눌", 3, - "sna", "눔", 3, - "snq", "눕", 3, - "snt", "눗", 3, - "snd", "눙", 3, - "sJT", "눴", 3, - "sBs", "뉜", 3, - "sBf", "뉠", 3, - "sBa", "뉨", 3, - "sBq", "뉩", 3, - "sbr", "뉵", 3, - "sbf", "뉼", 3, - "sba", "늄", 3, - "sbq", "늅", 3, - "sbd", "늉", 3, - "smr", "늑", 3, - "sms", "는", 3, - "smf", "늘", 3, - "smG", "늙", 3, - "smM", "늚", 3, - "sma", "늠", 3, - "smq", "늡", 3, - "smt", "늣", 3, - "smd", "능", 3, - "smw", "늦", 3, - "smv", "늪", 3, - "sMs", "늰", 3, - "sMf", "늴", 3, - "slr", "닉", 3, - "sls", "닌", 3, - "slf", "닐", 3, - "slM", "닒", 3, - "sla", "님", 3, - "slq", "닙", 3, - "slt", "닛", 3, - "sld", "닝", 3, - "slv", "닢", 3, - "ekr", "닥", 3, - "ekR", "닦", 3, - "eks", "단", 3, - "eke", "닫", 3, - "ekf", "달", 3, - "ekG", "닭", 3, - "ekM", "닮", 3, - "ekA", "닯", 3, - "ekF", "닳", 3, - "eka", "담", 3, - "ekq", "답", 3, - "ekt", "닷", 3, - "ekT", "닸", 3, - "ekd", "당", 3, - "ekw", "닺", 3, - "ekc", "닻", 3, - "ekg", "닿", 3, - "eor", "댁", 3, - "eos", "댄", 3, - "eof", "댈", 3, - "eoa", "댐", 3, - "eoq", "댑", 3, - "eot", "댓", 3, - "eoT", "댔", 3, - "eod", "댕", 3, - "ejr", "덕", 3, - "ejR", "덖", 3, - "ejs", "던", 3, - "eje", "덛", 3, - "ejf", "덜", 3, - "ejM", "덞", 3, - "ejA", "덟", 3, - "eja", "덤", 3, - "ejq", "덥", 3, - "ejt", "덧", 3, - "ejd", "덩", 3, - "ejc", "덫", 3, - "ejv", "덮", 3, - "epr", "덱", 3, - "eps", "덴", 3, - "epf", "델", 3, - "epa", "뎀", 3, - "epq", "뎁", 3, - "ept", "뎃", 3, - "epT", "뎄", 3, - "epd", "뎅", 3, - "eus", "뎐", 3, - "euf", "뎔", 3, - "euT", "뎠", 3, - "eud", "뎡", 3, - "ePs", "뎬", 3, - "ehr", "독", 3, - "ehs", "돈", 3, - "ehe", "돋", 3, - "ehf", "돌", 3, - "ehM", "돎", 3, - "ehN", "돐", 3, - "eha", "돔", 3, - "ehq", "돕", 3, - "eht", "돗", 3, - "ehd", "동", 3, - "ehc", "돛", 3, - "ehx", "돝", 3, - "eKs", "돤", 3, - "eKf", "돨", 3, - "eHT", "됐", 3, - "eLs", "된", 3, - "eLf", "될", 3, - "eLa", "됨", 3, - "eLq", "됩", 3, - "eLt", "됫", 3, - "enr", "둑", 3, - "ens", "둔", 3, - "enf", "둘", 3, - "ena", "둠", 3, - "enq", "둡", 3, - "ent", "둣", 3, - "end", "둥", 3, - "eJT", "뒀", 3, - "eNd", "뒝", 3, - "eBs", "뒨", 3, - "eBf", "뒬", 3, - "eBq", "뒵", 3, - "eBt", "뒷", 3, - "eBd", "뒹", 3, - "ebs", "듄", 3, - "ebf", "듈", 3, - "eba", "듐", 3, - "ebd", "듕", 3, - "emr", "득", 3, - "ems", "든", 3, - "eme", "듣", 3, - "emf", "들", 3, - "emM", "듦", 3, - "ema", "듬", 3, - "emq", "듭", 3, - "emt", "듯", 3, - "emd", "등", 3, - "elr", "딕", 3, - "els", "딘", 3, - "ele", "딛", 3, - "elf", "딜", 3, - "ela", "딤", 3, - "elq", "딥", 3, - "elt", "딧", 3, - "elT", "딨", 3, - "eld", "딩", 3, - "elw", "딪", 3, - "Ekr", "딱", 3, - "Eks", "딴", 3, - "Ekf", "딸", 3, - "Eka", "땀", 3, - "Ekq", "땁", 3, - "Ekt", "땃", 3, - "EkT", "땄", 3, - "Ekd", "땅", 3, - "Ekg", "땋", 3, - "Eor", "땍", 3, - "Eos", "땐", 3, - "Eof", "땔", 3, - "Eoa", "땜", 3, - "Eoq", "땝", 3, - "Eot", "땟", 3, - "EoT", "땠", 3, - "Eod", "땡", 3, - "Ejr", "떡", 3, - "Ejs", "떤", 3, - "Ejf", "떨", 3, - "EjM", "떪", 3, - "EjA", "떫", 3, - "Eja", "떰", 3, - "Ejq", "떱", 3, - "Ejt", "떳", 3, - "EjT", "떴", 3, - "Ejd", "떵", 3, - "Ejg", "떻", 3, - "Epr", "떽", 3, - "Eps", "뗀", 3, - "Epf", "뗄", 3, - "Epa", "뗌", 3, - "Epq", "뗍", 3, - "Ept", "뗏", 3, - "EpT", "뗐", 3, - "Epd", "뗑", 3, - "EuT", "뗬", 3, - "Ehr", "똑", 3, - "Ehs", "똔", 3, - "Ehf", "똘", 3, - "Ehd", "똥", 3, - "EKf", "똴", 3, - "ELs", "뙨", 3, - "Enr", "뚝", 3, - "Ens", "뚠", 3, - "Enf", "뚤", 3, - "EnF", "뚫", 3, - "Ena", "뚬", 3, - "End", "뚱", 3, - "EBs", "뛴", 3, - "EBf", "뛸", 3, - "EBa", "뜀", 3, - "EBq", "뜁", 3, - "EBd", "뜅", 3, - "Emr", "뜩", 3, - "Ems", "뜬", 3, - "Eme", "뜯", 3, - "Emf", "뜰", 3, - "Ema", "뜸", 3, - "Emq", "뜹", 3, - "Emt", "뜻", 3, - "EMs", "띈", 3, - "EMf", "띌", 3, - "EMa", "띔", 3, - "EMq", "띕", 3, - "Els", "띤", 3, - "Elf", "띨", 3, - "Ela", "띰", 3, - "Elq", "띱", 3, - "Elt", "띳", 3, - "Eld", "띵", 3, - "fkr", "락", 3, - "fks", "란", 3, - "fkf", "랄", 3, - "fka", "람", 3, - "fkq", "랍", 3, - "fkt", "랏", 3, - "fkT", "랐", 3, - "fkd", "랑", 3, - "fkw", "랒", 3, - "fkv", "랖", 3, - "fkg", "랗", 3, - "for", "랙", 3, - "fos", "랜", 3, - "fof", "랠", 3, - "foa", "램", 3, - "foq", "랩", 3, - "fot", "랫", 3, - "foT", "랬", 3, - "fod", "랭", 3, - "fir", "략", 3, - "fis", "랸", 3, - "fit", "럇", 3, - "fid", "량", 3, - "fjr", "럭", 3, - "fjs", "런", 3, - "fjf", "럴", 3, - "fja", "럼", 3, - "fjq", "럽", 3, - "fjt", "럿", 3, - "fjT", "렀", 3, - "fjd", "렁", 3, - "fjg", "렇", 3, - "fpr", "렉", 3, - "fps", "렌", 3, - "fpf", "렐", 3, - "fpa", "렘", 3, - "fpq", "렙", 3, - "fpt", "렛", 3, - "fpd", "렝", 3, - "fur", "력", 3, - "fus", "련", 3, - "fuf", "렬", 3, - "fua", "렴", 3, - "fuq", "렵", 3, - "fut", "렷", 3, - "fuT", "렸", 3, - "fud", "령", 3, - "fPs", "롄", 3, - "fPq", "롑", 3, - "fPt", "롓", 3, - "fhr", "록", 3, - "fhs", "론", 3, - "fhf", "롤", 3, - "fha", "롬", 3, - "fhq", "롭", 3, - "fht", "롯", 3, - "fhd", "롱", 3, - "fKs", "롼", 3, - "fKd", "뢍", 3, - "fHT", "뢨", 3, - "fLs", "뢴", 3, - "fLf", "뢸", 3, - "fLa", "룀", 3, - "fLq", "룁", 3, - "fLt", "룃", 3, - "fLd", "룅", 3, - "fys", "룐", 3, - "fyf", "룔", 3, - "fyq", "룝", 3, - "fyt", "룟", 3, - "fyd", "룡", 3, - "fnr", "룩", 3, - "fns", "룬", 3, - "fnf", "룰", 3, - "fna", "룸", 3, - "fnq", "룹", 3, - "fnt", "룻", 3, - "fnd", "룽", 3, - "fJT", "뤘", 3, - "fBr", "뤽", 3, - "fBs", "륀", 3, - "fBf", "륄", 3, - "fBa", "륌", 3, - "fBt", "륏", 3, - "fBd", "륑", 3, - "fbr", "륙", 3, - "fbs", "륜", 3, - "fbf", "률", 3, - "fba", "륨", 3, - "fbq", "륩", 3, - "fbt", "륫", 3, - "fbd", "륭", 3, - "fmr", "륵", 3, - "fms", "른", 3, - "fmf", "를", 3, - "fma", "름", 3, - "fmq", "릅", 3, - "fmt", "릇", 3, - "fmd", "릉", 3, - "fmw", "릊", 3, - "fmx", "릍", 3, - "fmv", "릎", 3, - "flr", "릭", 3, - "fls", "린", 3, - "flf", "릴", 3, - "fla", "림", 3, - "flq", "립", 3, - "flt", "릿", 3, - "fld", "링", 3, - "akr", "막", 3, - "aks", "만", 3, - "akH", "많", 3, - "ake", "맏", 3, - "akf", "말", 3, - "akG", "맑", 3, - "akM", "맒", 3, - "aka", "맘", 3, - "akq", "맙", 3, - "akt", "맛", 3, - "akd", "망", 3, - "akw", "맞", 3, - "akx", "맡", 3, - "akg", "맣", 3, - "aor", "맥", 3, - "aos", "맨", 3, - "aof", "맬", 3, - "aoa", "맴", 3, - "aoq", "맵", 3, - "aot", "맷", 3, - "aoT", "맸", 3, - "aod", "맹", 3, - "aow", "맺", 3, - "air", "먁", 3, - "aif", "먈", 3, - "aid", "먕", 3, - "ajr", "먹", 3, - "ajs", "먼", 3, - "ajf", "멀", 3, - "ajM", "멂", 3, - "aja", "멈", 3, - "ajq", "멉", 3, - "ajt", "멋", 3, - "ajd", "멍", 3, - "ajw", "멎", 3, - "ajg", "멓", 3, - "apr", "멕", 3, - "aps", "멘", 3, - "apf", "멜", 3, - "apa", "멤", 3, - "apq", "멥", 3, - "apt", "멧", 3, - "apT", "멨", 3, - "apd", "멩", 3, - "aur", "멱", 3, - "aus", "면", 3, - "auf", "멸", 3, - "aut", "몃", 3, - "auT", "몄", 3, - "aud", "명", 3, - "auc", "몇", 3, - "ahr", "목", 3, - "ahS", "몫", 3, - "ahs", "몬", 3, - "ahf", "몰", 3, - "ahM", "몲", 3, - "aha", "몸", 3, - "ahq", "몹", 3, - "aht", "못", 3, - "ahd", "몽", 3, - "aKs", "뫈", 3, - "aKT", "뫘", 3, - "aKd", "뫙", 3, - "aLs", "묀", 3, - "aLf", "묄", 3, - "aLq", "묍", 3, - "aLt", "묏", 3, - "aLd", "묑", 3, - "ays", "묜", 3, - "ayf", "묠", 3, - "ayq", "묩", 3, - "ayt", "묫", 3, - "anr", "묵", 3, - "anR", "묶", 3, - "ans", "문", 3, - "ane", "묻", 3, - "anf", "물", 3, - "anG", "묽", 3, - "anM", "묾", 3, - "ana", "뭄", 3, - "anq", "뭅", 3, - "ant", "뭇", 3, - "and", "뭉", 3, - "anx", "뭍", 3, - "ang", "뭏", 3, - "aJs", "뭔", 3, - "aJf", "뭘", 3, - "aJq", "뭡", 3, - "aJt", "뭣", 3, - "aBs", "뮌", 3, - "aBf", "뮐", 3, - "abs", "뮨", 3, - "abf", "뮬", 3, - "aba", "뮴", 3, - "abt", "뮷", 3, - "ams", "믄", 3, - "amf", "믈", 3, - "ama", "믐", 3, - "amt", "믓", 3, - "alr", "믹", 3, - "als", "민", 3, - "ale", "믿", 3, - "alf", "밀", 3, - "alM", "밂", 3, - "ala", "밈", 3, - "alq", "밉", 3, - "alt", "밋", 3, - "alT", "밌", 3, - "ald", "밍", 3, - "alc", "및", 3, - "alx", "밑", 3, - "qkr", "박", 3, - "qkR", "밖", 3, - "qkS", "밗", 3, - "qks", "반", 3, - "qke", "받", 3, - "qkf", "발", 3, - "qkG", "밝", 3, - "qkM", "밞", 3, - "qkA", "밟", 3, - "qka", "밤", 3, - "qkq", "밥", 3, - "qkt", "밧", 3, - "qkd", "방", 3, - "qkx", "밭", 3, - "qor", "백", 3, - "qos", "밴", 3, - "qof", "밸", 3, - "qoa", "뱀", 3, - "qoq", "뱁", 3, - "qot", "뱃", 3, - "qoT", "뱄", 3, - "qod", "뱅", 3, - "qox", "뱉", 3, - "qir", "뱍", 3, - "qis", "뱐", 3, - "qiq", "뱝", 3, - "qjr", "벅", 3, - "qjs", "번", 3, - "qje", "벋", 3, - "qjf", "벌", 3, - "qjM", "벎", 3, - "qja", "범", 3, - "qjq", "법", 3, - "qjt", "벗", 3, - "qjd", "벙", 3, - "qjw", "벚", 3, - "qpr", "벡", 3, - "qps", "벤", 3, - "qpe", "벧", 3, - "qpf", "벨", 3, - "qpa", "벰", 3, - "qpq", "벱", 3, - "qpt", "벳", 3, - "qpT", "벴", 3, - "qpd", "벵", 3, - "qur", "벽", 3, - "qus", "변", 3, - "quf", "별", 3, - "quq", "볍", 3, - "qut", "볏", 3, - "quT", "볐", 3, - "qud", "병", 3, - "qux", "볕", 3, - "qPs", "볜", 3, - "qhr", "복", 3, - "qhR", "볶", 3, - "qhs", "본", 3, - "qhf", "볼", 3, - "qha", "봄", 3, - "qhq", "봅", 3, - "qht", "봇", 3, - "qhd", "봉", 3, - "qKs", "봔", 3, - "qKT", "봤", 3, - "qHT", "뵀", 3, - "qLr", "뵉", 3, - "qLs", "뵌", 3, - "qLf", "뵐", 3, - "qLa", "뵘", 3, - "qLq", "뵙", 3, - "qys", "뵨", 3, - "qnr", "북", 3, - "qns", "분", 3, - "qne", "붇", 3, - "qnf", "불", 3, - "qnG", "붉", 3, - "qnM", "붊", 3, - "qna", "붐", 3, - "qnq", "붑", 3, - "qnt", "붓", 3, - "qnd", "붕", 3, - "qnx", "붙", 3, - "qnv", "붚", 3, - "qJf", "붤", 3, - "qJT", "붰", 3, - "qBr", "뷕", 3, - "qBs", "뷘", 3, - "qBf", "뷜", 3, - "qBd", "뷩", 3, - "qbs", "뷴", 3, - "qbf", "뷸", 3, - "qba", "븀", 3, - "qbt", "븃", 3, - "qbd", "븅", 3, - "qmr", "븍", 3, - "qms", "븐", 3, - "qmf", "블", 3, - "qma", "븜", 3, - "qmq", "븝", 3, - "qmt", "븟", 3, - "qlr", "빅", 3, - "qls", "빈", 3, - "qlf", "빌", 3, - "qlM", "빎", 3, - "qla", "빔", 3, - "qlq", "빕", 3, - "qlt", "빗", 3, - "qld", "빙", 3, - "qlw", "빚", 3, - "qlc", "빛", 3, - "Qkr", "빡", 3, - "Qks", "빤", 3, - "Qkf", "빨", 3, - "QkM", "빪", 3, - "Qka", "빰", 3, - "Qkq", "빱", 3, - "Qkt", "빳", 3, - "QkT", "빴", 3, - "Qkd", "빵", 3, - "Qkg", "빻", 3, - "Qor", "빽", 3, - "Qos", "뺀", 3, - "Qof", "뺄", 3, - "Qoa", "뺌", 3, - "Qoq", "뺍", 3, - "Qot", "뺏", 3, - "QoT", "뺐", 3, - "Qod", "뺑", 3, - "Qir", "뺙", 3, - "Qia", "뺨", 3, - "Qjr", "뻑", 3, - "Qjs", "뻔", 3, - "Qje", "뻗", 3, - "Qjf", "뻘", 3, - "Qja", "뻠", 3, - "Qjt", "뻣", 3, - "QjT", "뻤", 3, - "Qjd", "뻥", 3, - "Qpd", "뼁", 3, - "Qur", "뼉", 3, - "Qua", "뼘", 3, - "Quq", "뼙", 3, - "Qut", "뼛", 3, - "QuT", "뼜", 3, - "Qud", "뼝", 3, - "Qhr", "뽁", 3, - "Qhs", "뽄", 3, - "Qhf", "뽈", 3, - "Qha", "뽐", 3, - "Qhq", "뽑", 3, - "Qhd", "뽕", 3, - "Qyd", "뿅", 3, - "Qnr", "뿍", 3, - "Qns", "뿐", 3, - "Qnf", "뿔", 3, - "Qna", "뿜", 3, - "Qnt", "뿟", 3, - "Qnd", "뿡", 3, - "Qbd", "쁑", 3, - "Qms", "쁜", 3, - "Qmf", "쁠", 3, - "Qma", "쁨", 3, - "Qmq", "쁩", 3, - "Qlr", "삑", 3, - "Qls", "삔", 3, - "Qlf", "삘", 3, - "Qla", "삠", 3, - "Qlq", "삡", 3, - "Qlt", "삣", 3, - "Qld", "삥", 3, - "tkr", "삭", 3, - "tkS", "삯", 3, - "tks", "산", 3, - "tke", "삳", 3, - "tkf", "살", 3, - "tkG", "삵", 3, - "tkM", "삶", 3, - "tka", "삼", 3, - "tkq", "삽", 3, - "tkt", "삿", 3, - "tkT", "샀", 3, - "tkd", "상", 3, - "tkx", "샅", 3, - "tor", "색", 3, - "tos", "샌", 3, - "tof", "샐", 3, - "toa", "샘", 3, - "toq", "샙", 3, - "tot", "샛", 3, - "toT", "샜", 3, - "tod", "생", 3, - "tir", "샥", 3, - "tis", "샨", 3, - "tif", "샬", 3, - "tia", "샴", 3, - "tiq", "샵", 3, - "tit", "샷", 3, - "tid", "샹", 3, - "tOs", "섄", 3, - "tOf", "섈", 3, - "tOa", "섐", 3, - "tOd", "섕", 3, - "tjr", "석", 3, - "tjR", "섞", 3, - "tjS", "섟", 3, - "tjs", "선", 3, - "tje", "섣", 3, - "tjf", "설", 3, - "tjM", "섦", 3, - "tjA", "섧", 3, - "tja", "섬", 3, - "tjq", "섭", 3, - "tjt", "섯", 3, - "tjT", "섰", 3, - "tjd", "성", 3, - "tjv", "섶", 3, - "tpr", "섹", 3, - "tps", "센", 3, - "tpf", "셀", 3, - "tpa", "셈", 3, - "tpq", "셉", 3, - "tpt", "셋", 3, - "tpT", "셌", 3, - "tpd", "셍", 3, - "tur", "셕", 3, - "tus", "션", 3, - "tuf", "셜", 3, - "tua", "셤", 3, - "tuq", "셥", 3, - "tut", "셧", 3, - "tuT", "셨", 3, - "tud", "셩", 3, - "tPs", "셴", 3, - "tPf", "셸", 3, - "tPd", "솅", 3, - "thr", "속", 3, - "thR", "솎", 3, - "ths", "손", 3, - "thf", "솔", 3, - "thM", "솖", 3, - "tha", "솜", 3, - "thq", "솝", 3, - "tht", "솟", 3, - "thd", "송", 3, - "thx", "솥", 3, - "tKr", "솩", 3, - "tKs", "솬", 3, - "tKf", "솰", 3, - "tKd", "솽", 3, - "tHs", "쇈", 3, - "tHf", "쇌", 3, - "tHa", "쇔", 3, - "tHt", "쇗", 3, - "tHT", "쇘", 3, - "tLs", "쇤", 3, - "tLf", "쇨", 3, - "tLa", "쇰", 3, - "tLq", "쇱", 3, - "tLt", "쇳", 3, - "tyr", "쇽", 3, - "tys", "숀", 3, - "tyf", "숄", 3, - "tya", "숌", 3, - "tyq", "숍", 3, - "tyt", "숏", 3, - "tyd", "숑", 3, - "tnr", "숙", 3, - "tns", "순", 3, - "tne", "숟", 3, - "tnf", "술", 3, - "tna", "숨", 3, - "tnq", "숩", 3, - "tnt", "숫", 3, - "tnd", "숭", 3, - "tnc", "숯", 3, - "tnx", "숱", 3, - "tnv", "숲", 3, - "tJT", "쉈", 3, - "tNr", "쉑", 3, - "tNs", "쉔", 3, - "tNf", "쉘", 3, - "tNa", "쉠", 3, - "tNd", "쉥", 3, - "tBr", "쉭", 3, - "tBs", "쉰", 3, - "tBf", "쉴", 3, - "tBa", "쉼", 3, - "tBq", "쉽", 3, - "tBt", "쉿", 3, - "tBd", "슁", 3, - "tbr", "슉", 3, - "tbf", "슐", 3, - "tba", "슘", 3, - "tbt", "슛", 3, - "tbd", "슝", 3, - "tmr", "슥", 3, - "tms", "슨", 3, - "tmf", "슬", 3, - "tmG", "슭", 3, - "tma", "슴", 3, - "tmq", "습", 3, - "tmt", "슷", 3, - "tmd", "승", 3, - "tlr", "식", 3, - "tls", "신", 3, - "tle", "싣", 3, - "tlf", "실", 3, - "tlF", "싫", 3, - "tla", "심", 3, - "tlq", "십", 3, - "tlt", "싯", 3, - "tld", "싱", 3, - "tlv", "싶", 3, - "Tkr", "싹", 3, - "TkS", "싻", 3, - "Tks", "싼", 3, - "Tkf", "쌀", 3, - "Tka", "쌈", 3, - "Tkq", "쌉", 3, - "TkT", "쌌", 3, - "Tkd", "쌍", 3, - "Tkg", "쌓", 3, - "Tor", "쌕", 3, - "Tos", "쌘", 3, - "Tof", "쌜", 3, - "Toa", "쌤", 3, - "Toq", "쌥", 3, - "ToT", "쌨", 3, - "Tod", "쌩", 3, - "Tid", "썅", 3, - "Tjr", "썩", 3, - "Tjs", "썬", 3, - "Tjf", "썰", 3, - "TjM", "썲", 3, - "Tja", "썸", 3, - "Tjq", "썹", 3, - "TjT", "썼", 3, - "Tjd", "썽", 3, - "Tps", "쎈", 3, - "Tpf", "쎌", 3, - "TPs", "쏀", 3, - "Thr", "쏙", 3, - "Ths", "쏜", 3, - "The", "쏟", 3, - "Thf", "쏠", 3, - "ThM", "쏢", 3, - "Tha", "쏨", 3, - "Thq", "쏩", 3, - "Thd", "쏭", 3, - "TKr", "쏵", 3, - "TKs", "쏸", 3, - "TKT", "쐈", 3, - "THT", "쐤", 3, - "TLs", "쐰", 3, - "TLf", "쐴", 3, - "TLa", "쐼", 3, - "TLq", "쐽", 3, - "Tnr", "쑥", 3, - "Tns", "쑨", 3, - "Tnf", "쑬", 3, - "Tna", "쑴", 3, - "Tnq", "쑵", 3, - "Tnd", "쑹", 3, - "TJT", "쒔", 3, - "TBs", "쒼", 3, - "Tbd", "쓩", 3, - "Tmr", "쓱", 3, - "Tms", "쓴", 3, - "Tmf", "쓸", 3, - "TmM", "쓺", 3, - "TmF", "쓿", 3, - "Tma", "씀", 3, - "Tmq", "씁", 3, - "TMs", "씐", 3, - "TMf", "씔", 3, - "TMa", "씜", 3, - "Tlr", "씩", 3, - "Tls", "씬", 3, - "Tlf", "씰", 3, - "Tla", "씸", 3, - "Tlq", "씹", 3, - "Tlt", "씻", 3, - "Tld", "씽", 3, - "dkr", "악", 3, - "dks", "안", 3, - "dkJ", "앉", 3, - "dkH", "않", 3, - "dkf", "알", 3, - "dkG", "앍", 3, - "dkM", "앎", 3, - "dkF", "앓", 3, - "dka", "암", 3, - "dkq", "압", 3, - "dkt", "앗", 3, - "dkT", "았", 3, - "dkd", "앙", 3, - "dkx", "앝", 3, - "dkv", "앞", 3, - "dor", "액", 3, - "dos", "앤", 3, - "dof", "앨", 3, - "doa", "앰", 3, - "doq", "앱", 3, - "dot", "앳", 3, - "doT", "앴", 3, - "dod", "앵", 3, - "dir", "약", 3, - "dis", "얀", 3, - "dif", "얄", 3, - "diA", "얇", 3, - "dia", "얌", 3, - "diq", "얍", 3, - "dit", "얏", 3, - "did", "양", 3, - "dix", "얕", 3, - "dig", "얗", 3, - "dOs", "얜", 3, - "dOf", "얠", 3, - "dOq", "얩", 3, - "djr", "억", 3, - "djs", "언", 3, - "djJ", "얹", 3, - "dje", "얻", 3, - "djf", "얼", 3, - "djG", "얽", 3, - "djM", "얾", 3, - "dja", "엄", 3, - "djq", "업", 3, - "djC", "없", 3, - "djt", "엇", 3, - "djT", "었", 3, - "djd", "엉", 3, - "djw", "엊", 3, - "djz", "엌", 3, - "djv", "엎", 3, - "dpr", "엑", 3, - "dps", "엔", 3, - "dpf", "엘", 3, - "dpa", "엠", 3, - "dpq", "엡", 3, - "dpt", "엣", 3, - "dpd", "엥", 3, - "dur", "역", 3, - "duR", "엮", 3, - "dus", "연", 3, - "duf", "열", 3, - "duM", "엶", 3, - "duA", "엷", 3, - "dua", "염", 3, - "duq", "엽", 3, - "duC", "엾", 3, - "dut", "엿", 3, - "duT", "였", 3, - "dud", "영", 3, - "dux", "옅", 3, - "duv", "옆", 3, - "dug", "옇", 3, - "dPs", "옌", 3, - "dPf", "옐", 3, - "dPa", "옘", 3, - "dPq", "옙", 3, - "dPt", "옛", 3, - "dPT", "옜", 3, - "dhr", "옥", 3, - "dhs", "온", 3, - "dhf", "올", 3, - "dhG", "옭", 3, - "dhM", "옮", 3, - "dhN", "옰", 3, - "dhF", "옳", 3, - "dha", "옴", 3, - "dhq", "옵", 3, - "dht", "옷", 3, - "dhd", "옹", 3, - "dhc", "옻", 3, - "dKr", "왁", 3, - "dKs", "완", 3, - "dKf", "왈", 3, - "dKa", "왐", 3, - "dKq", "왑", 3, - "dKt", "왓", 3, - "dKT", "왔", 3, - "dKd", "왕", 3, - "dHr", "왝", 3, - "dHs", "왠", 3, - "dHa", "왬", 3, - "dHt", "왯", 3, - "dHd", "왱", 3, - "dLr", "왹", 3, - "dLs", "왼", 3, - "dLf", "욀", 3, - "dLa", "욈", 3, - "dLq", "욉", 3, - "dLt", "욋", 3, - "dLd", "욍", 3, - "dyr", "욕", 3, - "dys", "욘", 3, - "dyf", "욜", 3, - "dya", "욤", 3, - "dyq", "욥", 3, - "dyt", "욧", 3, - "dyd", "용", 3, - "dnr", "욱", 3, - "dns", "운", 3, - "dnf", "울", 3, - "dnG", "욹", 3, - "dnM", "욺", 3, - "dna", "움", 3, - "dnq", "웁", 3, - "dnt", "웃", 3, - "dnd", "웅", 3, - "dJr", "웍", 3, - "dJs", "원", 3, - "dJf", "월", 3, - "dJa", "웜", 3, - "dJq", "웝", 3, - "dJT", "웠", 3, - "dJd", "웡", 3, - "dNr", "웩", 3, - "dNs", "웬", 3, - "dNf", "웰", 3, - "dNa", "웸", 3, - "dNq", "웹", 3, - "dNd", "웽", 3, - "dBr", "윅", 3, - "dBs", "윈", 3, - "dBf", "윌", 3, - "dBa", "윔", 3, - "dBq", "윕", 3, - "dBt", "윗", 3, - "dBd", "윙", 3, - "dbr", "육", 3, - "dbs", "윤", 3, - "dbf", "율", 3, - "dba", "윰", 3, - "dbq", "윱", 3, - "dbt", "윳", 3, - "dbd", "융", 3, - "dbc", "윷", 3, - "dmr", "윽", 3, - "dms", "은", 3, - "dmf", "을", 3, - "dmV", "읊", 3, - "dma", "음", 3, - "dmq", "읍", 3, - "dmt", "읏", 3, - "dmd", "응", 3, - "dmw", "읒", 3, - "dmc", "읓", 3, - "dmz", "읔", 3, - "dmx", "읕", 3, - "dmv", "읖", 3, - "dmg", "읗", 3, - "dMs", "읜", 3, - "dMf", "읠", 3, - "dMa", "읨", 3, - "dMt", "읫", 3, - "dlr", "익", 3, - "dls", "인", 3, - "dlf", "일", 3, - "dlG", "읽", 3, - "dlM", "읾", 3, - "dlF", "잃", 3, - "dla", "임", 3, - "dlq", "입", 3, - "dlt", "잇", 3, - "dlT", "있", 3, - "dld", "잉", 3, - "dlw", "잊", 3, - "dlv", "잎", 3, - "wkr", "작", 3, - "wks", "잔", 3, - "wkH", "잖", 3, - "wke", "잗", 3, - "wkf", "잘", 3, - "wkM", "잚", 3, - "wka", "잠", 3, - "wkq", "잡", 3, - "wkt", "잣", 3, - "wkT", "잤", 3, - "wkd", "장", 3, - "wkw", "잦", 3, - "wor", "잭", 3, - "wos", "잰", 3, - "wof", "잴", 3, - "woa", "잼", 3, - "woq", "잽", 3, - "wot", "잿", 3, - "woT", "쟀", 3, - "wod", "쟁", 3, - "wir", "쟉", 3, - "wis", "쟌", 3, - "wiH", "쟎", 3, - "wif", "쟐", 3, - "wia", "쟘", 3, - "wid", "쟝", 3, - "wOs", "쟨", 3, - "wOf", "쟬", 3, - "wjr", "적", 3, - "wjs", "전", 3, - "wjf", "절", 3, - "wjM", "젊", 3, - "wja", "점", 3, - "wjq", "접", 3, - "wjt", "젓", 3, - "wjd", "정", 3, - "wjw", "젖", 3, - "wpr", "젝", 3, - "wps", "젠", 3, - "wpf", "젤", 3, - "wpa", "젬", 3, - "wpq", "젭", 3, - "wpt", "젯", 3, - "wpd", "젱", 3, - "wus", "젼", 3, - "wuf", "졀", 3, - "wua", "졈", 3, - "wuq", "졉", 3, - "wuT", "졌", 3, - "wud", "졍", 3, - "whr", "족", 3, - "whs", "존", 3, - "whf", "졸", 3, - "whM", "졺", 3, - "wha", "좀", 3, - "whq", "좁", 3, - "wht", "좃", 3, - "whd", "종", 3, - "whw", "좆", 3, - "whc", "좇", 3, - "whg", "좋", 3, - "wKr", "좍", 3, - "wKf", "좔", 3, - "wKq", "좝", 3, - "wKt", "좟", 3, - "wKd", "좡", 3, - "wHT", "좼", 3, - "wHd", "좽", 3, - "wLs", "죈", 3, - "wLf", "죌", 3, - "wLa", "죔", 3, - "wLq", "죕", 3, - "wLt", "죗", 3, - "wLd", "죙", 3, - "wyr", "죡", 3, - "wys", "죤", 3, - "wyd", "죵", 3, - "wnr", "죽", 3, - "wns", "준", 3, - "wnf", "줄", 3, - "wnG", "줅", 3, - "wnM", "줆", 3, - "wna", "줌", 3, - "wnq", "줍", 3, - "wnt", "줏", 3, - "wnd", "중", 3, - "wJT", "줬", 3, - "wBr", "쥑", 3, - "wBs", "쥔", 3, - "wBf", "쥘", 3, - "wBa", "쥠", 3, - "wBq", "쥡", 3, - "wBt", "쥣", 3, - "wbs", "쥰", 3, - "wbf", "쥴", 3, - "wba", "쥼", 3, - "wmr", "즉", 3, - "wms", "즌", 3, - "wmf", "즐", 3, - "wma", "즘", 3, - "wmq", "즙", 3, - "wmt", "즛", 3, - "wmd", "증", 3, - "wlr", "직", 3, - "wls", "진", 3, - "wle", "짇", 3, - "wlf", "질", 3, - "wlM", "짊", 3, - "wla", "짐", 3, - "wlq", "집", 3, - "wlt", "짓", 3, - "wld", "징", 3, - "wlw", "짖", 3, - "wlx", "짙", 3, - "wlv", "짚", 3, - "Wkr", "짝", 3, - "Wks", "짠", 3, - "WkH", "짢", 3, - "Wkf", "짤", 3, - "WkA", "짧", 3, - "Wka", "짬", 3, - "Wkq", "짭", 3, - "Wkt", "짯", 3, - "WkT", "짰", 3, - "Wkd", "짱", 3, - "Wor", "짹", 3, - "Wos", "짼", 3, - "Wof", "쨀", 3, - "Woa", "쨈", 3, - "Woq", "쨉", 3, - "Wot", "쨋", 3, - "WoT", "쨌", 3, - "Wod", "쨍", 3, - "Wis", "쨘", 3, - "Wid", "쨩", 3, - "Wjr", "쩍", 3, - "Wjs", "쩐", 3, - "Wjf", "쩔", 3, - "Wja", "쩜", 3, - "Wjq", "쩝", 3, - "Wjt", "쩟", 3, - "WjT", "쩠", 3, - "Wjd", "쩡", 3, - "Wpd", "쩽", 3, - "WuT", "쪘", 3, - "Whr", "쪽", 3, - "Whs", "쫀", 3, - "Whf", "쫄", 3, - "Wha", "쫌", 3, - "Whq", "쫍", 3, - "Wht", "쫏", 3, - "Whd", "쫑", 3, - "Whc", "쫓", 3, - "WKr", "쫙", 3, - "WKf", "쫠", 3, - "WKT", "쫬", 3, - "WHT", "쬈", 3, - "WLs", "쬔", 3, - "WLf", "쬘", 3, - "WLa", "쬠", 3, - "WLq", "쬡", 3, - "Wyd", "쭁", 3, - "Wnr", "쭉", 3, - "Wns", "쭌", 3, - "Wnf", "쭐", 3, - "Wna", "쭘", 3, - "Wnq", "쭙", 3, - "Wnd", "쭝", 3, - "WJT", "쭸", 3, - "WJd", "쭹", 3, - "Wma", "쯤", 3, - "Wmt", "쯧", 3, - "Wmd", "쯩", 3, - "Wlr", "찍", 3, - "Wls", "찐", 3, - "Wlf", "찔", 3, - "Wla", "찜", 3, - "Wlq", "찝", 3, - "Wld", "찡", 3, - "Wlw", "찢", 3, - "Wlg", "찧", 3, - "ckr", "착", 3, - "cks", "찬", 3, - "ckH", "찮", 3, - "ckf", "찰", 3, - "cka", "참", 3, - "ckq", "찹", 3, - "ckt", "찻", 3, - "ckT", "찼", 3, - "ckd", "창", 3, - "ckw", "찾", 3, - "cor", "책", 3, - "cos", "챈", 3, - "cof", "챌", 3, - "coa", "챔", 3, - "coq", "챕", 3, - "cot", "챗", 3, - "coT", "챘", 3, - "cod", "챙", 3, - "cis", "챤", 3, - "ciH", "챦", 3, - "cif", "챨", 3, - "cia", "챰", 3, - "cid", "챵", 3, - "cjr", "척", 3, - "cjs", "천", 3, - "cjf", "철", 3, - "cja", "첨", 3, - "cjq", "첩", 3, - "cjt", "첫", 3, - "cjT", "첬", 3, - "cjd", "청", 3, - "cpr", "첵", 3, - "cps", "첸", 3, - "cpf", "첼", 3, - "cpa", "쳄", 3, - "cpq", "쳅", 3, - "cpt", "쳇", 3, - "cpd", "쳉", 3, - "cus", "쳔", 3, - "cuT", "쳤", 3, - "cPs", "쳰", 3, - "cPd", "촁", 3, - "chr", "촉", 3, - "chs", "촌", 3, - "chf", "촐", 3, - "cha", "촘", 3, - "chq", "촙", 3, - "cht", "촛", 3, - "chd", "총", 3, - "cKs", "촨", 3, - "cKf", "촬", 3, - "cKd", "촹", 3, - "cLs", "쵠", 3, - "cLf", "쵤", 3, - "cLa", "쵬", 3, - "cLq", "쵭", 3, - "cLt", "쵯", 3, - "cLd", "쵱", 3, - "cya", "춈", 3, - "cnr", "축", 3, - "cns", "춘", 3, - "cnf", "출", 3, - "cna", "춤", 3, - "cnq", "춥", 3, - "cnt", "춧", 3, - "cnd", "충", 3, - "cJT", "췄", 3, - "cNs", "췐", 3, - "cBs", "췬", 3, - "cBf", "췰", 3, - "cBa", "췸", 3, - "cBq", "췹", 3, - "cBt", "췻", 3, - "cBd", "췽", 3, - "cbs", "츈", 3, - "cbf", "츌", 3, - "cba", "츔", 3, - "cbd", "츙", 3, - "cmr", "측", 3, - "cms", "츤", 3, - "cmf", "츨", 3, - "cma", "츰", 3, - "cmq", "츱", 3, - "cmt", "츳", 3, - "cmd", "층", 3, - "clr", "칙", 3, - "cls", "친", 3, - "cle", "칟", 3, - "clf", "칠", 3, - "clG", "칡", 3, - "cla", "침", 3, - "clq", "칩", 3, - "clt", "칫", 3, - "cld", "칭", 3, - "zkr", "칵", 3, - "zks", "칸", 3, - "zkf", "칼", 3, - "zka", "캄", 3, - "zkq", "캅", 3, - "zkt", "캇", 3, - "zkd", "캉", 3, - "zor", "캑", 3, - "zos", "캔", 3, - "zof", "캘", 3, - "zoa", "캠", 3, - "zoq", "캡", 3, - "zot", "캣", 3, - "zoT", "캤", 3, - "zod", "캥", 3, - "zir", "캭", 3, - "zid", "컁", 3, - "zjr", "컥", 3, - "zjs", "컨", 3, - "zje", "컫", 3, - "zjf", "컬", 3, - "zja", "컴", 3, - "zjq", "컵", 3, - "zjt", "컷", 3, - "zjT", "컸", 3, - "zjd", "컹", 3, - "zpr", "켁", 3, - "zps", "켄", 3, - "zpf", "켈", 3, - "zpa", "켐", 3, - "zpq", "켑", 3, - "zpt", "켓", 3, - "zpd", "켕", 3, - "zus", "켠", 3, - "zuf", "켤", 3, - "zua", "켬", 3, - "zuq", "켭", 3, - "zut", "켯", 3, - "zuT", "켰", 3, - "zud", "켱", 3, - "zhr", "콕", 3, - "zhs", "콘", 3, - "zhf", "콜", 3, - "zha", "콤", 3, - "zhq", "콥", 3, - "zht", "콧", 3, - "zhd", "콩", 3, - "zKr", "콱", 3, - "zKs", "콴", 3, - "zKf", "콸", 3, - "zKa", "쾀", 3, - "zKd", "쾅", 3, - "zHd", "쾡", 3, - "zLf", "쾰", 3, - "znr", "쿡", 3, - "zns", "쿤", 3, - "znf", "쿨", 3, - "zna", "쿰", 3, - "znq", "쿱", 3, - "znt", "쿳", 3, - "znd", "쿵", 3, - "zJs", "퀀", 3, - "zJf", "퀄", 3, - "zJd", "퀑", 3, - "zNd", "퀭", 3, - "zBr", "퀵", 3, - "zBs", "퀸", 3, - "zBf", "퀼", 3, - "zBa", "큄", 3, - "zBq", "큅", 3, - "zBt", "큇", 3, - "zBd", "큉", 3, - "zbs", "큔", 3, - "zbf", "큘", 3, - "zba", "큠", 3, - "zmr", "큭", 3, - "zms", "큰", 3, - "zmf", "클", 3, - "zma", "큼", 3, - "zmq", "큽", 3, - "zmd", "킁", 3, - "zlr", "킥", 3, - "zls", "킨", 3, - "zlf", "킬", 3, - "zla", "킴", 3, - "zlq", "킵", 3, - "zlt", "킷", 3, - "zld", "킹", 3, - "xkr", "탁", 3, - "xks", "탄", 3, - "xkf", "탈", 3, - "xkG", "탉", 3, - "xka", "탐", 3, - "xkq", "탑", 3, - "xkt", "탓", 3, - "xkT", "탔", 3, - "xkd", "탕", 3, - "xor", "택", 3, - "xos", "탠", 3, - "xof", "탤", 3, - "xoa", "탬", 3, - "xoq", "탭", 3, - "xot", "탯", 3, - "xoT", "탰", 3, - "xod", "탱", 3, - "xid", "턍", 3, - "xjr", "턱", 3, - "xjs", "턴", 3, - "xjf", "털", 3, - "xjM", "턺", 3, - "xja", "텀", 3, - "xjq", "텁", 3, - "xjt", "텃", 3, - "xjT", "텄", 3, - "xjd", "텅", 3, - "xpr", "텍", 3, - "xps", "텐", 3, - "xpf", "텔", 3, - "xpa", "템", 3, - "xpq", "텝", 3, - "xpt", "텟", 3, - "xpd", "텡", 3, - "xus", "텬", 3, - "xuT", "텼", 3, - "xPs", "톈", 3, - "xhr", "톡", 3, - "xhs", "톤", 3, - "xhf", "톨", 3, - "xha", "톰", 3, - "xhq", "톱", 3, - "xht", "톳", 3, - "xhd", "통", 3, - "xhv", "톺", 3, - "xKs", "퇀", 3, - "xLs", "퇸", 3, - "xLt", "툇", 3, - "xLd", "툉", 3, - "xnr", "툭", 3, - "xns", "툰", 3, - "xnf", "툴", 3, - "xna", "툼", 3, - "xnq", "툽", 3, - "xnt", "툿", 3, - "xnd", "퉁", 3, - "xJT", "퉜", 3, - "xBr", "튁", 3, - "xBs", "튄", 3, - "xBf", "튈", 3, - "xBa", "튐", 3, - "xBq", "튑", 3, - "xBd", "튕", 3, - "xbs", "튠", 3, - "xbf", "튤", 3, - "xba", "튬", 3, - "xbd", "튱", 3, - "xmr", "특", 3, - "xms", "튼", 3, - "xme", "튿", 3, - "xmf", "틀", 3, - "xmM", "틂", 3, - "xma", "틈", 3, - "xmq", "틉", 3, - "xmt", "틋", 3, - "xMs", "틘", 3, - "xMf", "틜", 3, - "xMa", "틤", 3, - "xMq", "틥", 3, - "xlr", "틱", 3, - "xls", "틴", 3, - "xlf", "틸", 3, - "xla", "팀", 3, - "xlq", "팁", 3, - "xlt", "팃", 3, - "xld", "팅", 3, - "vkr", "팍", 3, - "vkR", "팎", 3, - "vks", "판", 3, - "vkf", "팔", 3, - "vkM", "팖", 3, - "vka", "팜", 3, - "vkq", "팝", 3, - "vkt", "팟", 3, - "vkT", "팠", 3, - "vkd", "팡", 3, - "vkx", "팥", 3, - "vor", "팩", 3, - "vos", "팬", 3, - "vof", "팰", 3, - "voa", "팸", 3, - "voq", "팹", 3, - "vot", "팻", 3, - "voT", "팼", 3, - "vod", "팽", 3, - "vir", "퍅", 3, - "vjr", "퍽", 3, - "vjs", "펀", 3, - "vjf", "펄", 3, - "vja", "펌", 3, - "vjq", "펍", 3, - "vjt", "펏", 3, - "vjT", "펐", 3, - "vjd", "펑", 3, - "vpr", "펙", 3, - "vps", "펜", 3, - "vpf", "펠", 3, - "vpa", "펨", 3, - "vpq", "펩", 3, - "vpt", "펫", 3, - "vpd", "펭", 3, - "vus", "편", 3, - "vuf", "펼", 3, - "vua", "폄", 3, - "vuq", "폅", 3, - "vuT", "폈", 3, - "vud", "평", 3, - "vPf", "폘", 3, - "vPq", "폡", 3, - "vPt", "폣", 3, - "vhr", "폭", 3, - "vhs", "폰", 3, - "vhf", "폴", 3, - "vha", "폼", 3, - "vhq", "폽", 3, - "vht", "폿", 3, - "vhd", "퐁", 3, - "vKd", "퐝", 3, - "vLs", "푄", 3, - "vys", "푠", 3, - "vyf", "푤", 3, - "vyq", "푭", 3, - "vyt", "푯", 3, - "vnr", "푹", 3, - "vns", "푼", 3, - "vne", "푿", 3, - "vnf", "풀", 3, - "vnM", "풂", 3, - "vna", "품", 3, - "vnq", "풉", 3, - "vnt", "풋", 3, - "vnd", "풍", 3, - "vJd", "풩", 3, - "vBs", "퓐", 3, - "vBf", "퓔", 3, - "vBa", "퓜", 3, - "vBt", "퓟", 3, - "vbs", "퓬", 3, - "vbf", "퓰", 3, - "vba", "퓸", 3, - "vbt", "퓻", 3, - "vbd", "퓽", 3, - "vms", "픈", 3, - "vmf", "플", 3, - "vma", "픔", 3, - "vmq", "픕", 3, - "vmt", "픗", 3, - "vlr", "픽", 3, - "vls", "핀", 3, - "vlf", "필", 3, - "vla", "핌", 3, - "vlq", "핍", 3, - "vlt", "핏", 3, - "vld", "핑", 3, - "gkr", "학", 3, - "gks", "한", 3, - "gkf", "할", 3, - "gkB", "핥", 3, - "gka", "함", 3, - "gkq", "합", 3, - "gkt", "핫", 3, - "gkd", "항", 3, - "gor", "핵", 3, - "gos", "핸", 3, - "gof", "핼", 3, - "goa", "햄", 3, - "goq", "햅", 3, - "got", "햇", 3, - "goT", "했", 3, - "god", "행", 3, - "gid", "향", 3, - "gjr", "헉", 3, - "gjs", "헌", 3, - "gjf", "헐", 3, - "gjM", "헒", 3, - "gja", "험", 3, - "gjq", "헙", 3, - "gjt", "헛", 3, - "gjd", "헝", 3, - "gpr", "헥", 3, - "gps", "헨", 3, - "gpf", "헬", 3, - "gpa", "헴", 3, - "gpq", "헵", 3, - "gpt", "헷", 3, - "gpd", "헹", 3, - "gur", "혁", 3, - "gus", "현", 3, - "guf", "혈", 3, - "gua", "혐", 3, - "guq", "협", 3, - "gut", "혓", 3, - "guT", "혔", 3, - "gud", "형", 3, - "gPs", "혠", 3, - "gPf", "혤", 3, - "gPq", "혭", 3, - "ghr", "혹", 3, - "ghs", "혼", 3, - "ghf", "홀", 3, - "ghB", "홅", 3, - "gha", "홈", 3, - "ghq", "홉", 3, - "ght", "홋", 3, - "ghd", "홍", 3, - "ghx", "홑", 3, - "gKr", "확", 3, - "gKs", "환", 3, - "gKf", "활", 3, - "gKt", "홧", 3, - "gKd", "황", 3, - "gHr", "홱", 3, - "gHs", "홴", 3, - "gHt", "횃", 3, - "gHd", "횅", 3, - "gLr", "획", 3, - "gLs", "횐", 3, - "gLf", "횔", 3, - "gLq", "횝", 3, - "gLt", "횟", 3, - "gLd", "횡", 3, - "gys", "횬", 3, - "gyf", "횰", 3, - "gyq", "횹", 3, - "gyt", "횻", 3, - "gnr", "훅", 3, - "gns", "훈", 3, - "gnf", "훌", 3, - "gnB", "훑", 3, - "gna", "훔", 3, - "gnt", "훗", 3, - "gnd", "훙", 3, - "gJs", "훤", 3, - "gJf", "훨", 3, - "gJa", "훰", 3, - "gJd", "훵", 3, - "gNr", "훽", 3, - "gNs", "휀", 3, - "gNf", "휄", 3, - "gNd", "휑", 3, - "gBr", "휙", 3, - "gBs", "휜", 3, - "gBf", "휠", 3, - "gBa", "휨", 3, - "gBq", "휩", 3, - "gBt", "휫", 3, - "gBd", "휭", 3, - "gbr", "휵", 3, - "gbs", "휸", 3, - "gbf", "휼", 3, - "gba", "흄", 3, - "gbt", "흇", 3, - "gbd", "흉", 3, - "gmr", "흑", 3, - "gms", "흔", 3, - "gmH", "흖", 3, - "gme", "흗", 3, - "gmf", "흘", 3, - "gmG", "흙", 3, - "gma", "흠", 3, - "gmq", "흡", 3, - "gmt", "흣", 3, - "gmd", "흥", 3, - "gmx", "흩", 3, - "gMs", "흰", 3, - "gMf", "흴", 3, - "gMa", "흼", 3, - "gMq", "흽", 3, - "gMd", "힁", 3, - "glr", "힉", 3, - "gls", "힌", 3, - "glf", "힐", 3, - "gla", "힘", 3, - "glq", "힙", 3, - "glt", "힛", 3, - "gld", "힝", 3, +Hmap *hangul; +Map mhangul[] = { + "A", "A", 0, + "B", "ㅟ", 0, + "C", "ㅊ", 0, + "E", "ㄸ", 0, + "F", "F", 0, + "G", "G", 0, + "H", "ㅙ", 0, + "J", "ㅝ", 0, + "K", "ㅘ", 0, + "L", "ㅚ", 0, + "M", "ㅢ", 0, + "N", "ㅞ", 0, + "O", "ㅒ", 0, + "P", "ㅖ", 0, + "Q", "ㅃ", 0, + "R", "ㄲ", 0, + "S", "S", 0, + "T", "ㅆ", 0, + "V", "V", 0, + "W", "ㅉ", 0, + "a", "ㅁ", 0, + "b", "ㅠ", 0, + "c", "c", 0, + "d", "ㅇ", 0, + "e", "ㄷ", 0, + "f", "ㄹ", 0, + "g", "ㅎ", 0, + "h", "ㅗ", 0, + "i", "ㅑ", 0, + "j", "ㅓ", 0, + "k", "ㅏ", 0, + "l", "ㅣ", 0, + "m", "ㅡ", 0, + "n", "ㅜ", 0, + "o", "ㅐ", 0, + "p", "ㅔ", 0, + "q", "ㅂ", 0, + "r", "ㄱ", 0, + "s", "ㄴ", 0, + "t", "t", 0, + "u", "ㅕ", 0, + "v", "ㅍ", 0, + "w", "ㅈ", 0, + "x", "ㅌ", 0, + "y", "ㅛ", 0, + "z", "ㅋ", 0, + "rk", "가", 0, + "ro", "개", 0, + "ri", "갸", 0, + "rO", "걔", 0, + "rj", "거", 0, + "rp", "게", 0, + "ru", "겨", 0, + "rP", "계", 0, + "rh", "고", 0, + "rK", "과", 0, + "rH", "괘", 0, + "rL", "괴", 0, + "ry", "교", 0, + "rn", "구", 0, + "rJ", "궈", 0, + "rN", "궤", 0, + "rB", "귀", 0, + "rb", "규", 0, + "rm", "그", 0, + "rM", "긔", 0, + "rl", "기", 0, + "Rk", "까", 0, + "Ro", "깨", 0, + "Ri", "꺄", 0, + "Rj", "꺼", 0, + "Rp", "께", 0, + "Ru", "껴", 0, + "RP", "꼐", 0, + "Rh", "꼬", 0, + "RK", "꽈", 0, + "RH", "꽤", 0, + "RL", "꾀", 0, + "Ry", "꾜", 0, + "Rn", "꾸", 0, + "RJ", "꿔", 0, + "RN", "꿰", 0, + "RB", "뀌", 0, + "Rb", "뀨", 0, + "Rm", "끄", 0, + "Rl", "끼", 0, + "sk", "나", 0, + "so", "내", 0, + "si", "냐", 0, + "sj", "너", 0, + "sp", "네", 0, + "su", "녀", 0, + "sP", "녜", 0, + "sh", "노", 0, + "sK", "놔", 0, + "sL", "뇌", 0, + "sy", "뇨", 0, + "sn", "누", 0, + "sJ", "눠", 0, + "sN", "눼", 0, + "sB", "뉘", 0, + "sb", "뉴", 0, + "sm", "느", 0, + "sM", "늬", 0, + "sl", "니", 0, + "ek", "다", 0, + "eo", "대", 0, + "ei", "댜", 0, + "ej", "더", 0, + "ep", "데", 0, + "eu", "뎌", 0, + "eP", "뎨", 0, + "eh", "도", 0, + "eK", "돠", 0, + "eH", "돼", 0, + "eL", "되", 0, + "ey", "됴", 0, + "en", "두", 0, + "eJ", "둬", 0, + "eN", "뒈", 0, + "eB", "뒤", 0, + "eb", "듀", 0, + "em", "드", 0, + "eM", "듸", 0, + "el", "디", 0, + "Ek", "따", 0, + "Eo", "때", 0, + "Ej", "떠", 0, + "Ep", "떼", 0, + "Eu", "뗘", 0, + "Eh", "또", 0, + "EK", "똬", 0, + "EH", "뙈", 0, + "EL", "뙤", 0, + "En", "뚜", 0, + "EN", "뛔", 0, + "EB", "뛰", 0, + "Em", "뜨", 0, + "EM", "띄", 0, + "El", "띠", 0, + "fk", "라", 0, + "fo", "래", 0, + "fi", "랴", 0, + "fj", "러", 0, + "fp", "레", 0, + "fu", "려", 0, + "fP", "례", 0, + "fh", "로", 0, + "fK", "롸", 0, + "fL", "뢰", 0, + "fy", "료", 0, + "fn", "루", 0, + "fJ", "뤄", 0, + "fN", "뤠", 0, + "fB", "뤼", 0, + "fb", "류", 0, + "fm", "르", 0, + "fl", "리", 0, + "ak", "마", 0, + "ao", "매", 0, + "ai", "먀", 0, + "aj", "머", 0, + "ap", "메", 0, + "au", "며", 0, + "aP", "몌", 0, + "ah", "모", 0, + "aK", "뫄", 0, + "aL", "뫼", 0, + "ay", "묘", 0, + "an", "무", 0, + "aJ", "뭐", 0, + "aN", "뭬", 0, + "aB", "뮈", 0, + "ab", "뮤", 0, + "am", "므", 0, + "al", "미", 0, + "qk", "바", 0, + "qo", "배", 0, + "qi", "뱌", 0, + "qj", "버", 0, + "qp", "베", 0, + "qu", "벼", 0, + "qP", "볘", 0, + "qh", "보", 0, + "qK", "봐", 0, + "qH", "봬", 0, + "qL", "뵈", 0, + "qy", "뵤", 0, + "qn", "부", 0, + "qJ", "붜", 0, + "qN", "붸", 0, + "qB", "뷔", 0, + "qb", "뷰", 0, + "qm", "브", 0, + "ql", "비", 0, + "Qk", "빠", 0, + "Qo", "빼", 0, + "Qi", "뺘", 0, + "Qj", "뻐", 0, + "Qp", "뻬", 0, + "Qu", "뼈", 0, + "Qh", "뽀", 0, + "QL", "뾔", 0, + "Qy", "뾰", 0, + "Qn", "뿌", 0, + "Qb", "쀼", 0, + "Qm", "쁘", 0, + "Ql", "삐", 0, + "tk", "사", 0, + "to", "새", 0, + "ti", "샤", 0, + "tO", "섀", 0, + "tj", "서", 0, + "tp", "세", 0, + "tu", "셔", 0, + "tP", "셰", 0, + "th", "소", 0, + "tK", "솨", 0, + "tH", "쇄", 0, + "tL", "쇠", 0, + "ty", "쇼", 0, + "tn", "수", 0, + "tJ", "숴", 0, + "tN", "쉐", 0, + "tB", "쉬", 0, + "tb", "슈", 0, + "tm", "스", 0, + "tl", "시", 0, + "Tk", "싸", 0, + "To", "쌔", 0, + "Tj", "써", 0, + "Tp", "쎄", 0, + "Th", "쏘", 0, + "TK", "쏴", 0, + "TH", "쐐", 0, + "TL", "쐬", 0, + "Ty", "쑈", 0, + "Tn", "쑤", 0, + "TJ", "쒀", 0, + "TN", "쒜", 0, + "TB", "쒸", 0, + "Tm", "쓰", 0, + "TM", "씌", 0, + "Tl", "씨", 0, + "dk", "아", 0, + "do", "애", 0, + "di", "야", 0, + "dO", "얘", 0, + "dj", "어", 0, + "dp", "에", 0, + "du", "여", 0, + "dP", "예", 0, + "dh", "오", 0, + "dK", "와", 0, + "dH", "왜", 0, + "dL", "외", 0, + "dy", "요", 0, + "dn", "우", 0, + "dJ", "워", 0, + "dN", "웨", 0, + "dB", "위", 0, + "db", "유", 0, + "dm", "으", 0, + "dM", "의", 0, + "dl", "이", 0, + "wk", "자", 0, + "wo", "재", 0, + "wi", "쟈", 0, + "wO", "쟤", 0, + "wj", "저", 0, + "wp", "제", 0, + "wu", "져", 0, + "wP", "졔", 0, + "wh", "조", 0, + "wK", "좌", 0, + "wH", "좨", 0, + "wL", "죄", 0, + "wy", "죠", 0, + "wn", "주", 0, + "wJ", "줘", 0, + "wN", "줴", 0, + "wB", "쥐", 0, + "wb", "쥬", 0, + "wm", "즈", 0, + "wl", "지", 0, + "Wk", "짜", 0, + "Wo", "째", 0, + "Wi", "쨔", 0, + "Wj", "쩌", 0, + "Wp", "쩨", 0, + "Wu", "쪄", 0, + "Wh", "쪼", 0, + "WK", "쫘", 0, + "WH", "쫴", 0, + "WL", "쬐", 0, + "Wn", "쭈", 0, + "WJ", "쭤", 0, + "WB", "쮜", 0, + "Wb", "쮸", 0, + "Wm", "쯔", 0, + "Wl", "찌", 0, + "ck", "차", 0, + "co", "채", 0, + "ci", "챠", 0, + "cj", "처", 0, + "cp", "체", 0, + "cu", "쳐", 0, + "cP", "쳬", 0, + "ch", "초", 0, + "cK", "촤", 0, + "cL", "최", 0, + "cy", "쵸", 0, + "cn", "추", 0, + "cJ", "춰", 0, + "cN", "췌", 0, + "cB", "취", 0, + "cb", "츄", 0, + "cm", "츠", 0, + "cl", "치", 0, + "zk", "카", 0, + "zo", "캐", 0, + "zi", "캬", 0, + "zj", "커", 0, + "zp", "케", 0, + "zu", "켜", 0, + "zP", "켸", 0, + "zh", "코", 0, + "zK", "콰", 0, + "zH", "쾌", 0, + "zL", "쾨", 0, + "zy", "쿄", 0, + "zn", "쿠", 0, + "zJ", "쿼", 0, + "zN", "퀘", 0, + "zB", "퀴", 0, + "zb", "큐", 0, + "zm", "크", 0, + "zl", "키", 0, + "xk", "타", 0, + "xo", "태", 0, + "xi", "탸", 0, + "xj", "터", 0, + "xp", "테", 0, + "xu", "텨", 0, + "xP", "톄", 0, + "xh", "토", 0, + "xK", "톼", 0, + "xH", "퇘", 0, + "xL", "퇴", 0, + "xy", "툐", 0, + "xn", "투", 0, + "xJ", "퉈", 0, + "xN", "퉤", 0, + "xB", "튀", 0, + "xb", "튜", 0, + "xm", "트", 0, + "xM", "틔", 0, + "xl", "티", 0, + "vk", "파", 0, + "vo", "패", 0, + "vi", "퍄", 0, + "vj", "퍼", 0, + "vp", "페", 0, + "vu", "펴", 0, + "vP", "폐", 0, + "vh", "포", 0, + "vK", "퐈", 0, + "vL", "푀", 0, + "vy", "표", 0, + "vn", "푸", 0, + "vJ", "풔", 0, + "vB", "퓌", 0, + "vb", "퓨", 0, + "vm", "프", 0, + "vl", "피", 0, + "gk", "하", 0, + "go", "해", 0, + "gi", "햐", 0, + "gj", "허", 0, + "gp", "헤", 0, + "gu", "혀", 0, + "gP", "혜", 0, + "gh", "호", 0, + "gK", "화", 0, + "gH", "홰", 0, + "gL", "회", 0, + "gy", "효", 0, + "gn", "후", 0, + "gJ", "훠", 0, + "gN", "훼", 0, + "gB", "휘", 0, + "gb", "휴", 0, + "gm", "흐", 0, + "gM", "희", 0, + "gl", "히", 0, + "rkr", "각", 0, + "rks", "간", 0, + "rke", "갇", 0, + "rkf", "갈", 0, + "rkG", "갉", 0, + "rkM", "갊", 0, + "rka", "감", 0, + "rkq", "갑", 0, + "rkC", "값", 0, + "rkt", "갓", 0, + "rkT", "갔", 0, + "rkd", "강", 0, + "rkw", "갖", 0, + "rkc", "갗", 0, + "rkx", "같", 0, + "rkv", "갚", 0, + "rkg", "갛", 0, + "ror", "객", 0, + "ros", "갠", 0, + "rof", "갤", 0, + "roa", "갬", 0, + "roq", "갭", 0, + "rot", "갯", 0, + "roT", "갰", 0, + "rod", "갱", 0, + "rir", "갹", 0, + "ris", "갼", 0, + "rif", "걀", 0, + "rit", "걋", 0, + "rid", "걍", 0, + "rOs", "걘", 0, + "rOf", "걜", 0, + "rjr", "걱", 0, + "rjs", "건", 0, + "rje", "걷", 0, + "rjf", "걸", 0, + "rjM", "걺", 0, + "rja", "검", 0, + "rjq", "겁", 0, + "rjt", "것", 0, + "rjT", "겄", 0, + "rjd", "겅", 0, + "rjw", "겆", 0, + "rjx", "겉", 0, + "rjv", "겊", 0, + "rjg", "겋", 0, + "rps", "겐", 0, + "rpf", "겔", 0, + "rpa", "겜", 0, + "rpq", "겝", 0, + "rpt", "겟", 0, + "rpT", "겠", 0, + "rpd", "겡", 0, + "rur", "격", 0, + "ruR", "겪", 0, + "rus", "견", 0, + "rue", "겯", 0, + "ruf", "결", 0, + "rua", "겸", 0, + "ruq", "겹", 0, + "rut", "겻", 0, + "ruT", "겼", 0, + "rud", "경", 0, + "rux", "곁", 0, + "rPs", "곈", 0, + "rPf", "곌", 0, + "rPq", "곕", 0, + "rPt", "곗", 0, + "rhr", "곡", 0, + "rhs", "곤", 0, + "rhe", "곧", 0, + "rhf", "골", 0, + "rhM", "곪", 0, + "rhN", "곬", 0, + "rhF", "곯", 0, + "rha", "곰", 0, + "rhq", "곱", 0, + "rht", "곳", 0, + "rhd", "공", 0, + "rhw", "곶", 0, + "rKr", "곽", 0, + "rKs", "관", 0, + "rKf", "괄", 0, + "rKM", "괆", 0, + "rKa", "괌", 0, + "rKq", "괍", 0, + "rKt", "괏", 0, + "rKd", "광", 0, + "rHs", "괜", 0, + "rHf", "괠", 0, + "rHq", "괩", 0, + "rHT", "괬", 0, + "rHd", "괭", 0, + "rLr", "괵", 0, + "rLs", "괸", 0, + "rLf", "괼", 0, + "rLa", "굄", 0, + "rLq", "굅", 0, + "rLt", "굇", 0, + "rLd", "굉", 0, + "rys", "굔", 0, + "ryf", "굘", 0, + "ryq", "굡", 0, + "ryt", "굣", 0, + "rnr", "국", 0, + "rns", "군", 0, + "rne", "굳", 0, + "rnf", "굴", 0, + "rnG", "굵", 0, + "rnM", "굶", 0, + "rnF", "굻", 0, + "rna", "굼", 0, + "rnq", "굽", 0, + "rnt", "굿", 0, + "rnd", "궁", 0, + "rnw", "궂", 0, + "rJr", "궉", 0, + "rJs", "권", 0, + "rJf", "궐", 0, + "rJT", "궜", 0, + "rJd", "궝", 0, + "rNt", "궷", 0, + "rBr", "귁", 0, + "rBs", "귄", 0, + "rBf", "귈", 0, + "rBa", "귐", 0, + "rBq", "귑", 0, + "rBt", "귓", 0, + "rbs", "균", 0, + "rbf", "귤", 0, + "rmr", "극", 0, + "rms", "근", 0, + "rme", "귿", 0, + "rmf", "글", 0, + "rmG", "긁", 0, + "rma", "금", 0, + "rmq", "급", 0, + "rmt", "긋", 0, + "rmd", "긍", 0, + "rlr", "긱", 0, + "rls", "긴", 0, + "rle", "긷", 0, + "rlf", "길", 0, + "rlM", "긺", 0, + "rla", "김", 0, + "rlq", "깁", 0, + "rlt", "깃", 0, + "rld", "깅", 0, + "rlw", "깆", 0, + "rlv", "깊", 0, + "Rkr", "깍", 0, + "RkR", "깎", 0, + "Rks", "깐", 0, + "Rkf", "깔", 0, + "RkM", "깖", 0, + "Rka", "깜", 0, + "Rkq", "깝", 0, + "Rkt", "깟", 0, + "RkT", "깠", 0, + "Rkd", "깡", 0, + "Rkx", "깥", 0, + "Ror", "깩", 0, + "Ros", "깬", 0, + "Rof", "깰", 0, + "Roa", "깸", 0, + "Roq", "깹", 0, + "Rot", "깻", 0, + "RoT", "깼", 0, + "Rod", "깽", 0, + "Rir", "꺅", 0, + "Rif", "꺌", 0, + "Rjr", "꺽", 0, + "RjR", "꺾", 0, + "Rjs", "껀", 0, + "Rjf", "껄", 0, + "Rja", "껌", 0, + "Rjq", "껍", 0, + "Rjt", "껏", 0, + "RjT", "껐", 0, + "Rjd", "껑", 0, + "Rpr", "껙", 0, + "Rps", "껜", 0, + "Rpa", "껨", 0, + "Rpt", "껫", 0, + "Rpd", "껭", 0, + "Rus", "껸", 0, + "Ruf", "껼", 0, + "Rut", "꼇", 0, + "RuT", "꼈", 0, + "Rux", "꼍", 0, + "Rhr", "꼭", 0, + "Rhs", "꼰", 0, + "RhH", "꼲", 0, + "Rhf", "꼴", 0, + "Rha", "꼼", 0, + "Rhq", "꼽", 0, + "Rht", "꼿", 0, + "Rhd", "꽁", 0, + "Rhw", "꽂", 0, + "Rhc", "꽃", 0, + "RKr", "꽉", 0, + "RKf", "꽐", 0, + "RKT", "꽜", 0, + "RKd", "꽝", 0, + "RHr", "꽥", 0, + "RHd", "꽹", 0, + "RLs", "꾄", 0, + "RLf", "꾈", 0, + "RLa", "꾐", 0, + "RLq", "꾑", 0, + "RLd", "꾕", 0, + "Rnr", "꾹", 0, + "Rns", "꾼", 0, + "Rnf", "꿀", 0, + "RnF", "꿇", 0, + "Rna", "꿈", 0, + "Rnq", "꿉", 0, + "Rnt", "꿋", 0, + "Rnd", "꿍", 0, + "Rnw", "꿎", 0, + "RJf", "꿜", 0, + "RJT", "꿨", 0, + "RJd", "꿩", 0, + "RNr", "꿱", 0, + "RNs", "꿴", 0, + "RNf", "꿸", 0, + "RNa", "뀀", 0, + "RNq", "뀁", 0, + "RNT", "뀄", 0, + "RBs", "뀐", 0, + "RBf", "뀔", 0, + "RBa", "뀜", 0, + "RBq", "뀝", 0, + "Rmr", "끅", 0, + "Rms", "끈", 0, + "RmH", "끊", 0, + "Rmf", "끌", 0, + "RmM", "끎", 0, + "RmF", "끓", 0, + "Rma", "끔", 0, + "Rmq", "끕", 0, + "Rmt", "끗", 0, + "Rmd", "끙", 0, + "Rmx", "끝", 0, + "Rlr", "끽", 0, + "Rls", "낀", 0, + "Rlf", "낄", 0, + "Rla", "낌", 0, + "Rlq", "낍", 0, + "Rlt", "낏", 0, + "Rld", "낑", 0, + "skr", "낙", 0, + "skR", "낚", 0, + "sks", "난", 0, + "ske", "낟", 0, + "skf", "날", 0, + "skG", "낡", 0, + "skM", "낢", 0, + "ska", "남", 0, + "skq", "납", 0, + "skt", "낫", 0, + "skT", "났", 0, + "skd", "낭", 0, + "skw", "낮", 0, + "skc", "낯", 0, + "skx", "낱", 0, + "skg", "낳", 0, + "sor", "낵", 0, + "sos", "낸", 0, + "sof", "낼", 0, + "soa", "냄", 0, + "soq", "냅", 0, + "sot", "냇", 0, + "soT", "냈", 0, + "sod", "냉", 0, + "sir", "냑", 0, + "sis", "냔", 0, + "sif", "냘", 0, + "sia", "냠", 0, + "sid", "냥", 0, + "sjr", "넉", 0, + "sjS", "넋", 0, + "sjs", "넌", 0, + "sjf", "널", 0, + "sjM", "넒", 0, + "sjA", "넓", 0, + "sja", "넘", 0, + "sjq", "넙", 0, + "sjt", "넛", 0, + "sjT", "넜", 0, + "sjd", "넝", 0, + "sjg", "넣", 0, + "spr", "넥", 0, + "sps", "넨", 0, + "spf", "넬", 0, + "spa", "넴", 0, + "spq", "넵", 0, + "spt", "넷", 0, + "spT", "넸", 0, + "spd", "넹", 0, + "sur", "녁", 0, + "sus", "년", 0, + "suf", "녈", 0, + "sua", "념", 0, + "suq", "녑", 0, + "suT", "녔", 0, + "sud", "녕", 0, + "suz", "녘", 0, + "sPs", "녠", 0, + "shr", "녹", 0, + "shs", "논", 0, + "shf", "놀", 0, + "shM", "놂", 0, + "sha", "놈", 0, + "shq", "놉", 0, + "sht", "놋", 0, + "shd", "농", 0, + "shv", "높", 0, + "shg", "놓", 0, + "sKs", "놘", 0, + "sKf", "놜", 0, + "sKT", "놨", 0, + "sLs", "뇐", 0, + "sLf", "뇔", 0, + "sLa", "뇜", 0, + "sLq", "뇝", 0, + "sLt", "뇟", 0, + "syr", "뇩", 0, + "sys", "뇬", 0, + "syf", "뇰", 0, + "syq", "뇹", 0, + "syt", "뇻", 0, + "syd", "뇽", 0, + "snr", "눅", 0, + "sns", "눈", 0, + "sne", "눋", 0, + "snf", "눌", 0, + "sna", "눔", 0, + "snq", "눕", 0, + "snt", "눗", 0, + "snd", "눙", 0, + "sJT", "눴", 0, + "sBs", "뉜", 0, + "sBf", "뉠", 0, + "sBa", "뉨", 0, + "sBq", "뉩", 0, + "sbr", "뉵", 0, + "sbf", "뉼", 0, + "sba", "늄", 0, + "sbq", "늅", 0, + "sbd", "늉", 0, + "smr", "늑", 0, + "sms", "는", 0, + "smf", "늘", 0, + "smG", "늙", 0, + "smM", "늚", 0, + "sma", "늠", 0, + "smq", "늡", 0, + "smt", "늣", 0, + "smd", "능", 0, + "smw", "늦", 0, + "smv", "늪", 0, + "sMs", "늰", 0, + "sMf", "늴", 0, + "slr", "닉", 0, + "sls", "닌", 0, + "slf", "닐", 0, + "slM", "닒", 0, + "sla", "님", 0, + "slq", "닙", 0, + "slt", "닛", 0, + "sld", "닝", 0, + "slv", "닢", 0, + "ekr", "닥", 0, + "ekR", "닦", 0, + "eks", "단", 0, + "eke", "닫", 0, + "ekf", "달", 0, + "ekG", "닭", 0, + "ekM", "닮", 0, + "ekA", "닯", 0, + "ekF", "닳", 0, + "eka", "담", 0, + "ekq", "답", 0, + "ekt", "닷", 0, + "ekT", "닸", 0, + "ekd", "당", 0, + "ekw", "닺", 0, + "ekc", "닻", 0, + "ekg", "닿", 0, + "eor", "댁", 0, + "eos", "댄", 0, + "eof", "댈", 0, + "eoa", "댐", 0, + "eoq", "댑", 0, + "eot", "댓", 0, + "eoT", "댔", 0, + "eod", "댕", 0, + "ejr", "덕", 0, + "ejR", "덖", 0, + "ejs", "던", 0, + "eje", "덛", 0, + "ejf", "덜", 0, + "ejM", "덞", 0, + "ejA", "덟", 0, + "eja", "덤", 0, + "ejq", "덥", 0, + "ejt", "덧", 0, + "ejd", "덩", 0, + "ejc", "덫", 0, + "ejv", "덮", 0, + "epr", "덱", 0, + "eps", "덴", 0, + "epf", "델", 0, + "epa", "뎀", 0, + "epq", "뎁", 0, + "ept", "뎃", 0, + "epT", "뎄", 0, + "epd", "뎅", 0, + "eus", "뎐", 0, + "euf", "뎔", 0, + "euT", "뎠", 0, + "eud", "뎡", 0, + "ePs", "뎬", 0, + "ehr", "독", 0, + "ehs", "돈", 0, + "ehe", "돋", 0, + "ehf", "돌", 0, + "ehM", "돎", 0, + "ehN", "돐", 0, + "eha", "돔", 0, + "ehq", "돕", 0, + "eht", "돗", 0, + "ehd", "동", 0, + "ehc", "돛", 0, + "ehx", "돝", 0, + "eKs", "돤", 0, + "eKf", "돨", 0, + "eHT", "됐", 0, + "eLs", "된", 0, + "eLf", "될", 0, + "eLa", "됨", 0, + "eLq", "됩", 0, + "eLt", "됫", 0, + "enr", "둑", 0, + "ens", "둔", 0, + "enf", "둘", 0, + "ena", "둠", 0, + "enq", "둡", 0, + "ent", "둣", 0, + "end", "둥", 0, + "eJT", "뒀", 0, + "eNd", "뒝", 0, + "eBs", "뒨", 0, + "eBf", "뒬", 0, + "eBq", "뒵", 0, + "eBt", "뒷", 0, + "eBd", "뒹", 0, + "ebs", "듄", 0, + "ebf", "듈", 0, + "eba", "듐", 0, + "ebd", "듕", 0, + "emr", "득", 0, + "ems", "든", 0, + "eme", "듣", 0, + "emf", "들", 0, + "emM", "듦", 0, + "ema", "듬", 0, + "emq", "듭", 0, + "emt", "듯", 0, + "emd", "등", 0, + "elr", "딕", 0, + "els", "딘", 0, + "ele", "딛", 0, + "elf", "딜", 0, + "ela", "딤", 0, + "elq", "딥", 0, + "elt", "딧", 0, + "elT", "딨", 0, + "eld", "딩", 0, + "elw", "딪", 0, + "Ekr", "딱", 0, + "Eks", "딴", 0, + "Ekf", "딸", 0, + "Eka", "땀", 0, + "Ekq", "땁", 0, + "Ekt", "땃", 0, + "EkT", "땄", 0, + "Ekd", "땅", 0, + "Ekg", "땋", 0, + "Eor", "땍", 0, + "Eos", "땐", 0, + "Eof", "땔", 0, + "Eoa", "땜", 0, + "Eoq", "땝", 0, + "Eot", "땟", 0, + "EoT", "땠", 0, + "Eod", "땡", 0, + "Ejr", "떡", 0, + "Ejs", "떤", 0, + "Ejf", "떨", 0, + "EjM", "떪", 0, + "EjA", "떫", 0, + "Eja", "떰", 0, + "Ejq", "떱", 0, + "Ejt", "떳", 0, + "EjT", "떴", 0, + "Ejd", "떵", 0, + "Ejg", "떻", 0, + "Epr", "떽", 0, + "Eps", "뗀", 0, + "Epf", "뗄", 0, + "Epa", "뗌", 0, + "Epq", "뗍", 0, + "Ept", "뗏", 0, + "EpT", "뗐", 0, + "Epd", "뗑", 0, + "EuT", "뗬", 0, + "Ehr", "똑", 0, + "Ehs", "똔", 0, + "Ehf", "똘", 0, + "Ehd", "똥", 0, + "EKf", "똴", 0, + "ELs", "뙨", 0, + "Enr", "뚝", 0, + "Ens", "뚠", 0, + "Enf", "뚤", 0, + "EnF", "뚫", 0, + "Ena", "뚬", 0, + "End", "뚱", 0, + "EBs", "뛴", 0, + "EBf", "뛸", 0, + "EBa", "뜀", 0, + "EBq", "뜁", 0, + "EBd", "뜅", 0, + "Emr", "뜩", 0, + "Ems", "뜬", 0, + "Eme", "뜯", 0, + "Emf", "뜰", 0, + "Ema", "뜸", 0, + "Emq", "뜹", 0, + "Emt", "뜻", 0, + "EMs", "띈", 0, + "EMf", "띌", 0, + "EMa", "띔", 0, + "EMq", "띕", 0, + "Els", "띤", 0, + "Elf", "띨", 0, + "Ela", "띰", 0, + "Elq", "띱", 0, + "Elt", "띳", 0, + "Eld", "띵", 0, + "fkr", "락", 0, + "fks", "란", 0, + "fkf", "랄", 0, + "fka", "람", 0, + "fkq", "랍", 0, + "fkt", "랏", 0, + "fkT", "랐", 0, + "fkd", "랑", 0, + "fkw", "랒", 0, + "fkv", "랖", 0, + "fkg", "랗", 0, + "for", "랙", 0, + "fos", "랜", 0, + "fof", "랠", 0, + "foa", "램", 0, + "foq", "랩", 0, + "fot", "랫", 0, + "foT", "랬", 0, + "fod", "랭", 0, + "fir", "략", 0, + "fis", "랸", 0, + "fit", "럇", 0, + "fid", "량", 0, + "fjr", "럭", 0, + "fjs", "런", 0, + "fjf", "럴", 0, + "fja", "럼", 0, + "fjq", "럽", 0, + "fjt", "럿", 0, + "fjT", "렀", 0, + "fjd", "렁", 0, + "fjg", "렇", 0, + "fpr", "렉", 0, + "fps", "렌", 0, + "fpf", "렐", 0, + "fpa", "렘", 0, + "fpq", "렙", 0, + "fpt", "렛", 0, + "fpd", "렝", 0, + "fur", "력", 0, + "fus", "련", 0, + "fuf", "렬", 0, + "fua", "렴", 0, + "fuq", "렵", 0, + "fut", "렷", 0, + "fuT", "렸", 0, + "fud", "령", 0, + "fPs", "롄", 0, + "fPq", "롑", 0, + "fPt", "롓", 0, + "fhr", "록", 0, + "fhs", "론", 0, + "fhf", "롤", 0, + "fha", "롬", 0, + "fhq", "롭", 0, + "fht", "롯", 0, + "fhd", "롱", 0, + "fKs", "롼", 0, + "fKd", "뢍", 0, + "fHT", "뢨", 0, + "fLs", "뢴", 0, + "fLf", "뢸", 0, + "fLa", "룀", 0, + "fLq", "룁", 0, + "fLt", "룃", 0, + "fLd", "룅", 0, + "fys", "룐", 0, + "fyf", "룔", 0, + "fyq", "룝", 0, + "fyt", "룟", 0, + "fyd", "룡", 0, + "fnr", "룩", 0, + "fns", "룬", 0, + "fnf", "룰", 0, + "fna", "룸", 0, + "fnq", "룹", 0, + "fnt", "룻", 0, + "fnd", "룽", 0, + "fJT", "뤘", 0, + "fBr", "뤽", 0, + "fBs", "륀", 0, + "fBf", "륄", 0, + "fBa", "륌", 0, + "fBt", "륏", 0, + "fBd", "륑", 0, + "fbr", "륙", 0, + "fbs", "륜", 0, + "fbf", "률", 0, + "fba", "륨", 0, + "fbq", "륩", 0, + "fbt", "륫", 0, + "fbd", "륭", 0, + "fmr", "륵", 0, + "fms", "른", 0, + "fmf", "를", 0, + "fma", "름", 0, + "fmq", "릅", 0, + "fmt", "릇", 0, + "fmd", "릉", 0, + "fmw", "릊", 0, + "fmx", "릍", 0, + "fmv", "릎", 0, + "flr", "릭", 0, + "fls", "린", 0, + "flf", "릴", 0, + "fla", "림", 0, + "flq", "립", 0, + "flt", "릿", 0, + "fld", "링", 0, + "akr", "막", 0, + "aks", "만", 0, + "akH", "많", 0, + "ake", "맏", 0, + "akf", "말", 0, + "akG", "맑", 0, + "akM", "맒", 0, + "aka", "맘", 0, + "akq", "맙", 0, + "akt", "맛", 0, + "akd", "망", 0, + "akw", "맞", 0, + "akx", "맡", 0, + "akg", "맣", 0, + "aor", "맥", 0, + "aos", "맨", 0, + "aof", "맬", 0, + "aoa", "맴", 0, + "aoq", "맵", 0, + "aot", "맷", 0, + "aoT", "맸", 0, + "aod", "맹", 0, + "aow", "맺", 0, + "air", "먁", 0, + "aif", "먈", 0, + "aid", "먕", 0, + "ajr", "먹", 0, + "ajs", "먼", 0, + "ajf", "멀", 0, + "ajM", "멂", 0, + "aja", "멈", 0, + "ajq", "멉", 0, + "ajt", "멋", 0, + "ajd", "멍", 0, + "ajw", "멎", 0, + "ajg", "멓", 0, + "apr", "멕", 0, + "aps", "멘", 0, + "apf", "멜", 0, + "apa", "멤", 0, + "apq", "멥", 0, + "apt", "멧", 0, + "apT", "멨", 0, + "apd", "멩", 0, + "aur", "멱", 0, + "aus", "면", 0, + "auf", "멸", 0, + "aut", "몃", 0, + "auT", "몄", 0, + "aud", "명", 0, + "auc", "몇", 0, + "ahr", "목", 0, + "ahS", "몫", 0, + "ahs", "몬", 0, + "ahf", "몰", 0, + "ahM", "몲", 0, + "aha", "몸", 0, + "ahq", "몹", 0, + "aht", "못", 0, + "ahd", "몽", 0, + "aKs", "뫈", 0, + "aKT", "뫘", 0, + "aKd", "뫙", 0, + "aLs", "묀", 0, + "aLf", "묄", 0, + "aLq", "묍", 0, + "aLt", "묏", 0, + "aLd", "묑", 0, + "ays", "묜", 0, + "ayf", "묠", 0, + "ayq", "묩", 0, + "ayt", "묫", 0, + "anr", "묵", 0, + "anR", "묶", 0, + "ans", "문", 0, + "ane", "묻", 0, + "anf", "물", 0, + "anG", "묽", 0, + "anM", "묾", 0, + "ana", "뭄", 0, + "anq", "뭅", 0, + "ant", "뭇", 0, + "and", "뭉", 0, + "anx", "뭍", 0, + "ang", "뭏", 0, + "aJs", "뭔", 0, + "aJf", "뭘", 0, + "aJq", "뭡", 0, + "aJt", "뭣", 0, + "aBs", "뮌", 0, + "aBf", "뮐", 0, + "abs", "뮨", 0, + "abf", "뮬", 0, + "aba", "뮴", 0, + "abt", "뮷", 0, + "ams", "믄", 0, + "amf", "믈", 0, + "ama", "믐", 0, + "amt", "믓", 0, + "alr", "믹", 0, + "als", "민", 0, + "ale", "믿", 0, + "alf", "밀", 0, + "alM", "밂", 0, + "ala", "밈", 0, + "alq", "밉", 0, + "alt", "밋", 0, + "alT", "밌", 0, + "ald", "밍", 0, + "alc", "및", 0, + "alx", "밑", 0, + "qkr", "박", 0, + "qkR", "밖", 0, + "qkS", "밗", 0, + "qks", "반", 0, + "qke", "받", 0, + "qkf", "발", 0, + "qkG", "밝", 0, + "qkM", "밞", 0, + "qkA", "밟", 0, + "qka", "밤", 0, + "qkq", "밥", 0, + "qkt", "밧", 0, + "qkd", "방", 0, + "qkx", "밭", 0, + "qor", "백", 0, + "qos", "밴", 0, + "qof", "밸", 0, + "qoa", "뱀", 0, + "qoq", "뱁", 0, + "qot", "뱃", 0, + "qoT", "뱄", 0, + "qod", "뱅", 0, + "qox", "뱉", 0, + "qir", "뱍", 0, + "qis", "뱐", 0, + "qiq", "뱝", 0, + "qjr", "벅", 0, + "qjs", "번", 0, + "qje", "벋", 0, + "qjf", "벌", 0, + "qjM", "벎", 0, + "qja", "범", 0, + "qjq", "법", 0, + "qjt", "벗", 0, + "qjd", "벙", 0, + "qjw", "벚", 0, + "qpr", "벡", 0, + "qps", "벤", 0, + "qpe", "벧", 0, + "qpf", "벨", 0, + "qpa", "벰", 0, + "qpq", "벱", 0, + "qpt", "벳", 0, + "qpT", "벴", 0, + "qpd", "벵", 0, + "qur", "벽", 0, + "qus", "변", 0, + "quf", "별", 0, + "quq", "볍", 0, + "qut", "볏", 0, + "quT", "볐", 0, + "qud", "병", 0, + "qux", "볕", 0, + "qPs", "볜", 0, + "qhr", "복", 0, + "qhR", "볶", 0, + "qhs", "본", 0, + "qhf", "볼", 0, + "qha", "봄", 0, + "qhq", "봅", 0, + "qht", "봇", 0, + "qhd", "봉", 0, + "qKs", "봔", 0, + "qKT", "봤", 0, + "qHT", "뵀", 0, + "qLr", "뵉", 0, + "qLs", "뵌", 0, + "qLf", "뵐", 0, + "qLa", "뵘", 0, + "qLq", "뵙", 0, + "qys", "뵨", 0, + "qnr", "북", 0, + "qns", "분", 0, + "qne", "붇", 0, + "qnf", "불", 0, + "qnG", "붉", 0, + "qnM", "붊", 0, + "qna", "붐", 0, + "qnq", "붑", 0, + "qnt", "붓", 0, + "qnd", "붕", 0, + "qnx", "붙", 0, + "qnv", "붚", 0, + "qJf", "붤", 0, + "qJT", "붰", 0, + "qBr", "뷕", 0, + "qBs", "뷘", 0, + "qBf", "뷜", 0, + "qBd", "뷩", 0, + "qbs", "뷴", 0, + "qbf", "뷸", 0, + "qba", "븀", 0, + "qbt", "븃", 0, + "qbd", "븅", 0, + "qmr", "븍", 0, + "qms", "븐", 0, + "qmf", "블", 0, + "qma", "븜", 0, + "qmq", "븝", 0, + "qmt", "븟", 0, + "qlr", "빅", 0, + "qls", "빈", 0, + "qlf", "빌", 0, + "qlM", "빎", 0, + "qla", "빔", 0, + "qlq", "빕", 0, + "qlt", "빗", 0, + "qld", "빙", 0, + "qlw", "빚", 0, + "qlc", "빛", 0, + "Qkr", "빡", 0, + "Qks", "빤", 0, + "Qkf", "빨", 0, + "QkM", "빪", 0, + "Qka", "빰", 0, + "Qkq", "빱", 0, + "Qkt", "빳", 0, + "QkT", "빴", 0, + "Qkd", "빵", 0, + "Qkg", "빻", 0, + "Qor", "빽", 0, + "Qos", "뺀", 0, + "Qof", "뺄", 0, + "Qoa", "뺌", 0, + "Qoq", "뺍", 0, + "Qot", "뺏", 0, + "QoT", "뺐", 0, + "Qod", "뺑", 0, + "Qir", "뺙", 0, + "Qia", "뺨", 0, + "Qjr", "뻑", 0, + "Qjs", "뻔", 0, + "Qje", "뻗", 0, + "Qjf", "뻘", 0, + "Qja", "뻠", 0, + "Qjt", "뻣", 0, + "QjT", "뻤", 0, + "Qjd", "뻥", 0, + "Qpd", "뼁", 0, + "Qur", "뼉", 0, + "Qua", "뼘", 0, + "Quq", "뼙", 0, + "Qut", "뼛", 0, + "QuT", "뼜", 0, + "Qud", "뼝", 0, + "Qhr", "뽁", 0, + "Qhs", "뽄", 0, + "Qhf", "뽈", 0, + "Qha", "뽐", 0, + "Qhq", "뽑", 0, + "Qhd", "뽕", 0, + "Qyd", "뿅", 0, + "Qnr", "뿍", 0, + "Qns", "뿐", 0, + "Qnf", "뿔", 0, + "Qna", "뿜", 0, + "Qnt", "뿟", 0, + "Qnd", "뿡", 0, + "Qbd", "쁑", 0, + "Qms", "쁜", 0, + "Qmf", "쁠", 0, + "Qma", "쁨", 0, + "Qmq", "쁩", 0, + "Qlr", "삑", 0, + "Qls", "삔", 0, + "Qlf", "삘", 0, + "Qla", "삠", 0, + "Qlq", "삡", 0, + "Qlt", "삣", 0, + "Qld", "삥", 0, + "tkr", "삭", 0, + "tkS", "삯", 0, + "tks", "산", 0, + "tke", "삳", 0, + "tkf", "살", 0, + "tkG", "삵", 0, + "tkM", "삶", 0, + "tka", "삼", 0, + "tkq", "삽", 0, + "tkt", "삿", 0, + "tkT", "샀", 0, + "tkd", "상", 0, + "tkx", "샅", 0, + "tor", "색", 0, + "tos", "샌", 0, + "tof", "샐", 0, + "toa", "샘", 0, + "toq", "샙", 0, + "tot", "샛", 0, + "toT", "샜", 0, + "tod", "생", 0, + "tir", "샥", 0, + "tis", "샨", 0, + "tif", "샬", 0, + "tia", "샴", 0, + "tiq", "샵", 0, + "tit", "샷", 0, + "tid", "샹", 0, + "tOs", "섄", 0, + "tOf", "섈", 0, + "tOa", "섐", 0, + "tOd", "섕", 0, + "tjr", "석", 0, + "tjR", "섞", 0, + "tjS", "섟", 0, + "tjs", "선", 0, + "tje", "섣", 0, + "tjf", "설", 0, + "tjM", "섦", 0, + "tjA", "섧", 0, + "tja", "섬", 0, + "tjq", "섭", 0, + "tjt", "섯", 0, + "tjT", "섰", 0, + "tjd", "성", 0, + "tjv", "섶", 0, + "tpr", "섹", 0, + "tps", "센", 0, + "tpf", "셀", 0, + "tpa", "셈", 0, + "tpq", "셉", 0, + "tpt", "셋", 0, + "tpT", "셌", 0, + "tpd", "셍", 0, + "tur", "셕", 0, + "tus", "션", 0, + "tuf", "셜", 0, + "tua", "셤", 0, + "tuq", "셥", 0, + "tut", "셧", 0, + "tuT", "셨", 0, + "tud", "셩", 0, + "tPs", "셴", 0, + "tPf", "셸", 0, + "tPd", "솅", 0, + "thr", "속", 0, + "thR", "솎", 0, + "ths", "손", 0, + "thf", "솔", 0, + "thM", "솖", 0, + "tha", "솜", 0, + "thq", "솝", 0, + "tht", "솟", 0, + "thd", "송", 0, + "thx", "솥", 0, + "tKr", "솩", 0, + "tKs", "솬", 0, + "tKf", "솰", 0, + "tKd", "솽", 0, + "tHs", "쇈", 0, + "tHf", "쇌", 0, + "tHa", "쇔", 0, + "tHt", "쇗", 0, + "tHT", "쇘", 0, + "tLs", "쇤", 0, + "tLf", "쇨", 0, + "tLa", "쇰", 0, + "tLq", "쇱", 0, + "tLt", "쇳", 0, + "tyr", "쇽", 0, + "tys", "숀", 0, + "tyf", "숄", 0, + "tya", "숌", 0, + "tyq", "숍", 0, + "tyt", "숏", 0, + "tyd", "숑", 0, + "tnr", "숙", 0, + "tns", "순", 0, + "tne", "숟", 0, + "tnf", "술", 0, + "tna", "숨", 0, + "tnq", "숩", 0, + "tnt", "숫", 0, + "tnd", "숭", 0, + "tnc", "숯", 0, + "tnx", "숱", 0, + "tnv", "숲", 0, + "tJT", "쉈", 0, + "tNr", "쉑", 0, + "tNs", "쉔", 0, + "tNf", "쉘", 0, + "tNa", "쉠", 0, + "tNd", "쉥", 0, + "tBr", "쉭", 0, + "tBs", "쉰", 0, + "tBf", "쉴", 0, + "tBa", "쉼", 0, + "tBq", "쉽", 0, + "tBt", "쉿", 0, + "tBd", "슁", 0, + "tbr", "슉", 0, + "tbf", "슐", 0, + "tba", "슘", 0, + "tbt", "슛", 0, + "tbd", "슝", 0, + "tmr", "슥", 0, + "tms", "슨", 0, + "tmf", "슬", 0, + "tmG", "슭", 0, + "tma", "슴", 0, + "tmq", "습", 0, + "tmt", "슷", 0, + "tmd", "승", 0, + "tlr", "식", 0, + "tls", "신", 0, + "tle", "싣", 0, + "tlf", "실", 0, + "tlF", "싫", 0, + "tla", "심", 0, + "tlq", "십", 0, + "tlt", "싯", 0, + "tld", "싱", 0, + "tlv", "싶", 0, + "Tkr", "싹", 0, + "TkS", "싻", 0, + "Tks", "싼", 0, + "Tkf", "쌀", 0, + "Tka", "쌈", 0, + "Tkq", "쌉", 0, + "TkT", "쌌", 0, + "Tkd", "쌍", 0, + "Tkg", "쌓", 0, + "Tor", "쌕", 0, + "Tos", "쌘", 0, + "Tof", "쌜", 0, + "Toa", "쌤", 0, + "Toq", "쌥", 0, + "ToT", "쌨", 0, + "Tod", "쌩", 0, + "Tid", "썅", 0, + "Tjr", "썩", 0, + "Tjs", "썬", 0, + "Tjf", "썰", 0, + "TjM", "썲", 0, + "Tja", "썸", 0, + "Tjq", "썹", 0, + "TjT", "썼", 0, + "Tjd", "썽", 0, + "Tps", "쎈", 0, + "Tpf", "쎌", 0, + "TPs", "쏀", 0, + "Thr", "쏙", 0, + "Ths", "쏜", 0, + "The", "쏟", 0, + "Thf", "쏠", 0, + "ThM", "쏢", 0, + "Tha", "쏨", 0, + "Thq", "쏩", 0, + "Thd", "쏭", 0, + "TKr", "쏵", 0, + "TKs", "쏸", 0, + "TKT", "쐈", 0, + "THT", "쐤", 0, + "TLs", "쐰", 0, + "TLf", "쐴", 0, + "TLa", "쐼", 0, + "TLq", "쐽", 0, + "Tnr", "쑥", 0, + "Tns", "쑨", 0, + "Tnf", "쑬", 0, + "Tna", "쑴", 0, + "Tnq", "쑵", 0, + "Tnd", "쑹", 0, + "TJT", "쒔", 0, + "TBs", "쒼", 0, + "Tbd", "쓩", 0, + "Tmr", "쓱", 0, + "Tms", "쓴", 0, + "Tmf", "쓸", 0, + "TmM", "쓺", 0, + "TmF", "쓿", 0, + "Tma", "씀", 0, + "Tmq", "씁", 0, + "TMs", "씐", 0, + "TMf", "씔", 0, + "TMa", "씜", 0, + "Tlr", "씩", 0, + "Tls", "씬", 0, + "Tlf", "씰", 0, + "Tla", "씸", 0, + "Tlq", "씹", 0, + "Tlt", "씻", 0, + "Tld", "씽", 0, + "dkr", "악", 0, + "dks", "안", 0, + "dkJ", "앉", 0, + "dkH", "않", 0, + "dkf", "알", 0, + "dkG", "앍", 0, + "dkM", "앎", 0, + "dkF", "앓", 0, + "dka", "암", 0, + "dkq", "압", 0, + "dkt", "앗", 0, + "dkT", "았", 0, + "dkd", "앙", 0, + "dkx", "앝", 0, + "dkv", "앞", 0, + "dor", "액", 0, + "dos", "앤", 0, + "dof", "앨", 0, + "doa", "앰", 0, + "doq", "앱", 0, + "dot", "앳", 0, + "doT", "앴", 0, + "dod", "앵", 0, + "dir", "약", 0, + "dis", "얀", 0, + "dif", "얄", 0, + "diA", "얇", 0, + "dia", "얌", 0, + "diq", "얍", 0, + "dit", "얏", 0, + "did", "양", 0, + "dix", "얕", 0, + "dig", "얗", 0, + "dOs", "얜", 0, + "dOf", "얠", 0, + "dOq", "얩", 0, + "djr", "억", 0, + "djs", "언", 0, + "djJ", "얹", 0, + "dje", "얻", 0, + "djf", "얼", 0, + "djG", "얽", 0, + "djM", "얾", 0, + "dja", "엄", 0, + "djq", "업", 0, + "djC", "없", 0, + "djt", "엇", 0, + "djT", "었", 0, + "djd", "엉", 0, + "djw", "엊", 0, + "djz", "엌", 0, + "djv", "엎", 0, + "dpr", "엑", 0, + "dps", "엔", 0, + "dpf", "엘", 0, + "dpa", "엠", 0, + "dpq", "엡", 0, + "dpt", "엣", 0, + "dpd", "엥", 0, + "dur", "역", 0, + "duR", "엮", 0, + "dus", "연", 0, + "duf", "열", 0, + "duM", "엶", 0, + "duA", "엷", 0, + "dua", "염", 0, + "duq", "엽", 0, + "duC", "엾", 0, + "dut", "엿", 0, + "duT", "였", 0, + "dud", "영", 0, + "dux", "옅", 0, + "duv", "옆", 0, + "dug", "옇", 0, + "dPs", "옌", 0, + "dPf", "옐", 0, + "dPa", "옘", 0, + "dPq", "옙", 0, + "dPt", "옛", 0, + "dPT", "옜", 0, + "dhr", "옥", 0, + "dhs", "온", 0, + "dhf", "올", 0, + "dhG", "옭", 0, + "dhM", "옮", 0, + "dhN", "옰", 0, + "dhF", "옳", 0, + "dha", "옴", 0, + "dhq", "옵", 0, + "dht", "옷", 0, + "dhd", "옹", 0, + "dhc", "옻", 0, + "dKr", "왁", 0, + "dKs", "완", 0, + "dKf", "왈", 0, + "dKa", "왐", 0, + "dKq", "왑", 0, + "dKt", "왓", 0, + "dKT", "왔", 0, + "dKd", "왕", 0, + "dHr", "왝", 0, + "dHs", "왠", 0, + "dHa", "왬", 0, + "dHt", "왯", 0, + "dHd", "왱", 0, + "dLr", "왹", 0, + "dLs", "왼", 0, + "dLf", "욀", 0, + "dLa", "욈", 0, + "dLq", "욉", 0, + "dLt", "욋", 0, + "dLd", "욍", 0, + "dyr", "욕", 0, + "dys", "욘", 0, + "dyf", "욜", 0, + "dya", "욤", 0, + "dyq", "욥", 0, + "dyt", "욧", 0, + "dyd", "용", 0, + "dnr", "욱", 0, + "dns", "운", 0, + "dnf", "울", 0, + "dnG", "욹", 0, + "dnM", "욺", 0, + "dna", "움", 0, + "dnq", "웁", 0, + "dnt", "웃", 0, + "dnd", "웅", 0, + "dJr", "웍", 0, + "dJs", "원", 0, + "dJf", "월", 0, + "dJa", "웜", 0, + "dJq", "웝", 0, + "dJT", "웠", 0, + "dJd", "웡", 0, + "dNr", "웩", 0, + "dNs", "웬", 0, + "dNf", "웰", 0, + "dNa", "웸", 0, + "dNq", "웹", 0, + "dNd", "웽", 0, + "dBr", "윅", 0, + "dBs", "윈", 0, + "dBf", "윌", 0, + "dBa", "윔", 0, + "dBq", "윕", 0, + "dBt", "윗", 0, + "dBd", "윙", 0, + "dbr", "육", 0, + "dbs", "윤", 0, + "dbf", "율", 0, + "dba", "윰", 0, + "dbq", "윱", 0, + "dbt", "윳", 0, + "dbd", "융", 0, + "dbc", "윷", 0, + "dmr", "윽", 0, + "dms", "은", 0, + "dmf", "을", 0, + "dmV", "읊", 0, + "dma", "음", 0, + "dmq", "읍", 0, + "dmt", "읏", 0, + "dmd", "응", 0, + "dmw", "읒", 0, + "dmc", "읓", 0, + "dmz", "읔", 0, + "dmx", "읕", 0, + "dmv", "읖", 0, + "dmg", "읗", 0, + "dMs", "읜", 0, + "dMf", "읠", 0, + "dMa", "읨", 0, + "dMt", "읫", 0, + "dlr", "익", 0, + "dls", "인", 0, + "dlf", "일", 0, + "dlG", "읽", 0, + "dlM", "읾", 0, + "dlF", "잃", 0, + "dla", "임", 0, + "dlq", "입", 0, + "dlt", "잇", 0, + "dlT", "있", 0, + "dld", "잉", 0, + "dlw", "잊", 0, + "dlv", "잎", 0, + "wkr", "작", 0, + "wks", "잔", 0, + "wkH", "잖", 0, + "wke", "잗", 0, + "wkf", "잘", 0, + "wkM", "잚", 0, + "wka", "잠", 0, + "wkq", "잡", 0, + "wkt", "잣", 0, + "wkT", "잤", 0, + "wkd", "장", 0, + "wkw", "잦", 0, + "wor", "잭", 0, + "wos", "잰", 0, + "wof", "잴", 0, + "woa", "잼", 0, + "woq", "잽", 0, + "wot", "잿", 0, + "woT", "쟀", 0, + "wod", "쟁", 0, + "wir", "쟉", 0, + "wis", "쟌", 0, + "wiH", "쟎", 0, + "wif", "쟐", 0, + "wia", "쟘", 0, + "wid", "쟝", 0, + "wOs", "쟨", 0, + "wOf", "쟬", 0, + "wjr", "적", 0, + "wjs", "전", 0, + "wjf", "절", 0, + "wjM", "젊", 0, + "wja", "점", 0, + "wjq", "접", 0, + "wjt", "젓", 0, + "wjd", "정", 0, + "wjw", "젖", 0, + "wpr", "젝", 0, + "wps", "젠", 0, + "wpf", "젤", 0, + "wpa", "젬", 0, + "wpq", "젭", 0, + "wpt", "젯", 0, + "wpd", "젱", 0, + "wus", "젼", 0, + "wuf", "졀", 0, + "wua", "졈", 0, + "wuq", "졉", 0, + "wuT", "졌", 0, + "wud", "졍", 0, + "whr", "족", 0, + "whs", "존", 0, + "whf", "졸", 0, + "whM", "졺", 0, + "wha", "좀", 0, + "whq", "좁", 0, + "wht", "좃", 0, + "whd", "종", 0, + "whw", "좆", 0, + "whc", "좇", 0, + "whg", "좋", 0, + "wKr", "좍", 0, + "wKf", "좔", 0, + "wKq", "좝", 0, + "wKt", "좟", 0, + "wKd", "좡", 0, + "wHT", "좼", 0, + "wHd", "좽", 0, + "wLs", "죈", 0, + "wLf", "죌", 0, + "wLa", "죔", 0, + "wLq", "죕", 0, + "wLt", "죗", 0, + "wLd", "죙", 0, + "wyr", "죡", 0, + "wys", "죤", 0, + "wyd", "죵", 0, + "wnr", "죽", 0, + "wns", "준", 0, + "wnf", "줄", 0, + "wnG", "줅", 0, + "wnM", "줆", 0, + "wna", "줌", 0, + "wnq", "줍", 0, + "wnt", "줏", 0, + "wnd", "중", 0, + "wJT", "줬", 0, + "wBr", "쥑", 0, + "wBs", "쥔", 0, + "wBf", "쥘", 0, + "wBa", "쥠", 0, + "wBq", "쥡", 0, + "wBt", "쥣", 0, + "wbs", "쥰", 0, + "wbf", "쥴", 0, + "wba", "쥼", 0, + "wmr", "즉", 0, + "wms", "즌", 0, + "wmf", "즐", 0, + "wma", "즘", 0, + "wmq", "즙", 0, + "wmt", "즛", 0, + "wmd", "증", 0, + "wlr", "직", 0, + "wls", "진", 0, + "wle", "짇", 0, + "wlf", "질", 0, + "wlM", "짊", 0, + "wla", "짐", 0, + "wlq", "집", 0, + "wlt", "짓", 0, + "wld", "징", 0, + "wlw", "짖", 0, + "wlx", "짙", 0, + "wlv", "짚", 0, + "Wkr", "짝", 0, + "Wks", "짠", 0, + "WkH", "짢", 0, + "Wkf", "짤", 0, + "WkA", "짧", 0, + "Wka", "짬", 0, + "Wkq", "짭", 0, + "Wkt", "짯", 0, + "WkT", "짰", 0, + "Wkd", "짱", 0, + "Wor", "짹", 0, + "Wos", "짼", 0, + "Wof", "쨀", 0, + "Woa", "쨈", 0, + "Woq", "쨉", 0, + "Wot", "쨋", 0, + "WoT", "쨌", 0, + "Wod", "쨍", 0, + "Wis", "쨘", 0, + "Wid", "쨩", 0, + "Wjr", "쩍", 0, + "Wjs", "쩐", 0, + "Wjf", "쩔", 0, + "Wja", "쩜", 0, + "Wjq", "쩝", 0, + "Wjt", "쩟", 0, + "WjT", "쩠", 0, + "Wjd", "쩡", 0, + "Wpd", "쩽", 0, + "WuT", "쪘", 0, + "Whr", "쪽", 0, + "Whs", "쫀", 0, + "Whf", "쫄", 0, + "Wha", "쫌", 0, + "Whq", "쫍", 0, + "Wht", "쫏", 0, + "Whd", "쫑", 0, + "Whc", "쫓", 0, + "WKr", "쫙", 0, + "WKf", "쫠", 0, + "WKT", "쫬", 0, + "WHT", "쬈", 0, + "WLs", "쬔", 0, + "WLf", "쬘", 0, + "WLa", "쬠", 0, + "WLq", "쬡", 0, + "Wyd", "쭁", 0, + "Wnr", "쭉", 0, + "Wns", "쭌", 0, + "Wnf", "쭐", 0, + "Wna", "쭘", 0, + "Wnq", "쭙", 0, + "Wnd", "쭝", 0, + "WJT", "쭸", 0, + "WJd", "쭹", 0, + "Wma", "쯤", 0, + "Wmt", "쯧", 0, + "Wmd", "쯩", 0, + "Wlr", "찍", 0, + "Wls", "찐", 0, + "Wlf", "찔", 0, + "Wla", "찜", 0, + "Wlq", "찝", 0, + "Wld", "찡", 0, + "Wlw", "찢", 0, + "Wlg", "찧", 0, + "ckr", "착", 0, + "cks", "찬", 0, + "ckH", "찮", 0, + "ckf", "찰", 0, + "cka", "참", 0, + "ckq", "찹", 0, + "ckt", "찻", 0, + "ckT", "찼", 0, + "ckd", "창", 0, + "ckw", "찾", 0, + "cor", "책", 0, + "cos", "챈", 0, + "cof", "챌", 0, + "coa", "챔", 0, + "coq", "챕", 0, + "cot", "챗", 0, + "coT", "챘", 0, + "cod", "챙", 0, + "cis", "챤", 0, + "ciH", "챦", 0, + "cif", "챨", 0, + "cia", "챰", 0, + "cid", "챵", 0, + "cjr", "척", 0, + "cjs", "천", 0, + "cjf", "철", 0, + "cja", "첨", 0, + "cjq", "첩", 0, + "cjt", "첫", 0, + "cjT", "첬", 0, + "cjd", "청", 0, + "cpr", "첵", 0, + "cps", "첸", 0, + "cpf", "첼", 0, + "cpa", "쳄", 0, + "cpq", "쳅", 0, + "cpt", "쳇", 0, + "cpd", "쳉", 0, + "cus", "쳔", 0, + "cuT", "쳤", 0, + "cPs", "쳰", 0, + "cPd", "촁", 0, + "chr", "촉", 0, + "chs", "촌", 0, + "chf", "촐", 0, + "cha", "촘", 0, + "chq", "촙", 0, + "cht", "촛", 0, + "chd", "총", 0, + "cKs", "촨", 0, + "cKf", "촬", 0, + "cKd", "촹", 0, + "cLs", "쵠", 0, + "cLf", "쵤", 0, + "cLa", "쵬", 0, + "cLq", "쵭", 0, + "cLt", "쵯", 0, + "cLd", "쵱", 0, + "cya", "춈", 0, + "cnr", "축", 0, + "cns", "춘", 0, + "cnf", "출", 0, + "cna", "춤", 0, + "cnq", "춥", 0, + "cnt", "춧", 0, + "cnd", "충", 0, + "cJT", "췄", 0, + "cNs", "췐", 0, + "cBs", "췬", 0, + "cBf", "췰", 0, + "cBa", "췸", 0, + "cBq", "췹", 0, + "cBt", "췻", 0, + "cBd", "췽", 0, + "cbs", "츈", 0, + "cbf", "츌", 0, + "cba", "츔", 0, + "cbd", "츙", 0, + "cmr", "측", 0, + "cms", "츤", 0, + "cmf", "츨", 0, + "cma", "츰", 0, + "cmq", "츱", 0, + "cmt", "츳", 0, + "cmd", "층", 0, + "clr", "칙", 0, + "cls", "친", 0, + "cle", "칟", 0, + "clf", "칠", 0, + "clG", "칡", 0, + "cla", "침", 0, + "clq", "칩", 0, + "clt", "칫", 0, + "cld", "칭", 0, + "zkr", "칵", 0, + "zks", "칸", 0, + "zkf", "칼", 0, + "zka", "캄", 0, + "zkq", "캅", 0, + "zkt", "캇", 0, + "zkd", "캉", 0, + "zor", "캑", 0, + "zos", "캔", 0, + "zof", "캘", 0, + "zoa", "캠", 0, + "zoq", "캡", 0, + "zot", "캣", 0, + "zoT", "캤", 0, + "zod", "캥", 0, + "zir", "캭", 0, + "zid", "컁", 0, + "zjr", "컥", 0, + "zjs", "컨", 0, + "zje", "컫", 0, + "zjf", "컬", 0, + "zja", "컴", 0, + "zjq", "컵", 0, + "zjt", "컷", 0, + "zjT", "컸", 0, + "zjd", "컹", 0, + "zpr", "켁", 0, + "zps", "켄", 0, + "zpf", "켈", 0, + "zpa", "켐", 0, + "zpq", "켑", 0, + "zpt", "켓", 0, + "zpd", "켕", 0, + "zus", "켠", 0, + "zuf", "켤", 0, + "zua", "켬", 0, + "zuq", "켭", 0, + "zut", "켯", 0, + "zuT", "켰", 0, + "zud", "켱", 0, + "zhr", "콕", 0, + "zhs", "콘", 0, + "zhf", "콜", 0, + "zha", "콤", 0, + "zhq", "콥", 0, + "zht", "콧", 0, + "zhd", "콩", 0, + "zKr", "콱", 0, + "zKs", "콴", 0, + "zKf", "콸", 0, + "zKa", "쾀", 0, + "zKd", "쾅", 0, + "zHd", "쾡", 0, + "zLf", "쾰", 0, + "znr", "쿡", 0, + "zns", "쿤", 0, + "znf", "쿨", 0, + "zna", "쿰", 0, + "znq", "쿱", 0, + "znt", "쿳", 0, + "znd", "쿵", 0, + "zJs", "퀀", 0, + "zJf", "퀄", 0, + "zJd", "퀑", 0, + "zNd", "퀭", 0, + "zBr", "퀵", 0, + "zBs", "퀸", 0, + "zBf", "퀼", 0, + "zBa", "큄", 0, + "zBq", "큅", 0, + "zBt", "큇", 0, + "zBd", "큉", 0, + "zbs", "큔", 0, + "zbf", "큘", 0, + "zba", "큠", 0, + "zmr", "큭", 0, + "zms", "큰", 0, + "zmf", "클", 0, + "zma", "큼", 0, + "zmq", "큽", 0, + "zmd", "킁", 0, + "zlr", "킥", 0, + "zls", "킨", 0, + "zlf", "킬", 0, + "zla", "킴", 0, + "zlq", "킵", 0, + "zlt", "킷", 0, + "zld", "킹", 0, + "xkr", "탁", 0, + "xks", "탄", 0, + "xkf", "탈", 0, + "xkG", "탉", 0, + "xka", "탐", 0, + "xkq", "탑", 0, + "xkt", "탓", 0, + "xkT", "탔", 0, + "xkd", "탕", 0, + "xor", "택", 0, + "xos", "탠", 0, + "xof", "탤", 0, + "xoa", "탬", 0, + "xoq", "탭", 0, + "xot", "탯", 0, + "xoT", "탰", 0, + "xod", "탱", 0, + "xid", "턍", 0, + "xjr", "턱", 0, + "xjs", "턴", 0, + "xjf", "털", 0, + "xjM", "턺", 0, + "xja", "텀", 0, + "xjq", "텁", 0, + "xjt", "텃", 0, + "xjT", "텄", 0, + "xjd", "텅", 0, + "xpr", "텍", 0, + "xps", "텐", 0, + "xpf", "텔", 0, + "xpa", "템", 0, + "xpq", "텝", 0, + "xpt", "텟", 0, + "xpd", "텡", 0, + "xus", "텬", 0, + "xuT", "텼", 0, + "xPs", "톈", 0, + "xhr", "톡", 0, + "xhs", "톤", 0, + "xhf", "톨", 0, + "xha", "톰", 0, + "xhq", "톱", 0, + "xht", "톳", 0, + "xhd", "통", 0, + "xhv", "톺", 0, + "xKs", "퇀", 0, + "xLs", "퇸", 0, + "xLt", "툇", 0, + "xLd", "툉", 0, + "xnr", "툭", 0, + "xns", "툰", 0, + "xnf", "툴", 0, + "xna", "툼", 0, + "xnq", "툽", 0, + "xnt", "툿", 0, + "xnd", "퉁", 0, + "xJT", "퉜", 0, + "xBr", "튁", 0, + "xBs", "튄", 0, + "xBf", "튈", 0, + "xBa", "튐", 0, + "xBq", "튑", 0, + "xBd", "튕", 0, + "xbs", "튠", 0, + "xbf", "튤", 0, + "xba", "튬", 0, + "xbd", "튱", 0, + "xmr", "특", 0, + "xms", "튼", 0, + "xme", "튿", 0, + "xmf", "틀", 0, + "xmM", "틂", 0, + "xma", "틈", 0, + "xmq", "틉", 0, + "xmt", "틋", 0, + "xMs", "틘", 0, + "xMf", "틜", 0, + "xMa", "틤", 0, + "xMq", "틥", 0, + "xlr", "틱", 0, + "xls", "틴", 0, + "xlf", "틸", 0, + "xla", "팀", 0, + "xlq", "팁", 0, + "xlt", "팃", 0, + "xld", "팅", 0, + "vkr", "팍", 0, + "vkR", "팎", 0, + "vks", "판", 0, + "vkf", "팔", 0, + "vkM", "팖", 0, + "vka", "팜", 0, + "vkq", "팝", 0, + "vkt", "팟", 0, + "vkT", "팠", 0, + "vkd", "팡", 0, + "vkx", "팥", 0, + "vor", "팩", 0, + "vos", "팬", 0, + "vof", "팰", 0, + "voa", "팸", 0, + "voq", "팹", 0, + "vot", "팻", 0, + "voT", "팼", 0, + "vod", "팽", 0, + "vir", "퍅", 0, + "vjr", "퍽", 0, + "vjs", "펀", 0, + "vjf", "펄", 0, + "vja", "펌", 0, + "vjq", "펍", 0, + "vjt", "펏", 0, + "vjT", "펐", 0, + "vjd", "펑", 0, + "vpr", "펙", 0, + "vps", "펜", 0, + "vpf", "펠", 0, + "vpa", "펨", 0, + "vpq", "펩", 0, + "vpt", "펫", 0, + "vpd", "펭", 0, + "vus", "편", 0, + "vuf", "펼", 0, + "vua", "폄", 0, + "vuq", "폅", 0, + "vuT", "폈", 0, + "vud", "평", 0, + "vPf", "폘", 0, + "vPq", "폡", 0, + "vPt", "폣", 0, + "vhr", "폭", 0, + "vhs", "폰", 0, + "vhf", "폴", 0, + "vha", "폼", 0, + "vhq", "폽", 0, + "vht", "폿", 0, + "vhd", "퐁", 0, + "vKd", "퐝", 0, + "vLs", "푄", 0, + "vys", "푠", 0, + "vyf", "푤", 0, + "vyq", "푭", 0, + "vyt", "푯", 0, + "vnr", "푹", 0, + "vns", "푼", 0, + "vne", "푿", 0, + "vnf", "풀", 0, + "vnM", "풂", 0, + "vna", "품", 0, + "vnq", "풉", 0, + "vnt", "풋", 0, + "vnd", "풍", 0, + "vJd", "풩", 0, + "vBs", "퓐", 0, + "vBf", "퓔", 0, + "vBa", "퓜", 0, + "vBt", "퓟", 0, + "vbs", "퓬", 0, + "vbf", "퓰", 0, + "vba", "퓸", 0, + "vbt", "퓻", 0, + "vbd", "퓽", 0, + "vms", "픈", 0, + "vmf", "플", 0, + "vma", "픔", 0, + "vmq", "픕", 0, + "vmt", "픗", 0, + "vlr", "픽", 0, + "vls", "핀", 0, + "vlf", "필", 0, + "vla", "핌", 0, + "vlq", "핍", 0, + "vlt", "핏", 0, + "vld", "핑", 0, + "gkr", "학", 0, + "gks", "한", 0, + "gkf", "할", 0, + "gkB", "핥", 0, + "gka", "함", 0, + "gkq", "합", 0, + "gkt", "핫", 0, + "gkd", "항", 0, + "gor", "핵", 0, + "gos", "핸", 0, + "gof", "핼", 0, + "goa", "햄", 0, + "goq", "햅", 0, + "got", "햇", 0, + "goT", "했", 0, + "god", "행", 0, + "gid", "향", 0, + "gjr", "헉", 0, + "gjs", "헌", 0, + "gjf", "헐", 0, + "gjM", "헒", 0, + "gja", "험", 0, + "gjq", "헙", 0, + "gjt", "헛", 0, + "gjd", "헝", 0, + "gpr", "헥", 0, + "gps", "헨", 0, + "gpf", "헬", 0, + "gpa", "헴", 0, + "gpq", "헵", 0, + "gpt", "헷", 0, + "gpd", "헹", 0, + "gur", "혁", 0, + "gus", "현", 0, + "guf", "혈", 0, + "gua", "혐", 0, + "guq", "협", 0, + "gut", "혓", 0, + "guT", "혔", 0, + "gud", "형", 0, + "gPs", "혠", 0, + "gPf", "혤", 0, + "gPq", "혭", 0, + "ghr", "혹", 0, + "ghs", "혼", 0, + "ghf", "홀", 0, + "ghB", "홅", 0, + "gha", "홈", 0, + "ghq", "홉", 0, + "ght", "홋", 0, + "ghd", "홍", 0, + "ghx", "홑", 0, + "gKr", "확", 0, + "gKs", "환", 0, + "gKf", "활", 0, + "gKt", "홧", 0, + "gKd", "황", 0, + "gHr", "홱", 0, + "gHs", "홴", 0, + "gHt", "횃", 0, + "gHd", "횅", 0, + "gLr", "획", 0, + "gLs", "횐", 0, + "gLf", "횔", 0, + "gLq", "횝", 0, + "gLt", "횟", 0, + "gLd", "횡", 0, + "gys", "횬", 0, + "gyf", "횰", 0, + "gyq", "횹", 0, + "gyt", "횻", 0, + "gnr", "훅", 0, + "gns", "훈", 0, + "gnf", "훌", 0, + "gnB", "훑", 0, + "gna", "훔", 0, + "gnt", "훗", 0, + "gnd", "훙", 0, + "gJs", "훤", 0, + "gJf", "훨", 0, + "gJa", "훰", 0, + "gJd", "훵", 0, + "gNr", "훽", 0, + "gNs", "휀", 0, + "gNf", "휄", 0, + "gNd", "휑", 0, + "gBr", "휙", 0, + "gBs", "휜", 0, + "gBf", "휠", 0, + "gBa", "휨", 0, + "gBq", "휩", 0, + "gBt", "휫", 0, + "gBd", "휭", 0, + "gbr", "휵", 0, + "gbs", "휸", 0, + "gbf", "휼", 0, + "gba", "흄", 0, + "gbt", "흇", 0, + "gbd", "흉", 0, + "gmr", "흑", 0, + "gms", "흔", 0, + "gmH", "흖", 0, + "gme", "흗", 0, + "gmf", "흘", 0, + "gmG", "흙", 0, + "gma", "흠", 0, + "gmq", "흡", 0, + "gmt", "흣", 0, + "gmd", "흥", 0, + "gmx", "흩", 0, + "gMs", "흰", 0, + "gMf", "흴", 0, + "gMa", "흼", 0, + "gMq", "흽", 0, + "gMd", "힁", 0, + "glr", "힉", 0, + "gls", "힌", 0, + "glf", "힐", 0, + "gla", "힘", 0, + "glq", "힙", 0, + "glt", "힛", 0, + "gld", "힝", 0, 0 }; diff --git a/sys/src/cmd/ktrans/main.c b/sys/src/cmd/ktrans/main.c index e6c6be754..3757096ee 100644 --- a/sys/src/cmd/ktrans/main.c +++ b/sys/src/cmd/ktrans/main.c @@ -6,16 +6,26 @@ * okamoto@granite.cias.osakafu-u.ac.jp */ +/* + * A glossary on some of the Japanese vocabulary used: + * kana: syllabic letting, either hiragana(ひらがな) or katakana(カタカナ) + * kanji(漢字): borrowed characters, 楽 in 楽しい + * Okurigana(送り仮名): kana tail to kanji, しい in 楽しい + * Joshi(助詞): particle, は in 私は + * Jisho(辞書): dictionary + * kouho(候補): candidate + */ + #include <u.h> #include <libc.h> #include <bio.h> +#include "hash.h" #include "ktrans.h" -#include "jisho.h" #define LSIZE 256 Rune lbuf[LSIZE]; /* hiragana buffer for key input written by send() */ -Map *table = hira; /* default language conversion table */ +Hmap *table; uchar okurigana[LSIZE]; /* buffer for okurigana */ char okuri = 0; /* buffer/flag for capital input char */ int in, out; @@ -23,16 +33,10 @@ int llen, olen, joshi = 0; int natural = 1; /* not Japanese but English mode */ int changelang(int); -int dotrans(Dictionary*); +int dotrans(Hmap*); int nrune(char *); void send(uchar *, int); -Map *match(uchar *p, int *nc, Map *table); - -extern Dictionary *openQDIC(char *); -extern KouhoList *getKouhoHash(Dictionary*, char *); -extern KouhoList *getKouhoFile(DicList*, char *); -extern void freeQDIC(Dictionary*); -extern void selectKouho(KouhoList **, KouhoList*); +Hmap* opendict(Hmap *, char *); void kbdopen(void) @@ -89,6 +93,50 @@ kbdopen(void) exits(nil); } +Map signalmore = { + "_", nil, 1, +}; + +Hmap* +initmap(Map *m, int n) +{ + int i, j; + char buf[16]; + char *s; + Map prev; + Hmap *h; + + h = hmapalloc(n, sizeof(Map)); + for(i = 0; i < n; i++){ + if(m[i].roma == nil || m[i].roma[0] == '\0') + continue; + + //We mark all partial strings so we know when + //we have partial match when ingesting. + j = 2; + for(s = m[i].roma; *s && j <= sizeof buf; s++){ + snprint(buf, j, "%s", m[i].roma); + prev = m[i]; + if(hmapget(h, buf, &prev) == 0){ + if(prev.leadstomore == 1 && s[1] == '\0'){ + //confict; partial & valid input + prev = m[i]; + prev.leadstomore = 1; + free(hmapkey(h, buf)); + } + } + + if(s[1] == '\0'){ + hmapset(&h, strdup(buf), &prev, nil); + } else { + hmapset(&h, strdup(buf), &signalmore, nil); + } + j++; + } + } + return h; +} + void usage(void) { @@ -101,11 +149,11 @@ main(int argc, char *argv[]) { uchar *bp, *ep, buf[128]; - Map *mp; - int nchar, wantmore; + Map lkup, last; + int wantmore; int n, c; - char *dictname; - Dictionary *jisho; + char *jishoname, *zidianname; + Hmap *jisho, *zidian; ARGBEGIN{ default: usage(); @@ -113,9 +161,20 @@ main(int argc, char *argv[]) if(argc != 0) usage(); - if((dictname = getenv("jisho")) == nil) - dictname = "/lib/kanji.jisho"; - jisho = openQDIC(dictname); + if((jishoname = getenv("jisho")) == nil) + jishoname = "/lib/kanji.jisho"; + jisho = opendict(nil, jishoname); + + if((zidianname = getenv("zidian")) == nil) + zidianname = "/lib/hanzi.zidian"; + zidian = opendict(nil, zidianname); + + hira = table = initmap(mhira, nelem(mhira)); + kata = initmap(mkata, nelem(mkata)); + greek = initmap(mgreek, nelem(mgreek)); + cyril = initmap(mcyril, nelem(mcyril)); + hangul = initmap(mhangul, nelem(mhangul)); + last = (Map){nil, nil, -1}; kbdopen(); if(fork()) @@ -147,8 +206,8 @@ main(int argc, char *argv[]) wantmore = 0; if (*bp=='') { /* ^x read ktrans-jisho once more */ - freeQDIC(jisho); - jisho = openQDIC(dictname); + jisho = opendict(jisho, jishoname); + zidian = opendict(zidian, zidianname); llen = 0; olen = okuri = joshi = 0; wantmore=0; @@ -156,7 +215,10 @@ main(int argc, char *argv[]) continue; } if (*bp=='') { /* ^\ (start translation command) */ - c = dotrans(jisho); + if (table == hanzi) + c = dotrans(zidian); + else + c = dotrans(jisho); if (c) *bp = c; /* pointer to translated rune */ else @@ -167,11 +229,13 @@ main(int argc, char *argv[]) bp++; llen = 0; olen = okuri = joshi = 0; + last.kana = nil; continue; } if (changelang(*bp)) { /* change language mode OK */ bp++; olen = okuri = joshi = 0; + last.kana = nil; continue; } if (natural || *bp<=' ' || *bp>='{') { /* English mode but not ascii */ @@ -179,6 +243,7 @@ main(int argc, char *argv[]) int rlen = chartorune(&r, (char *)bp); send(bp, rlen); /* write bp to /dev/cons */ bp += rlen; + last.kana = nil; continue; } if (table == hira && (*bp >= 'A' && *bp <= 'Z') && (*(bp+1) < 'A' @@ -192,27 +257,33 @@ main(int argc, char *argv[]) joshi = 1; olen = 0; } - mp = match(bp, &nchar, table); - if (mp == 0) { - if (nchar>0) { /* match, longer possible */ - wantmore++; - break; - } - send(bp++, 1); /* alphabet in kana mode */ - } else { - send((uchar*)mp->kana, strlen(mp->kana)); - bp += nchar; + if(hmapget(table, (char*)bp, &lkup) < 0){ + if(last.kana != nil){ + send((uchar*)last.kana, strlen(last.kana)); + bp += strlen(last.roma); + } else + send(bp++, 1); + last.kana = nil; + break; + } + /* concatinations; only advance a single character */ + if(lkup.kana != nil && strstr("ッっ", lkup.kana)) + lkup.roma = "_"; + /* partial match */ + if(lkup.kana == nil || lkup.leadstomore == 1){ + if(lkup.kana != nil) + last = lkup; + + wantmore = 1; + break; } + last.kana = nil; + send((uchar*)lkup.kana, strlen(lkup.kana)); + bp += strlen(lkup.roma); } } } -int -min(int a, int b) -{ - return a<b? a: b; -} - /* * send UTF string (p) with length (n) to stdout * and write rune (r) in global lbuf[] buffer @@ -232,7 +303,9 @@ send(uchar *p, int n) llen -= 64; } - if (table!=hira || natural) + if(table != hira && table != hanzi) + return; + if(natural && table != hanzi) return; ep = p+n; @@ -253,49 +326,13 @@ send(uchar *p, int n) } } -/* - * Romaji to Hiragana/Katakana conversion - * romaji shoud be input as small letter - * returns the matched address in table, hira, kata, etc. - * nc: number of character (return value) - */ -Map * -match(uchar *p, int *nc, Map *table) -{ - register Map *longp = 0, *kp; - static char last; - int longest = 0; - - *nc = -1; - for (kp=table; kp->roma; kp++) { - if (*p == *kp->roma) { - int lr = strlen(kp->roma); - int len = min(lr, strlen((char *)p)); - if (strncmp(kp->roma, (char *)p, len)==0) { - if (len<lr) { - *nc = 1; - return 0; - } - if (len>longest) { - longest = len; - longp = kp; - } - } - } - } - if (longp) { - last = longp->roma[longest-1]; - *nc = longp->advance; - } - return longp; -} - int changelang(int c) { switch(c){ case '': /* ^t (English mode) */ natural = 1; + table = hira; llen = 0; return 1; break; @@ -334,23 +371,80 @@ changelang(int c) llen = 0; return 1; break; + + case '': /* ^c (Chinese mode) */ + natural = 1; + table = hanzi; + llen = 0; + return 1; + break; } return 0; } +Hmap* +opendict(Hmap *h, char *name) +{ + Biobuf *b; + char *p; + char *dot, *rest; + char *kouho[16]; + int i; + + b = Bopen(name, OREAD); + if(b == nil) + return nil; + + if(h == nil) + h = hmapalloc(8192, sizeof(kouho)); + else + hmapreset(h, 1); + while(p = Brdstr(b, '\n', 1)){ + if(p[0] == '\0' || p[0] == ';'){ + Err: + free(p); + continue; + } + dot = utfrune(p, '\t'); + if(dot == nil) + goto Err; + + *dot = '\0'; + rest = dot+1; + if(*rest == '\0') + goto Err; + + memset(kouho, 0, sizeof kouho); + i = 0; + while(i < nelem(kouho)-1 && (dot = utfrune(rest, ' '))){ + *dot = '\0'; + kouho[i++] = rest; + rest = dot+1; + } + if(i < nelem(kouho)-1) + kouho[i] = rest; + + /* key is the base pointer; overwrites clean up for us */ + hmapset(&h, p, kouho, nil); + } + Bterm(b); + return h; +} + /* * write translated kanji runes to stdout and return last character * if it's not ctl-\. if the last is ctl-\, proceed with * translation of the next kouho */ int -dotrans(Dictionary *dic) +dotrans(Hmap *dic) { Rune *res, r[1]; char v[1024], *p, tbuf[64], hirabuf[64]; int j, lastlen, nokouho = 0; char ch; - KouhoList *fstkouho, *currentkouho; + int i; + char *kouho[16]; if (llen==0) return 0; /* don't use kanji transform function */ @@ -375,15 +469,13 @@ dotrans(Dictionary *dic) if (okuri && joshi != 1) /* verb mode */ hirabuf[strlen(hirabuf) - 1] = '\0'; - if(!(fstkouho = getKouhoHash(dic, v))) { /* not found */ + if(hmapget(dic, v, kouho) < 0){ llen = olen = okuri = joshi = 0; okurigana[0] = 0; return 0; } - - currentkouho = fstkouho; - for(;;) { - p = currentkouho->kouhotop; /* p to the head of kanji kouho array */ + for(i = 0; i < nelem(kouho) && kouho[i] != nil; i++) { + p = kouho[i]; lastlen = nrune(tbuf); /* number of rune chars */ if (okuri && joshi != 1) /* verb mode */ @@ -407,10 +499,9 @@ dotrans(Dictionary *dic) exits(nil); if (ch == '') { /* if next input is ^\, once again */ - if(currentkouho->nextkouho != 0) { /* have next kouho */ + if(i+1 < nelem(kouho) && kouho[i+1] != nil) { /* have next kouho */ nokouho = 0; strcpy(tbuf, p); - currentkouho = currentkouho->nextkouho; if (okuri && joshi != 1) /* verb mode */ for (j=0; j<nrune(tbuf); j++) @@ -442,8 +533,12 @@ dotrans(Dictionary *dic) break; } } else { - if(!nokouho) /* learn the previous use of the kouho */ - selectKouho(&(fstkouho->dicitem->kouho), currentkouho); + if(!nokouho && i != 0){ /* learn the previous use of the kouho */ + p = kouho[0]; + kouho[0] = kouho[i]; + kouho[i] = p; + hmapset(&dic, hmapkey(dic, v), kouho, nil); + } olen = okuri = joshi = 0; okurigana[0] = 0; diff --git a/sys/src/cmd/ktrans/mkfile b/sys/src/cmd/ktrans/mkfile index 8a2f6b22d..95e21f7b2 100644 --- a/sys/src/cmd/ktrans/mkfile +++ b/sys/src/cmd/ktrans/mkfile @@ -2,9 +2,9 @@ BIN=/$objtype/bin TARG=ktrans -HFILES=jisho.h ktrans.h +HFILES=ktrans.h OFILES=\ + hash.$O\ main.$O\ - jisho.$O </sys/src/cmd/mkone |