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.
 
 
 
 
 
 

327 lines
14 KiB

/*
* Adobe Universal Font Library
*
* Copyright (c) 1996 Adobe Systems Inc.
* All Rights Reserved
*
* UFLClient -- Universal Font Library Client Callback APIs
*
*
* $Header:
*/
#ifndef _H_UFLClient
#define _H_UFLClient
/*===============================================================================*
* Include files used by this interface *
*===============================================================================*/
#include "UFLTypes.h"
/*===============================================================================*
* Theory of Operation *
*===============================================================================*/
/*
This file specifies the font callback functions that a client needs to provided in order for it to use UFL.
*/
#ifdef __cplusplus
extern "C" {
#endif
/*===============================================================================*
* Constants *
*===============================================================================*/
/* Type 1 outline constants */
/* returns from NextOutlineSegment */
enum {
kUFLOutlineIterDone,
kUFLOutlineIterBeginGlyph,
kUFLOutlineIterMoveTo,
kUFLOutlineIterLineTo,
kUFLOutlineIterCurveTo,
kUFLOutlineIterClose,
kUFLOutlineIterEndGlyph,
kUFLOutlineIterErr
};
//
// Extra information for support of vertical propoertional font
// Fix #287084, #309104, and #309482
//
#define kUFLVPFPlatformID9x 0
#define kUFLVPFPlatformIDNT 1
#define kUFLVPFPlatformID2K 2
#define kUFLVPFSkewElement2 2
#define kUFLVPFSkewElement3 3
#define kUFLVPFTangent12 ".21255656"
#define kUFLVPFTangent18 ".3249197"
#define kUFLVPFTangent20 ".36397023"
/*===========================================================================
GetGlyphBmp -- Retrieves a bitmap for the glyph specified by the given
character and font. The given font is specified within UFL's
client private data handle.
handle (in) -- Handle of client private data.
glyphID (in) -- Specifies the character value of the glyph to retrieve.
bmp (out) -- Points to buffer pointer that has the bitmap for the glyph.
xWidth, yWidth (out) -- Points to the buffer that receives the character width.
bbox (out) -- Points to 4 UFLFixed that received the glyph bbox.
If the function succeeds, it returns 1, otherwise, it return 0.
==============================================================================*/
typedef char (UFLCALLBACK *UFLGetGlyphBmp)(
UFLHANDLE handle,
UFLGlyphID glyphID,
UFLGlyphMap **bmp,
UFLFixed *xWidth,
UFLFixed *yWidth,
UFLFixed *bbox
);
/*===========================================================================
DeleteGlyphBmp -- Delete the glyph bitmap data space.
handle (in) -- Handle of client private data.
==============================================================================*/
typedef void (UFLCALLBACK *UFLDeleteGlyphBmp)(
UFLHANDLE handle
);
/*==============================================================================
CreateGlyphOutlineIter -- Create an OutlineIter for the glyph specified by the given
character and font. The given font is specified within UFL's
client private data handle. To get an outline of a glyph, UFL first creates
an OutlineIter with CreateOutlineIter. If this succeeds (return != 0) UFL
then proceed to call NextOutlineSegment. This will step through the
line and curve segments in the character outlines for the given strike
array in the given font. See more info in CoolType.h.
handle (in) -- Handle of client private data.
glyphID (in) -- Specifies the character value of the glyph to retrieve.
xWidth, yWidth, xSB, ySB (out) -- sbw values
If the function succeeds, it returns 1, otherwise, it returns 0.
==============================================================================*/
typedef char (UFLCALLBACK *UFLCreateGlyphOutlineIter)(
UFLHANDLE handle,
UFLGlyphID glyphID,
UFLFixed *xWidth,
UFLFixed *yWidth,
UFLFixed *xSB,
UFLFixed *ySB,
UFLBool *bYAxisNegative //added to allow client to specify glyph orientation
);
/*==============================================================================
NextOutlineSegment -- Retrieve the next outline segment
handle (in) -- Handle of client private data.
p0, p1, p2 (out) - Points of the outline segment.
return -- Outline constant defined above.
==============================================================================*/
typedef long (UFLCALLBACK *UFLNextOutlineSegment)(
UFLHANDLE handle,
UFLFixedPoint *p0,
UFLFixedPoint *p1,
UFLFixedPoint *p2
);
/*==============================================================================
DeleteGlyphOutlineIter -- Terminate the glyph OutlineIter process.
handle (in) -- Handle of client private data.
==============================================================================*/
typedef void (UFLCALLBACK* UFLDeleteGlyphOutlineIter)(
UFLHANDLE handle
);
/*===========================================================================
GetTTFontData -- Get the SFNT table of a TT font.
handle (in) -- Handle of client private data.
ulTable (in) -- Specifies the name of a font metric table from which the
font data is to be retrieved. This parameter can identify
one of the metric tables documented in the TrueType. If
this parameter is NULL, the information is retrieved
starting at the beginning of the font file.
cbOffset (in) -- Specifies the offset from the beginning of the font metric
table to the location where the function should begin
retrieving information. If this parameter is zero, the
information is retrieved starting at the beginning of the
table specified by the table parameter. If this value is
greater than or equal to the size of the table, an error
occurs.
pvBuffer (in/out) -- Points to a buffer to receive the font information. If
this parameter is NULL, the function returns the size of
the buffer required for the font data.
cbData (in) -- Specifies the length, in bytes, of the information to be
retrieved. If this parameter is zero, the function returns
the size of the data specified in the table parameter.
index (in) -- The FontIndex number for a TTC file. This index is ignored
when ulTable is 0 (reading from start of file, not font)
returns -- If pvBuffer is NULL, the function returns the size of
the buffer required for the font data. If the table does
not exist, the function returns 0.
==============================================================================*/
typedef unsigned long (UFLCALLBACK *UFLGetTTFontData)(
UFLHANDLE handle, /* Handle of client's private data */
unsigned long ulTable, /* metric table to query */
unsigned long cbOffset, /* offset into table being queried */
void *pvBuffer, /* address of buffer for returned data */
unsigned long cbData, /* length of data to query */
unsigned short index /* Font Index in a TTC file */
);
/*===========================================================================
UFLGetCIDMap -- Get the CIDMap for building a CIDFont with non-ientity CIDMap
handle (in) -- Handle of client private data.
pCIDMap (in/out) -- Points to a buffer to receive the CIDMap data - It must be a
well formatted PostScript string in ASCII format
(e.g., "200 string", (12345), <01020a0b>,..)
If this parameter is NULL, the function returns the size of
the buffer required .
cbData (in) -- Specifies the length, in bytes, of the information to be
retrieved. If this parameter is zero, the function returns
the size of the CIDMap
returns -- If pCIDMap is NULL, the function returns the size of
the buffer required for CIDMap data. If the client has no
CIDMap, the function returns 0.
==============================================================================*/
typedef unsigned long (UFLCALLBACK *UFLGetCIDMap)(
UFLHANDLE handle, /* Handle of client's private data */
char *pCIDMap, /* address of buffer for returned data */
unsigned long cbData /* length of buffer pCIDMap in bytes */
);
/*===========================================================================
UFLGetGlyphID -- Get the GlyphID from local-code or unicode infomation.
handle (in) -- Handle of client private (font) data.
unicode (in) -- Unicode to look for
localcode (in) -- code point in the current font's language
returns -- If the Glyph Index in this font
==============================================================================*/
typedef unsigned long (UFLCALLBACK *UFLGetGlyphID)(
UFLHANDLE handle, /* Handle of client's private data */
unsigned short unicode, /* unicode value */
unsigned short localcode /* code value in current font's language */
);
/*==============================================================================
UFLGetRotatedGIDs -- Get the rotated GlyphIDs
handle (in) -- Handle of client private (font) data.
pGIDs (in/out) -- Points to a buffer to receive the rotated (or
unrotated, if bFlag is nil) glyph IDs.
If null, returns the number of rotated glyph IDs only.
nCount (in) -- Number of GIDs stored to the array pointed to by
pGIDs (thus, valid only when pGIDs is valid).
bFlag (in) -- nil if unrotated (in TrueType definition) glyph IDs
are expected.
returns -- Number of rotated glyph IDs. -1 if failed.
================================================================================*/
typedef long (UFLCALLBACK *UFLGetRotatedGIDs)(
UFLHANDLE handle, /* Handle of client's private data */
unsigned long *pGIDs, /* address of buffer for returned data */
long nCount, /* number of GIDs stored to pGIDs */
UFLBool bFlag /* nil or non-nil */
);
/*==============================================================================
UFLGetRotatedGSUBs -- Get the rotated GlyphID's substitutions
handle (in) -- Handle of client private (font) data.
pGIDs (in/out) -- Pointer to a buffer to recieve the substitution glyph IDs.
Horizotal glyph IDs are already stored and its number is
nCount. It's the caller's responsibility to guarantee that
the buffer is big enough to store both H and V glyphs.
nCount (in) -- Number of horizontal GIDs stored from the beginning of the
buffer pointed to by pGIDs.
returns -- Number of the substitution GIDs found.
================================================================================*/
typedef long (UFLCALLBACK *UFLGetRotatedGSUBs)(
UFLHANDLE handle, /* Handle of client's private data */
unsigned long *pGIDs, /* address of buffer for returned data */
long nCount /* number of GIDs stored to pGIDs */
);
/*==============================================================================
UFLAddFontInfo -- Adds more key/value pairs to FontInfo dict
handle (in) -- Handle of client private (font) data.
returns -- A pointer to a PS string composed of key/value pairs
which will be added to the FontInfo dictionary.
================================================================================*/
typedef unsigned long * (UFLCALLBACK *UFLAddFontInfo)(
UFLHANDLE handle, /* Handle of client's private data */
char *buffer,
int bufLen
);
/*==============================================================================
UFLHostFontHandler -- HostFont request hander
================================================================================*/
typedef char (UFLCALLBACK *UFLHostFontHandler)(
unsigned int req, /* HostFont request number */
UFLHANDLE hHostFont, /* hostfontdata handle */
void* pvObj, /* pointer to an object */
unsigned long* pvObjSize, /* size of object */
UFLHANDLE hClientData, /* Client's private data handle */
DWORD dwHint /* a hint value */
);
/******************************************
Structure To Hold Callback Functions
*******************************************/
/* UFLFontProcs - contains all the client font information callback functions */
typedef struct _t_UFLFontProcs {
/* TrueType font downloades as T3 support functions */
UFLGetGlyphBmp pfGetGlyphBmp;
UFLDeleteGlyphBmp pfDeleteGlyphBmp;
/* TrueType font downloaded as T1 support functions */
UFLCreateGlyphOutlineIter pfCreateGlyphOutlineIter;
UFLNextOutlineSegment pfNextOutlineSegment;
UFLDeleteGlyphOutlineIter pfDeleteGlyphOutlineIter;
/* TrueType font downloaded as T42 support function */
UFLGetTTFontData pfGetTTFontData;
UFLGetCIDMap pfGetCIDMap;
UFLGetGlyphID pfGetGlyphID;
UFLGetRotatedGIDs pfGetRotatedGIDs;
UFLGetRotatedGSUBs pfGetRotatedGSUBs;
UFLAddFontInfo pfAddFontInfo;
/* HostFont support */
UFLHostFontHandler pfHostFontUFLHandler;
} UFLFontProcs;
#ifdef __cplusplus
}
#endif
#endif