Unifoundry.com

Generating Hangul Syllables (U+AC00..U+D7A3)


Home
GNU Unifont
Unicode Tutorial
Deckmate
Hangul Fonts
    Syllables
Japanese Fonts
Olden
Retro Fonts
Sequoyah
Unibetacode
Utf8gen
Utfcheck
Fontforge Poll
Downloads
Checking .sigs

Overview

Hangul is the syllabic writing system used by Koreans to write the Korean language. Syllables are written with an initial consonant, a middle vowel or diphthong, and optionally one or two final consonants. This web page assumes that you already have basic familiarity with Hangul and are interested in creating a Hangul Syllables font. The bulk of this page describes how the Hanterm Johab glyph arrangement has been used to generate Unicode's Hangul Syllables. The ideas behind arrangement of the Hanterm Johab fonts will hopefully save others who are looking to create their own Hangul font a great deal of time.

Unifont currently uses a much simpler johab 6/3/1 encoding. Details on this appear before discussion of the original Unifont (and Hanterm) encoding.

For each syllable, the modern Korean alphabet uses 19 possible initial consonants, 21 possible vowels and diphthongs, and 26 possible final single or double consonants or no final consonant. Therefore, the modern Hangul alphabet allows writing up to 19 × 21 × 27 = 11,172 unique syllables.

Drawing 11,172 separate glyphs would be a daunting task. Fortunately, the regular nature of Hangul syllable formation allows creation of the entire Hangul Syllables block from a few variations of each character.

Adding all ancient Hangul letters encoded in Unidoee to the modern letters would generate over 1.6 million syllables. This would be a far more time-consuming task if syllables were drawn one at a time. An algorithmic approach greatly simplifies the amount of effort to create this superset.

Motivation

I could not find a set of Hangul Syllables that was licensed under the GNU GPL unencumbered by any other restrictions, and so embarked on creating an entirely new set from scratch.

Most work on bitmapped Hangul fonts was done more than ten years before I began this effort. The world has for the most part moved on to TrueType fonts, and I could not find documentation in English about the earlier formats anywhere on the web. So along with creating a new set of Hangul Syllables, I wrote this web page to document my findings for the benefit of others.

Johab Fonts

"Johab" fonts refer to the Korean font standard KS C-5601-1992, later renamed to KS X 1001:1992, which supports encoding all possible syllables that are in modern use, as well as encoding historical characters separately. This character set is assigned to Microsoft Windows Code Page 1361. "Wansung" refers to the earlier KS C-5601-1987 standard (assigned to Microsoft Windows Code Page 949).

Current Johab 6/3/1 Base Font for Unifont

Unifont 15.1.01 introduces a Johab 6/3/1 encoding. There are six initial consonant (choseong) variations, three medial vowel or diphthong (jungseong) variations, and only one final consonant (jongseong) variation.

This johab scheme has representations for all modern and ancient full-width Hangul letters (Hangul Jamo) that are in the Unicode Standard. Previously, the letters were limited to all modern and a subset of ancient jamo.

Choseong (Initial Consonant)

The six choseong variations are designed for these combinations of jungseong (vowels or diphthongs) and jongseong (final consonants):

The jungseong used, and the presence or absence of a jongseong combination, determines the choseong variation.

Jungseong (Medial Vowel or Diphthong)

The three jungseong variations are as follows:

Jongseong (Final Consonant)

There is only one jongseong (final consonant) variation. However, a final consonant is shifted right by one column if the combining jungseong has two long vertical strokes on the right, such as with ᅢ ("AE"). This yields two effective variations algorithmically, with the glyph shape unchanged.

Johab 6/3/1 Overlap Analysis

Johab 6/3/1 Hangul Jamo The johab2html program overlaps all possible modern and ancient Hangul letters, including Hangul Jamo Extended-A and Extended-B ranges, to graphically summarize letter overlaps. The result can be seen here: hangul-base.html

Johab 6/3/1 Syllable Formation

Unifont 15.1.01 introduces two programs for syllable formation:

Original Johab 10/3 or 4/4 Base Font for Unifont

I've encountered two main Hangul font encodings of variations of the component characters that form syllables. Hanterm supports both of them. For one of them, there was a Perl script that Jungsik Shin wrote for the Unifont effort. It was easy to follow, and I had already modified it so I was familiar with it. For the other font encoding, commonly referred to as Johab 8/4/4, I could only find one Python script that was a translation of an earlier Perl script (which I could not find). Although Hanterm handles both of those encodings, Hanterm is a much larger program than these two scripts and so is a lot more difficult to follow.

The system for arranging variations of Hangul letters into syllables that Unifont has used from its beginning is taken from the Hanterm Johab font encoding structure described in this section. This font encoding uses:

This comes out to a little more than 500 glyphs, which is a lot easier to draw than over 11,000. There's a small catch with this encoding, though: some ancient letters are thrown in for rendering of ancient Hangul words. You don't need these to generate the Unicode Hangul Syllalbes block, so you can draw them or omit them as you please. For completeness, I drew them in the Johab-type font I created.

A picture is worth a thousand words, so let's start by taking a look at the Korean alphabet. These tables show the ordering in the Johab fonts used by Hanterm, including the ancient characters. Note that the modern characters appear in the same relative order as in the Unicode U+1100..U+11FF Hangul code block, but the ancient characters are not in the same relative order as in Unicode. Also, there are a lot of ancient characters in the Unicode U+1100..U+11FF block that do not appear in the Johab-type font.

Initial Consonants
OrderGlyphUnicodeFont Range
1U+11000x001..0x00A
2U+11010x00B..0x014
3U+11020x015..0x01E
4U+11030x01F..0x028
5U+11040x029..0x032
6U+11050x033..0x03C
7U+11060x03D..0x046
8U+11070x047..0x051
9U+11080x052..0x05A
10U+11090x05B..0x064
11U+110A0x065..0x06E
12U+110B0x06F..0x078
13U+110C0x079..0x082
14U+110D0x083..0x08C
15U+110E0x08D..0x096
16U+110F0x097..0x0A0
17U+11100x0A1..0x0AA
18U+11110x0AB..0x0B4
19U+11120x0B5..0x0BE
Ancient
20U+112B0x0BF..0x0C8
21U+111E0x0C9..0x0D2
22U+112D0x0D3..0x0DC
23U+11200x0DD..0x0E6
24U+112F0x0E7..0x0F0
25U+11320x0F1..0x0FA
26U+11210x0FB..0x104
27U+11400x105..0x10E
28U+114C0x10F..0x118
29U+11270x119..0x122
30U+11360x123..0x12C
31U+11590x12D..0x136
Vowels & Dipthongs
OrderGlyphUnicodeFont Range
1U+11610x137..0x139
2U+11620x13A..0x13C
3U+11630x13D..0x13F
4U+11640x140..0x142
5U+11650x143..0x145
6U+11660x146..0x148
7U+11670x149..0x14B
8U+11680x14C..0x14E
9U+11690x14F..0x152
10U+116A0x153..0x156
11U+116B0x157..0x15A
12U+116C0x15B..0x15E
13U+116D0x15F..0x162
14U+116E0x163..0x165
15U+116F0x166..0x168
16U+11700x169..0x16B
17U+11710x16C..0x16E
18U+11720x16F..0x171
19U+11730x172..0x175
20U+11740x176..0x179
21U+11750x17A..0x17C
Ancient
22U+11790x17A..0x17F
23U+11850x180..0x182
24U+11880x183..0x185
25U+11910x186..0x188
26U+11920x189..0x18B
27U+11940x18C..0x18E
28U+119E0x18F..0x191
29U+11A10x192..0x194
 
 
Final Consonants
OrderGlyphUnicodeFont Range
1U+11A80x195..0x198
2U+11A90x199..0x19C
3U+11AA0x19D..0x1A0
4U+11AB0x1A1..0x1A4
5U+11AC0x1A5..0x1A8
6U+11AD0x1A9..0x1AC
7U+11AE0x1AD..0x1B0
8U+11AF0x1B1..0x1B4
9U+11B00x1B5..0x1B8
10U+11B10x1B9..0x1BC
11U+11B20x1BD..0x1C0
12U+11B30x1C1..0x1C4
13U+11B40x1C5..0x1C8
14U+11B50x1C9..0x1CC
15U+11B60x1CD..0x1D0
16U+11B70x1D1..0x1D4
17U+11B80x1D5..0x1D8
18U+11B90x1D9..0x1DC
19U+11BA0x1DD..0x1E0
20U+11BB0x1E1..0x1E4
21U+11BC0x1E5..0x1E8
22U+11BD0x1E9..0x1EC
23U+11BE0x1ED..0x1F0
24U+11BF0x1F1..0x1F4
25U+11C00x1F5..0x1F8
26U+11C10x1F9..0x1FC
27U+11C20x1FD..0x200
Ancient
28U+11D90x201..0x204
29U+11DA0x205..0x208
30U+11F90x209..0x20C
31U+11F00x20D..0x210

Hanterm Johab Font Structure

The following description is based upon Jungshik Shin's Perl script to convert Johab fonts into the Unicode Hangul Syllables range (U+AC00..U+D7A3) in the GNU Unifont .hex format. Index arrays within the script are described in context. Arrays from the Perl script appear in boldface for easy identification.

The Johab fonts that contain Hangul store multiple versions of each Leading, Middle, or Final glyph so an entire syllable block will look its best. The Hangul Johab Encoded fonts contain 529 code points arranged as follows:

The first 19 Leading letters, each with 10 variations, comprise the basic modern set of initial Hangul consonants. These are followed by 12 archaic letters, each with 10 variations. The variation numbers based upon the middle letter that follows are stored in @lconMap1 and @lconMap2 arrays. In general, the variations are as follows (letters in red are not part of the standard modern set and are my best guesses):

The first 21 Middle letters, each with 3 or 4 variations, comprise the basic modern set of Hangul vowels, semivowels ("y" and "w"), and diphthongs. These are followed by 8 archaic middle letters, each with 3 variations.

Each of the middle letters has an associated @vowType (Vowel Type) value; usually this is 0, but for letters with a horizontal long stroke on the bottom of the middle region (O, WA, WAE, OE, EU, YI), the value is 1.

Of the archaic diphthongs, the @vowType property for YU-YEO, YU-YE, and YU-I should therefore be set to 0, and for YO-YA, YO-YAE, YO-I, araea, and araea-i should be set to 1.

The three or four variations for each vowel are used as follows:

The first 27 Final letters, each with 4 variations, comprise the basic modern set of Hangul Final letters. These are followed by 4 archaic Final letters, each with 4 variations.

The Final letters each have an entry in the @tconType array. These entries indicate which variation of a Middle Letter should be selected. The values are: 0 for the filler, 2 for "N", and 1 for all others. None of the archaic Final letters have an open top like "N", so they should also all have a value of 1.

If the variation of a vowel indicated in @tconType is 1, then a further check is made. In such a case, if the leading consonant is "G" or "K" (and therefore has an open bottom), the first or third form is used (depending on whether or not there is a final consonant, respectively). Otherwise, the second or fourth form is used (depending on whether or not there is a final consonant, respectively).

This is why some Middle letters have four types: if @tconType is 1 for the Middle letter, then the corresponding vowel is shaped similarly to "O" and must have four forms. Then the first and third forms will be used when the vowel appears after an initial "G" or "K", so that the short vertical stem(s) on the long horizontal stroke reach higher and possibly overlap with the bottom of the "G" or "K".

Of the four variations, the appearance of first three in the font files appear identical, so selection of a value of 0, 1, or 2 might not be critical. The left edge of the fourth variation is always shifted to the left at least one pixel (usually two pixels), and the right edge is shifted left from zero to two pixels. The values in red below are my guesses of what variations suit the archaic Terminal (final) consonants. If anyone knows better, please let me know.

Letter Variations

Having several variations of each letter is the key to producing good-looking Hangul Syllables from a smaller set of glyphs. Jungshik Shin's johab2ucs2 Perl script picks the correct variation for each combination of initial consonant, vowel, and optional final consonant to construct the syllables. This is accomplished using a number of tables in the Perl script.

The comments in johab2ucs2 are in ASCII, with the letter names spelled out. What follows below is an explanation actually showing the Hangul letters.

Initial consonants (choseong) each have 10 variations. The first 5 are used without a final consonant (C+V) so they are taller, and the last 5 are used with a final consonant (C+V+C′). The particular variation depends upon the vowel following the initial consonant. Here's a table showing the initial consonant variation that applies for each vowel:

Syllable
C+V C+V+C′ With Modern With Ancient Examples
16 ᅡ, ᅢ, ᅣ, ᅤ, ᅥ, ᅦ, ᅧ, ᅨ, ᅵ 가, 각, 간, 나, 낛, 난
27 ᅩ, ᅭ, ᅳ 고, 곡, 곤, 노, 녻, 논
38 ᅮ, ᅲ 규, 귝, 균, 뉴, 뉷, 뉸
49 ᅪ, ᅫ, ᅬ, ᅴ ᅹ, ᆅ, ᆈ, ᆡ 과, 곽, 관, 놔, 놗, 놘
510 ᅯ, ᅰ, ᅱ ᆑ, ᆒ, ᆔ 궤, 궥, 궨, 눼, 눿, 뉀

If you wish to draw your own Hangul Syllables block and use this set of variations, as you look through the glyphs consider the nine general patterns generated by taking the three possible vowel placements (only on the right, only in the middle, and both on the right and in the middle) times the three possible final consonant placements (no final consonant, one final consonant, and two final consonants next to each other). After this, get into more case-specific details. Vowels with 3 variations treat the final consonant ᆫ (N, nieun) as a special case.

Examples of all these cases appear in the "Examples" column in the table of initial consonants above. From these examples, you can deduce a few things:

Each vowel or diphthong has 3 or 4 variations. If there are just 3 variations, they are applied as follows:

VariationWhen UsedAppearance
1 No final consonant. Taller than default.
2 Final consonant isn't ᆫ. Default size.
3 Final consonant is ᆫ. Right-hand side can extend further down.

Modern vowels or diphthongs that contain ᅩ, ᅭ, or ᅳ each have 4 variations. The full set is: ᅩ, ᅪ, ᅫ, ᅬ, ᅭ, ᅳ, and ᅴ. These vowels have variations based on whether the initial consonant is ᄀ, ᄏ, or something else, and whether or not there is a final consonant in the syllable. All other vowels and diphthongs, including the ancient ones, only have 3 variations each. If a vowel or diphthong has 4 variations, they are applied as follows:

VariationWhen UsedAppearance
1 Initial consonant is ᄀ or ᄏ; no final consonant Taller than default with vertical stroke extending upward more.
2 Initial consonant isn't ᄀ or ᄏ; no final consonant Default stroke underneath but taller.
3 Initial consonant is ᄀ or ᄏ with final consonant Default size but longer vertical stroke underneath.
4 Initial consonant isn't ᄀ or ᄏ with final consonant Default size.

Lastly, each final consonant has 4 variations, depending on the vowel or diphthong that precedes it:

VariationWith ModernWith Ancient
1 Filler, ᅡ, ᅣ, ᅪ, ᅫ, ᅬ, ᅴ ᅹ, ᆅ, ᆈ, ᆡ
2 ᅥ, ᅧ, ᅯ, ᅰ, ᅱ, ᅵ ᆑ, ᆒ, ᆔ
3 ᅢ, ᅤ, ᅦ, ᅨ
4 ᅩ, ᅭ, ᅮ, ᅲ, ᅳ

There is no "Filler" combination in the Hangul Syllalbes block, where a syllable can contain an initial consonant and a final consonant, but no vowel. The "Filler" entry is included just to explain that case with this type of Johab font in general. As for the appearance of other final consonant variations based upon the preceding vowels, they should be drawn so that a balance is achieved between the top half and left half of a syllable, and between the left half and right half of a syllable.

Here are the three bitmap files showing the glyphs from which the Hangul Syllables Unicode block is generated:

hanbase-00.bmp:
Hangul base glyphs, first bitmap
hanbase-01.bmp:
Hangul base glyphs, second bitmap
hanbase-02.bmp:
Hangul base glyphs, third bitmap

To modify the font, I recommend the following general steps:

  1. Have an idea of the grid you will use. For example, you might want all syllables centered in a grid, or left-justified, or you might want to guarantee that there is a perimeter of one or more blank pixels on the outer edges of each syllable.
  2. Start drawing from the bottom up, with the final consonants. Consider the minimum vertical space you will need to draw ᄅ (rieul) and similar final consonants. Use that minimum height as your starting point to generate a first set of all final consonants.
  3. Combine these in your grid with various vowel combinations, so that the result looks balanced:
    • Vowels only on the right
    • Vowels only in the middle
    • Vowels on the right and in the middle
  4. Finally, draw the initial consonants to fit in the space that remains.

Be prepared to go through numerous iterations of adjustment to get the syllables to the stage where you are satisfied. If you're after perfection, you could then hand-tune each of the 11,172 resulting Hangul Syllables glyphs.

Generating the Syllables

Equipped with your carefully drawn and cross-checked Johab font, you can superimpose an initial consonant, vowel, and optional final consonant to construct all of the Hangul Syllables. Here's the basic algorithm:

         code_point = U+AC00 /* Starting point of Hangul Syllables */
         for all (19 modern initial consonants) {
             for all (21 modern vowels) {
                 for all (28 filler and modern final consonants) {
                     superimpose the 2 or 3 components
                     output the glyph for this code point
                     increment code_point by 1
                 }
             }
         }
      

That algorithm, in a nutshell, is what johab2ucs2 does. This will generate 19 × 21 × 28 = 11,172 syllables, in the order in which they appear in the Unicode Standard. The table below shows the starting Unicode code point of each initial consonant in the Hangul Syllables block.

Initial
Consonant
Start
U+AC00
U+AE4C
U+B098
U+B2E4
U+B530
U+B77C
U+B9C8
U+BC14
U+BE60
U+C0AC
U+C2F8
U+C544
U+C790
U+C9DC
U+CC28
U+CE74
U+D0C0
U+D30C
U+D558

Hangul Syllables Tools

The following link is a gzipped tarball containing the files that I used to generate the Hangul Syllables block: hangul.tar.gz. You'll also need to install Perl and the main Unifont programs unibmp2hex and hex2bdf before building the syllables. The files in this tar file are:

To create the Hangul Syllables as both a Unifont ".hex" file and a "./syllables/" directory of bitmap representations of each of the 11,172 syllables:

  1. Install the Unifont programs in your path.
  2. Untar the files in hangul.tar.gz.
  3. cd into the "hangul" directory.
  4. Run "make". This will generate the files "hangul-base.hex" and then "hangul-base.bdf" from the "hanbase-??.bmp" files, and then generate the files "syllables/hangul-AC.bmp" through "syllables/hangul-D7.bmp" from "hangul-syllables.hex". Finally, this will populate the "ksx-syllables/" directory with bitmapped glyphs from the complete Unifont set that comprise the 2,350 syllables defined in KS X 1001.

You can inspect the generated bitmap files, modify the "hanbase-??.bmp" files to your heart's content to see how variations carry through to the final syllables, and so on. If you make any improvements, please forward them to me so I can incorporate them into a later version. I haven't spent much time on the ancient letters because my focus was on generating Hangul Syllables from scratch, so there's probably room for improvement at least with them.

License

The files in the hangul.tar.gz archive are distributed under the GNU Public License version 2, or (at your option) a later version, with the exception that embedding the fonts in a document does not in itself constitute a violation of the license agreement.

Other Variation Schemes

What was described above is only one possible scheme for drawing variations to combine into whole syllables. I used it because I had already worked with it. In the end, I haven't found a better scheme, though better schemes are certainly possible. One other font scheme that deserves mention because of its popularity is the Johab 8/4/4 encoding, discussed in the following section.

Johab 8/4/4 Font Layout

Johab 8/4/4 fonts store variations in transposed order compared to the Johab version described above. For example, all 20 of the first variation of initial consonants are stored in sequence, then all 20 of the second variation of initial consonants in sequence, etc. Each type of variation sequence (initial consonant, vowel, and final consonant) begins with a Filler (blank) glyph. Therefore, each variation sequence has one more entry than letters in the modern Hangul alphabet. Presumably this is to allow rendering an individual letter such as a vowel by itself with no initial or final consonant.

Johab 8/4/4 fonts have a fixed number of variations for each letter of the modern Hangul alphabet (no ancient letters are included):

This scheme has one aesthetic drawback compared to that used by johab2ucs2: there is no separate vowel form for vertically-drawn vowels when combined with final consonant ᆫ to allow the vowel to extend down further into the space occupied by ᆫ. For example, the syllable 간 looks more filled out and pleasing to the eye if the vowel, ᅡ, extends down below the top half of the syllable.

The glyph layout by code point in Johab 8/4/4 fonts are:

I found one Python script on the net (jo844touni.py) that returned the Hangul component glyphs (initial consonant, vowel, and final consonant) for each code point in the Unicode Hangul Syllables block. What follows is a description based upon reverse-engineering that Python script, and looking at existing "johab844-" fonts for verification.

The initial consonant variations are based upon the vowel that follows, and whether or not there is a final consonant. Like the Johab font structure described previously, there are 5 variations when there is no final consonant. Unlike that Johab font structure, there are only 3 variations instead of 5 when there is a final consonant.

Johab 8/4/4 Initial Consonants
Variation Combining Vowels + Final
Consonant?
1 Filler, ᅡ, ᅢ, ᅣ, ᅤ, ᅥ, ᅦ, ᅧ, ᅨ, ᅵ No
2 ᅩ, ᅭ, ᅳ No
3 ᅮ, ᅲ No
4 ᅪ, ᅫ, ᅬ, ᅴ No
5 ᅯ, ᅰ, ᅱ No
6 Filler, ᅡ, ᅢ, ᅣ, ᅤ, ᅥ, ᅦ, ᅧ, ᅨ, ᅵ Yes
7 ᅩ, ᅭ, ᅮ, ᅲ, ᅳ Yes
8 ᅪ, ᅫ, ᅬ, ᅯ, ᅰ, ᅱ, ᅴ Yes

Like the previous Johab font structure, vowels can have 4 variations based upon whether or not the initial consonant is ᄀ or ᄏ, and whether or not there is a final consonant. Unlike the previous Johab font structure, there is no separate variation for the case where the final consonant is ᆫ (N, nieun).

Johab 8/4/4 Vowels
VariationInitial Consonant =
Filler, ᄀ, or ᄏ?
+ Final
Consonant?
1YesNo
2No No
3YesYes
4No Yes

Also similar to the previous Johab font structure, final consonants each have 4 variations:

Johab 8/4/4 Final Consonants
VariationCombining Vowels
1Filler, ᅡ, ᅣ, ᅪ
2ᅥ, ᅧ, ᅬ, ᅯ, ᅱ, ᅴ, ᅵ
3ᅢ, ᅤ, ᅦ, ᅨ, ᅫ, ᅰ
4ᅩ, ᅭ, ᅮ, ᅲ, ᅳ

Seeking Perfection

As a final thought, someone seeking perfection in rendering Hangul Syllables could use one of these encoding methods, or a method of their own design, to produce a block of Hangul Syllables as a starting point. From there, each syllable glyph could be hand-tailored as desired.

With the current johab2ucs2 algorithm, there are just two cases for drawing every possible vowel plus every possible final consonant: the case where the initial consonant is ᄀ or ᄏ, and the default case (for all other initial consonants). Therefore if you get the spacing worked out with all the syllables formed using the intial consonant ᄀ and, say, the final consonant ᄅ or ᄎ, everything else should fall into place. That is not what I did at first — I made some false starts — but if I were to do it over that is the path I would take.

There are 19 modern vowels and 27 final consonants plus a filler (when there is no final consonant), which requires drawing 19 × 28 = 588 glyphs for every possible combination of modern vowel and final consonant (or filler). To allow a separate form when the initial consonant is ᄀ or ᄏ, you'd need twice that number, or 1176 glyphs. Yet by starting with the Johab font structure that johab2ucs2 supports, these can be auto-generated in bulk and then hand-tuned after generation.

Along with 10 variations for each of the initial 19 modern consonants, this approach requires a total of 1176 + 190 = 1366 glyphs. That's significantly more than the current Johab scheme of 190 + 70 + 108 = 368 modern glyphs, but it would allow finer adjustment and balance. In fact, it could potentially save total development time because it would reduce the number of iterations to achieve a desired look.

Korean Standard KS X 1001:1992

The Hangul Syllables block contains every possible combination of modern initial consonants, vowels, and optional final consonants. In practice, only about one fourth of these syllables are common in modern-day Korean. Focus could be placed on these more common modern syllables.

One list of such common modern Hangul syllables appears in KS X 1001:1992, which defines 2,350 Hangul syllables as "rows" 16 through 40 of the standard, each with 94 Hangul syllables. This division into sets of 94 glyphs is patterned after the ISO 2022 standard. In ISO 2022, characters are divided into blocks of seven bits, or 27 = 128 code points. The first 32 code points are reserved for control codes. The next code point is the space character, and code point 127 is the delete character. In a seven-bit block of code points, this leaves 128 - 32 (control codes) - 1 (space) - 1 (delete) = 94 available code points. There is a mapping from KS X 1001 to ISO 2022 following this ordering. For more on this, consult the ISO 2022 standard.

The syllables that comprise KS X 1001:1992 are shown below, organized into "rows" 16 through 40, with each row containing 94 syllables:

KS X
1001:1992
Row
Syllables
16 가각간갇갈갉갊감갑값갓갔강갖갗같갚갛개객갠갤갬갭갯갰갱갸갹갼걀걋걍걔걘걜거걱건걷걸걺검겁것겄겅겆겉겊겋게겐겔겜겝겟겠겡겨격겪견겯결겸겹겻겼경곁계곈곌곕곗고곡곤곧골곪곬곯곰곱곳공곶과곽관괄괆
17 괌괍괏광괘괜괠괩괬괭괴괵괸괼굄굅굇굉교굔굘굡굣구국군굳굴굵굶굻굼굽굿궁궂궈궉권궐궜궝궤궷귀귁귄귈귐귑귓규균귤그극근귿글긁금급긋긍긔기긱긴긷길긺김깁깃깅깆깊까깍깎깐깔깖깜깝깟깠깡깥깨깩깬깰깸
18 깹깻깼깽꺄꺅꺌꺼꺽꺾껀껄껌껍껏껐껑께껙껜껨껫껭껴껸껼꼇꼈꼍꼐꼬꼭꼰꼲꼴꼼꼽꼿꽁꽂꽃꽈꽉꽐꽜꽝꽤꽥꽹꾀꾄꾈꾐꾑꾕꾜꾸꾹꾼꿀꿇꿈꿉꿋꿍꿎꿔꿜꿨꿩꿰꿱꿴꿸뀀뀁뀄뀌뀐뀔뀜뀝뀨끄끅끈끊끌끎끓끔끕끗끙
19 끝끼끽낀낄낌낍낏낑나낙낚난낟날낡낢남납낫났낭낮낯낱낳내낵낸낼냄냅냇냈냉냐냑냔냘냠냥너넉넋넌널넒넓넘넙넛넜넝넣네넥넨넬넴넵넷넸넹녀녁년녈념녑녔녕녘녜녠노녹논놀놂놈놉놋농높놓놔놘놜놨뇌뇐뇔뇜뇝
20 뇟뇨뇩뇬뇰뇹뇻뇽누눅눈눋눌눔눕눗눙눠눴눼뉘뉜뉠뉨뉩뉴뉵뉼늄늅늉느늑는늘늙늚늠늡늣능늦늪늬늰늴니닉닌닐닒님닙닛닝닢다닥닦단닫달닭닮닯닳담답닷닸당닺닻닿대댁댄댈댐댑댓댔댕댜더덕덖던덛덜덞덟덤덥
21 덧덩덫덮데덱덴델뎀뎁뎃뎄뎅뎌뎐뎔뎠뎡뎨뎬도독돈돋돌돎돐돔돕돗동돛돝돠돤돨돼됐되된될됨됩됫됴두둑둔둘둠둡둣둥둬뒀뒈뒝뒤뒨뒬뒵뒷뒹듀듄듈듐듕드득든듣들듦듬듭듯등듸디딕딘딛딜딤딥딧딨딩딪따딱딴딸
22 땀땁땃땄땅땋때땍땐땔땜땝땟땠땡떠떡떤떨떪떫떰떱떳떴떵떻떼떽뗀뗄뗌뗍뗏뗐뗑뗘뗬또똑똔똘똥똬똴뙈뙤뙨뚜뚝뚠뚤뚫뚬뚱뛔뛰뛴뛸뜀뜁뜅뜨뜩뜬뜯뜰뜸뜹뜻띄띈띌띔띕띠띤띨띰띱띳띵라락란랄람랍랏랐랑랒랖랗
23 래랙랜랠램랩랫랬랭랴략랸럇량러럭런럴럼럽럿렀렁렇레렉렌렐렘렙렛렝려력련렬렴렵렷렸령례롄롑롓로록론롤롬롭롯롱롸롼뢍뢨뢰뢴뢸룀룁룃룅료룐룔룝룟룡루룩룬룰룸룹룻룽뤄뤘뤠뤼뤽륀륄륌륏륑류륙륜률륨륩
24 륫륭르륵른를름릅릇릉릊릍릎리릭린릴림립릿링마막만많맏말맑맒맘맙맛망맞맡맣매맥맨맬맴맵맷맸맹맺먀먁먈먕머먹먼멀멂멈멉멋멍멎멓메멕멘멜멤멥멧멨멩며멱면멸몃몄명몇몌모목몫몬몰몲몸몹못몽뫄뫈뫘뫙뫼
25 묀묄묍묏묑묘묜묠묩묫무묵묶문묻물묽묾뭄뭅뭇뭉뭍뭏뭐뭔뭘뭡뭣뭬뮈뮌뮐뮤뮨뮬뮴뮷므믄믈믐믓미믹민믿밀밂밈밉밋밌밍및밑바박밖밗반받발밝밞밟밤밥밧방밭배백밴밸뱀뱁뱃뱄뱅뱉뱌뱍뱐뱝버벅번벋벌벎범법벗
26 벙벚베벡벤벧벨벰벱벳벴벵벼벽변별볍볏볐병볕볘볜보복볶본볼봄봅봇봉봐봔봤봬뵀뵈뵉뵌뵐뵘뵙뵤뵨부북분붇불붉붊붐붑붓붕붙붚붜붤붰붸뷔뷕뷘뷜뷩뷰뷴뷸븀븃븅브븍븐블븜븝븟비빅빈빌빎빔빕빗빙빚빛빠빡빤
27 빨빪빰빱빳빴빵빻빼빽뺀뺄뺌뺍뺏뺐뺑뺘뺙뺨뻐뻑뻔뻗뻘뻠뻣뻤뻥뻬뼁뼈뼉뼘뼙뼛뼜뼝뽀뽁뽄뽈뽐뽑뽕뾔뾰뿅뿌뿍뿐뿔뿜뿟뿡쀼쁑쁘쁜쁠쁨쁩삐삑삔삘삠삡삣삥사삭삯산삳살삵삶삼삽삿샀상샅새색샌샐샘샙샛샜생샤
28 샥샨샬샴샵샷샹섀섄섈섐섕서석섞섟선섣설섦섧섬섭섯섰성섶세섹센셀셈셉셋셌셍셔셕션셜셤셥셧셨셩셰셴셸솅소속솎손솔솖솜솝솟송솥솨솩솬솰솽쇄쇈쇌쇔쇗쇘쇠쇤쇨쇰쇱쇳쇼쇽숀숄숌숍숏숑수숙순숟술숨숩숫숭
29 숯숱숲숴쉈쉐쉑쉔쉘쉠쉥쉬쉭쉰쉴쉼쉽쉿슁슈슉슐슘슛슝스슥슨슬슭슴습슷승시식신싣실싫심십싯싱싶싸싹싻싼쌀쌈쌉쌌쌍쌓쌔쌕쌘쌜쌤쌥쌨쌩썅써썩썬썰썲썸썹썼썽쎄쎈쎌쏀쏘쏙쏜쏟쏠쏢쏨쏩쏭쏴쏵쏸쐈쐐쐤쐬쐰
30 쐴쐼쐽쑈쑤쑥쑨쑬쑴쑵쑹쒀쒔쒜쒸쒼쓩쓰쓱쓴쓸쓺쓿씀씁씌씐씔씜씨씩씬씰씸씹씻씽아악안앉않알앍앎앓암압앗았앙앝앞애액앤앨앰앱앳앴앵야약얀얄얇얌얍얏양얕얗얘얜얠얩어억언얹얻얼얽얾엄업없엇었엉엊엌엎
31 에엑엔엘엠엡엣엥여역엮연열엶엷염엽엾엿였영옅옆옇예옌옐옘옙옛옜오옥온올옭옮옰옳옴옵옷옹옻와왁완왈왐왑왓왔왕왜왝왠왬왯왱외왹왼욀욈욉욋욍요욕욘욜욤욥욧용우욱운울욹욺움웁웃웅워웍원월웜웝웠웡웨
32 웩웬웰웸웹웽위윅윈윌윔윕윗윙유육윤율윰윱윳융윷으윽은을읊음읍읏응읒읓읔읕읖읗의읜읠읨읫이익인일읽읾잃임입잇있잉잊잎자작잔잖잗잘잚잠잡잣잤장잦재잭잰잴잼잽잿쟀쟁쟈쟉쟌쟎쟐쟘쟝쟤쟨쟬저적전절젊
33 점접젓정젖제젝젠젤젬젭젯젱져젼졀졈졉졌졍졔조족존졸졺좀좁좃종좆좇좋좌좍좔좝좟좡좨좼좽죄죈죌죔죕죗죙죠죡죤죵주죽준줄줅줆줌줍줏중줘줬줴쥐쥑쥔쥘쥠쥡쥣쥬쥰쥴쥼즈즉즌즐즘즙즛증지직진짇질짊짐집짓
34 징짖짙짚짜짝짠짢짤짧짬짭짯짰짱째짹짼쨀쨈쨉쨋쨌쨍쨔쨘쨩쩌쩍쩐쩔쩜쩝쩟쩠쩡쩨쩽쪄쪘쪼쪽쫀쫄쫌쫍쫏쫑쫓쫘쫙쫠쫬쫴쬈쬐쬔쬘쬠쬡쭁쭈쭉쭌쭐쭘쭙쭝쭤쭸쭹쮜쮸쯔쯤쯧쯩찌찍찐찔찜찝찡찢찧차착찬찮찰참찹찻
35 찼창찾채책챈챌챔챕챗챘챙챠챤챦챨챰챵처척천철첨첩첫첬청체첵첸첼쳄쳅쳇쳉쳐쳔쳤쳬쳰촁초촉촌촐촘촙촛총촤촨촬촹최쵠쵤쵬쵭쵯쵱쵸춈추축춘출춤춥춧충춰췄췌췐취췬췰췸췹췻췽츄츈츌츔츙츠측츤츨츰츱츳층
36 치칙친칟칠칡침칩칫칭카칵칸칼캄캅캇캉캐캑캔캘캠캡캣캤캥캬캭컁커컥컨컫컬컴컵컷컸컹케켁켄켈켐켑켓켕켜켠켤켬켭켯켰켱켸코콕콘콜콤콥콧콩콰콱콴콸쾀쾅쾌쾡쾨쾰쿄쿠쿡쿤쿨쿰쿱쿳쿵쿼퀀퀄퀑퀘퀭퀴퀵퀸퀼
37 큄큅큇큉큐큔큘큠크큭큰클큼큽킁키킥킨킬킴킵킷킹타탁탄탈탉탐탑탓탔탕태택탠탤탬탭탯탰탱탸턍터턱턴털턺텀텁텃텄텅테텍텐텔템텝텟텡텨텬텼톄톈토톡톤톨톰톱톳통톺톼퇀퇘퇴퇸툇툉툐투툭툰툴툼툽툿퉁퉈퉜
38 퉤튀튁튄튈튐튑튕튜튠튤튬튱트특튼튿틀틂틈틉틋틔틘틜틤틥티틱틴틸팀팁팃팅파팍팎판팔팖팜팝팟팠팡팥패팩팬팰팸팹팻팼팽퍄퍅퍼퍽펀펄펌펍펏펐펑페펙펜펠펨펩펫펭펴편펼폄폅폈평폐폘폡폣포폭폰폴폼폽폿퐁
39 퐈퐝푀푄표푠푤푭푯푸푹푼푿풀풂품풉풋풍풔풩퓌퓐퓔퓜퓟퓨퓬퓰퓸퓻퓽프픈플픔픕픗피픽핀필핌핍핏핑하학한할핥함합핫항해핵핸핼햄햅햇했행햐향허헉헌헐헒험헙헛헝헤헥헨헬헴헵헷헹혀혁현혈혐협혓혔형혜혠
40 혤혭호혹혼홀홅홈홉홋홍홑화확환활홧황홰홱홴횃횅회획횐횔횝횟횡효횬횰횹횻후훅훈훌훑훔훗훙훠훤훨훰훵훼훽휀휄휑휘휙휜휠휨휩휫휭휴휵휸휼흄흇흉흐흑흔흖흗흘흙흠흡흣흥흩희흰흴흼흽힁히힉힌힐힘힙힛힝

If tradeoffs were necessary (and they will be), a font designer could give preference to the list of 2,350 glyphs above that are the most common in daily use.

In Conclusion

This web page has information I wish I had at my fingertips when first setting out to create a Hangul Syllables block from scratch. If you intend to design a Hangul font, this description of base font structures hopefully will give you useful ideas in Hangul font glyph organization. If you have suggestions for improving the content of this web page, please let me know.

Valid HTML 4.01 Transitional Valid CSS! Best Viewed with Any Browser