Removal

Deprecated

As of Ghostscript 9.01 Xfont functionality is considered deprecated, and
unsupported. Its complete removal is planned for a near future release.

If your application relies on this feature you should either plan for
its removal, or contact the Ghostscript developers so our Xfont plans
can be revisited.

Introduction

Ghostscript can use the character rasterizer provided by the underlying
operating system and window system; specifically, Adobe Type Manager (ATM)
or a TrueType rasterizer under MS Windows, or the facilities provided by X
Windows. This ability augments, but does not replace, Ghostscript's own
Type 1 rasterizer: Ghostscript may still use its own rasterizer for very
large characters, characters that are clipped or transformed in unusual
ways, and for output to devices other than the screen.

Ghostscript connects to these platform facilities through a driver-like
interface called the xfont (external font) interface. Current xfont
implementations are associated directly with device drivers; in a future
release, Ghostscript may separate them, so that (for example) it will be
possible to use the platform rasterizer when writing to a file.

Please note that from this point, this file is likely to be useful only
to a small number of Ghostscript porters and implementors.

Types

Type

Declared /defined in

Represents

gs_char

gsccode.h

A character code that appears in a string. Currently
it is always a single byte, but composite fonts or Unicode may
require it to be wider in the future.

gs_glyph

gsccode.h

A character name like "period" or "epsilon". From
the xfont implementation's point of view, it is just a handle;
when necessary, Ghostscript provides a
gs_proc_glyph_name_t procedure to
convert it to a string name.

gs_proc_glyph_name_t

gsccode.h

A procedure that maps a gs_glyph to
its string name; see the char_xglyph procedure.

gx_xglyph

gsxfont.h

A character or glyph code that can be used with a
specific platform font. Normally it will be a character code
that the implementation of render_char will
turn into a 1-character string and give to the platform's
"display string" operation.

gx_xfont_procs

gsxfont.h, gxxfont.h

The xfont analogue of
gx_device_procs, the type of the
procedure record that defines an xfont implementation.

gx_xfont

gsxfont.h, gxxfont.h

The gxfont analogue of gx_device,
the type of the basic structure for an xfont.

(encoding_index)

Not really a type, although it probably should be:
an int used to indicate the
Encoding used by a font. Defined values are

0

StandardEncoding

1

ISOLatin1Encoding

2

SymbolEncoding

3

DingbatsEncoding

-1

Other encoding

Implementation
procedures

All the procedures that return int results return 0 on
success, or an appropriate negative error code for error conditions; these
error codes are defined in gserrors.h. The relevant ones
are the same as for drivers, and as with drivers,
if an implementation procedure returns an error, it should use the
return_error macro -- defined in gx.h,
which is automatically included by gdevprn.h but not by
gserrors.h -- rather than a simple return
statement, for instance

return_error(gs_error_VMerror);

Font-level procedures

lookup_font

Look up a font name, UniqueID, and matrix, and return
an xfont, or NULL if no suitable xfont exists. Use
mprocs to allocate the xfont and any subsidiary data
structures. The matrix is the FontMatrix concatenated with
the CTM, so (roughly speaking) the font size in pixels is
pmat -> yy × 1000 for a normal
Type 1 font.

Note that this is the only implementation procedure that does not take an
xfont * as its first argument. In fact, callers of
lookup_font must use the get_xfont_device
driver procedure to get the correct device to pass as the first argument to
lookup_font.

render_char

Render a character. (x,y) corresponds to the character
origin. The target may be any Ghostscript device. A good implementation
will check whether the target can handle this type of xfont directly (for
instance by checking the target name), and if so, will render the character
directly; otherwise, it will do what has to be done in the general case,
namely, get a bitmap for the character and use the target's
copy_mono operation. If required is false,
the procedure should return an error if the rendering operation would be
expensive, since in this case Ghostscript has already cached the bitmap and
metrics from a previous call with required=true. If the
operation cannot be done, return 1.

release

int (*release)(P2(gx_xfont *xf,
const gs_memory_procs *mprocs))

Release any external resources associated with an xfont. If
mprocs is not NULL, also free any storage
allocated by lookup_font (including the xfont itself).

This software is provided AS-IS with no warranty, either express or
implied.
This software is distributed under license and may not be copied, modified
or distributed except as expressly authorized under the terms of that
license. Refer to licensing information at http://www.artifex.com/
or contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134,
San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.