Hangul (Hangeul) Fonts

GNU Unifont
Unicode Tutorial
Hangul Fonts
Japanese Fonts
Retro Fonts
Fontforge Poll
Checking .sigs

Hangul (Hangeul)

Hunmin Jeongeum Hangul is the national script of Korea. The Hangul script was developed by King Sejong the Great (세종대왕), fourth king of the Joseon Dynasty. He created the script in three years, from 1443–1446. He introduced his writing system to the nation in the ninth lunar month (autumn) of 1446 with the publication of Hunmin Jeong-eum Haerye, or Explanations and Examples of Correct Sounds for the Instruction of the People (shown at left). He developed Hangul so that the comman man could read and write, amid much opposition by the scholars of the day. The introduction to this work described his purpose:

"Because the national language sounds different from that of China, it [the spoken language] doesn't match the [Chinese] accents. Therefore, when the ignorant want to communicate, many of them cannot achieve their intentions. Because I am saddened by this, I have newly made 28 letters. It is my intention that everybody learn the letters easily so that they can conveniently use them every day." [Source: Wikipedia]

The original version of this book, produced in 1446, contained detailed commentaries ("Haerye") of how the letter forms were designed. Lost for centuries, a single copy was discovered during World War II and hidden to keep it safe from confiscation or destruction. This discovery clarified much of what had been speculation as to the reasons for Hangul's letter forms. According to Wikipedia, a second copy of this original document was discovered in 2008.

Hangul is written as syllabic blocks [see illustration below; source: Wikipedia]. Each block consists of up to three parts (called jamo) written in order:

  1. choseong (Leading Consonants or Syllable-initial Characters)
  2. jungseong (Vowels or Middle Syllable-peak Characters)
  3. jongseong (Final Consonants or Syllable-final Characters)

The example above shows the word "hangeul" (Hangul) adapted from an image on Wikipedia.org. The first syllable is "han"; its leading consonant is "h", followed by middle vowel "a", followed by Final consonant "n". The second syllable is "geul"; its leading consonant is "g/k", followed by middle vowel "eu", followed by Final consonant "l". The common Romanized spelling of this word is "Hangul".

Notice that vowels, semivowels ("y" and "w") and diphthongs (blue in the above example) can appear to the right of an initial consonant or underneath an initial consonant. Some are written both below and to the right of the initial consonant.

King Sejeong's Original Hangul and Its Evolution

King Sejeong created an alphabet divided into consonants and vowels, with a different methodology for those two categories. This section introduces the original Hangul letters in an order designed for ease of memorization.

Hangul Consonants

The consonants were drawn to look like the part of the mouth that produces them, There were five basic consonants:

The Five Basic Hangul Consonant Shapes
Letter Sound Representation
[k]Tongue curled near back (by molar teeth)
[n]Tongue curled near front (by incisor teeth)
[ng]Back of throat
(silent if initial consonant)

Additional strokes were added to these five basic shapes to form all of the consonants, with these phonetic sounds according to Wikipedia:

The 17 Original Hangul Consonants
(Red Letters are No Longer Used)
ᄏ[kʰ]ᄃ[t]ᄇ[ph]ᄌ[ts] ᅙ[ʔ]
ㆁ[ŋ] ᄐ[tʰ]ᄑ[pʰ]ᄎ[tsʰ]ᄒ[x]
ᅀ[ ȷ̃ ] ᄅ[l]

Some consonants are doubled to indicate additional stress. Non-doubled consonant pairs are pronounced acoording to the first letter or last letter, depending on whether the consonant combination is in the initial or final position, respectively.

Hangul Compatibility Jamo Combination Consonants
(Red Letters are No Longer Used)
ㄲ[ɡ̊] ㄸ[d̥] ㅃ[b̥] ㅆ[z̥] ㅉ[d̥z̥]
ㅸ[ɸ] ㆄ[ɸʰ] ㅹ[β̥] ㅱ[ w̃ ] ㆅ[ɣ̊]

Hangul Vowels

Vowels only have three basic components, originally chosen to represent the Confucian concept of Three Realms (三才).

The Three Realms in Hangul Vowels
天 The sky; positive yang energy.
(In modern Hangul, drawn as a short stroke.)
人 Humankind; neutral (mediating) energy.
地 The Earth; negative yin energy.

Originally, Hangul had 11 vowels: the single dot (araea) is not used in most modern Hangul, although it still appears in spellings in the Jeju Island dialect. The other ten vowels are shown with their conventional romanized forms. Note that a second short stroke in a vowel, whether horizontal or vertical, creates a diphthong with a preceding "y-".

Original 11 Hangul Vowels
ㆍ[ʌ] (araea)
ㅣ[i] ㅡ[eu]
ㅏ[a] ㅓ[eo] ㅗ[o] ㅜ[u]
ㅑ[ya] ㅕ[yeo] ㅛ[yo] ㅠ[yu]

Dipthongs can be formed with one or more of the basic vowel shapes.

Hangul Vertical
Dipthongs with ㅣ

ㅏ[a] ㅐ[ae]
ㅓ[eo] ㅔ[e]
ㅑ[ya] ㅒ[yae]

These vertical form vowels and diphthongs can combine with some horizontal form vowels and diphthongs to form more complex diphthongs. If you know the above vowels and diphthongs, then learning these more compound diphthongs is easy:

Hangul Compound Dipthongs
(Red Dipthongs are No Longer Used)
With ㅏ[a] ㅐ[ae]ㅑ[ya] ㅒ[yae] ㅓ[eo]ㅔ[e] ㅕ[yeo]ㅖ[ye] ㅣ[i]
ㆍ(araea) ㆎ(araea-i)
ㅡ[eu] ㅢ[ui]
ㅗ[o] ㅘ[wa] ㅙ[wae] ㅚ[oe]
ㅛ[yo] ㆇ[yo-ya] ㆈ[yo-yae] ㆉ[yo-i]
ㅜ[u] ㅝ[wo] ㅞ[we] ㅟ[wi]
ㅠ[yu] ㆊ[yu-yeo] ㆋ[yu-ye] ㆌ[yu-i]

All of these modern and ancient vowels and diphthongs are supported in the Unifont Hangul jamo set used to create the modern Hangul Syllables block. They also all appear in the Unicode Hangul Compatibility Jamo range (U+3130..U+318F), and were also supported by Hanterm.

Hangul in Unicode

Hangul appears in several Unicode ranges:

Handling the juxtaposition of initial and final consonants in relation to the middle vowels and diphthongs within a syllable is the key to fine Hangul font design. This is even more challenging in a bitmapped screen font. The Hangul Syllables range allows for pre-composed syllable glyphs, improving Hangul rendering with even a bitmapped font stored in Unix BDF format.

The standard set of Hangul fonts used with the X Window System on Unix systems has historically been the Johab font set. These fonts are primarily used with the xterm-based "Hanterm" program. It turns out that the Johab glyphs that were originally in Unifont were found to only be licensed for use in Hanterm, and so those glyphs were removed from Unifont and replaced with alternate glyphs. More on this below.

X11 Johab-Encoded Fonts for Unifont

A "johab-encoded" font takes a sequence of initial, medial, and final Hangul letters (jamo) and arranges them in a new glyph that forms a syllable (johab). This is accomplished by having variations of each letter to use in juxtaposition to other letters in the same syllable.

For an (extremely!) detailed discussion of Hangul font encodings, see the supplementary page Generating Hangul Syllables. In it, I describe various Korean font encodings in more detail than anything else I've found in English. The main focus is describing the steps I followed to draw a new set of Hangul Syllables glyphs (U+AC00..U+D7A3) to address non-GPL licensing issues with older fonts. I wrote notes on the process for my own sake while developing new glyphs because I could not find all the information anywhere in English. I hope it will provide a reference for others working with old or new Hangul fonts and encodings.

Hanterm Fonts and Their Licensing Issues

Long before my involvement with Hangul fonts, a set of free Unix BDF Johab fonts were developed for displaying Hangul under the X11 window system. They were used with Jaekyung "Jake" Song's Hanterm terminal emulator. Jungshik Shin then wrote a Perl script, johab2ucs2.pl, to convert the Hangul set of Johab Encoded Fonts into Roman Czyborra's .hex format.

I made a couple of bug fixes to the original Perl script and added a bunch of comments to help figure out how it worked. Here's a link to the script with my original modifications:


I then used this script to convert the four Hangul Johab Encoded fonts into Unicode Hangul Syllables in the U+AC00..U+D7A3 range in .hex format. Then I used Roman's hex2bdf script to convert those .hex files into BDF files. Here are the gzipped versions of the resulting BDF files, with all syllables in the Hangul Syllables range:

The original unifont.hex file appears to have used iyagi16 for its syllables. Roman mentioned wanting to switch to a thin stroke font someday. For the Unifont 5.1 release, I changed the Hangul Syllables in the default unifont.hex file to the thin stroke johabg16 glyphs. They seem easier to read on a screen.

Then it was brought to my attention that these four Hanterm fonts, although free of charge, were only licensed in Korea for use with Hanterm. Thus, they cannot be used as part of Unifont or any other font.

Because johabg16 could not be licensed under the GPL (even though it is a free font), I then created a new set of Hangul syllables from scratch. This took several years to complete part-time, and is described in the above-mentioned page Generating Hangul Syllables.

Minseo Lee's Johab Modifications

In June 2023, Minseo Lee (이민서) contributed an updated set of modern glyphs for generating Hangul Syllables using the Hanterm ordering along with the ancient glyphs that I drew (which are not used to generate Hangul Syllables glyphs). He slightly modified the original johab2ucs2 Perl script; the modified version is the one in the latest Unifont releases. He also modified the other Unicode ranges of Hangul glyphs for consistency.

Ho-Seok Ee's Johab 6/3/1 Encoding

Immediately after Minseo Lee sent his updates for Unifont's Johab 10/3 or 4/4 encoding, Ho-Seok Ee sent a proposed Johab 6/2/1 encoding. Paul Hardy added a third jungseong variation for combining with jongseong nieun, resulting in a Johab 6/3/1 encoding. Creating glyphs using this scheme was far easier than the original Hanterm encoding. After getting feedback from Minseo Lee, the Unifont package switched to this new johab encoding for the Unifont 15.1.01 release.

Ho-Seok Ee also came up with the idea of moving the glyph code points to the Unicode Plane 0 Private Use Area (PUA) range of U+E000..U+E8FF. This allows those glyphs to be part of a compiled Unifont Plane 0 font.

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

The Unicode Hangul Syllables block of 11,172 complex glyphs forms the main part of the Hangul code points in Unicode. This block contains every possible combination of the 18 Leading Consonants or 1 Leading Filler (19 possible initial letters), 21 Middle Vowels and Dipthongs, and 27 Final Consonants (or no Final Consonant).

If a Korean word is pronounced as beginning with a vowel, it is written with choseong ieung (NG) in the Leading Consonant position. The "NG" is silent in the initial position of a Hangul syllable.

There are 19 × 21 = 399 possible combinations of Leading Consonants and Middle Vowels and Dipthongs. Each of these can appear as a pair, or with any of the 27 Final Consonant combinations, for a total of 28 possible combinations each. Thus there are 399 × 28 = 11,172 glyphs total possible from 19 Leading glyphs, 21 Middle glyphs, and 27 Final glyphs (or no Final glyph).

For a thorough discussion of the creation of the Hangul Syllables block in Unifont versions after 5.1, see Generating Hangul Syllables.

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