|
|
/*
* 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
|