228 lines
4.7 KiB
C
228 lines
4.7 KiB
C
/*
|
||
* 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);
|
||
}
|