Unscii is a set of bitmapped Unicode fonts based on classic system fonts. Unscii attempts to support character cell art well while also being suitable for terminal and programming use.
The two main variants are unscii-8 (8x8) and unscii-16 (8x16). There are also several alternative styles for unscii-8, as well as a 8x16 "full" variant that incorporates missing Unicode glyphs from Fixedsys Excelsior and GNU Unifont. "unscii-16-full" falls under GPL because of how Unifont is licensed; the other variants are in the Public Domain.
Unscii was created by Viznut.
There's very little Unscii-specific art or even decent Unicode art in general. Therefore, we'll show some legacy format art.
Amiga ansi: Divine Stylers by Hellbeard, as rendered with unscii-16.Source
PC ansi: Ansi Love by Rad Man, as rendered with unscii-16.Source
Commodore 64 petscii pictures as rendered with unscii-8, using the 256-color xterm palette: I Has Floppy by Redcrab; The First Ball by Dr.TerrorZ; Gary by Mermaid.
The source code package includes a generic bitmap-to-unscii converter. Here's an example of a conversion to unscii-8 using the 256-color xterm palette, without dithering:
HEX and PCF are the only actual bitmapped formats here. HEX is the same simple hexdump format as used by the Unifont project.
TTF, OTF and WOFF are vectorized because the bitmapped TTF fonts generated by FontForge didn't seem to work anywhere. Fixes to this problem are appreciated.
Years ago, I noticed that Unicode had a bunch of pseudographic characters that could be used to enrichen Ansi art. However, no one seemed to use them. Even MUDs that used the 256-color Xterm palette and had no issues with Unicode still preferred to stick to the blocks available in the MS-DOS codepage 437.
After looking into existing Unicode fonts, the reason became obvious: the implementation of non-CP437 graphics characters was shaky at best. Unicode Consortium doesn't even care how pseudographics are implemented. It was a kind of chicken-and-egg problem: No commonly accepted Unicode graphics font, no Unicode art scene; no art scene, no font support. The idea of an art-compatible Unicode font was born.
For Unscii, I studied a bunch of classic system fonts and how their characters had been used in Ascii and "extended-Ascii" art.
8x8 system fonts can be divided in two major categories according to their line thickness: 1-pixel and 2-pixel. 2-pixel-wide lines are used in more prominent classic systems, so I chose it. Also, 2-pixel 8x8 system fonts are surprisingly similar which made it easier to choose neutral shapes.
The basic look of the 8x8 variant of Unscii is based on the following systems:
- Amiga (Topaz-8)
- Amstrad CPC
- Atari 8-bit (as in 800, XL etc.)
- Atari Arcade (the iconic ROM font)
- Atari 32-bit (as in ST etc.)
- BBC Micro (graphics mode font)
- Commodore 64
- IBM PC (the 8x8 ROM font as in CGA, or VGA 80x50)
The 8x16 variant of Unscii has been mostly derived from the 8x8 variant by using a set of transformation principles. When in doubt, the following fonts have been looked at for additional reference:
- Windows Fixedsys 8x15 (and its modern successor Fixedsys Excelsior)
- IBM PC VGA ROM font(s) (and their modern successor U_VGA)
- X Window System fonts 8x13(B) and 9x15(B)
- Classic Macintosh 12-point Monaco
- Digital VT420 10x16 font (used in the 80x24 mode)
- Modern monospaced vector fonts: DejaVu Sans Mono, Lucida Console, Inconsolata
In general, neutral shapes are preferred, unless art, legibility or readability require otherwise: The characters /\XY are connective because of their connetive use in ascii art, and the serifs in iIl are longer than in most classic systems.
Whenever a 8x16 shape has not been defined, Unscii falls back to height-doubled 8x8.
I also studied game fonts and thin-line system fonts. This resulted in the variants unscii-8-thin, unscii-8-mcr and unscii-8-fantasy.
When mapping pseudographic characters into Unicode, it became clear that even many prominent legacy systems have characters that have not been included in Unicode. The following character sets were succesfully scavenged for graphics-relevant non-Unicode characters:
- PETSCII (Commodore 8-bit): corner blocks aligned to cell borders, top- and right-based ratio blocks, straight lines aligned to different positions, etc.
- Teletext and Videotex: "block mosaics" i.e. 2x3 pseudopixel grids in connected and separated forms; "smooth mosaics" i.e. triangular pieces in various angles.
- Amstrad CPC: many raster-shaded characters, many kinds of diagonal line junctions, etc.
- Apple Sabine10: a lot of raster shades and MacPaint-like fill patterns, etc.
- VT100: horizontal lines in different Y positions
- Mattel Aquarius: rounded corner blocks, etc.
- Sharp MZ: non-straight lines and other strange line blocks, video game characters, etc.
The diagonal blocks ◤◥◢◣ are very common in BIG5 art (e.g. Taiwanese BBS graphics). However, these characters are "full-width" in the Eastern system but "half-width" in Western terminals. For succesful conversion of BIG5 art, we therefore need to represent them with two characters. Videotex smooth mosaics are useful here.
The possibility to X- or Y-double a graphics character is also useful in changing the aspect ratio (e.g. displaying a "40x25" picture in a "80x25" terminal). Some extra characters for this purpose are therefore included as well.
The Braille characters that are sometimes used as pseudopixels are implemented as full pseudopixels in Unscii.
The non-Unicode characters have been mapped into the Private User Area block. It is organized as follows in Unscii:
- U+E080..E0FF: Teletext/Videotex block mosaics.
- U+E100..: The most prominent and useful non-Unicode pseudographics: everything found in PETSCII, Videotex smooth mosaics, extra shades, round corners, X/Y doublers.
- U+E800..: Somewhat stranger but still potentially useful: junctions with border-aligned lines, diagonal line junctions, non-straight lines, weirder fill patterns, etc.
- U+EC00..: Total oddities. Mostly depictive characters from Sharp MZ, Aquarius, etc.
The mapping below U+E800 remains stable in future Unscii versions. However, note that Fixedsys Excelsior also uses PUA, so the "unscii-16-full" variant has some extra characters imported from there.