nanogui: [LONG and TECHNICAL] RE: microwindows fonts
Subject:
[LONG and TECHNICAL] RE: microwindows fonts
From:
"Darran D. Rimron" ####@####.####
Date:
28 Jun 1999 23:24:37 -0000
Message-Id: <NCBBLCEDENCINNMFNPBCGEEECNAA.darran@rimron.co.uk>
> -----Original Message-----
> Does anyone know how to convert .pcf files to, say bdf?
> I've found bdftopcf, but I only know how to convert bdf files
> to micro-windows currently.
PCF files, like SNF files, are binary files, but the format is portable
across architectures. The data is stored in an SBFirst (Most Significant
Byte First) format. The table of contents is written first, followed by
each of the tables needed. Tables of variable length are preceded by a
count for the number of entries for that particular table. Tables are
zero-padded to be a multiple of 32 bits. Here is the list of possible
tables:
o table of contents
o pcf properties
o pcf accelerators
o pcf metrics
o pcf bitmaps
o pcf ink metrics
o pcf bdf encoding
o pcf swidths
o pcf glyph names
o pcf bdf accelerators
The following sections describe each of these tables.
TABLE OF CONTENTS
The TOC consists of two 32-bit fields and a variable number of TOC entry
fields.
file version # currently "pcf1"
TOC_entries # number of entries to follow
TOC entry # up to TOC_entries of these
Each TOC entry consists of 4 32-bit fields.
type # type of table entry (see below)
format # format of table
size # size in 32-bit words of this table
offset # offset into file of this table
Some tables may have a special format associated with them.The default
format treats all data as 32-bit words. A format has meaning in
relationship to a type.
format value
DEFAULT 0x00000000
INKBOUNDS 0x00000200
ACCELERATORS_W_INKBOUNDS 0x00000l00
COMPRESSED_METRICS 0x00000l00
If another format is available for a type, use of the DEFAULT format
with that type may indicate that type's table is empty. Only four types
use anything besides the DEFAULT format in pcf1 files. Accelerators are
basically a set of hints about the font layout which allow certain parts
of the font drawing process to take p1ace faster.
type format
pcf accelerators ACCELERATORS_W_INKBOUNDS
pcf metrics COMPRESSED_METRICS
pcf ink metrics COMPRESSED METRICS
pcf bdf accelerators ACCELERATORS_W_INKBOUNDS
PCF PROPERTIES
The properties table consists of the number of properties and the
properties themselves, followed by the string table for the properties.
format 32 bits # format of property table
num-props 32 bits # number of properties
property 72 bits # property data (num_props
# entries)
string table size 32 bits # length of strin table in
# 8-bit chars
string table variable # property names and values
The property data consists of three fields and is zero-padded to be a
multiple of 32 bits.
name 32 bits # property atom
is_string 8 bits # true if the property value is a
# string
value 32 bits # property value (string or int)
The string table includes all property names and their values (when
those values are strings). The strings are NULL-terminated.
PCF ACCELERATORS
The accelerators consist of 8 8-bit fields, 3 32 bit fields, 2 metric
fields (described below) and (if format is ACCELERATORS_W_INKBOUNDS) 2
optional metric fields. Metric field formats are discussed later.
noOverlap 8 bits
constantMetrics 8 bits
terminalFont 8 bits
constantWidth 8 bits
inkInside 8 bits
inkMetrics 8 bits
drawDirection 8 bits
pad 8 bits # always 0
fontAscent 32 bits
fontDescent 32 bits
maxOverlap 32 bits
minbounds 96 bits # (metric field type)
maxbounds 96 bits # (metric field type)
ink_minbounds 96 bits # (optional metric field type)
ink_maxbounds 96 bits # (optional metric field type)
METRIC FIELD FORMATS
Uncompressed metric fields require 96 bits each. Compressed metric
fields
require 56 bytes.
size
field compressed/uncompressed
num chars 16/32 # number of characters in font
leftSideBearing 8[16] # left-most filled pixel x coordinate
rightSideBearing 8[16] # right-most fiIIed pixel y coordinate
characterWidth 8[l6] # character width
ascent 8[l6] # height above baseline
descent 8[l6] # depth below baseline
attributes N/A[l6]
PCF METRICS
If the metrics can be compressed, the format is COMPRESSED_METRICS.
Otherwise
the format is DEFAULT.
size
field compressed/uncompressed
num_chars l6/32 # number of characters
metric field 56[96] # per character
PCF BIIMAPS
num_chars 32bits # number of glyphs
offsets 32bits # offset into glyph bitmap data
# (l per character)
bitmap_size 32bits # extra bitmap size info
# (1, 2, 4 or 8 (4 in pcfl)
bitmaps variable # bitmap data
PCF INK METRICES
These are formated like the pcf metrics referenced above. Uncompressed
metric fields require 96 bits each. Compressed metric fields require 56
bytes.
size
field compressed/uncompressed
num_chars 16/32 # number of characters
leftSideBearing 8[16] # left_most filled pixel x coordinate
rightSideBearing 8[16] # right_most filled pixel x
# coordinate
characterWidth 8[16] # character cell width
ascent 8[l6] # height above baseline
descent 8[16] # depth below baseline
attributes N/A[l6]
PCF INK METRICS
If the metrics can be compressed, the format is COMPRESSED-MEIRICS.
Otherwise the format is DEFALUT.
size
field compressed/uncompressed
num_chars 16/32 # number of characters
metric field 56[96] # 1 per character
PCF BDF ENCODINGS
These are related to the bdf format. They relate to characters in the
Row/column matrix which are actually used.
firstCol l6 bits # 1st character column (typ. 0)
lastCol 16 bits # last character column (typ.l27)
firstRow 16 bits # last character row (typ. 0)
lastRow l6 bits # last character row (typ. 0)
# most ISO-Latin fonts are l row
# of chars, but most large
# oriental fonts have many rows
# Typical values are for ISO-
# Latin fonts on the mit tapes.
defaultCh 16 bits # default character
nencodings l6 bits # number of encoded characters
encoding metrics 16 bits # 1 per encoded character, defaults
# to 0xFFFF
PCF SWIDTHS
These are the same as the BDF scalable widths.
num chars 32 bits # number of characters
swidths 32 bits # 1 per character
PCF GLYPH NAMES
Yet another string table, this contains the names of the glyphs as
described under the BDF glyph_names field.
num_chars 32 bits # number of characters in font
offsets 32 bits # offsets into strings, l per
# character
strings size 32 bits # size of string table in 8 bit
# characters
strings variable # NULL_delineated glyph names
PCF BDF ACCELERATORS
Formatted like the pcf accelerators, this data includes the same
information but as included in the BDF file. Accelerators consist of 8
8-bit fields, 3 32 bit fields, 2 metric fields and (if format is
ACCELERATORS_W_INKBOUNDS) 2 optional
MEIRTIC FIELD
noOverlap 8 bits # true if characters don't overlap
constantMetrics 8 bits # metrics apply to all characters
terminalFont 8 bits # outdated - true if font metrics
# work well with a terminal
constantWidth 8bits # true if all characters have the same
# width
inkInside 8bits # true if all ink inside bounding box
inkMetrics 8bits # true if ink metrics != font metrics
# (used with terminal fonts)
drawDirection 8 bits # direction to draw (eg, Left To
# Right)
pad 8 bits # always 0
fontAscent 32bits # minimum for quality typography
fontDescent 32bits # minimum for quality typography
maxOverlap 32bits # maximum this character may be
# overlapped
minbounds 96bits # (metric field type)
maxbounds 96bits # (metric field type)
ink_minbounds 96bits # (optional metric field type)
ink maxbounds 96bits # (optional metric field type)
I'm not sure about a converter, but this should give you something to
build upon, I hope.
-Darran (minefiled of useless information)
--
Darran D. Rimron ####@####.####
Mobile: +44 7808 49 25 49 Pager: +44 76543 07647
Rimron Design & Consultancy http://www.rimron.co.uk/
Phone: +44 1708 766 959 Fax: +44 1708 766 959