unifont-6.3.20140204.tar.gz
[unifont.git] / hangul / hangul-generation.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2 <html><head>
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">
8 </head>
9 <body bgcolor="#ffffcc" text="#000000">
10 <div class="container">
11
12   <div class="header">
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>
15   </div>
16   <div class="left">
17     <br>
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     &nbsp;&nbsp;&nbsp;&nbsp;<b>Syllables</b><br>
24     <a class="button" href="http://www.unifoundry.com/pub">Downloads</a>
25   </div>
26   <div class="content">
27     <h3>Overview</h3>
28       <p>
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.
39       </p>
40       <p>
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.
47       </p>
48       <p>
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.
53       </p>
54     <h3>Motivation</h3>
55       <p>
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.
59       </p>
60       <p>
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.
69       </p>
70     <h3>Johab Fonts</h3>
71       <p>
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).
79       </p>
80       <p>
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.
93       </p>
94     <h3>Johab Base Font for Unifont</h3>
95       <p>
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:
100       </p>
101       <ul>
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>
106       </ul>
107       <p>
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.
115       </p>
116       <p>
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
125         font.
126       </p>
127       <center>
128         <table cellpadding="10">
129           <tbody><tr>
130             <td>
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>
166               </tbody></table>
167             </td>
168             <td>
169               <table border="1" cellpadding="2">
170                 <tbody><tr><th colspan="4">Vowels &amp; 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">&nbsp;</td></tr>
203                 <tr><td colspan="4">&nbsp;</td></tr>
204               </tbody></table>
205             </td>
206             <td>
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>
242               </tbody></table>
243             </td>
244           </tr>
245         </tbody></table>
246       </center>
247     <h3>Letter Variations</h3>
248       <p>
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.
256       </p>
257       <p>
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.
261       </p>
262       <p>
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:
269       </p>
270       <table border="2" cellpadding="5" align="center">
271         <tbody><tr>
272           <th colspan="2" align="center">Syllable</th>
273         </tr>
274         <tr>
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>
280         </tr>
281         <tr>
282           <td align="center">1</td><td align="center">6</td>
283           <td>
284             ᅡ, ᅢ, ᅣ, ᅤ, ᅥ,
285             ᅦ, ᅧ, ᅨ, ᅵ
286           </td>
287           <td></td>
288           <td>가, 각, 간, 나, 낛, 난</td>
289         </tr>
290          <tr>
291           <td align="center">2</td><td align="center">7</td>
292           <td>ᅩ, ᅭ, ᅳ</td>
293           <td>ᆞ</td>
294           <td>고, 곡, 곤, 노, 녻, 논</td>
295         </tr>
296          <tr>
297           <td align="center">3</td><td align="center">8</td>
298           <td>ᅮ, ᅲ</td>
299           <td></td>
300           <td>규, 귝, 균, 뉴, 뉷, 뉸</td>
301         </tr>
302          <tr>
303           <td align="center">4</td><td align="center">9</td>
304           <td>ᅪ, ᅫ, ᅬ, ᅴ</td>
305           <td>ᅹ, ᆅ, ᆈ, ᆡ</td>
306           <td>과, 곽, 관, 놔, 놗, 놘</td>
307         </tr>
308          <tr>
309           <td align="center">5</td><td align="center">10</td>
310           <td>ᅯ, ᅰ, ᅱ</td>
311           <td>ᆑ, ᆒ, ᆔ</td>
312           <td>궤, 궥, 궨, 눼, 눿, 뉀</td>
313         </tr>
314       </tbody></table>
315       <p>
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.
325       </p>
326       <p>
327         Examples of all these cases appear in the "Examples" column in the
328         table of initial consonants above.  From these examples, you can
329         deduce a few things:
330       </p>
331       <ul>
332         <li>
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
336           variations 6–10.
337         </li>
338         <li>
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.
347         </li>
348         <li>
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.
357         </li>
358         <li>
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.
365         </li>
366       </ul>
367       <p>
368         Each vowel or dipthong has 3 or 4 variations.  If there are just
369         3 variations, they are applied as follows:
370       </p>
371       <table border="2" cellpadding="5" align="center">
372         <tbody><tr>
373           <th>Variation</th><th>When Used</th><th>Appearance</th>
374         </tr>
375         <tr>
376           <td align="center">1</td>
377           <td>No final consonant.</td>
378           <td>Taller than default.</td>
379         </tr>
380         <tr>
381           <td align="center">2</td>
382           <td>Final consonant isn't ᆫ.</td>
383           <td>Default size.</td>
384         </tr>
385         <tr>
386           <td align="center">3</td>
387           <td>Final consonant is ᆫ.</td>
388           <td>Right-hand side can extend further down.</td>
389         </tr>
390       </tbody></table>
391       <p>
392         Modern vowels or dipthongs that contain
393         ᅩ, ᅭ, or ᅳ each have 4 variations.
394         The full set is:
395         ᅩ, ᅪ, ᅫ, ᅬ, ᅭ,
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:
404       </p>
405       <table border="2" cellpadding="5" align="center">
406         <tbody><tr>
407           <th>Variation</th><th>When Used</th><th>Appearance</th>
408         </tr>
409         <tr>
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>
413         </tr>
414         <tr>
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>
418         </tr>
419         <tr>
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>
423         </tr>
424         <tr>
425           <td align="center">4</td>
426           <td>Initial consonant isn't ᄀ or ᄏ with final consonant</td>
427           <td>Default size.</td>
428         </tr>
429       </tbody></table>
430       <p>
431         Lastly, each final consonant has 4 variations, depending on the vowel
432         or dipthong that precedes it:
433       </p>
434       <table border="2" cellpadding="5" align="center">
435         <tbody><tr>
436           <th>Variation</th><th>With Modern</th><th>With Ancient</th>
437         </tr>
438         <tr>
439           <td align="center">1</td>
440           <td>
441             Filler, ᅡ, ᅣ, ᅪ, ᅫ, ᅬ,
442             ᅴ
443           </td>
444           <td>ᅹ, ᆅ, ᆈ, ᆡ</td>
445         </tr>
446         <tr>
447           <td align="center">2</td>
448           <td>ᅥ, ᅧ, ᅯ, ᅰ, ᅱ, ᅵ</td>
449           <td>ᆑ, ᆒ, ᆔ</td>
450         </tr>
451         <tr>
452           <td align="center">3</td>
453           <td>ᅢ, ᅤ, ᅦ, ᅨ</td>
454           <td></td>
455         </tr>
456         <tr>
457           <td align="center">4</td>
458           <td>ᅩ, ᅭ, ᅮ, ᅲ, ᅳ</td>
459           <td>ᆞ</td>
460         </tr>
461       </tbody></table>
462       <p>
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.
471       </p>
472       <p>
473         Here are the three bitmap files showing the glyphs from which
474         the Hangul Syllables Unicode block is generated:
475       </p>
476       <center>
477         <table>
478           <tbody><tr>
479             <td align="center"><b>hanbase-00.bmp:</b></td>
480           </tr>
481           <tr>
482             <td>
483               <img src="hangul-generation_files/hanbase-00.bmp" alt="Hangul base glyphs, first bitmap" height="544" width="576">
484             </td>
485           </tr>
486           <tr>
487             <td align="center"><b>hanbase-01.bmp:</b></td>
488           </tr>
489           <tr>
490             <td>
491               <img src="hangul-generation_files/hanbase-01.bmp" alt="Hangul base glyphs, second bitmap" height="544" width="576">
492             </td>
493           </tr>
494           <tr>
495             <td align="center"><b>hanbase-02.bmp:</b></td>
496           </tr>
497           <tr>
498             <td>
499               <img src="hangul-generation_files/hanbase-02.bmp" alt="Hangul base glyphs, third bitmap" height="544" width="576">
500             </td>
501           </tr>
502         </tbody></table>
503       </center>
504       <p>
505         To modify the font, I recommend the following general steps:
506       </p>
507       <ol>
508         <li>
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.
513         </li>
514         <li>
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.
520         </li>
521         <li>
522           Combine these in your grid with various vowel combinations,
523           so that the result looks balanced:
524           <ul>
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>
528           </ul>
529         </li>
530         <li>
531           Finally, draw the initial consonants to fit in the space
532           that remains.
533         </li>
534       </ol>
535       <p>
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.
540       </p>
541     <h3>Generating the Syllables</h3>
542       <p>
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:
547       </p>
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
555                  }
556              }
557          }
558       </pre>
559       <p>
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.
565       </p>
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>
587       </tbody></table>
588     <h3>Hangul Syllables Tools</h3>
589       <p>
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:
597       </p>
598       <ul>
599         <li>
600           <b>hangul-generation.html:</b> This web page, as documentation.
601         </li>
602         <li>
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.
607         </li>
608         <li>
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
612           this script.
613         </li>
614         <li>
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
618           on this site).
619         </li>
620         <li>
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:
624           <ul>
625             <li>
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.
630             </li>
631             <li>
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.
637             </li>
638             <li>
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
642               its input.
643             </li>
644             <li>
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
649               KS C 5601 standard).
650             </li>
651             <li>
652               <b>johab2ucs2.1, unifontksx.1:</b> The man pages for
653               the Perl scripts.
654             </li>
655           </ul>
656         </li>
657         <li>
658           <b>syllables:</b> directory that will contain all 11,172 glyphs in the
659           Unifont Hangul Syllables block.
660         </li>
661         <li>
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
665           KS C 5601 standard).
666         </li>
667       </ul>
668       <p>
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:
672       </p>
673       <ol>
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>
677         <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.
686          </li>
687       </ol>
688       <p>
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.
697       </p>
698     <h3>License</h3>
699       <p>
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.
705       </p>
706     <h3>Other Variation Schemes</h3>
707       <p>
708         What was described above is only one possible scheme for
709         drawing variations to combine into whole syllables.  I&nbsp;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.
714       </p>
715     <h3>Johab 8/4/4 Font Layout</h3>
716       <p>
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
726         or final consonant.
727       </p>
728       <p>
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
731         included):
732       </p>
733       <ul>
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>
737       </ul>
738       <p>
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.
746       </p>
747       <p>
748         The glyph layout by code point in Johab 8/4/4 fonts are:
749       </p>
750       <ul>
751         <li>
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,
755           ᄀ, ᄁ, ᄂ, ᄃ,
756           ᄄ, ᄅ, ᄆ, ᄇ,
757           ᄈ, ᄉ, ᄊ, ᄋ,
758           ᄌ, ᄍ, ᄎ, ᄏ,
759           ᄐ, ᄑ, ᄒ.  Thus,
760           for example, the 8 variations of
761           ᄀ appear at decimal font locations
762           1, 21, 41, 61, 81, 101, 121, and 141.
763         </li>
764         <li>
765           <b>160..247: Vowels</b>
766           [(Filler + 21 vowels) × 4 variations].<br>
767           This is formed as 4 repetitions of the sequence: Filler,
768           ᅡ, ᅢ, ᅣ, ᅤ,
769           ᅥ, ᅦ, ᅧ, ᅨ,
770           ᅩ, ᅪ, ᅫ, ᅬ,
771           ᅭ, ᅮ, ᅯ, ᅰ,
772           ᅱ, ᅲ, ᅳ, ᅴ,
773           ᅵ.  Thus,
774           for example, the 4 variations of
775           ᅡ appear at decimal font locations
776           161, 183, 205, and 227.
777         </li>
778         <li>
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,
782           ᆨ, ᆩ, ᆪ, ᆫ,
783           ᆬ, ᆭ, ᆮ, ᆯ,
784           ᆰ, ᆱ, ᆲ, ᆳ,
785           ᆴ, ᆵ, ᆶ, ᆷ
786           ᆸ, ᆹ, ᆺ, ᆻ,
787           ᆼ, ᆽ, ᆾ, ᆿ,
788           ᇀ, ᇁ, ᇂ. Thus,
789           for example, the 4 variations of
790           ᆨ appear at decimal font locations
791           249, 277, 305, and 333.
792         </li>
793       </ul>
794       <p>
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
801         verification.
802       </p>
803       <p>
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.
809       </p>
810       <table border="2" cellpadding="5" align="center">
811         <tbody><tr><th colspan="3" align="center">Johab 8/4/4 Initial Consonants</th></tr>
812         <tr>
813           <th>Variation</th>
814           <th align="center">Combining Vowels</th>
815           <th>+ Final<br>Consonant?</th>
816         </tr>
817         <tr>
818           <td align="center">1</td>
819           <td>
820             Filler, ᅡ, ᅢ, ᅣ, ᅤ, ᅥ,
821             ᅦ, ᅧ, ᅨ, ᅵ
822           </td>
823           <td align="center">No</td>
824         </tr>
825         <tr>
826           <td align="center">2</td>
827           <td>ᅩ, ᅭ, ᅳ</td>
828           <td align="center">No</td>
829         </tr>
830         <tr>
831           <td align="center">3</td>
832           <td>ᅮ, ᅲ</td>
833           <td align="center">No</td>
834         </tr>
835         <tr>
836           <td align="center">4</td>
837           <td>ᅪ, ᅫ, ᅬ, ᅴ</td>
838           <td align="center">No</td>
839         </tr>
840         <tr>
841           <td align="center">5</td>
842           <td>ᅯ, ᅰ, ᅱ</td>
843           <td align="center">No</td>
844         </tr>
845         <tr>
846           <td align="center">6</td>
847           <td>
848             Filler, ᅡ, ᅢ, ᅣ, ᅤ, ᅥ,
849             ᅦ, ᅧ, ᅨ, ᅵ
850           </td>
851           <td align="center">Yes</td>
852         </tr>
853         <tr>
854           <td align="center">7</td>
855           <td>ᅩ, ᅭ, ᅮ, ᅲ, ᅳ</td>
856           <td align="center">Yes</td>
857         </tr>
858         <tr>
859           <td align="center">8</td>
860           <td>
861             ᅪ, ᅫ, ᅬ, ᅯ, ᅰ, ᅱ, ᅴ
862           </td>
863           <td align="center">Yes</td>
864         </tr>
865       </tbody></table>
866       <p>
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).
872       </p>
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>
880       </tbody></table>
881       <p>
882         Also similar to the previous Johab font structure, final consonants each
883         have 4 variations:
884       </p>
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>
892       </tbody></table>
893     <h3>Seeking Perfection</h3>
894       <p>
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.
901       </p>
902       <p>
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.
915       </p>
916       <p>
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.
927       </p>
928       <p>
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.
938       </p>
939     <h3>Korean Standard KS X 1001:1992</h3>
940       <p>
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.
947       </p>
948       <p>
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.
964       </p>
965       <p>
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:
969       </p>
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>
1023       </tbody></table>
1024       <p>
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
1027         in daily use.
1028       </p>
1029     <h3>In Conclusion</h3>
1030       <p>
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
1038         let me know.
1039       </p>
1040       <p>
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!
1045       </p>
1046   </div>
1047   <div class="footer">
1048     Uni<i>foundry</i>.com
1049   </div>
1050 </div>
1051
1052 </body></html>