35 #define EXTENDED_HANGUL
38 #define PUA_START 0xE000
39 #define PUA_END 0xE8FF
40 #define MAX_GLYPHS (PUA_END - PUA_START + 1)
50 #define CHO_UNICODE_START 0x1100
51 #define CHO_UNICODE_END 0x115E
52 #define CHO_EXTA_UNICODE_START 0xA960
53 #define CHO_EXTA_UNICODE_END 0xA97C
55 #define JUNG_UNICODE_START 0x1161
56 #define JUNG_UNICODE_END 0x11A7
57 #define JUNG_EXTB_UNICODE_START 0xD7B0
58 #define JUNG_EXTB_UNICODE_END 0xD7C6
60 #define JONG_UNICODE_START 0x11A8
61 #define JONG_UNICODE_END 0x11FF
62 #define JONG_EXTB_UNICODE_START 0xD7CB
63 #define JONG_EXTB_UNICODE_END 0xD7FB
69 #define NCHO_MODERN 19
70 #define NCHO_ANCIENT 76
72 #define NCHO_EXTA_RSRVD 3
74 #define NJUNG_MODERN 21
75 #define NJUNG_ANCIENT 50
77 #define NJUNG_EXTB_RSRVD 4
79 #define NJONG_MODERN 27
80 #define NJONG_ANCIENT 61
82 #define NJONG_EXTB_RSRVD 4
88 #define CHO_VARIATIONS 6
89 #define JUNG_VARIATIONS 3
90 #define JONG_VARIATIONS 1
96 #define CHO_HEX 0x0001
99 #define CHO_ANCIENT_HEX (CHO_HEX + CHO_VARIATIONS * NCHO_MODERN)
102 #define CHO_EXTA_HEX (CHO_ANCIENT_HEX + CHO_VARIATIONS * NCHO_ANCIENT)
105 #define CHO_LAST_HEX (CHO_EXTA_HEX + CHO_VARIATIONS * (NCHO_EXTA + NCHO_EXTA_RSRVD) - 1)
108 #define JUNG_HEX (CHO_LAST_HEX + 1)
111 #define JUNG_ANCIENT_HEX (JUNG_HEX + JUNG_VARIATIONS * NJUNG_MODERN)
114 #define JUNG_EXTB_HEX (JUNG_ANCIENT_HEX + JUNG_VARIATIONS * NJUNG_ANCIENT)
117 #define JUNG_LAST_HEX (JUNG_EXTB_HEX + JUNG_VARIATIONS * (NJUNG_EXTB + NJUNG_EXTB_RSRVD) - 1)
120 #define JONG_HEX (JUNG_LAST_HEX + 1)
123 #define JONG_ANCIENT_HEX (JONG_HEX + JONG_VARIATIONS * NJONG_MODERN)
126 #define JONG_EXTB_HEX (JONG_ANCIENT_HEX + JONG_VARIATIONS * NJONG_ANCIENT)
129 #define JONG_LAST_HEX (JONG_EXTB_HEX + JONG_VARIATIONS * (NJONG_EXTB + NJONG_EXTB_RSRVD) - 1)
132 #define JAMO_HEX 0x0500
133 #define JAMO_END 0x05FF
136 #define JAMO_EXTA_HEX 0x0600
137 #define JAMO_EXTA_END 0x061F
140 #define JAMO_EXTB_HEX 0x0620
141 #define JAMO_EXTB_END 0x066F
148 #ifdef EXTENDED_HANGUL
150 #define TOTAL_CHO (NCHO_MODERN + NCHO_ANCIENT + NCHO_EXTA )
151 #define TOTAL_JUNG (NJUNG_MODERN + NJUNG_ANCIENT + NJUNG_EXTB)
152 #define TOTAL_JONG (NJONG_MODERN + NJONG_ANCIENT + NJONG_EXTB)
156 #define TOTAL_CHO (NCHO_MODERN + NCHO_ANCIENT )
157 #define TOTAL_JUNG (NJUNG_MODERN + NJUNG_ANCIENT)
158 #define TOTAL_JONG (NJONG_MODERN + NJONG_ANCIENT)
171 int *initial,
int *medial,
int *
final);
175 int *cho_index,
int *jung_index,
int *jong_index);
177 int *cho_var,
int *jung_var,
int *jong_var);
179 int cho_variation (
int choseong,
int jungseong,
int jongseong);
184 unsigned char hangul_base[][32],
unsigned char *syllable);
187 unsigned *combined_glyph);
189 unsigned jamo,
unsigned *jamo_glyph);
191 unsigned cho,
unsigned jung,
unsigned jong,
192 unsigned *combined_glyph);
193 void print_glyph_txt (FILE *fp,
unsigned codept,
unsigned *this_glyph);
194 void print_glyph_hex (FILE *fp,
unsigned codept,
unsigned *this_glyph);
void print_glyph_hex(FILE *fp, unsigned codept, unsigned *this_glyph)
Print one glyph in Unifont hexdraw hexadecimal string style.
void one_jamo(unsigned glyph_table[MAX_GLYPHS][16], unsigned jamo, unsigned *jamo_glyph)
Convert Hangul Jamo choseong, jungseong, and jongseong into a glyph.
void combined_jamo(unsigned glyph_table[MAX_GLYPHS][16], unsigned cho, unsigned jung, unsigned jong, unsigned *combined_glyph)
Convert Hangul Jamo choseong, jungseong, and jongseong into a glyph.
void print_glyph_txt(FILE *fp, unsigned codept, unsigned *this_glyph)
Print one glyph in Unifont hexdraw plain text style.
unsigned hangul_read_base8(FILE *infp, unsigned char base[][32])
Read hangul-base.hex file into a unsigned char array.
int is_wide_vowel(int vowel)
Whether vowel has rightmost vertical stroke to the right.
void hangul_hex_indices(int choseong, int jungseong, int jongseong, int *cho_index, int *jung_index, int *jong_index)
Determine index values to the bitmaps for a syllable's components.
void hangul_decompose(unsigned codept, int *initial, int *medial, int *final)
Decompose a Hangul Syllables code point into three letters.
int glyph_overlap(unsigned *glyph1, unsigned *glyph2)
See if two glyphs overlap.
void hangul_variations(int choseong, int jungseong, int jongseong, int *cho_var, int *jung_var, int *jong_var)
Determine the variations of each letter in a Hangul syllable.
void combine_glyphs(unsigned *glyph1, unsigned *glyph2, unsigned *combined_glyph)
Combine two glyphs into one glyph.
int jong_variation(int choseong, int jungseong, int jongseong)
Return the Johab 6/3/1 jongseong variation.
int cho_variation(int choseong, int jungseong, int jongseong)
Return the Johab 6/3/1 choseong variation for a syllable.
int jung_variation(int choseong, int jungseong, int jongseong)
Return the Johab 6/3/1 jungseong variation.
void hangul_syllable(int choseong, int jungseong, int jongseong, unsigned char hangul_base[][32], unsigned char *syllable)
Given letters in a Hangul syllable, return a glyph.
unsigned hangul_compose(int initial, int medial, int final)
Compose a Hangul syllable into a code point, or 0 if none exists.
unsigned hangul_read_base16(FILE *infp, unsigned base[][16])
Read hangul-base.hex file into a unsigned array.
#define MAX_GLYPHS
An OpenType font has at most 65536 glyphs.