This page contains the latest release of the GNU Unifont, with glyphs for every printable code point in the Unicode 5.1 Basic Multilingual Plane (BMP). The BMP occupies the first 65,536 code points of the Unicode space.
This update (6 July 2008) corrects errors in the Braille block (U+2800..U+28FF) that were in the original version of the GNU Unifont. All other glyphs are the same.
Initially I just posted my additions to Roman Czyborra's original unifont.hex file. Then in mid-January 2008, his website went down. So here's the whole font. Roman Czyborra has encouraged me to continue with my additions.
Luis González Miranda wrote a cool combination of scripts to convert the GNU Unifont from .hex format into FontForge .sfd format, then to have FontForge convert this to a TrueType outline font (see the Unicode Utilities web page on this site for more information). Pixels are drawn as outlined squares, so they scale to all point sizes. This works well with GNOME; I haven't tried it with any other Unix windowing environment. I've removed the OpenType SBIT font link from this page because the outline font is much more flexible.
Luis has given me permission to modify his scripts to convert the latest GNU Unifont versions to TrueType. Therefore without further ado, here's a gzipped tarball for Unix/Linux/*nix:
Here's a Winzip archive for Mac and Windows (unzip the file and copy to your Fonts folder):
Finally, here is a BDF version of the font for Unices:
There are four versions of the font. The first is the one you'll most likely want for a bitmap display as it has combining circle marks removed. The TrueType and BDF font files were created from this first version. The versions with "circles" in the name contain combining circle marks. The versions with "-jp" in the name preserve Roman Czyborra's original CJK glyphs, which he obtained from a public domain Japanese font. The .hex files are about 3 Mbytes each.
- http://unifoundry.com/unifont-5.1.20080706.hex
- http://unifoundry.com/unifontfull-5.1.20080706.hex
- http://unifoundry.com/unifont-jp-5.1.20080706.hex
- http://unifoundry.com/unifontfull-jp-5.1.20080706.hex
Roman released his font and software as freeware: "All of my works you find here are freeware. You may freely copy, use, quote, modify or redistribute them as long as you properly attribute my contribution and have given a quick thought about whether Roman might perhaps be interested to read what you did with his stuff. Horizontal rules don't apply."
If you'd like to contribute any glyphs, please send them to unifoundry at this domain name (not spelled out because of spammers). You can download bitmaps for the ranges you'd like to edit (see the hyperlinks in the HTML table below). Then send me your modified .bmp file, or convert the .bmp file to a .hex file with my unibmp2hex conversion utility.
To see how a glyph should appear, consult the Unicode code pages at http://www.unicode.org/charts/.
Wen Quan Yi: Spring of Letters (文泉驛 / 文泉驿)
The biggest improvement to the GNU Unifont was the addition of over 20,000 new CJK glyphs from version 1.1 of Qianqian Fang's Unibit font. The Unibit font began as a combination of the original GNU Unifont and a basic CJK bitmap font placed in the public domain by the People's Republic of China. It adopted the GNU Unifont's scheme of 8x16 and 16x16 glyphs. Qianqian Fang and many others then added about 10,000 more glyphs.
Qianqian states in the Unibit distribution: "The entire CJK Unified Ideographics (U4E00-U9FA5) and CJK Unified Ideographics Extension A(U3400-U4DB5) blocks were replaced by high-quality glyphs from China National Standard GB19966-2005 (public domain)." Qianqian also drew the new 22 CJK ideographs in the range U+9FA6..U+9FBB that appear in this version of the Unifont.
The Wen Quan Yi Unibit font is released under version 2.0 of the GNU General Public license, with the exception that embedding the Unibit font in a document does not in itself bind the document to the conditions of the GNU GPL. See his website for more details: http://wqy.sourceforge.net/cgi-bin/enindex.cgi.
Wen Quan Yi (WQY) means "spring of letters," as in a spring of water. This is an interesting choice of words, as the British spelling of "font" is "fount" (but still pronounced "font").
The following code points in the latest unifont.hex file are taken from the WQY Unibit font (with my additions to complete the U+3000..U+33FF range, particularly the missing Hiragana, Katakana, and Kanji):
- U+2E80..U+2EFF: CJK Radicals Supplement
- U+2F00..U+2FDF: Kangxi Radicals
- U+2FF0..U+2FFF: Ideographic Description Characters
- U+3000..U+303F: CJK Symbols and Punctuation
- U+31C0..U+31EF: CJK Strokes
- U+3200..U+32FF: Enclosed CJK Letters and Months
- U+3300..U+33FF: CJK Compatibility
- U+3400..U+4DBF: CJK Unified Ideographs Extension A
- U+4E00..U+9FBF: CJK Unified Ideographs
- U+F900..U+FAFF: CJK Compatibility Ideographs
Qianqian has given his okay to add these CJK glyphs into the GNU Unifont. Likewise, I've told him to incorporate any glyphs he wants from my contributions to the GNU Unifont into his Unibit font.
Additions for 2008-07-06: Braille Block Corrected
In 1998, Roman Czyborra wrote a Perl script to generate the Braille glyphs. He used it to create the U+2800..U+28FF range of the GNU Unifont. This script did not enumerate the Braille dot sequences correctly. He posted a corrected version of the script on his website in 2003, but the original unifont.hex file kept the incorrect Braille glyphs. I just learned of this while going through all of his Perl scripts. This latest version corrects that error.
Additions for 2008-06-20: Unicode 5.1 Complete BMP
A journey of a thousand glyphs begins with the first pixel, to paraphrase Lao Tzu. In this case, the journey began with some missing Latin glyphs and in the end added approximately 18,500 glyphs to the existing GNU Unifont for complete coverage of the Unicode 5.1 Basic Multilingual Plane.
This is the culmination of a 10 year effort, originally begun by Roman Czyborra in 1998. Since then, the GNU Unifont has been added to most free Unix systems (especially Linux distributions). David Starner was maintaining GNU Unifont software on Debian GNU/Linus for a while, but left the effort several years ago. Rich Felker created a new set of Tibetan glyphs during a point when GNU Unifont was not being maintained by anyone; I've now incorporated his improvements. Qianqian Fang began his Wen Quan Yi effort in 2004 with a focus on providing top-notch CJK ideographs in both bitmap and vector forms.
I am currently maintaining this font, and am glad to add any improvements that anyone wants to send (within as well as beyond the Basic Multilingual Plane). I'm going to experiment with breaking the 16-bit barrier in the future. Before doing that, I'd like to experiment more to see how some software (such as TeX) deals with more than 65,536 code points in a font.
Complex scripts (such as Arabic and the Brahmi-derived Indic scripts) exceed the limitations of the BDF font format. Yet Roman's philosophy was that it would be better to show something versus a dreaded empty box on the screen for any character in Unicode's Basic Multilingual Plane. Pursuing that philosophy, I've drawn over 8,000 glyphs even for complex scripts so every printable glyph would have some rendering.
Qianqian Fang and his Wen Quan Yi volunteers added the Unicode 5.1 Bopomofo (U+3100..U+312F), CJK Strokes (U+31C0..U+31EF), and CJK ideographs (U+9FBC..U+9FC3) for complete Unicode 5.1 coverage. Qianqian also drew examples of the clock and moon ideographs as a model for me to complete the U+3200..U+33FF range. I added the missing Hiragana, Katakana, Kanji, and Hangul. I also improved some existing Hiragana and Katakana in that range with expert oversight — thanks Yuko!
I changed the entire Hangul Syllables block of 11,172 glyphs (U+AC00..U+D7A3) to thin stroke glyphs. Roman had mentioned on his website wanting to do this someday. Jungshik Shin had written a Perl script in 1998 to convert a Hanterm font to the Unicode Hangul Syllables in .hex format. I made a couple of bug fixes to this script and used it to create BDF files covering the Hangul Syllables range for all four Hanterm Hangul fonts. See http://unifoundry.com/hangul/index.html for more details.
I adjusted the horizontal centering of all Yi Syllables and Yi Radicals. The Yi glyphs were for the most part moved left by one pixel so that they center on the eighth pixel across rather than the ninth pixel across.
Yi was traditionally written vertically from top to bottom or horizontally from right to left, according to the Unicode 5.0 Standard, p. 440. Therefore I made the center line of the glyphs the ninth pixel column, counting from the left rather than the eighth pixel. Today Yi is also written horizontally from left to right.
I attempted to create a set of Yi glyphs that would look good if written either horizontally (in either direction) or vertically. Some horizontal strokes are a little exaggerated as a result, to avoid excessive white space to the left and right of a glyph with horizontal writing. Some circles are also flattened a little for the same reason.
All Yi glyphs are 16 pixels wide. Most Yi glyphs are two pixels above the baseline. Some reach below this as a matter of necessity, to have the entire glyph fit within a 16x16 grid.
If a Yi font were only to be written horizontally, a combination of 12 and 16 pixels wide would probably allow ideal rendering of Yi. Currently the Unifont only supports 8 and 16 pixel glyph widths.
Additions for 2008-03-09
U+1100..U+11FF (Hangul Jamo): I replaced all existing glyphs in this range (there were just a fraction of the total needed) with thin stroke glyphs. Roman had expressed a desire to do this someday on his website. A 16x16 grid wasn't quite enough to draw one set of glyphs that could combine initial consonant + vowel + final consonant for all combinations. A cell height of 24 pixels would probably be okay.
GNU Unifont Unicode 5.1 Basic Multilingual Plane Coverage
Here's a summary of the percent completion of each range in the Basic Multilingual Plane:
Covered Range Script
------- ----- ------
100.0% U+0000..U+007F C0 Controls and Basic Latin
100.0% U+0080..U+00FF C1 Controls and Latin-1 Supplement
100.0% U+0100..U+017F Latin Extended-A
100.0% U+0180..U+024F Latin Extended-B
100.0% U+0250..U+02AF IPA Extensions
100.0% U+02B0..U+02FF Spacing Modifier Letters
100.0% U+0300..U+036F Combining Diacritical Marks
100.0% U+0370..U+03FF Greek and Coptic
100.0% U+0400..U+04FF Cyrillic
100.0% U+0500..U+052F Cyrillic Supplement
100.0% U+0530..U+058F Armenian
100.0% U+0590..U+05FF Hebrew
100.0% U+0600..U+06FF Arabic
100.0% U+0700..U+074F Syriac
100.0% U+0750..U+077F Arabic Supplement
100.0% U+0780..U+07BF Thaana
100.0% U+07C0..U+07FF N'Ko
100.0% U+0800..U+08FF Unassigned
100.0% U+0900..U+097F Devanagari
100.0% U+0980..U+09FF Bengali
100.0% U+0A00..U+0A7F Gurmukhi
100.0% U+0A80..U+0AFF Gujarati
100.0% U+0B00..U+0B7F Oriya
100.0% U+0B80..U+0BFF Tamil
100.0% U+0C00..U+0C7F Telugu
100.0% U+0C80..U+0CFF Kannada
100.0% U+0D00..U+0D7F Malayalam
100.0% U+0D80..U+0DFF Sinhala
100.0% U+0E00..U+0E7F Thai
100.0% U+0E80..U+0EFF Lao
100.0% U+0F00..U+0FFF Tibetan
100.0% U+1000..U+109F Myanmar
100.0% U+10A0..U+10FF Georgian
100.0% U+1100..U+11FF Hangul Jamo
100.0% U+1200..U+137F Ethiopic
100.0% U+1380..U+139F Ethiopic Supplement
100.0% U+13A0..U+13FF Cherokee
100.0% U+1400..U+167F Unified Canadian Aboriginal Syllabics
100.0% U+1680..U+169F Ogham
100.0% U+16A0..U+16FF Runic
100.0% U+1700..U+171F Tagalog
100.0% U+1720..U+173F Hanunoo
100.0% U+1740..U+175F Buhid
100.0% U+1760..U+177F Tagbanwa
100.0% U+1780..U+17FF Khmer
100.0% U+1800..U+18AF Mongolian
100.0% U+18B0..U+18FF Unassigned
100.0% U+1900..U+194F Limbu
100.0% U+1950..U+197F Tai Le
100.0% U+1980..U+19DF New Tai Lue
100.0% U+19E0..U+19FF Khmer Symbols
100.0% U+1A00..U+1A1F Buginese
100.0% U+1A20..U+1AFF Unassigned
100.0% U+1B00..U+1B7F Balinese
100.0% U+1B80..U+1BBF Sundanese
100.0% U+1BC0..U+1BFF Unassigned
100.0% U+1C00..U+1C4F Lepcha
100.0% U+1C50..U+1C7F Ol Chiki
100.0% U+1C80..U+1CFF Unassigned
100.0% U+1D00..U+1D7F Phonetic Extensions
100.0% U+1D80..U+1DBF Phonetic Extensions Supplement
100.0% U+1DC0..U+1DFF Combining Diacritical Marks Supplement
100.0% U+1E00..U+1EFF Latin Extended Additional
100.0% U+1F00..U+1FFF Greek Extended
100.0% U+2000..U+206F General Punctuation
100.0% U+2070..U+209F Superscripts and Subscripts
100.0% U+20A0..U+20CF Currency Symbols
100.0% U+20D0..U+20FF Combining Diacritical Marks for Symbols
100.0% U+2100..U+214F Letterlike Symbols
100.0% U+2150..U+218F Number Forms
100.0% U+2190..U+21FF Arrows
100.0% U+2200..U+22FF Mathematical Operators
100.0% U+2300..U+23FF Miscellaneous Technical
100.0% U+2400..U+243F Control Pictures
100.0% U+2440..U+245F Optical Character Recognition
100.0% U+2460..U+24FF Enclosed Alphanumerics
100.0% U+2500..U+257F Box Drawing
100.0% U+2580..U+259F Block Elements
100.0% U+25A0..U+25FF Geometric Shapes
100.0% U+2600..U+26FF Miscellaneous Symbols
100.0% U+2700..U+27BF Dingbats
100.0% U+27C0..U+27EF Miscellaneous Mathematical Symbols - A
100.0% U+27F0..U+27FF Supplemental Arrows - A
100.0% U+2800..U+28FF Braille Patterns
100.0% U+2900..U+297F Supplemental Arrows - B
100.0% U+2980..U+29FF Miscellaneous Mathematical Symbols - B
100.0% U+2A00..U+2AFF Supplemental Mathematical Operators
100.0% U+2B00..U+2BFF Miscellaneous Symbols and Arrows
100.0% U+2C00..U+2C5F Glagolithic
100.0% U+2C60..U+2C7F Latin Extended C
100.0% U+2C80..U+2CFF Coptic
100.0% U+2D00..U+2D2F Georgian Supplement
100.0% U+2D30..U+2D7F Tifinagh
100.0% U+2D80..U+2DDF Ethiopic Extended
100.0% U+2DE0..U+2DFF Cyrillic Extended - A
100.0% U+2E00..U+2E7F Supplemental Punctuation
100.0% U+2E80..U+2EFF CJK Radicals Supplement
100.0% U+2F00..U+2FDF Kangxi Radicals
100.0% U+2FE0..U+2FEF Unassigned
100.0% U+2FF0..U+2FFF Ideographic Description Characters
100.0% U+3000..U+303F CJK Symbols and Punctuation
100.0% U+3040..U+309F Hiragana
100.0% U+30A0..U+30FF Katakana
100.0% U+3100..U+312F Bopomofo
100.0% U+3130..U+318F Hangul Compatibility Jamo
100.0% U+3190..U+319F Kanbun
100.0% U+31A0..U+31BF Bopomofo Extended
100.0% U+31C0..U+31EF CJK Strokes
100.0% U+31F0..U+31FF Katakana Phonetic Extensions
100.0% U+3200..U+32FF Enclosed CJK Letters and Months
100.0% U+3300..U+33FF CJK Compatibility
100.0% U+3400..U+4DBF CJK Unified Ideographs Extension A
100.0% U+4DC0..U+4DFF Yijing Hexagram Symbols
100.0% U+4E00..U+9FCF CJK Unified Ideographs
100.0% U+9FD0..U+9FFF Unassigned
100.0% U+A000..U+A48F Yi Syllables
100.0% U+A490..U+A4CF Yi Radicals
100.0% U+A4D0..U+A4FF Unassigned
100.0% U+A500..U+A63F Vai
100.0% U+A640..U+A69F Cyrillic Extended - B
100.0% U+A6A0..U+A6FF Unassigned
100.0% U+A700..U+A71F Modifier Tone Letters
100.0% U+A720..U+A7FF Latin Extended - D
100.0% U+A800..U+A82F Syloti Nagri
100.0% U+A830..U+A83F Unassigned
100.0% U+A840..U+A87F Phags-pa
100.0% U+A880..U+A8DF Saurashtra
100.0% U+A8E0..U+A8FF Unassigned
100.0% U+A900..U+A92F Kayah Li
100.0% U+A930..U+A95F Rajang
100.0% U+A960..U+A9FF Unassigned
100.0% U+AA00..U+AA5F Cham
100.0% U+AA60..U+ABFF Unassigned
100.0% U+AC00..U+D7AF Hangul Syllables
100.0% U+D7B0..U+D7FF Unassigned
0.0% U+D800..U+DFFF Surrogate Pairs - Not Used
100.0% U+E000..U+F8FF Private Use Area
100.0% U+F900..U+FAFF CJK Compatibility Ideographs
100.0% U+FB00..U+FB4F Alphabetic Presentation Forms
100.0% U+FB50..U+FDFF Arabic Presentation Forms - A
100.0% U+FE00..U+FE0F Variation Selectors
100.0% U+FE10..U+FE1F Vertical Forms
100.0% U+FE20..U+FE2F Combining Half Marks
100.0% U+FE30..U+FE4F CJK Compatibility Forms
100.0% U+FE50..U+FE6F Small Form Variants
100.0% U+FE70..U+FEFF Arabic Presentation Forms - B
100.0% U+FF00..U+FFEF Halfwidth and Fullwidth Forms
100.0% U+FFF0..U+FFFF Specials
Here's a color-coded table of the entire GNU Unifont coverage. The "Reference" version contains the original .hex bitmaps, and includes noncharacters, combining circles, and other renderings removed from the final version. The "Final" version contains glyphs as they would appear in an ordinary font; these are the source of the .bdf and .ttf files.
All usable code point "pages" of 256 code points are green because the GNU Unifont now has complete coverage of the Unicode 5.1 Basic Multilingual Plane.
What's Next?
I am about to release a new version of the GNU Unifont Utilities on the Unifont Utilities page — stay tuned!
Brahmi-derived (Indic) Scripts
I stopped working on the remaining Brahmi-derivative scripts (U+0A00..U+0DFF) while waiting for the Unicode 5.1 Standard to be released. I will pick those up after adding Vai.
Available Unicode glyph assignments do not suffice for proper rendering of these syllabic scripts in a BDF font. Nevertheless I'll add these under the premise that a rendering of something is better than nothing. They might be of use as a starting point for someone who wants to experiment with Microsoft's Volt, or with Graphite, or something new.
A big challenge with Indic scripts is that they are abugidas, where a consonant sign is pronounced with an inherent following vowel (usually short "a"). When two consonants are joined, sometimes the first consonant is written in a half-form to denote that the inherent vowel is dropped. Many consonant conjunctions have unique glyphs, yet they do not have unique code points in Unicode. The most common example in modern Hindi is "k" + "ssa." The way this conjunction is written as a single glyph bears little resemblance to the original letters, yet Unicode has no code points for such combinations.
Fonts for these scripts have resorted to placing such essential glyphs in a Private Use Area. In fact, the Unicode 5.1 Standard even proposes that a font store Tamil syllables in a Private Use area. That defeats the whole purpose of Unicode as a standard encoding of the world's scripts, but is necessary for rendering under Unicode's current limitations. It is an artifact of the Unicode consortium adopting the Indian Government's ISCII-1988 standard. In the 1980s, the Indian government was concerned with simple sorting algorithms that did not require much memory.
Unicode, like ISCII-1988, only contains two of the many accent marks used for reciting of the Sanskrit Vedas. There is a movement to add such accents to the Unicode standard. A good summary of proposed additions to Unicode (with example glyphs for missing accents in the Devanagari script) appears at http://www.omkarananda-ashram.org/Sanskrit/vedicaccents.htm. They are seeking others to review their list of glyphs, and to notify them of equivalent glyphs in scripts besides Devanagari.
Arabic and Other Semitic Scripts
Arabic letters have up to four different shapes each: one when a letter appears isolated from other letters; one when a letter appears at the beginning of a word; one with a letter appears in the middle of a word; and one when a letter appears at the end of a word.
Unicode only provides one code point for each letter. The font technology must therefore know how to draw each Arabic letter through extensive ligature tables. This is beyond the capability of an ordinary BDF font file, so the GNU Unifont does not provide full support for Arabic or other Semitic scripts. The Unifont glyphs show Arabic letters in their isolated forms so that at least something will be rendered.
Now You See It...
Initially, I wanted to find out what glyphs remained to be drawn
to complete the GNU Unifont. One problem was that the
unifont.hex file did not include filler glyphs
for the unassigned code points and noncharacters.
So I created the following file, which mimics the striped lines from the Unicode code blocks for all fillers. Note that new releases of Unicode will assign glyphs to some of these previously unassigned code points. At that time, the corresponding blank entries in this file should be removed.
I am placing these filler glyphs in the public domain. Do what thou wilt.
This file contains filler glyphs for all Unicode BMP code points that do not have assigned glyph representations in the published Unicode 5.1 standard, not counting the surrogate code points (U+D800 through U+DFFF) or the BMP Private Use code points (U+E000 through U+F8FF). My reference was the CD-ROM included in the back of the Unicode 5.0 Standard book, plus updates for Unicode 5.1 from the unicode.org website.
This Unicode 5.1 version has 3658 filler glyphs for the Basic Mulitlingual Plane. The Unicode 5.0 version had 4667 filler glyphs. Unicode 5.1 added over 1000 glyphs to the Basic Multilingual Plane. Each filler glyph looks like this:
|
|
The Winzip version of this file is blanks-5.1.zip. The gzipped Unix/Linux version of this file is blanks-5.1.hex.gz.
Additional Glyphs — 31 December 2007
I've added over 100 glyphs that can be incorporated into the GNU Unifont to complete the range U+0000 through U+05FF. Code points U+0360, U+0361, and U+0362 had a spurious pixel set in the original file; I made new glyphs with that pixel erased.
These glyphs are available under the GNU General Public License. Many of them were derived by copying and pasting a cell (generated by unihex2bmp) in a graphics editor.
A patch file that contains the additions that Roman posted on his website, plus
Debian additions through version 1.04, plus the above-mentioned blanks,
plus the 100+ additional glyphs that I created is at
unifont-patch-2007-12-31.gz.
This can be applied to Roman Czyborra's original
unifont.hex.
Historical Note: This patch file applied to the original unifont.hex file was available for a brief period on Roman Czyborra's website before it went down. He asked me to continue my additions to the GNU Unifont, so for now I'm making updates available as entire font files.