35#define EXTENDED_HANGUL  
   38#define PUA_START   0xE000 
   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   
   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    
   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);
 
  179int  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);
 
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.