Tools for working with monochrome bitmap fonts.
Project description
-@@------------------------------------------@@------@@--------------@@-
-@@------------------------------------------@@------@@--@@----------@@-
-@@------------------------------------------@@----------@@----------@@-
-@@------@@@@@@@@@----@@@@---@@@@@----@@@@---@@@@@---@@-@@@@---------@@-
-@@------@@--@@--@@--@@--@@--@@--@@--@@--@@--@@--@@--@@--@@----------@@-
-@@------@@--@@--@@--@@--@@--@@--@@--@@--@@--@@--@@--@@--@@----------@@-
-@@------@@--@@--@@--@@--@@--@@--@@--@@--@@--@@--@@--@@--@@----------@@-
-@@------@@--@@--@@--@@--@@--@@--@@--@@--@@--@@--@@--@@--@@----------@@-
-@@------@@--@@--@@--@@--@@--@@--@@--@@--@@--@@--@@--@@--@@--@@------@@-
-@@------@@--@@--@@---@@@@---@@--@@---@@@@---@@@@@---@@---@@-@@------@@-
-@@------------------------------------------------------------------@@-
-@@------------------------------------------------------------------@@-
-@@------------------------------------------------------------------@@-
Tools for working with monochrome bitmap fonts
The monobit
tools let you modify bitmap fonts and convert between several formats.
monobit
's native format is yaff
, a human-friendly, text-based visual format similar to the ones used by
Roman Czyborra's hexdraw
, Simon Tatham's mkwinfont
and John Elliott's psftools
. Details are
given in the yaff
font file format specification.
Monobit requires Python 3.9 or above. Install through pip install monobit
. Some formats or features require additional packages; see Dependencies below for a list. These
will be installed automatically if you use pip
.
monobit
can be used as a Python package or as a command-line tool.
Usage examples
Convert utility
Here are some examples of how to use the conversion utility.
monobit-convert --help
Display usage summary and command-line options
monobit-convert --help load --format=raw
Display usage summary and additional format-specific command-line options for conversion from raw binary.
monobit-convert fixedsys.fon
Recognise the source file format from "magic bytes" or suffix (here, a Windows font) and write fonts
to standard output in yaff
format.
monobit-convert roman.bdf to --format=unifont
Read font from BDF file and write to standard output as Unifont HEX.
monobit-convert fixed.psf to fixed.png
Read font in PSF format and write to disk as image in PNG format.
monobit-convert --format=c to --format=bdf
Read font from standard input as C-source coded binary and write to standard output as BDF.
The converter transparently reads and writes gz
, bz2
, or xz
-compressed font files and can read
and write zip
and tar
archives. Some font formats contain multiple fonts whereas others can
contain only one; the converter will write multiple files to a directory or archive if needed.
It is also possible to apply various transformations on the font before saving it. Check
monobit-convert --help
for usage.
Banner utility
The banner utility renders text to standard output in a given font. This is similar to the ancient
banner
commands included in System-V and BSD Unixes.
For example, the banner at the top of this README
was made with
me@bandit:~$ monobit-banner '| monobit. |' --font=VGASYS.FON
monobit-banner
has a number of rendering options - you can choose fonts, change the "ink" and "paper"
characters, set a margin, scale text, and rotate by quarter turns.
Check monobit-banner --help
for usage.
Proportional-spacing formats
Format | Short Name | Typical Extension | Read | Write | Type | Features |
---|---|---|---|---|---|---|
Xerox Alto CONVERT | alto |
.al |
✓ | binary | - | |
Amiga Font Contents | amiga-fc |
.font |
✓ | binary | Mu | |
Amiga font | amiga |
✓ | binary | O | ||
X11/Adobe BDF | bdf |
.bdf |
✓ | ✓ | coded | U SB MB Ve O |
Xerox Alto BITBLT | bitblt |
.strike .ks |
✓ | binary | O | |
AngelCode BMFont [P] | bmfont |
.fnt .xml .json + images |
✓ | ✓ | image | Mu U SB MB O Ke (CA) |
FONTRIX (PC), PCPaint, GRASP, ChiWriter | chiwriter |
.set .[specx]ft |
✓ | binary | - | |
Consoleet / vfontas | consoleet |
.txt |
✓ | ✓ | visual | - |
Daisy-Dot | daisy |
.nlq .nl2 .nl3 .nl4 |
✓ | binary | - | |
DosStart! | dosstart |
.dsf |
✓ | ✓ | coded | - |
EDWIN bitmap font | edwin |
.fnt |
✓ | ✓ | coded | - |
Figlet font | figlet |
.flf |
✓ | ✓ | visual | (CA) |
FZX font | fzx |
.fzx |
✓ | ✓ | binary | O |
OS/2 GPI resource | gpi |
.fnt |
✓ | binary | SB O (MB Ke) | |
Atari GDOS / GEM | gdos |
.fnt .gft .vga |
✓ | ✓ | binary | O |
GEOS font file (CVT) | geos |
.cvt |
✓ | ✓ | binary | Mu; see vlir |
Adafruit GFX font | gfxfont |
.h |
✓ | ✓ | coded | O |
hexdraw | hexdraw |
.draw |
✓ | ✓ | visual | U |
HP PCL soft font | hppcl |
.sft .sfp .sfl |
✓ | ✓ | esc | SB MB O |
Apple IIgs font | iigs |
.fon |
✓ | ✓ | binary | see nfnt |
Bitmap image [P] | image |
.png .gif .bmp |
✓ | ✓ | image | - |
Set of Bitmap images [P] | imageset |
.png .gif .bmp |
✓ | ✓ | image | - |
LISA font library | lisa |
.bin |
✓ | binary | Mu; see nfnt |
|
MacOS font | mac |
.dfont .suit |
✓ | ✓ | binary | Mu Ke; see nfnt |
MouseGraphics Toolkit | mgtk |
✓ | binary | - | ||
mkwinfont text format | mkwinfont |
.fd |
✓ | ✓ | visual | SB |
Windows or OS/2 font | mzfon |
.fon .exe .dll |
✓ | (1) | binary | Mu; see win , gpi |
Bare NFNT resource | nfnt |
.f |
✓ | ✓ | binary | SB O (CA) |
Palm OS font (v1/NFNT) | palm |
.pdb |
✓ | binary | Mu; see nfnt |
|
Palm OS PRC (v1/NFNT) | palm-prc |
.prc |
✓ | binary | Mu; see nfnt |
|
X11 Portable Compiled Format | pcf |
.pcf |
✓ | ✓ | binary | U SB MB O |
PC/GEOS v2.0+ | pcgeos |
.fnt |
✓ | ✓ | binary | O (MB Ke) |
PILfont [P] | pilfont |
.pil + .pbm |
✓ | ✓ | image | O |
TeX PKFONT | pkfont |
.pk |
✓ | binary | O | |
Adobe Prebuilt Format | prebuilt |
.bepf .lepf |
✓ | binary | (Ve CA) | |
Xerox Alto PrePress | prepress |
.ac |
✓ | binary | O | |
The Print Shop | printshop |
.pnf |
✓ | binary | - | |
Signum! 2 | signum |
.e24 .p9 .p24 .l30 |
✓ | binary | - | |
SFont | sfont |
✓ | ✓ | image | (CA) | |
SFNT embedded bitmap | sfnt |
.otb .ttf .otf [F] [**] |
✓ | (2) | binary | Mu US SB MB O Ke Ve (CA) |
SFNT collection | ttcf |
.otc .ttc [F] [**] |
✓ | (2) | binary | Mu US SB MB O Ke Ve (CA) |
vfont | vfont |
✓ | ✓ | binary | O | |
Bare GEOS font record | vlir |
✓ | ✓ | binary | O | |
Windows FNT resource | win |
.fnt |
✓ | ✓ | binary | SB |
monobit yaff | yaff |
.yaff |
✓ | ✓ | visual | Mu US SB MB O Ke Ve |
[P] requires PIL
[F] requires fontTools
(1) 16-bit Windows NE container with FNT resource only
(2) Bitmap only (OTB)
Mu multiple-font container
U Unicode
US Unicode, multi-codepoint sequences
SB Single-byte character sets
MB Multi-byte character sets
O Overlapping glyphs
Ke Kerning
Ve Vertical metrics
CA Colour / Anti-aliasing (not supported by monobit
)
If the abbreviation is bracketed, the format supports this but it is not implemented.
Character-cell formats
Format | Short Name | Typical Extension | Read | Write | Type | Cell | Features |
---|---|---|---|---|---|---|---|
64C | 64c |
.64c |
✓ | ✓ | binary | 8x8 | - |
+3DOS | plus3dos |
✓ | ✓ | binary | 8x8 | - | |
BBC soft font | bbc |
✓ | ✓ | esc | 8x8 | - | |
Codepage Information | cpi |
.cpi |
✓ | ✓ | binary | 8xN | Mu SB |
Dashen | dashen |
.pft |
✓ | binary | any | - | |
DEC DRCS soft font | dec |
✓ | ✓ | esc | >4xN | - | |
Dr. Halo / Dr. Genius | drhalo |
.fon |
✓ | binary | any | - | |
FONTX2 | fontx |
.fnt |
✓ | ✓ | binary | any | MB |
FONTEDIT | fontedit |
.com |
✓ | binary | 8xN | - | |
Fontraption | frapt |
.com |
✓ | binary | 8xN | - | |
Fontraption TSR | frapt-tsr |
.com |
✓ | binary | 8xN | - | |
PCPaint, GRASP old format | grasp |
.set .fnt |
✓ | ✓ | binary | any | - |
Hanzi Bitmap Font | hbf |
.hbf + raw binary |
✓ | ✓ | binary | any | SB MB |
GNU Unifont | unifont |
.hex |
✓ | ✓ | coded | 8x16 (strict) 8xN<=32 (ext) | MC U (strict) MC US (ext) |
Bare codepage | kbd |
.cp |
✓ | ✓ | binary | 8xN | SB |
LETAFONT loader | letafont |
.com |
✓ | binary | 8x8 | - | |
REXXCOM Font Mania | mania |
.com |
✓ | binary | 8xN | - | |
NetBSD wsfont C header | netbsd |
.h |
✓ | ✓ | coded | any | Mu SB |
Optiks PCR Font | pcr |
.pcr |
✓ | ✓ | binary | 8xN | - |
PC Screen Font | psf |
.psf .psfu |
✓ | ✓ | binary | any (v2) 8xN (v1) | US |
psf2ams PSFCOM | psfcom |
.com |
✓ | binary | 8x8, 8x16 | - | |
psf2txt | psf2txt |
.txt |
✓ | ✓ | visual | any | US |
Raw binary | raw |
.fnt .rom [*] |
✓ | ✓ | binary | - | - |
UDG loader | udg |
.com |
✓ | binary | 8x8 | - | |
FreeBSD console font | vtfont |
.fnt |
✓ | ✓ | binary | any | MC U |
Hercules Write On! | writeon |
.wof |
✓ | ✓ | binary | 8x14 multiples | - |
NetBSD wsfont binary | wsfont |
.wsf |
✓ | ✓ | binary | any | SB |
Wyse-60 soft font | wyse |
✓ | ✓ | esc | 8x16 | - | |
XBIN font section | xbin |
.xb |
✓ | ✓ | binary | 8X<=32 | - |
MC multi-cell glyphs
Charts (write only)
Format | Short Name |
---|---|
Text or blocks | chart |
Image [P] | chart |
PDF chart [R] | pdf |
[P] requires PIL
[R] requires reportlab
Stroke (vector) formats
Stroke font support is experimental. Stroke fonts are scalable fonts defined as line segments. They are fundamentally different from modern fonts in that they define single strokes whereas modern fonts define outlines to be filled with ink. Additionally, the fonts currently supported consist of straight line segments only.
Format | Short Name | Typical Extension | Read | Write |
---|---|---|---|---|
monobit yaff | yaff |
.yaff |
✓ | ✓ |
SVG Fonts | svg |
.svg |
✓ | ✓ |
Windows resource | win |
.fnt |
✓ | ✓ |
Windows font | fon |
.fon |
✓ | ✓ (NE) |
Borland Graphics Interface | borland |
.chr |
✓ | ✓ |
Hershey fonts (Jim Hurt) | hurt |
.jhf |
✓ | |
DOSStart | dosstart |
.dsf |
✓ | |
GIMMS | gimms |
.bin |
✓ |
Wrapper formats
monobit
will recurse and extract font files from a number of common container,
archive, compression and encoding formats:
Format | Name | Typical Extension | Read | Write |
---|---|---|---|---|
PKZip/WinZip | zip |
.zip |
✓ | ✓ |
GNU tar | tar |
.tar .tgz |
✓ | ✓ |
RAR [A] | rar |
.rar |
✓ | |
7-Zip [A] | 7zip |
.7z |
✓ | ✓ |
MS Cabinet [A] | cabinet |
.cab |
✓ | |
LHarc/LHA/LZH [A] | lharc |
.lha .lzh |
✓ | |
ACE [C] | ace |
.ace |
✓ | |
ISO 9660 [A] | iso9660 |
.iso |
✓ | ✓ |
WARC [A] | warc |
.warc |
✓ | ✓ |
CPIO [A] | cpio |
.cpio |
✓ | ✓ |
PAX [A] | pax |
.pax |
✓ | ✓ |
XAR [A] | xar |
.xar |
✓ | ✓ |
AR [A] | ar |
.ar |
✓ | ✓ |
GZip | gzip |
.gz |
✓ | ✓ |
BZip2 | bzip2 |
.bz2 |
✓ | ✓ |
XZ/LZMA | lzma |
.xz .lzma |
✓ | ✓ |
Compress [Z] | compress |
.Z |
✓ | ✓ |
AppleSingle | apple1 |
.as |
✓ | |
AppleDouble | apple2 |
.adf .rsrc |
✓ | |
MacBinary | macbin |
.bin |
✓ | |
BinHex 4.0 | binhex |
.hqx |
✓ | |
BinSCII | binscii |
.bsc .bsq |
✓ | |
Intel Hex | intel |
.ihex .ihx |
✓ | ✓ |
Base64 | base64 |
✓ | ✓ | |
Quoted-printable | quopri |
✓ | ✓ | |
UUEncode | uuencode |
✓ | ✓ | |
yEncode [Y] | yenc |
✓ | ✓ | |
MIME multipart email | email |
.eml .msg |
✓ | ✓ |
C or C++ coded binary | c |
.c .cpp .cc .h |
✓ | ✓ |
JSON coded binary | json |
.json |
✓ | ✓ |
Python coded binary | python |
.py |
✓ | ✓ |
Pascal coded binary | pascal |
.pas |
✓ | ✓ |
BASIC coded binary | basic |
.bas |
✓ | ✓ |
[A] requires libarchive
[C] requires acefile
[Y] requires python3-yenc
[Z] requires ncompress
Note that many of these currently require reading the full archive into memory, which may not be practicable with e.g ISO9660 or WARC files which can hold whole filesystems.
[*] Identifying raw binary files
This is the most common format used on old platforms, often with the unhelpful suffix .fnt
. As there is no metadata, it's up to you to specify the character-cell size. The most common, and default, size is 8x8 (CGA and many 8-bit platforms), followed by 8x16 (VGA) and 8x14 (EGA).
- 8x8 raw files are also known as
.f08
,.ch8
,.88
,.chr
,.udg
, and many others. - 8x14 raw files are also known as
.f14
or.814
. - 8x16 raw files are also known as
.f16
, Warp 9.fnt
or Degas Elite.fnt
- Genecar
.car
files are 16x16 raw files. - Harlekin III
.fnt
files are raw binaries with a 4096x8 pixel bitmap strike hosting 512 8x8 glyphs side by side. Extract with-strike-width=512
.
It is also useful to check the file size. Raw files commonly hold 96 (ASCII excluding controls), 128 (ASCII), 256, or multiples thereof. Common file sizes therefore are:
8x8 | 8x14 | 8x16 | |
---|---|---|---|
96 | 768 | 1344 | 1536 |
128 | 1024 | 1792 | 2048 |
256 | 2048 | 3584 | 4096 |
512 | 4096 | 7168 | 8192 |
If your unidentified font file has one of these sizes, chances are it is a raw binary file.
[**] TrueType / OpenType embedded bitmaps
monobit
can extract bitmaps embedded in TrueType and OpenType font files. It
should be kept in mind that these are primarily intended as scalable formats,
and only exceptionally embed bitmaps to improve rendering on low-resolution displays.
The vast majority of .ttf
, .otf
, .dfont
etc. files do not contain bitmaps at all.
This is true even for fonts with a pixelised look.
To convert these you first need to rasterise them, which monobit
does not do.
Some of the other font tools linked below do have rasterising features.
monobit
can experimentally output OpenType Bitmap (.otb
) files, a bitmap-only
file format supported by Linux desktops.
Dependencies
Some formats require
- PIL (
Pillow
) - reportlab
- fontTools
- libarchive
- python3-yenc
- ncompress
- acefile
The renderer additionally employs
- uniseg
- python-bidi
- arabic-reshaper
Almost all can be installed through Pip:
pip install Pillow reportlab fonttools uniseg python-bidi arabic-reshaper libarchive-c ncompress acefile
The package python3-yenc
is available at https://github.com/oe-mirrors/python3-yenc and through some Linux distributions.
Without these packages, some functionality may not be available.
Copyright and licences
monobit
and the yaff
specification are copyright 2019--2024 Rob Hagemans and
released under the MIT licence.
monobit
contains code from:
mkwinfont
copyright 2001 Simon Tatham. All rights reserved.dewinfont
copyright 2001,2017 Simon Tatham. All rights reserved.- OS/2 GPI Font Tools (C) 2012 Alexander Taylor
- FONDU copyright (C) 2000,2001,2002,2003 by George Williams
Please refer to the notices in the windows
and os2
subpackages and mac/fond.py
module for licences and more information.
The font files in tests/fonts
are subject to their own
licences, some of which are more restrictive. These are files used for testing
and development and are not included in the packaged distribution. See tests/fonts/README.md
and notices included with individual files.
Acknowledgements
monobit
would not exist without those documenting,
reverse-engineering, implementing and preserving font formats and files:
- The Internet Archive
- Archive Team
- Jason Scott's textfiles.com
- John Elliott's homepage
- Simon Tatham's fonts page
- Aivosto's character set documentation
- Rebecca Bettencourt's character set documentation
- Xiphoseer's Signum Document Toolbox
- George Williams et al.'s FontForge documentation
- FreeType Glyph Conventions
- ... and many others
Other software
Other bitmap font tools you could use in conjunction with (or instead of) monobit
include:
- FontForge
- Rebecca Bettencourt's Bits'n'Picas
- John Elliott's PSFTools
- Mark Leisher's
gbdfed
- RECOIL
- John Zaitseff's console font utilities
- George Williams's Fondu
- VileR's Fontraption
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file monobit-0.45.3.tar.gz
.
File metadata
- Download URL: monobit-0.45.3.tar.gz
- Upload date:
- Size: 3.1 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4220ebce029b7f9a7c58f265adeda824bca7600cf48cee11430af555c9c1651a |
|
MD5 | 57065668b345535d9ad057f19d8a2646 |
|
BLAKE2b-256 | aceb5a40eed7f288df6d0aee435495d973c853a6148981700f2d5d0e4a02291c |
File details
Details for the file monobit-0.45.3-py3-none-any.whl
.
File metadata
- Download URL: monobit-0.45.3-py3-none-any.whl
- Upload date:
- Size: 3.7 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4849ddcc3180550e41e51988a61811ebef9df60db28e8cef3e17de2b5ae61dfb |
|
MD5 | 31b8258edce175d314fa343b768ec4aa |
|
BLAKE2b-256 | 625d948cab5cbdd7e0ec2746b107bce659419078e495c2a7ac5310a28c3f26fd |