1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
3 <title>Generating Hangul Syllables</title>
4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5 <meta name="description" content="GNU Unifont free software utilities">
6 <meta name="keywords" content="Unicode, tutorial, Unifont, GNU, software, programs, utilities, font, characters, glyphs">
7 <link rel="stylesheet" type="text/css" href="hangul-generation_files/unifoundry.css">
9 <body bgcolor="#ffffcc" text="#000000">
10 <div class="container">
13 <h1 class="header" align="center">Uni<i>foundry</i>.com</h1>
14 <h2 class="header" align="center">Generating Hangul Syllables (U+AC00..U+D7A3)</h2>
18 <a class="button" href="http://unifoundry.com/index.html">Home</a><br>
19 <a class="button" href="http://unifoundry.com/unifont.html">GNU Unifont</a><br>
20 <a class="button" href="http://unifoundry.com/unicode-utilities.html">Unicode Utilities</a><br>
21 <a class="button" href="http://unifoundry.com/unicode-tutorial.html">Unicode Tutorial</a><br>
22 <a class="button" href="http://unifoundry.com/hangul/index.html">Hangul Fonts</a><br>
23 <b>Syllables</b><br>
24 <a class="button" href="http://www.unifoundry.com/pub">Downloads</a>
29 Hangul is the syllabic writing system used by Koreans to write
30 the Korean language. Syllables are written with an initial
31 consonant, a middle vowel or dipthong, and optionally one or two
32 final consonants. This web page assumes that you already have
33 basic familiarity with Hangul and are interested in creating
34 a Hangul Syllables font. The bulk of this page describes how
35 the Hanterm Johab glyph arrangement has been used to generate
36 Unicode's Hangul Syllables. The ideas behind arrangement of
37 the Hanterm Johab fonts will hopefully save others who are
38 looking to create their own Hangul font a great deal of time.
41 For each syllable, the modern Korean alphabet
42 uses 19 possible initial consonants, 21 possible vowels and
43 dipthongs, and 26 possible final single or double consonants
44 or no final consonant.
45 Therefore, the modern Hangul alphabet allows writing up to
46 19 × 21 × 27 = 11,172 unique syllables.
49 Drawing 11,172 separate glyphs would be a daunting task.
50 Fortunately, the regular nature of Hangul syllable formation
51 allows creation of the entire Hangul Syllables block from
52 a few variations of each character.
56 I could not find a set of Hangul Syllables that was licensed
57 under the GNU GPL unencumbered by any other restrictions, and so
58 embarked on creating an entirely new set from scratch.
61 Most work on bitmapped Hangul fonts was done more than
62 ten years before I began this effort. The world has
63 for the most part moved on to TrueType fonts, and I
64 could not find documentation in English about
65 the earlier formats anywhere on the web.
66 So along with creating a new set of Hangul Syllables,
67 I wrote this web page to document my findings for
68 the benefit of others.
72 "Johab" fonts refer to the Korean font standard KS C-5601-1992,
73 later renamed to KS X 1001:1992, which supports encoding
74 all possible syllables that are in modern use, as well as
75 encoding historical characters separately. This character
76 set is assigned to Microsoft Windows Code Page 1361.
77 "Wansung" refers to the earlier KS C-5601-1987 standard
78 (assigned to Microsoft Windows Code Page 949).
81 I've encountered two main Hangul font encodings of variations
82 of the component characters that form syllables. Hanterm
83 supports both of them.
84 For one of them, there was a Perl script that Jungsik Shin
85 wrote for the Unifont effort. It was easy to follow, and
86 I had already modified it so I was familiar with it.
87 For the other font encoding, commonly referred to as
88 Johab 8/4/4, I could only find one Python script that was
89 a translation of an earlier Perl script (which I could not
90 find). Although Hanterm handles both of those encodings,
91 Hanterm is a much larger program than these two scripts and
92 so is a lot more difficult to follow.
94 <h3>Johab Base Font for Unifont</h3>
96 The system for arranging variations of Hangul letters into
97 syllables that Unifont has used from its beginning is taken from
98 the Hanterm Johab font encoding structure described in this section.
99 This font encoding uses:
102 <li>1 blank filler glyph, at position 0 in the font</li>
103 <li>10 variations for each initial consonant, at 0x001..0x126</li>
104 <li>3 or 4 variations for each vowel or dipthong, at 0x127..0x194</li>
105 <li>4 variations for each final consonant, at 0x195..0x210</li>
108 This comes out to a little more than 500 glyphs, which is a lot
109 easier to draw than over 11,000. There's a small catch with this
110 encoding, though: some ancient letters are thrown in for
111 rendering of ancient Hangul words. You don't need these to
112 generate the Unicode Hangul Syllalbes block, so you can draw them
113 or omit them as you please. For completeness, I drew them in the
114 Johab-type font I created.
117 A picture is worth a thousand words, so let's start by taking
118 a look at the Korean alphabet. These tables show the ordering in
119 the Johab fonts used by Hanterm, including the ancient characters.
120 Note that the modern characters appear in the same relative order
121 as in the Unicode U+1100..U+11FF Hangul code block,
122 but the ancient characters are not in the same relative order as
123 in Unicode. Also, there are a lot of ancient characters in the
124 Unicode U+1100..U+11FF block that do not appear in the Johab-type
128 <table cellpadding="10">
131 <table border="1" cellpadding="2">
132 <tbody><tr><th colspan="4">Initial Consonants</th></tr>
133 <tr><th>Order</th><th>Glyph</th><th>Unicode</th><th>Font Range</th></tr>
134 <tr><td align="center"> 1</td><td align="center">ᄀ</td><td align="left">U+1100</td><td>0x001..0x00A</td></tr>
135 <tr><td align="center"> 2</td><td align="center">ᄁ</td><td align="left">U+1101</td><td>0x00B..0x014</td></tr>
136 <tr><td align="center"> 3</td><td align="center">ᄂ</td><td align="left">U+1102</td><td>0x015..0x01E</td></tr>
137 <tr><td align="center"> 4</td><td align="center">ᄃ</td><td align="left">U+1103</td><td>0x01F..0x028</td></tr>
138 <tr><td align="center"> 5</td><td align="center">ᄄ</td><td align="left">U+1104</td><td>0x029..0x032</td></tr>
139 <tr><td align="center"> 6</td><td align="center">ᄅ</td><td align="left">U+1105</td><td>0x033..0x03C</td></tr>
140 <tr><td align="center"> 7</td><td align="center">ᄆ</td><td align="left">U+1106</td><td>0x03D..0x046</td></tr>
141 <tr><td align="center"> 8</td><td align="center">ᄇ</td><td align="left">U+1107</td><td>0x047..0x051</td></tr>
142 <tr><td align="center"> 9</td><td align="center">ᄈ</td><td align="left">U+1108</td><td>0x052..0x05A</td></tr>
143 <tr><td align="center">10</td><td align="center">ᄉ</td><td align="left">U+1109</td><td>0x05B..0x064</td></tr>
144 <tr><td align="center">11</td><td align="center">ᄊ</td><td align="left">U+110A</td><td>0x065..0x06E</td></tr>
145 <tr><td align="center">12</td><td align="center">ᄋ</td><td align="left">U+110B</td><td>0x06F..0x078</td></tr>
146 <tr><td align="center">13</td><td align="center">ᄌ</td><td align="left">U+110C</td><td>0x079..0x082</td></tr>
147 <tr><td align="center">14</td><td align="center">ᄍ</td><td align="left">U+110D</td><td>0x083..0x08C</td></tr>
148 <tr><td align="center">15</td><td align="center">ᄎ</td><td align="left">U+110E</td><td>0x08D..0x096</td></tr>
149 <tr><td align="center">16</td><td align="center">ᄏ</td><td align="left">U+110F</td><td>0x097..0x0A0</td></tr>
150 <tr><td align="center">17</td><td align="center">ᄐ</td><td align="left">U+1110</td><td>0x0A1..0x0AA</td></tr>
151 <tr><td align="center">18</td><td align="center">ᄑ</td><td align="left">U+1111</td><td>0x0AB..0x0B4</td></tr>
152 <tr><td align="center">19</td><td align="center">ᄒ</td><td align="left">U+1112</td><td>0x0B5..0x0BE</td></tr>
153 <tr><td colspan="4" align="center"><b>Ancient</b></td></tr>
154 <tr><td align="center">20</td><td align="center">ᄫ</td><td align="left">U+112B</td><td>0x0BF..0x0C8</td></tr>
155 <tr><td align="center">21</td><td align="center">ᄞ</td><td align="left">U+111E</td><td>0x0C9..0x0D2</td></tr>
156 <tr><td align="center">22</td><td align="center">ᄭ</td><td align="left">U+112D</td><td>0x0D3..0x0DC</td></tr>
157 <tr><td align="center">23</td><td align="center">ᄠ</td><td align="left">U+1120</td><td>0x0DD..0x0E6</td></tr>
158 <tr><td align="center">24</td><td align="center">ᄯ</td><td align="left">U+112F</td><td>0x0E7..0x0F0</td></tr>
159 <tr><td align="center">25</td><td align="center">ᄲ</td><td align="left">U+1132</td><td>0x0F1..0x0FA</td></tr>
160 <tr><td align="center">26</td><td align="center">ᄡ</td><td align="left">U+1121</td><td>0x0FB..0x104</td></tr>
161 <tr><td align="center">27</td><td align="center">ᅀ</td><td align="left">U+1140</td><td>0x105..0x10E</td></tr>
162 <tr><td align="center">28</td><td align="center">ᅌ</td><td align="left">U+114C</td><td>0x10F..0x118</td></tr>
163 <tr><td align="center">29</td><td align="center">ᄧ</td><td align="left">U+1127</td><td>0x119..0x122</td></tr>
164 <tr><td align="center">30</td><td align="center">ᄶ</td><td align="left">U+1136</td><td>0x123..0x12C</td></tr>
165 <tr><td align="center">31</td><td align="center">ᅙ</td><td align="left">U+1159</td><td>0x12D..0x136</td></tr>
169 <table border="1" cellpadding="2">
170 <tbody><tr><th colspan="4">Vowels & Dipthongs</th></tr>
171 <tr><th>Order</th><th>Glyph</th><th>Unicode</th><th>Font Range</th></tr>
172 <tr><td align="center"> 1</td><td align="center">ᅡ</td><td align="left">U+1161</td><td>0x137..0x139</td></tr>
173 <tr><td align="center"> 2</td><td align="center">ᅢ</td><td align="left">U+1162</td><td>0x13A..0x13C</td></tr>
174 <tr><td align="center"> 3</td><td align="center">ᅣ</td><td align="left">U+1163</td><td>0x13D..0x13F</td></tr>
175 <tr><td align="center"> 4</td><td align="center">ᅤ</td><td align="left">U+1164</td><td>0x140..0x142</td></tr>
176 <tr><td align="center"> 5</td><td align="center">ᅥ</td><td align="left">U+1165</td><td>0x143..0x145</td></tr>
177 <tr><td align="center"> 6</td><td align="center">ᅦ</td><td align="left">U+1166</td><td>0x146..0x148</td></tr>
178 <tr><td align="center"> 7</td><td align="center">ᅧ</td><td align="left">U+1167</td><td>0x149..0x14B</td></tr>
179 <tr><td align="center"> 8</td><td align="center">ᅨ</td><td align="left">U+1168</td><td>0x14C..0x14E</td></tr>
180 <tr><td align="center"> 9</td><td align="center">ᅩ</td><td align="left">U+1169</td><td>0x14F..0x152</td></tr>
181 <tr><td align="center">10</td><td align="center">ᅪ</td><td align="left">U+116A</td><td>0x153..0x156</td></tr>
182 <tr><td align="center">11</td><td align="center">ᅫ</td><td align="left">U+116B</td><td>0x157..0x15A</td></tr>
183 <tr><td align="center">12</td><td align="center">ᅬ</td><td align="left">U+116C</td><td>0x15B..0x15E</td></tr>
184 <tr><td align="center">13</td><td align="center">ᅭ</td><td align="left">U+116D</td><td>0x15F..0x162</td></tr>
185 <tr><td align="center">14</td><td align="center">ᅮ</td><td align="left">U+116E</td><td>0x163..0x165</td></tr>
186 <tr><td align="center">15</td><td align="center">ᅯ</td><td align="left">U+116F</td><td>0x166..0x168</td></tr>
187 <tr><td align="center">16</td><td align="center">ᅰ</td><td align="left">U+1170</td><td>0x169..0x16B</td></tr>
188 <tr><td align="center">17</td><td align="center">ᅱ</td><td align="left">U+1171</td><td>0x16C..0x16E</td></tr>
189 <tr><td align="center">18</td><td align="center">ᅲ</td><td align="left">U+1172</td><td>0x16F..0x171</td></tr>
190 <tr><td align="center">19</td><td align="center">ᅳ</td><td align="left">U+1173</td><td>0x172..0x175</td></tr>
191 <tr><td align="center">20</td><td align="center">ᅴ</td><td align="left">U+1174</td><td>0x176..0x179</td></tr>
192 <tr><td align="center">21</td><td align="center">ᅵ</td><td align="left">U+1175</td><td>0x17A..0x17C</td></tr>
193 <tr><td colspan="4" align="center"><b>Ancient</b></td></tr>
194 <tr><td align="center">22</td><td align="center">ᅹ</td><td align="left">U+1179</td><td>0x17A..0x17F</td></tr>
195 <tr><td align="center">23</td><td align="center">ᆅ</td><td align="left">U+1185</td><td>0x180..0x182</td></tr>
196 <tr><td align="center">24</td><td align="center">ᆈ</td><td align="left">U+1188</td><td>0x183..0x185</td></tr>
197 <tr><td align="center">25</td><td align="center">ᆑ</td><td align="left">U+1191</td><td>0x186..0x188</td></tr>
198 <tr><td align="center">26</td><td align="center">ᆒ</td><td align="left">U+1192</td><td>0x189..0x18B</td></tr>
199 <tr><td align="center">27</td><td align="center">ᆔ</td><td align="left">U+1194</td><td>0x18C..0x18E</td></tr>
200 <tr><td align="center">28</td><td align="center">ᆞ</td><td align="left">U+119E</td><td>0x18F..0x191</td></tr>
201 <tr><td align="center">29</td><td align="center">ᆡ</td><td align="left">U+11A1</td><td>0x192..0x194</td></tr>
202 <tr><td colspan="4"> </td></tr>
203 <tr><td colspan="4"> </td></tr>
207 <table border="1" cellpadding="2">
208 <tbody><tr><th colspan="4">Final Consonants</th></tr>
209 <tr><th>Order</th><th>Glyph</th><th>Unicode</th><th>Font Range</th></tr>
210 <tr><td align="center"> 1</td><td align="center">ᆨ</td><td align="left">U+11A8</td><td>0x195..0x198</td></tr>
211 <tr><td align="center"> 2</td><td align="center">ᆩ</td><td align="left">U+11A9</td><td>0x199..0x19C</td></tr>
212 <tr><td align="center"> 3</td><td align="center">ᆪ</td><td align="left">U+11AA</td><td>0x19D..0x1A0</td></tr>
213 <tr><td align="center"> 4</td><td align="center">ᆫ</td><td align="left">U+11AB</td><td>0x1A1..0x1A4</td></tr>
214 <tr><td align="center"> 5</td><td align="center">ᆬ</td><td align="left">U+11AC</td><td>0x1A5..0x1A8</td></tr>
215 <tr><td align="center"> 6</td><td align="center">ᆭ</td><td align="left">U+11AD</td><td>0x1A9..0x1AC</td></tr>
216 <tr><td align="center"> 7</td><td align="center">ᆮ</td><td align="left">U+11AE</td><td>0x1AD..0x1B0</td></tr>
217 <tr><td align="center"> 8</td><td align="center">ᆯ</td><td align="left">U+11AF</td><td>0x1B1..0x1B4</td></tr>
218 <tr><td align="center"> 9</td><td align="center">ᆰ</td><td align="left">U+11B0</td><td>0x1B5..0x1B8</td></tr>
219 <tr><td align="center">10</td><td align="center">ᆱ</td><td align="left">U+11B1</td><td>0x1B9..0x1BC</td></tr>
220 <tr><td align="center">11</td><td align="center">ᆲ</td><td align="left">U+11B2</td><td>0x1BD..0x1C0</td></tr>
221 <tr><td align="center">12</td><td align="center">ᆳ</td><td align="left">U+11B3</td><td>0x1C1..0x1C4</td></tr>
222 <tr><td align="center">13</td><td align="center">ᆴ</td><td align="left">U+11B4</td><td>0x1C5..0x1C8</td></tr>
223 <tr><td align="center">14</td><td align="center">ᆵ</td><td align="left">U+11B5</td><td>0x1C9..0x1CC</td></tr>
224 <tr><td align="center">15</td><td align="center">ᆶ</td><td align="left">U+11B6</td><td>0x1CD..0x1D0</td></tr>
225 <tr><td align="center">16</td><td align="center">ᆷ</td><td align="left">U+11B7</td><td>0x1D1..0x1D4</td></tr>
226 <tr><td align="center">17</td><td align="center">ᆸ</td><td align="left">U+11B8</td><td>0x1D5..0x1D8</td></tr>
227 <tr><td align="center">18</td><td align="center">ᆹ</td><td align="left">U+11B9</td><td>0x1D9..0x1DC</td></tr>
228 <tr><td align="center">19</td><td align="center">ᆺ</td><td align="left">U+11BA</td><td>0x1DD..0x1E0</td></tr>
229 <tr><td align="center">20</td><td align="center">ᆻ</td><td align="left">U+11BB</td><td>0x1E1..0x1E4</td></tr>
230 <tr><td align="center">21</td><td align="center">ᆼ</td><td align="left">U+11BC</td><td>0x1E5..0x1E8</td></tr>
231 <tr><td align="center">22</td><td align="center">ᆽ</td><td align="left">U+11BD</td><td>0x1E9..0x1EC</td></tr>
232 <tr><td align="center">23</td><td align="center">ᆾ</td><td align="left">U+11BE</td><td>0x1ED..0x1F0</td></tr>
233 <tr><td align="center">24</td><td align="center">ᆿ</td><td align="left">U+11BF</td><td>0x1F1..0x1F4</td></tr>
234 <tr><td align="center">25</td><td align="center">ᇀ</td><td align="left">U+11C0</td><td>0x1F5..0x1F8</td></tr>
235 <tr><td align="center">26</td><td align="center">ᇁ</td><td align="left">U+11C1</td><td>0x1F9..0x1FC</td></tr>
236 <tr><td align="center">27</td><td align="center">ᇂ</td><td align="left">U+11C2</td><td>0x1FD..0x200</td></tr>
237 <tr><td colspan="4" align="center"><b>Ancient</b></td></tr>
238 <tr><td align="center">28</td><td align="center">ᇙ</td><td align="left">U+11D9</td><td>0x201..0x204</td></tr>
239 <tr><td align="center">29</td><td align="center">ᇚ</td><td align="left">U+11DA</td><td>0x205..0x208</td></tr>
240 <tr><td align="center">30</td><td align="center">ᇹ</td><td align="left">U+11F9</td><td>0x209..0x20C</td></tr>
241 <tr><td align="center">31</td><td align="center">ᇰ</td><td align="left">U+11F0</td><td>0x20D..0x210</td></tr>
247 <h3>Letter Variations</h3>
249 Having several variations of each letter is the key to
250 producing good-looking Hangul Syllables from a smaller
251 set of glyphs. Jungshik Shin's johab2ucs2 Perl script
252 picks the correct variation for each combination of
253 initial consonant, vowel, and optional final consonant
254 to construct the syllables. This is accomplished using
255 a number of tables in the Perl script.
258 The comments in johab2ucs2 are in ASCII, with the letter
259 names spelled out. What follows below is an explanation
260 actually showing the Hangul letters.
263 Initial consonants (choseong) each have 10 variations.
264 The first 5 are used without a final consonant (C+V) so they are
265 taller, and the last 5 are used with a final consonant (C+V+C′).
266 The particular variation depends upon the vowel following the initial
267 consonant. Here's a table showing the initial consonant variation that
268 applies for each vowel:
270 <table border="2" cellpadding="5" align="center">
272 <th colspan="2" align="center">Syllable</th>
275 <th align="center">C+V</th>
276 <th align="center">C+V+C′</th>
277 <th align="center">With Modern</th>
278 <th align="center">With Ancient</th>
279 <th align="center">Examples</th>
282 <td align="center">1</td><td align="center">6</td>
288 <td>가, 각, 간, 나, 낛, 난</td>
291 <td align="center">2</td><td align="center">7</td>
294 <td>고, 곡, 곤, 노, 녻, 논</td>
297 <td align="center">3</td><td align="center">8</td>
300 <td>규, 귝, 균, 뉴, 뉷, 뉸</td>
303 <td align="center">4</td><td align="center">9</td>
306 <td>과, 곽, 관, 놔, 놗, 놘</td>
309 <td align="center">5</td><td align="center">10</td>
312 <td>궤, 궥, 궨, 눼, 눿, 뉀</td>
316 If you wish to draw your own Hangul Syllables block and use
317 this set of variations, as you look through the glyphs consider
318 the nine general patterns generated by taking the three possible
319 vowel placements (only on the right, only in the middle, and both
320 on the right and in the middle) times the three possible final
321 consonant placements (no final consonant, one final consonant, and
322 two final consonants next to each other). After this, get into
323 more case-specific details. Vowels with 3 variations treat
324 the final consonant ᆫ (N, nieun) as a special case.
327 Examples of all these cases appear in the "Examples" column in the
328 table of initial consonants above. From these examples, you can
333 If there's no final consonant, the initial consonant and the
334 vowel or dipthong that follows can be taller. The initial
335 consonant variations 1–5 are therefore taller than
339 If the initial consonant is ᄀ (G, or kiyeok), it is
340 drawn with a curve when a vowel mark is not underneath it,
341 but with more of a short, straight line when a vowel mark is drawn
342 underneath it. Although not shown in the examples, the same is
343 true of initial ᄏ (K, or khieukh, the aspirated G).
344 The initial consonant variations 1 and 6 for ᄀ and
345 ᄏ have an extended curve that other variations of these
346 two initial consonants do not have.
349 If the initial consonant is ᄀ (G, or kiyeok) and it is
350 followed with a vowel underneath that has an upward stroke,
351 the stroke can extend further upward than for initial consonants
352 such as ᆫ because of the open space underneath
353 ᄀ. Although not shown in the examples, the same is
354 true of initial ᄏ (K, or khieukh, the aspirated G).
355 The initial consonant variations 2, 4, 7, and 9 for
356 ᄀ and ᄏ allow a different appearance as a result.
359 If the final consonant is ᆫ (N, or nieun), any vowel
360 appearing on the right-hand side of the syllable can be drawn
361 longer so it extends into the open space above the
362 ᆫ. This does not affect the initial consonant's
363 appearance, but it does affect the vowel's appearance,
364 as we shall see next.
368 Each vowel or dipthong has 3 or 4 variations. If there are just
369 3 variations, they are applied as follows:
371 <table border="2" cellpadding="5" align="center">
373 <th>Variation</th><th>When Used</th><th>Appearance</th>
376 <td align="center">1</td>
377 <td>No final consonant.</td>
378 <td>Taller than default.</td>
381 <td align="center">2</td>
382 <td>Final consonant isn't ᆫ.</td>
383 <td>Default size.</td>
386 <td align="center">3</td>
387 <td>Final consonant is ᆫ.</td>
388 <td>Right-hand side can extend further down.</td>
392 Modern vowels or dipthongs that contain
393 ᅩ, ᅭ, or ᅳ each have 4 variations.
396 ᅳ, and ᅴ. These vowels have variations
397 based on whether the initial consonant is
398 ᄀ, ᄏ, or something else, and whether
399 or not there is a final consonant in the syllable.
400 All other vowels and dipthongs, including the ancient ones,
401 only have 3 variations each.
402 If a vowel or dipthong has 4 variations,
403 they are applied as follows:
405 <table border="2" cellpadding="5" align="center">
407 <th>Variation</th><th>When Used</th><th>Appearance</th>
410 <td align="center">1</td>
411 <td>Initial consonant is ᄀ or ᄏ; no final consonant</td>
412 <td>Taller than default with vertical stroke extending upward more.</td>
415 <td align="center">2</td>
416 <td>Initial consonant isn't ᄀ or ᄏ; no final consonant</td>
417 <td>Default stroke underneath but taller.</td>
420 <td align="center">3</td>
421 <td>Initial consonant is ᄀ or ᄏ with final consonant</td>
422 <td>Default size but longer vertical stroke underneath.</td>
425 <td align="center">4</td>
426 <td>Initial consonant isn't ᄀ or ᄏ with final consonant</td>
427 <td>Default size.</td>
431 Lastly, each final consonant has 4 variations, depending on the vowel
432 or dipthong that precedes it:
434 <table border="2" cellpadding="5" align="center">
436 <th>Variation</th><th>With Modern</th><th>With Ancient</th>
439 <td align="center">1</td>
441 Filler, ᅡ, ᅣ, ᅪ, ᅫ, ᅬ,
447 <td align="center">2</td>
448 <td>ᅥ, ᅧ, ᅯ, ᅰ, ᅱ, ᅵ</td>
452 <td align="center">3</td>
457 <td align="center">4</td>
458 <td>ᅩ, ᅭ, ᅮ, ᅲ, ᅳ</td>
463 There is no "Filler" combination in the Hangul Syllalbes block,
464 where a syllable can contain an initial consonant and a final
465 consonant, but no vowel. The "Filler" entry is included just
466 to explain that case with this type of Johab font in general.
467 As for the appearance of other final consonant variations based
468 upon the preceding vowels, they should be drawn so that a
469 balance is achieved between the top half and left half of a
470 syllable, and between the left half and right half of a syllable.
473 Here are the three bitmap files showing the glyphs from which
474 the Hangul Syllables Unicode block is generated:
479 <td align="center"><b>hanbase-00.bmp:</b></td>
483 <img src="hangul-generation_files/hanbase-00.bmp" alt="Hangul base glyphs, first bitmap" height="544" width="576">
487 <td align="center"><b>hanbase-01.bmp:</b></td>
491 <img src="hangul-generation_files/hanbase-01.bmp" alt="Hangul base glyphs, second bitmap" height="544" width="576">
495 <td align="center"><b>hanbase-02.bmp:</b></td>
499 <img src="hangul-generation_files/hanbase-02.bmp" alt="Hangul base glyphs, third bitmap" height="544" width="576">
505 To modify the font, I recommend the following general steps:
509 Have an idea of the grid you will use. For example, you might
510 want all syllables centered in a grid, or left-justified, or you
511 might want to guarantee that there is a perimeter of one or more
512 blank pixels on the outer edges of each syllable.
515 Start drawing from the bottom up, with the final consonants.
516 Consider the minimum vertical space you will need to draw
517 ᄅ (rieul) and similar final consonants. Use that
518 minimum height as your starting point to generate a first set
519 of all final consonants.
522 Combine these in your grid with various vowel combinations,
523 so that the result looks balanced:
525 <li>Vowels only on the right</li>
526 <li>Vowels only in the middle</li>
527 <li>Vowels on the right and in the middle</li>
531 Finally, draw the initial consonants to fit in the space
536 Be prepared to go through numerous iterations of adjustment
537 to get the syllables to the stage where you are satisfied.
538 If you're after perfection, you could then hand-tune each of
539 the 11,172 resulting Hangul Syllables glyphs.
541 <h3>Generating the Syllables</h3>
543 Equipped with your carefully drawn and cross-checked Johab font,
544 you can superimpose an initial consonant, vowel, and optional
545 final consonant to construct all of the Hangul Syllables.
546 Here's the basic algorithm:
548 <pre> code_point = U+AC00 /* Starting point of Hangul Syllables */
549 for all (19 modern initial consonants) {
550 for all (21 modern vowels) {
551 for all (28 filler and modern final consonants) {
552 superimpose the 2 or 3 components
553 output the glyph for this code point
554 increment code_point by 1
560 That algorithm, in a nutshell, is what johab2ucs2 does.
561 This will generate 19 × 21 × 28 = 11,172 syllables,
562 in the order in which they appear in the Unicode Standard.
563 The table below shows the starting Unicode code point of each
564 initial consonant in the Hangul Syllables block.
566 <table border="2" cellpadding="2" align="center">
567 <tbody><tr><th align="center">Initial<br>Consonant</th><th align="center">Start</th></tr>
568 <tr><td align="center">ᄀ</td><td>U+AC00</td></tr>
569 <tr><td align="center">ᄁ</td><td>U+AE4C</td></tr>
570 <tr><td align="center">ᄂ</td><td>U+B098</td></tr>
571 <tr><td align="center">ᄃ</td><td>U+B2E4</td></tr>
572 <tr><td align="center">ᄄ</td><td>U+B530</td></tr>
573 <tr><td align="center">ᄅ</td><td>U+B77C</td></tr>
574 <tr><td align="center">ᄆ</td><td>U+B9C8</td></tr>
575 <tr><td align="center">ᄇ</td><td>U+BC14</td></tr>
576 <tr><td align="center">ᄈ</td><td>U+BE60</td></tr>
577 <tr><td align="center">ᄉ</td><td>U+C0AC</td></tr>
578 <tr><td align="center">ᄊ</td><td>U+C2F8</td></tr>
579 <tr><td align="center">ᄋ</td><td>U+C544</td></tr>
580 <tr><td align="center">ᄌ</td><td>U+C790</td></tr>
581 <tr><td align="center">ᄍ</td><td>U+C9DC</td></tr>
582 <tr><td align="center">ᄎ</td><td>U+CC28</td></tr>
583 <tr><td align="center">ᄏ</td><td>U+CE74</td></tr>
584 <tr><td align="center">ᄐ</td><td>U+D0C0</td></tr>
585 <tr><td align="center">ᄑ</td><td>U+D30C</td></tr>
586 <tr><td align="center">ᄒ</td><td>U+D558</td></tr>
588 <h3>Hangul Syllables Tools</h3>
590 The following link is a gzipped tarball containing the files
591 that I used to generate the Hangul Syllables block:
592 <a href="http://www.unifoundry.com/hangul.tar.gz">
593 http://www.unifoundry.com/hangul.tar.gz</a>.
594 You'll also need to install Perl and the main Unifont programs
595 unibmp2hex and hex2bdf before building the syllables.
596 The files in this tar file are:
600 <b>hangul-generation.html:</b> This web page, as documentation.
603 <b>hanbase-00.bmp, hanbase-01.bmp,</b> and <b>hanbase-02.bmp:</b>
604 These are the bitmap graphics files of the individual glyphs
605 that I drew. These get superimposed upon each other to form
606 the Hangul Syllables.
609 <b>johab2ucs2:</b> to be on the safe side, the exact version of the
610 johab2ucs2 Perl script that I used to generate the Hangul Syllables.
611 Note that the Unifont distribution also contains a copy of
615 <b>unifontksx:</b> Perl script to read a Unifont .hex file, extract
616 the 2,350 pre-formed Hangul syllables defined in KS X 1001, and
617 generate glyphs with unihex2bmp (part of the Unifont distribution
621 <b>Makefile:</b> the "make" file. Type "make" to make the output
622 .hex font files and bitmapped images of syllables. Type
623 "make clean" to remove these files. Typing "make" will create:
626 <b>hangul-base.hex:</b> a Unifont .hex style encoding of the
627 base glyphs that will form the Hangul Syllables block.
628 This is created with unibmp2hex, part of the Unifont
629 distribution on this site.
632 <b>hangul-base.bdf:</b> a BDF font file with the same font
633 structure that Hanterm uses for Hangul syllables, which
634 johab2ucs2 reads to generate all 11,172 syllables.
635 This is created using hex2bdf, part of the Unifont
636 distribution on this site.
639 <b>hangul-syllables.hex:</b> the set of 11,172 Unicode Hangul
640 Syllables in the block starting at U+AC00. This is
641 created by johab2ucs2, which uses hangul-base.bdf as
645 <b>ksx-syllables.hex:</b> an extraction of hangul-syllables.hex,
646 created by unifontksx, which only contains the subset
647 of Unifont Hangul Syllables that appear in the
648 Republic of Korea's KS X 1001 standard (and the earlier
652 <b>johab2ucs2.1, unifontksx.1:</b> The man pages for
658 <b>syllables:</b> directory that will contain all 11,172 glyphs in the
659 Unifont Hangul Syllables block.
662 <b>ksx-syllables:</b> directory that will contain the subset
663 of Unifont Hangul Syllables that appear in the
664 Republic of Korea's KS X 1001 standard (and the earlier
669 To create the Hangul Syllables as both a Unifont ".hex" file
670 and a "./syllables/" directory of bitmap representations of
671 each of the 11,172 syllables:
674 <li>Install the Unifont programs in your path.</li>
675 <li>Untar the files in hangul.tar.gz.</li>
676 <li>cd into the "hangul" directory.</li>
678 Run "make". This will generate the files
679 "hangul-base.hex" and then "hangul-base.bdf" from the
680 "hanbase-??.bmp" files, and then generate the files
681 "syllables/hangul-AC.bmp" through "syllables/hangul-D7.bmp"
682 from "hangul-syllables.hex". Finally, this will populate
683 the "ksx-syllables/" directory with bitmapped glyphs from
684 the complete Unifont set that comprise the 2,350 syllables
685 defined in KS X 1001.
689 You can inspect the generated bitmap files, modify the
690 "hanbase-??.bmp" files to your heart's content to see how
691 variations carry through to the final syllables,
692 and so on. If you make any improvements, please forward
693 them to me so I can incorporate them into a later version.
694 I haven't spent much time on the ancient letters because
695 my focus was on generating Hangul Syllables from scratch,
696 so there's probably room for improvement at least with them.
700 The files in the hangul.tar.gz archive are
701 distributed under the GNU Public License version 2, or
702 (at your option) a later version, with the exception
703 that embedding the fonts in a document does not in itself
704 constitute a violation of the license agreement.
706 <h3>Other Variation Schemes</h3>
708 What was described above is only one possible scheme for
709 drawing variations to combine into whole syllables. I used
710 it because I had already worked with it. In the end, I haven't found
711 a better scheme, though better schemes are certainly possible.
712 One other font scheme that deserves mention because of its popularity
713 is the Johab 8/4/4 encoding, discussed in the following section.
715 <h3>Johab 8/4/4 Font Layout</h3>
717 Johab 8/4/4 fonts store variations in transposed order compared to the
718 Johab version described above. For example, all 20 of the first variation
719 of initial consonants are stored in sequence, then all 20 of the
720 second variation of initial consonants in sequence, etc.
721 Each type of variation sequence (initial consonant, vowel, and
722 final consonant) begins with a Filler (blank) glyph. Therefore,
723 each variation sequence has one more entry than letters in the
724 modern Hangul alphabet. Presumably this is to allow rendering
725 an individual letter such as a vowel by itself with no initial
729 Johab 8/4/4 fonts have a fixed number of variations for each
730 letter of the modern Hangul alphabet (no ancient letters are
734 <li>Each initial consonant has 8 variations;</li>
735 <li>Each vowel has 4 variations;</li>
736 <li>Each final consonant has 4 variations.</li>
739 This scheme has one aesthetic drawback compared to that used
740 by johab2ucs2: there is no separate vowel form for vertically-drawn
741 vowels when combined with final consonant ᆫ to allow the
742 vowel to extend down further into the space occupied by
743 ᆫ. For example, the syllable 간 looks more filled out
744 and pleasing to the eye if the vowel, ᅡ, extends down below
745 the top half of the syllable.
748 The glyph layout by code point in Johab 8/4/4 fonts are:
752 <b>0..159: Initial Consonants</b>
753 [(Filler + 19 consonants) × 8 variations].<br>
754 This is formed as 8 repetitions of the sequence: Filler,
760 for example, the 8 variations of
761 ᄀ appear at decimal font locations
762 1, 21, 41, 61, 81, 101, 121, and 141.
765 <b>160..247: Vowels</b>
766 [(Filler + 21 vowels) × 4 variations].<br>
767 This is formed as 4 repetitions of the sequence: Filler,
774 for example, the 4 variations of
775 ᅡ appear at decimal font locations
776 161, 183, 205, and 227.
779 <b>248..359: Final Consonants</b>
780 [(Filler + 27 consonants) × 4 variations].<br>
781 This is formed as 4 repetitions of the sequence: Filler,
789 for example, the 4 variations of
790 ᆨ appear at decimal font locations
791 249, 277, 305, and 333.
795 I found one Python script on the net (jo844touni.py)
796 that returned the Hangul
797 component glyphs (initial consonant, vowel, and final consonant)
798 for each code point in the Unicode Hangul Syllables block.
799 What follows is a description based upon reverse-engineering that
800 Python script, and looking at existing "johab844-" fonts for
804 The initial consonant variations are based upon the vowel that follows,
805 and whether or not there is a final consonant. Like the Johab font
806 structure described previously, there are 5 variations when there is
807 no final consonant. Unlike that Johab font structure, there are only
808 3 variations instead of 5 when there <i>is</i> a final consonant.
810 <table border="2" cellpadding="5" align="center">
811 <tbody><tr><th colspan="3" align="center">Johab 8/4/4 Initial Consonants</th></tr>
814 <th align="center">Combining Vowels</th>
815 <th>+ Final<br>Consonant?</th>
818 <td align="center">1</td>
820 Filler, ᅡ, ᅢ, ᅣ, ᅤ, ᅥ,
823 <td align="center">No</td>
826 <td align="center">2</td>
828 <td align="center">No</td>
831 <td align="center">3</td>
833 <td align="center">No</td>
836 <td align="center">4</td>
838 <td align="center">No</td>
841 <td align="center">5</td>
843 <td align="center">No</td>
846 <td align="center">6</td>
848 Filler, ᅡ, ᅢ, ᅣ, ᅤ, ᅥ,
851 <td align="center">Yes</td>
854 <td align="center">7</td>
855 <td>ᅩ, ᅭ, ᅮ, ᅲ, ᅳ</td>
856 <td align="center">Yes</td>
859 <td align="center">8</td>
863 <td align="center">Yes</td>
867 Like the previous Johab font structure, vowels can have 4 variations based
868 upon whether or not the initial consonant is ᄀ or ᄏ, and
869 whether or not there is a final consonant. Unlike the previous Johab font
870 structure, there is no separate variation for the case where the final
871 consonant is ᆫ (N, nieun).
873 <table border="2" cellpadding="5" align="center">
874 <tbody><tr><th colspan="3" align="center">Johab 8/4/4 Vowels</th></tr>
875 <tr><th>Variation</th><th align="center">Initial Consonant =<br>Filler, ᄀ, or ᄏ?</th><th>+ Final<br>Consonant?</th></tr>
876 <tr><td align="center">1</td><td align="center">Yes</td><td align="center">No </td></tr>
877 <tr><td align="center">2</td><td align="center">No </td><td align="center">No </td></tr>
878 <tr><td align="center">3</td><td align="center">Yes</td><td align="center">Yes</td></tr>
879 <tr><td align="center">4</td><td align="center">No </td><td align="center">Yes</td></tr>
882 Also similar to the previous Johab font structure, final consonants each
885 <table border="2" cellpadding="5" align="center">
886 <tbody><tr><th colspan="2" align="center">Johab 8/4/4 Final Consonants</th></tr>
887 <tr><th>Variation</th><th align="center">Combining Vowels</th></tr>
888 <tr><td align="center">1</td><td>Filler, ᅡ, ᅣ, ᅪ</td></tr>
889 <tr><td align="center">2</td><td>ᅥ, ᅧ, ᅬ, ᅯ, ᅱ, ᅴ, ᅵ</td></tr>
890 <tr><td align="center">3</td><td>ᅢ, ᅤ, ᅦ, ᅨ, ᅫ, ᅰ</td></tr>
891 <tr><td align="center">4</td><td>ᅩ, ᅭ, ᅮ, ᅲ, ᅳ</td></tr>
893 <h3>Seeking Perfection</h3>
895 As a final thought, someone seeking perfection in
896 rendering Hangul Syllables could use one of these
897 encoding methods, or a method of their own design,
898 to produce a block of Hangul Syllables as a starting
899 point. From there, each syllable glyph could be
900 hand-tailored as desired.
903 With the current johab2ucs2 algorithm, there are
904 just two cases for drawing every possible vowel plus
905 every possible final consonant: the case where the
906 initial consonant is ᄀ or ᄏ, and the
907 default case (for all other initial consonants).
908 Therefore if you get the spacing worked out with
909 all the syllables formed using the intial consonant
910 ᄀ and, say, the final consonant ᄅ or
911 ᄎ, everything else should fall into place.
912 That is not what I did at first — I made some
913 false starts — but if I were to do it over
914 that is the path I would take.
917 There are 19 modern vowels and 27 final consonants
918 plus a filler (when there is no final consonant),
919 which requires drawing 19 × 28 = 588 glyphs for
920 every possible combination of modern vowel and
921 final consonant (or filler). To allow a separate
922 form when the initial consonant is ᄀ or
923 ᄏ, you'd need twice that number, or 1176 glyphs.
924 Yet by starting with the Johab font structure that
925 johab2ucs2 supports, these can be auto-generated
926 in bulk and then hand-tuned after generation.
929 Along with 10 variations for each of the initial
930 19 modern consonants, this approach requires a
931 total of 1176 + 190 = 1366 glyphs.
932 That's significantly more than the current
933 Johab scheme of 190 + 70 + 108 = 368 modern glyphs,
934 but it would allow finer adjustment and balance.
935 In fact, it could potentially save total
936 development time because it would reduce the
937 number of iterations to achieve a desired look.
939 <h3>Korean Standard KS X 1001:1992</h3>
941 The Hangul Syllables block contains every possible
942 combination of modern initial consonants, vowels,
943 and optional final consonants. In practice, only
944 about one fourth of these syllables are common in
945 modern-day Korean. Focus could be placed on these
946 more common modern syllables.
949 One list of such common modern Hangul syllables
950 appears in KS X 1001:1992, which defines 2,350 Hangul
951 syllables as "rows" 16 through 40 of the standard,
952 each with 94 Hangul syllables. This division into
953 sets of 94 glyphs is patterned after the ISO 2022
954 standard. In ISO 2022, characters are divided into blocks
955 of seven bits, or 2<sup>7</sup> = 128 code points.
956 The first 32 code points are
957 reserved for control codes. The next code point
958 is the space character, and code point 127 is the
959 delete character. In a seven-bit block of code points,
960 this leaves 128 - 32 (control codes) - 1 (space) - 1 (delete)
961 = 94 available code points. There is a mapping from
962 KS X 1001 to ISO 2022 following this ordering. For more
963 on this, consult the ISO 2022 standard.
966 The syllables that comprise KS X 1001:1992 are shown
967 below, organized into "rows" 16 through 40, with each
968 row containing 94 syllables:
970 <table border="2" cellpadding="5" align="center">
971 <tbody><tr><th align="center">KS X<br>1001:1992<br>Row</th>
972 <th align="center">Syllables</th></tr>
973 <tr><td align="center">16</td>
974 <td width="752">가각간갇갈갉갊감갑값갓갔강갖갗같갚갛개객갠갤갬갭갯갰갱갸갹갼걀걋걍걔걘걜거걱건걷걸걺검겁것겄겅겆겉겊겋게겐겔겜겝겟겠겡겨격겪견겯결겸겹겻겼경곁계곈곌곕곗고곡곤곧골곪곬곯곰곱곳공곶과곽관괄괆</td></tr>
975 <tr><td align="center">17</td>
976 <td width="752">괌괍괏광괘괜괠괩괬괭괴괵괸괼굄굅굇굉교굔굘굡굣구국군굳굴굵굶굻굼굽굿궁궂궈궉권궐궜궝궤궷귀귁귄귈귐귑귓규균귤그극근귿글긁금급긋긍긔기긱긴긷길긺김깁깃깅깆깊까깍깎깐깔깖깜깝깟깠깡깥깨깩깬깰깸</td></tr>
977 <tr><td align="center">18</td>
978 <td width="752">깹깻깼깽꺄꺅꺌꺼꺽꺾껀껄껌껍껏껐껑께껙껜껨껫껭껴껸껼꼇꼈꼍꼐꼬꼭꼰꼲꼴꼼꼽꼿꽁꽂꽃꽈꽉꽐꽜꽝꽤꽥꽹꾀꾄꾈꾐꾑꾕꾜꾸꾹꾼꿀꿇꿈꿉꿋꿍꿎꿔꿜꿨꿩꿰꿱꿴꿸뀀뀁뀄뀌뀐뀔뀜뀝뀨끄끅끈끊끌끎끓끔끕끗끙</td></tr>
979 <tr><td align="center">19</td>
980 <td width="752">끝끼끽낀낄낌낍낏낑나낙낚난낟날낡낢남납낫났낭낮낯낱낳내낵낸낼냄냅냇냈냉냐냑냔냘냠냥너넉넋넌널넒넓넘넙넛넜넝넣네넥넨넬넴넵넷넸넹녀녁년녈념녑녔녕녘녜녠노녹논놀놂놈놉놋농높놓놔놘놜놨뇌뇐뇔뇜뇝</td></tr>
981 <tr><td align="center">20</td>
982 <td width="752">뇟뇨뇩뇬뇰뇹뇻뇽누눅눈눋눌눔눕눗눙눠눴눼뉘뉜뉠뉨뉩뉴뉵뉼늄늅늉느늑는늘늙늚늠늡늣능늦늪늬늰늴니닉닌닐닒님닙닛닝닢다닥닦단닫달닭닮닯닳담답닷닸당닺닻닿대댁댄댈댐댑댓댔댕댜더덕덖던덛덜덞덟덤덥</td></tr>
983 <tr><td align="center">21</td>
984 <td width="752">덧덩덫덮데덱덴델뎀뎁뎃뎄뎅뎌뎐뎔뎠뎡뎨뎬도독돈돋돌돎돐돔돕돗동돛돝돠돤돨돼됐되된될됨됩됫됴두둑둔둘둠둡둣둥둬뒀뒈뒝뒤뒨뒬뒵뒷뒹듀듄듈듐듕드득든듣들듦듬듭듯등듸디딕딘딛딜딤딥딧딨딩딪따딱딴딸</td></tr>
985 <tr><td align="center">22</td>
986 <td width="752">땀땁땃땄땅땋때땍땐땔땜땝땟땠땡떠떡떤떨떪떫떰떱떳떴떵떻떼떽뗀뗄뗌뗍뗏뗐뗑뗘뗬또똑똔똘똥똬똴뙈뙤뙨뚜뚝뚠뚤뚫뚬뚱뛔뛰뛴뛸뜀뜁뜅뜨뜩뜬뜯뜰뜸뜹뜻띄띈띌띔띕띠띤띨띰띱띳띵라락란랄람랍랏랐랑랒랖랗</td></tr>
987 <tr><td align="center">23</td>
988 <td width="752">래랙랜랠램랩랫랬랭랴략랸럇량러럭런럴럼럽럿렀렁렇레렉렌렐렘렙렛렝려력련렬렴렵렷렸령례롄롑롓로록론롤롬롭롯롱롸롼뢍뢨뢰뢴뢸룀룁룃룅료룐룔룝룟룡루룩룬룰룸룹룻룽뤄뤘뤠뤼뤽륀륄륌륏륑류륙륜률륨륩</td></tr>
989 <tr><td align="center">24</td>
990 <td width="752">륫륭르륵른를름릅릇릉릊릍릎리릭린릴림립릿링마막만많맏말맑맒맘맙맛망맞맡맣매맥맨맬맴맵맷맸맹맺먀먁먈먕머먹먼멀멂멈멉멋멍멎멓메멕멘멜멤멥멧멨멩며멱면멸몃몄명몇몌모목몫몬몰몲몸몹못몽뫄뫈뫘뫙뫼</td></tr>
991 <tr><td align="center">25</td>
992 <td width="752">묀묄묍묏묑묘묜묠묩묫무묵묶문묻물묽묾뭄뭅뭇뭉뭍뭏뭐뭔뭘뭡뭣뭬뮈뮌뮐뮤뮨뮬뮴뮷므믄믈믐믓미믹민믿밀밂밈밉밋밌밍및밑바박밖밗반받발밝밞밟밤밥밧방밭배백밴밸뱀뱁뱃뱄뱅뱉뱌뱍뱐뱝버벅번벋벌벎범법벗</td></tr>
993 <tr><td align="center">26</td>
994 <td width="752">벙벚베벡벤벧벨벰벱벳벴벵벼벽변별볍볏볐병볕볘볜보복볶본볼봄봅봇봉봐봔봤봬뵀뵈뵉뵌뵐뵘뵙뵤뵨부북분붇불붉붊붐붑붓붕붙붚붜붤붰붸뷔뷕뷘뷜뷩뷰뷴뷸븀븃븅브븍븐블븜븝븟비빅빈빌빎빔빕빗빙빚빛빠빡빤</td></tr>
995 <tr><td align="center">27</td>
996 <td width="752">빨빪빰빱빳빴빵빻빼빽뺀뺄뺌뺍뺏뺐뺑뺘뺙뺨뻐뻑뻔뻗뻘뻠뻣뻤뻥뻬뼁뼈뼉뼘뼙뼛뼜뼝뽀뽁뽄뽈뽐뽑뽕뾔뾰뿅뿌뿍뿐뿔뿜뿟뿡쀼쁑쁘쁜쁠쁨쁩삐삑삔삘삠삡삣삥사삭삯산삳살삵삶삼삽삿샀상샅새색샌샐샘샙샛샜생샤</td></tr>
997 <tr><td align="center">28</td>
998 <td width="752">샥샨샬샴샵샷샹섀섄섈섐섕서석섞섟선섣설섦섧섬섭섯섰성섶세섹센셀셈셉셋셌셍셔셕션셜셤셥셧셨셩셰셴셸솅소속솎손솔솖솜솝솟송솥솨솩솬솰솽쇄쇈쇌쇔쇗쇘쇠쇤쇨쇰쇱쇳쇼쇽숀숄숌숍숏숑수숙순숟술숨숩숫숭</td></tr>
999 <tr><td align="center">29</td>
1000 <td width="752">숯숱숲숴쉈쉐쉑쉔쉘쉠쉥쉬쉭쉰쉴쉼쉽쉿슁슈슉슐슘슛슝스슥슨슬슭슴습슷승시식신싣실싫심십싯싱싶싸싹싻싼쌀쌈쌉쌌쌍쌓쌔쌕쌘쌜쌤쌥쌨쌩썅써썩썬썰썲썸썹썼썽쎄쎈쎌쏀쏘쏙쏜쏟쏠쏢쏨쏩쏭쏴쏵쏸쐈쐐쐤쐬쐰</td></tr>
1001 <tr><td align="center">30</td>
1002 <td width="752">쐴쐼쐽쑈쑤쑥쑨쑬쑴쑵쑹쒀쒔쒜쒸쒼쓩쓰쓱쓴쓸쓺쓿씀씁씌씐씔씜씨씩씬씰씸씹씻씽아악안앉않알앍앎앓암압앗았앙앝앞애액앤앨앰앱앳앴앵야약얀얄얇얌얍얏양얕얗얘얜얠얩어억언얹얻얼얽얾엄업없엇었엉엊엌엎</td></tr>
1003 <tr><td align="center">31</td>
1004 <td width="752">에엑엔엘엠엡엣엥여역엮연열엶엷염엽엾엿였영옅옆옇예옌옐옘옙옛옜오옥온올옭옮옰옳옴옵옷옹옻와왁완왈왐왑왓왔왕왜왝왠왬왯왱외왹왼욀욈욉욋욍요욕욘욜욤욥욧용우욱운울욹욺움웁웃웅워웍원월웜웝웠웡웨</td></tr>
1005 <tr><td align="center">32</td>
1006 <td width="752">웩웬웰웸웹웽위윅윈윌윔윕윗윙유육윤율윰윱윳융윷으윽은을읊음읍읏응읒읓읔읕읖읗의읜읠읨읫이익인일읽읾잃임입잇있잉잊잎자작잔잖잗잘잚잠잡잣잤장잦재잭잰잴잼잽잿쟀쟁쟈쟉쟌쟎쟐쟘쟝쟤쟨쟬저적전절젊</td></tr>
1007 <tr><td align="center">33</td>
1008 <td width="752">점접젓정젖제젝젠젤젬젭젯젱져젼졀졈졉졌졍졔조족존졸졺좀좁좃종좆좇좋좌좍좔좝좟좡좨좼좽죄죈죌죔죕죗죙죠죡죤죵주죽준줄줅줆줌줍줏중줘줬줴쥐쥑쥔쥘쥠쥡쥣쥬쥰쥴쥼즈즉즌즐즘즙즛증지직진짇질짊짐집짓</td></tr>
1009 <tr><td align="center">34</td>
1010 <td width="752">징짖짙짚짜짝짠짢짤짧짬짭짯짰짱째짹짼쨀쨈쨉쨋쨌쨍쨔쨘쨩쩌쩍쩐쩔쩜쩝쩟쩠쩡쩨쩽쪄쪘쪼쪽쫀쫄쫌쫍쫏쫑쫓쫘쫙쫠쫬쫴쬈쬐쬔쬘쬠쬡쭁쭈쭉쭌쭐쭘쭙쭝쭤쭸쭹쮜쮸쯔쯤쯧쯩찌찍찐찔찜찝찡찢찧차착찬찮찰참찹찻</td></tr>
1011 <tr><td align="center">35</td>
1012 <td width="752">찼창찾채책챈챌챔챕챗챘챙챠챤챦챨챰챵처척천철첨첩첫첬청체첵첸첼쳄쳅쳇쳉쳐쳔쳤쳬쳰촁초촉촌촐촘촙촛총촤촨촬촹최쵠쵤쵬쵭쵯쵱쵸춈추축춘출춤춥춧충춰췄췌췐취췬췰췸췹췻췽츄츈츌츔츙츠측츤츨츰츱츳층</td></tr>
1013 <tr><td align="center">36</td>
1014 <td width="752">치칙친칟칠칡침칩칫칭카칵칸칼캄캅캇캉캐캑캔캘캠캡캣캤캥캬캭컁커컥컨컫컬컴컵컷컸컹케켁켄켈켐켑켓켕켜켠켤켬켭켯켰켱켸코콕콘콜콤콥콧콩콰콱콴콸쾀쾅쾌쾡쾨쾰쿄쿠쿡쿤쿨쿰쿱쿳쿵쿼퀀퀄퀑퀘퀭퀴퀵퀸퀼</td></tr>
1015 <tr><td align="center">37</td>
1016 <td width="752">큄큅큇큉큐큔큘큠크큭큰클큼큽킁키킥킨킬킴킵킷킹타탁탄탈탉탐탑탓탔탕태택탠탤탬탭탯탰탱탸턍터턱턴털턺텀텁텃텄텅테텍텐텔템텝텟텡텨텬텼톄톈토톡톤톨톰톱톳통톺톼퇀퇘퇴퇸툇툉툐투툭툰툴툼툽툿퉁퉈퉜</td></tr>
1017 <tr><td align="center">38</td>
1018 <td width="752">퉤튀튁튄튈튐튑튕튜튠튤튬튱트특튼튿틀틂틈틉틋틔틘틜틤틥티틱틴틸팀팁팃팅파팍팎판팔팖팜팝팟팠팡팥패팩팬팰팸팹팻팼팽퍄퍅퍼퍽펀펄펌펍펏펐펑페펙펜펠펨펩펫펭펴편펼폄폅폈평폐폘폡폣포폭폰폴폼폽폿퐁</td></tr>
1019 <tr><td align="center">39</td>
1020 <td width="752">퐈퐝푀푄표푠푤푭푯푸푹푼푿풀풂품풉풋풍풔풩퓌퓐퓔퓜퓟퓨퓬퓰퓸퓻퓽프픈플픔픕픗피픽핀필핌핍핏핑하학한할핥함합핫항해핵핸핼햄햅햇했행햐향허헉헌헐헒험헙헛헝헤헥헨헬헴헵헷헹혀혁현혈혐협혓혔형혜혠</td></tr>
1021 <tr><td align="center">40</td>
1022 <td width="752">혤혭호혹혼홀홅홈홉홋홍홑화확환활홧황홰홱홴횃횅회획횐횔횝횟횡효횬횰횹횻후훅훈훌훑훔훗훙훠훤훨훰훵훼훽휀휄휑휘휙휜휠휨휩휫휭휴휵휸휼흄흇흉흐흑흔흖흗흘흙흠흡흣흥흩희흰흴흼흽힁히힉힌힐힘힙힛힝</td></tr>
1025 If tradeoffs were necessary (and they will be), a font designer could
1026 give preference to the list of 2,350 glyphs above that are the most common
1029 <h3>In Conclusion</h3>
1031 This web page has information I wish I had at my fingertips when
1032 first setting out to create a Hangul Syllables block from scratch.
1033 It describes paths I will probably take in the future if I do
1034 more work on Hangul fonts. If you intend to design a Hangul font,
1035 this description of base font structures hopefully will give you
1036 useful ideas in Hangul font glyph organization. If you have
1037 suggestions for improving the content of this web page, please
1041 Lastly, if you want to improve the Hangul Syllables in Unifont,
1042 this page describes the organization of the Hangul base glyphs
1043 that generated Unifont's Hangul Syllables block. You are more
1044 than welcome to improve on those glyphs. Thanks!
1047 <div class="footer">
1048 Uni<i>foundry</i>.com