|
|
/*
* Adobe Universal Font Library * * Copyright (c) 1996 Adobe Systems Inc. * All Rights Reserved * * UFL.c * * $Header: $ */
#include "UFL.h"
#include "UFLMem.h"
#include "UFLStd.h"
#include "UFLPriv.h"
#include "UFLErr.h"
#include "UFO.h"
/*
* Global constant strings * These strings are shared among all T1/T3/T42 downloading. */ const char *gnotdefArray = " 256 array 0 1 255 {1 index exch /.notdef put} for "; const char *Notdef = ".notdef"; const char *Hyphen = "hyphen"; const char *Minus = "minus"; const char *SftHyphen = "sfthyphen"; const char *UFLSpace = "space"; const char *Bullet = "bullet"; const char *nilStr = "\0\0";
/*
* UFL function implementations */
UFLHANDLE UFLInit( const UFLBool bDLGlyphTracking, const UFLMemObj *pMemObj, const UFLFontProcs *pFontProcs, const UFLOutputDevice *pOutDev ) { UFLStruct *pUFL;
if ((pMemObj == 0) || (pFontProcs == 0) || (pOutDev == 0)) return 0;
pUFL = (UFLStruct *)UFLNewPtr(pMemObj, sizeof (*pUFL));
if (pUFL) { pUFL->bDLGlyphTracking = bDLGlyphTracking; pUFL->mem = *pMemObj; pUFL->fontProcs = *pFontProcs; pUFL->outDev = *pOutDev; pUFL->hOut = StrmInit(&pUFL->mem, pUFL->outDev.pstream, (const UFLBool)pOutDev->bAscii);
if (!pUFL->hOut) { UFLDeletePtr(pMemObj, pUFL); pUFL = 0; } }
return (UFLHANDLE)pUFL; }
void UFLCleanUp( UFLHANDLE h ) { UFLStruct *pUFL = (UFLStruct *)h;
StrmCleanUp(pUFL->hOut); UFLDeletePtr(&pUFL->mem, h); }
UFLBool bUFLTestRestricted( const UFLHANDLE h, const UFLRequest *pRequest ) { UFLStruct *pUFL = (UFLStruct *)h;
if (pUFL == 0) return 0;
return bUFOTestRestricted(&pUFL->mem, pUFL, pRequest); }
UFO UFLNewFont( const UFLHANDLE h, const UFLRequest *pRequest ) { UFLStruct *pUFL = (UFLStruct *)h;
if (pUFL == 0) return 0;
return UFOInit(&pUFL->mem, pUFL, pRequest); }
/*===========================================================================
UFLDownloadIncr
Downloads a font incrementally. The first time this is called for a particular font, it will create a base font, and download a set of requested characters. Subsequent calls on the same font will download additional characters. ==============================================================================*/
UFLErrCode UFLDownloadIncr( const UFO h, const UFLGlyphsInfo *pGlyphs, unsigned long *pVMUsage, unsigned long *pFCUsage ) { if (h == 0) return kErrInvalidHandle;
return UFODownloadIncr((UFOStruct *)h, pGlyphs, pVMUsage, pFCUsage); }
/*===========================================================================
UFLVMNeeded
Get a guestimate of VM needed for a download request. ==============================================================================*/
UFLErrCode UFLVMNeeded( const UFO h, const UFLGlyphsInfo *pGlyphs, unsigned long *pVMNeeded, unsigned long *pFCNeeded ) { if (h == 0) return kErrInvalidHandle;
return UFOVMNeeded((UFOStruct *)h, pGlyphs, pVMNeeded, pFCNeeded); }
void UFLDeleteFont( UFO h ) { if (h == 0) return;
UFOCleanUp((UFOStruct *)h); }
UFLErrCode UFLUndefineFont( const UFO h ) { if (h == 0) return kErrInvalidHandle;
return UFOUndefineFont((UFOStruct *)h); }
UFO UFLCopyFont( const UFO h, const UFLRequest* pRequest ) { if (h == 0) return NULL;
return UFOCopyFont((UFOStruct *)h, pRequest); }
/*===========================================================================
UFLGIDsToCIDs
This function can only be used with a CID CFF font. It is used to obtain CIDs from a list of GIDs. ==============================================================================*/
UFLErrCode UFLGIDsToCIDs( const UFO aCFFFont, const short cGlyphs, const UFLGlyphID *pGIDs, unsigned short *pCIDs ) { if (aCFFFont == 0) return kErrInvalidHandle;
return UFOGIDsToCIDs((UFOStruct *) aCFFFont, cGlyphs, pGIDs, pCIDs); }
|