311 lines
6.7 KiB
C
311 lines
6.7 KiB
C
/***
|
|
**
|
|
** Module: Builder
|
|
**
|
|
** Description:
|
|
** This is a module of the T1 to TT font converter. The module
|
|
** contains functions that will write the tables found in a
|
|
** TrueType font file.
|
|
**
|
|
** Author: Michael Jansson
|
|
**
|
|
** Created: 5/26/93
|
|
**
|
|
***/
|
|
|
|
|
|
#ifndef _ARGS
|
|
# define IN const
|
|
# define OUT
|
|
# define INOUT
|
|
# define _ARGS(arg) arg
|
|
#endif
|
|
|
|
#define PREPSIZE 1000
|
|
#define MAXNOTDEFSIZE 1024
|
|
|
|
|
|
/* Referenced types. */
|
|
struct TTArg;
|
|
struct TTHandle;
|
|
|
|
|
|
/* Argument types. */
|
|
struct TTGlyph {
|
|
struct encoding *code;
|
|
|
|
USHORT num;
|
|
USHORT stack;
|
|
USHORT twilights;
|
|
UBYTE *hints;
|
|
|
|
Outline *paths;
|
|
|
|
funit aw;
|
|
funit lsb;
|
|
};
|
|
|
|
struct TTComposite {
|
|
struct encoding *aenc;
|
|
struct encoding *benc;
|
|
struct encoding *cenc;
|
|
struct encoding *oenc;
|
|
funit dx;
|
|
funit dy;
|
|
funit aw;
|
|
funit lsb;
|
|
};
|
|
|
|
typedef struct {
|
|
ULONG a;
|
|
ULONG b;
|
|
} longdate;
|
|
|
|
struct TTMetrics {
|
|
struct {
|
|
USHORT ver;
|
|
USHORT rev;
|
|
} version;
|
|
longdate created;
|
|
char *family;
|
|
char *copyright;
|
|
char *name;
|
|
char *id;
|
|
char *notice;
|
|
char *fullname;
|
|
char *weight;
|
|
char *verstr;
|
|
f16d16 angle;
|
|
funit underline;
|
|
funit uthick;
|
|
USHORT macStyle;
|
|
USHORT usWeightClass;
|
|
USHORT usWidthClass;
|
|
USHORT fsSelection;
|
|
|
|
/* True Typographical metrics. */
|
|
funit typAscender;
|
|
funit typDescender;
|
|
funit typLinegap;
|
|
Point superoff;
|
|
Point supersize;
|
|
Point suboff;
|
|
Point subsize;
|
|
funit strikeoff;
|
|
funit strikesize;
|
|
short isFixPitched;
|
|
|
|
/* Windows based metrics. */
|
|
funit winAscender;
|
|
funit winDescender;
|
|
UBYTE panose[10];
|
|
|
|
/* Mac based metrics. */
|
|
funit macLinegap;
|
|
|
|
funit emheight;
|
|
USHORT FirstChar;
|
|
USHORT LastChar;
|
|
USHORT DefaultChar;
|
|
USHORT BreakChar;
|
|
USHORT CharSet;
|
|
funit *widths;
|
|
short *cvt;
|
|
USHORT cvt_cnt;
|
|
struct kerning *kerns;
|
|
USHORT kernsize;
|
|
|
|
/* Copy of the encoding table. */
|
|
struct encoding *Encoding;
|
|
USHORT encSize;
|
|
|
|
/* Hint specific information. */
|
|
const UBYTE *prep; /* PreProgram. */
|
|
USHORT prep_size;
|
|
const UBYTE *fpgm; /* FontProgram. */
|
|
USHORT fpgm_size;
|
|
USHORT maxstorage;
|
|
USHORT maxprepstack; /* Max stack depth in pre-program. */
|
|
USHORT maxfpgm; /* Max number of function in the font program. */
|
|
USHORT onepix; /* Treshold where stems become >= 1.0 pixles. */
|
|
};
|
|
|
|
|
|
/***
|
|
** Function: InitTTOutput
|
|
**
|
|
** Description:
|
|
** This function allocates the resources needed to
|
|
** write a TT font file.
|
|
***/
|
|
errcode InitTTOutput _ARGS((IN struct TTArg *,
|
|
OUT struct TTHandle **));
|
|
|
|
/***
|
|
** Function: CleanUpTT
|
|
**
|
|
** Description:
|
|
** This function free's the resources used while
|
|
** writing a TT font file.
|
|
***/
|
|
errcode CleanUpTT _ARGS((INOUT struct TTHandle *,
|
|
IN struct TTArg *,
|
|
IN errcode status));
|
|
|
|
/***
|
|
** Function: PutTTNotDefGlyph
|
|
**
|
|
** Description:
|
|
** This function adds a record for a the ".notdef" glyph to the
|
|
** 'glyf' table of the TT font file.
|
|
**
|
|
***/
|
|
errcode PutTTNotDefGlyph _ARGS((INOUT struct TTHandle *,
|
|
IN struct TTGlyph*));
|
|
|
|
|
|
/** Function: PutTTGlyph
|
|
**
|
|
** Description:
|
|
** This function adds a record for a simple glyph to the
|
|
** 'glyf' table of the TT font file.
|
|
**
|
|
***/
|
|
errcode PutTTGlyph _ARGS((INOUT struct TTHandle *,
|
|
IN struct TTGlyph*,
|
|
IN boolean fStdEncoding));
|
|
|
|
|
|
/***
|
|
** Function: PutTTOther
|
|
**
|
|
** Description:
|
|
** This function writes the required TT tables to the
|
|
** TT font file, except for the 'glyf' table which is
|
|
** only completed (check sum is computed, etc.).
|
|
**
|
|
***/
|
|
errcode PutTTOther _ARGS((INOUT struct TTHandle *,
|
|
INOUT struct TTMetrics *));
|
|
|
|
/***
|
|
** Function: FreeTTGlyph
|
|
**
|
|
** Description:
|
|
** This function will free the memory used to represent a
|
|
** a TrueType glyph.
|
|
**
|
|
***/
|
|
void FreeTTGlyph _ARGS((INOUT struct TTGlyph *));
|
|
|
|
|
|
/***
|
|
** Function: PutTTComposite
|
|
**
|
|
** Description:
|
|
**
|
|
***/
|
|
errcode PutTTComposite _ARGS((INOUT struct TTHandle *,
|
|
OUT struct TTComposite *));
|
|
|
|
/***
|
|
** Function: WindowsBBox
|
|
**
|
|
** Description:
|
|
** Compute the bounding box of the characters that are
|
|
** used in Windows character set.
|
|
***/
|
|
void WindowsBBox _ARGS((IN struct TTHandle *tt,
|
|
OUT Point *bbox));
|
|
|
|
/***
|
|
** Function: MacBBox
|
|
**
|
|
** Description:
|
|
** Compute the bounding box of the characters that are
|
|
** used in Mac character set.
|
|
**
|
|
** This is currently set to the global bounding box
|
|
** (tt->bbox) of all characters in the font. This will
|
|
** ensure that accents are not sqeezed on Mac platforms.
|
|
***/
|
|
void MacBBox _ARGS((IN struct TTHandle *tt,
|
|
OUT Point *bbox));
|
|
|
|
|
|
// the name says it
|
|
|
|
void GlobalBBox _ARGS((IN struct TTHandle *tt,
|
|
OUT Point *bbox));
|
|
|
|
|
|
|
|
|
|
/***
|
|
** Function: TypographicalAscender
|
|
**
|
|
** Description:
|
|
** Compute the typographical ascender height, as ymax of
|
|
** the letter 'b'.
|
|
***/
|
|
funit TypographicalDescender _ARGS((IN struct TTHandle *tt));
|
|
|
|
|
|
/***
|
|
** Function: TypographicalDescender
|
|
**
|
|
** Description:
|
|
** Compute the typographical descender height, as ymin of
|
|
** the letter 'g'.
|
|
***/
|
|
funit TypographicalAscender _ARGS((IN struct TTHandle *tt));
|
|
|
|
|
|
/***
|
|
** Function: FreeTTMetrics
|
|
**
|
|
** Description:
|
|
** This function free's the resources used to represent
|
|
** TT specific metrics and auxiliary font information.
|
|
***/
|
|
void FreeTTMetrics _ARGS((INOUT struct TTMetrics *));
|
|
|
|
|
|
/***
|
|
** Function: UsePrep
|
|
**
|
|
** Description:
|
|
** This function records the pre-program in the
|
|
** TTMetrics record, until an appropriate time
|
|
** when the data can be stored in the TT file.
|
|
**
|
|
***/
|
|
void UsePrep _ARGS((INOUT struct TTMetrics *,
|
|
IN UBYTE *prep,
|
|
IN USHORT size));
|
|
|
|
|
|
/***
|
|
** Function: SetFPGM
|
|
**
|
|
** Description:
|
|
** This function records the font-program in the
|
|
** TTMetrics record, until an appropriate time
|
|
** when the data can be stored in the TT file.
|
|
**
|
|
***/
|
|
void SetFPGM _ARGS((INOUT struct TTMetrics *,
|
|
IN UBYTE *fpgm,
|
|
IN USHORT size,
|
|
IN USHORT num));
|
|
|
|
/***
|
|
** Function: GetPrep
|
|
**
|
|
** Description:
|
|
** This function allocates needed space for the
|
|
** pre-program.
|
|
**
|
|
***/
|
|
UBYTE *GetPrep _ARGS((IN int size));
|