Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

467 lines
14 KiB

/*
* Adobe Universal Font Library
*
* Copyright (c) 1996 Adobe Systems Inc.
* All Rights Reserved
*
* UFO -- Universal Font Object
*
*
* $Header:
*/
#ifndef _H_UFO
#define _H_UFO
/*===============================================================================*
* Include files used by this interface *
*===============================================================================*/
#include "UFL.h"
#include "UFLPriv.h"
#include "goodname.h"
#ifdef __cplusplus
extern "C" {
#endif
/*===============================================================================*
* Theory of Operation *
*===============================================================================*/
/*
* This file defines the Universal Font Object.
*/
/*===============================================================================*
* Constants *
*===============================================================================*/
/*===============================================================================*
* Macros *
*===============================================================================*/
#define MAX_GLYPHNAME_LEN 256
#define IS_GLYPH_SENT(arr, i) ((arr)[((i)>>3)] & (1 << ((i)&7)))
#define SET_GLYPH_SENT_STATUS(arr, i) (arr)[((i)>>3)] |= (1 << ((i)&7))
#define GLYPH_SENT_BUFSIZE(n) ( ((n) + 7) / 8 )
/*===============================================================================*
* Scalar Types *
*===============================================================================*/
/* Font state */
typedef enum {
kFontCreated, /* The font object is created, but has not initialized. */
kFontInit, /* The font object is initialized and is valid to be used. */
kFontInit2, /* Still requre to create its font instance. */
kFontHeaderDownloaded, /* The font object downloaded an empty font header. */
kFontHasChars, /* Font has chars in it. */
kFontFullDownloaded /* The font object downloaded a full font. */
} UFLFontState;
/* Misc Flags for UFOStruct.dwFlags */
#define UFO_HasFontInfo 0x00000001L
#define UFO_HasG2UDict 0x00000002L
#define UFO_HasXUID 0x00000004L
#define UFO_HostFontAble 0x00000008L // %hostfont% support
//
// %hostfont% support
//
#define HOSTFONT_IS_VALID_UFO(pUFO) (((pUFO)->hHostFontData) && ((pUFO)->dwFlags & UFO_HostFontAble))
#define HOSTFONT_IS_VALID_UFO_HFDH(pUFO) ((pUFO)->hHostFontData)
#define HOSTFONT_VALIDATE_UFO(pUFO) ((pUFO)->dwFlags |= UFO_HostFontAble)
#define HOSTFONT_INVALIDATE_UFO(pUFO) ((pUFO)->dwFlags &= ~UFO_HostFontAble)
#define HOSTFONT_GETNAME(pUFO, ppName, psize, sfindex) \
(UFLBool)(pUFO)->pUFL->fontProcs.pfHostFontUFLHandler(HOSTFONT_UFLREQUEST_GET_NAME, \
(pUFO)->hHostFontData, \
(ppName), (psize), \
(pUFO)->hClientData, (sfindex))
#define HOSTFONT_ISALLOWED(pUFO, pName) \
(UFLBool)(pUFO)->pUFL->fontProcs.pfHostFontUFLHandler(HOSTFONT_UFLREQUEST_IS_ALLOWED, \
(pUFO)->hHostFontData, \
(pName), NULL, \
NULL, 0)
#define HOSTFONT_SAVE_CURRENTNAME(pUFO, pName) \
(UFLBool)(pUFO)->pUFL->fontProcs.pfHostFontUFLHandler(HOSTFONT_UFLREQUEST_SET_CURRENTNAME, \
(pUFO)->hHostFontData, \
(pName), NULL, \
NULL, 0)
/*===============================================================================*
* Classes defined in this interface *
*===============================================================================*/
typedef struct t_UFOStruct UFOStruct;
typedef UFLErrCode (UFLCALLBACK *pfnUFODownloadIncr)(
const UFOStruct *aFont,
const UFLGlyphsInfo *pGlyphs,
unsigned long *pVMUsage,
unsigned long *pFCUsage /* Type 32 FontCache tracking */
);
typedef UFLErrCode (UFLCALLBACK *pfnUFOVMNeeded)(
const UFOStruct *aFont,
const UFLGlyphsInfo *pGlyphs,
unsigned long *pVMNeeded,
unsigned long *pFCNeeded /* Type 32 FontCache tracking */
);
typedef UFLErrCode (UFLCALLBACK *pfnUFOUndefineFont)(
const UFOStruct *pFont
);
typedef void (UFLCALLBACK *pfnUFOCleanUp)(
UFOStruct *pFont
);
typedef UFOStruct * (UFLCALLBACK *pfnUFOCopy)(
const UFOStruct *pFont,
const UFLRequest* pRequest
);
/*
* This is the base font class.
* Subclasses for each type of font is derived from this.
*/
/*
* A common, sharable structure to be used with TT-as-T1/T3/T42 or CFF.
* Notice that it saves a bunch of pointers just a comvenient way to access
* data and a common structure for functions such as GetGlyphName() and
* GETFONTDATA().
*/
typedef UFLHANDLE UFOHandle; /* a void Pointer */
typedef struct t_AFontStruct {
unsigned long refCount; /* reference counter of this structure */
UFOHandle hFont; /* a pointer to a font dependent structure */
UFLXUID Xuid; /* XUID array: copied from client or created from TTF file */
unsigned char *pDownloadedGlyphs; /* list of downloaded glyphs for hFont */
unsigned char *pVMGlyphs; /* list of downloaded glyphs, used to calculate VM usage */
unsigned char *pCodeGlyphs; /* list of glyphs used to update Code Points in FontInfo */
void *pTTpost; /* pointer to 'post' table for Speed */
unsigned long dwTTPostSize; /* size of 'post' table */
unsigned short gotTables:1,
hascmap:1,
hasmort:1,
hasGSUB:1,
hasPSNameStr:1,
hasTTData:1,
knownROS:1,
hasvmtx:1, /* fix #358889 */
unused:8;
int info; /* DIST_SYSFONT_INFO_* bits */
/*
* Stuff used for GoodName
*/
/* 'cmap' table data */
unsigned long cmapTBSize;
void *pTTcmap;
TTcmapFormat cmapFormat;
TTcmap2Stuff cmap2; /* convenient pointers/numbers */
TTcmap4Stuff cmap4; /* convenient pointers/numbers */
/* 'mort' table data */
unsigned long mortTBSize;
void *pTTmort;
TTmortStuff mortStuff; /* convenient pointers/numbers */
/* 'GSUB' table data */
unsigned long gsubTBSize;
void *pTTGSUB;
TTGSUBStuff GSUBStuff; /* convenient pointers/numbers */
/* a global string - to put unusual glyph-name in it. */
char gGlyphName[MAX_GLYPHNAME_LEN];
} AFontStruct;
/*
* Macros for managing AFontStruct
*/
#define AFONT_AddRef(pDLGlyphs) ((pDLGlyphs)->refCount++)
#define AFONT_Release(pDLGlyphs) ((pDLGlyphs)->refCount--)
#define AFONT_RefCount(pDLGlyphs) ((pDLGlyphs)->refCount)
/*
* Universal Font Object class definition
*/
typedef struct t_UFOStruct {
int ufoType; /* font object type */
UFLDownloadType lDownloadFormat; /* download format type */
UFLFontState flState; /* flag used to keep track the state of the font. */
UFLHANDLE hClientData; /* UFL Client private data (pointer to SUBFONT structure) */
long lProcsetResID; /* resource ID of the required procset */
unsigned long dwFlags; /* misc flags: has FontInfo, AddGlyphName2Unicode... */
const UFLMemObj *pMem; /* UFL memory function pointer */
const UFLStruct *pUFL; /* UFL common object pointer */
/*
* Data that is sharable among several instances
*/
AFontStruct *pAFont; /* a font with a list of downloaded glyphs */
/*
* Data unique to the current font
* A copy of a UFObj has a different name/encoding.
*/
char *pszFontName; /* font name */
unsigned long subfontNumber; /* subfont number of this font */
long useMyGlyphName; /* If 1, use the glyph names passed in by client. */
char *pszEncodeName; /* font encoding. If nil, then creat a font with names UFL likes. */
unsigned char *pUpdatedEncoding; /* bits in Encoding Vector with correct name set */
unsigned char *pEncodeNameList; /* Fix bug 274008 */
unsigned short *pwCommonEncode; /* common encode list */
unsigned short *pwExtendEncode; /* extended encode list */
unsigned char *pMacGlyphNameList; /* Mac glyph name list */
const UFLFontDataInfo *pFData; /* a pointer for access convenience */
/*
* Miscellenious
*/
long lNumNT4SymGlyphs; /* Fix a GDI symbol font bug */
UFLVPFInfo vpfinfo; /* Fix bug #287084, #309104, and #309482 */
UFLBool bPatchQXPCFFCID; /* Fix bug #341904 */
/*
* %hostfont% support
*/
UFLHANDLE hHostFontData; /* %hostfont% data handle */
/*
* UFO object type dependent methods
*/
pfnUFODownloadIncr pfnDownloadIncr; /* incremental download function pointer */
pfnUFOVMNeeded pfnVMNeeded; /* VM check function pointer */
pfnUFOUndefineFont pfnUndefineFont; /* font undefine function pointer */
pfnUFOCleanUp pfnCleanUp; /* object cleanup function pointer */
pfnUFOCopy pfnCopy; /* object copy function pointer */
} UFOStruct;
/*
* Number of glyphs in this font file - check against it for bounds.
*/
#define UFO_NUM_GLYPHS(pUFObj) ((pUFObj)->pFData->cNumGlyphs)
/*
* Special font initialization status check
*/
#define UFO_FONT_INIT2(pUFObj) ((pUFObj)->flState == kFontInit2)
/*
* Constant values for UFOStruct.ufoType
*/
#define UFO_CFF 0
#define UFO_TYPE1 1
#define UFO_TYPE42 2
#define UFO_TYPE3 3
/*
* UFO Function prototypes
*/
UFLBool
bUFOTestRestricted(
const UFLMemObj *pMem,
const UFLStruct *pSession,
const UFLRequest *pRequest
);
UFOStruct * UFOInit(
const UFLMemObj *pMem,
const UFLStruct *pSession,
const UFLRequest *pRequest
);
UFLErrCode UFODownloadIncr(
const UFOStruct *aFont,
const UFLGlyphsInfo *pGlyphs,
unsigned long *pVMUsage,
unsigned long *pFCUsage /* T32 FontCache tracking */
);
UFLErrCode UFOVMNeeded(
const UFOStruct *aFont,
const UFLGlyphsInfo *pGlyphs,
unsigned long *pVMNeeded,
unsigned long *pFCUsage /* T32 FontCache tracking */
);
UFLErrCode UFOUndefineFont(
const UFOStruct *pFont
);
void UFOInitData(
UFOStruct *pUFO,
int ufoType,
const UFLMemObj *pMem,
const UFLStruct *pSession,
const UFLRequest *pRequest,
pfnUFODownloadIncr pfnDownloadIncr,
pfnUFOVMNeeded pfnVMNeeded,
pfnUFOUndefineFont pfnUndefineFont,
pfnUFOCleanUp pfnCleanUp,
pfnUFOCopy pfnCopy
);
void UFOCleanUpData(
UFOStruct *pUFO
);
void UFOCleanUp(
UFOStruct *aFont
);
UFOStruct *
UFOCopyFont(
const UFOStruct *aFont,
const UFLRequest* pRequest
);
UFLErrCode
UFOGIDsToCIDs(
const UFOStruct *aFont,
const short cGlyphs,
const UFLGlyphID *pGIDs,
unsigned short *pCIDs
);
/* fix bug 274008 & GoodName */
UFLBool
FindGlyphName(
UFOStruct *pUFObj,
const UFLGlyphsInfo *pGlyphs,
short i,
unsigned short wIndex,
char **pGoodName
);
UFLBool
ValidGlyphName(
const UFLGlyphsInfo *pGlyphs,
short i,
unsigned short wIndex,
char *pGoodName
);
UFLErrCode
UpdateEncodingVector(
UFOStruct *pUFO,
const UFLGlyphsInfo *pGlyphs,
short int sStart,
short int sEnd
);
UFLErrCode
UpdateCodeInfo(
UFOStruct *pUFObj,
const UFLGlyphsInfo *pGlyphs,
UFLBool bT3T32Font // GoodName
);
UFLErrCode
ReEncodePSFont(
const UFOStruct *pUFO,
const char *pszNewFontName,
const char *pszNewEncodingName
);
UFLErrCode
NewFont(
UFOStruct *pUFO,
unsigned long dwSize,
const long cGlyphs
);
void
vDeleteFont(
UFOStruct *pUFO
);
UFOStruct *
CopyFont(
const UFOStruct *pUFO,
const UFLRequest* pRequest
);
void
VSetNumGlyphs(
UFOStruct *pUFO,
unsigned long cNumGlyphs
);
/* GoodName */
unsigned short
GetTablesFromTTFont(
UFOStruct *pUFObj
);
/* GoodName */
unsigned short
ParseTTTablesForUnicode(
UFOStruct *pUFObj,
unsigned short gid,
unsigned short *pUV,
unsigned short wSize,
TTparseFlag ParseFlag
);
UFLBool
CheckGlyphName(
UFOStruct *pUFObj,
unsigned char *pszName
);
UFLBool
HostFontValidateUFO(
UFOStruct *pUFObj,
char **ppHostFontName
);
#ifdef __cplusplus
}
#endif
#endif