windows-nt/Source/XPSP1/NT/public/oak/inc/prntfont.h
2020-09-26 16:20:57 +08:00

497 lines
15 KiB
C

/*++
Copyright (c) 1996-1997 Microsoft Corporation
Module Name:
prntfont.h
Abstract:
Declarations for Windows NT printer driver font metrics and glyphset data
*.UFF, *.UFM and *.GTT file data structure definition
--*/
#ifndef _PRNTFONT_H_
#define _PRNTFONT_H_
//
//
// F O N T M E T R I C S ( U F M )
//
//
//
// NOTE: To include this header file, it is necessary to include
// winddi.h, that has a definition of IFIMETRICS, FD_KERNINGPAIR
//
//
//
// UNIFM
//
// Universal printer driver (UNIDRV) font file header.
//
#define UNIFM_VERSION_1_0 0x00010000
typedef struct _UNIFM_HDR
{
DWORD dwSize; // a total size of this font file
DWORD dwVersion; // a version number of this font file
ULONG ulDefaultCodepage; // this font's default codepage
LONG lGlyphSetDataRCID; // a resource ID of GLYPHDATA
DWORD loUnidrvInfo; // offset to UNIDRVINFO
DWORD loIFIMetrics; // offset to IFIMETRICS
DWORD loExtTextMetric; // offset to EXTTEXTMETRIC
DWORD loWidthTable; // offset to WIDTHTABLE
DWORD loKernPair; // offset to KERNPAIR
DWORD dwReserved[2];
} UNIFM_HDR, *PUNIFM_HDR;
#define GET_UNIDRVINFO(pUFM) \
((PUNIDRVINFO)((PBYTE)(pUFM) + (pUFM)->loUnidrvInfo))
#define GET_IFIMETRICS(pUFM) \
((IFIMETRICS*)((PBYTE)(pUFM) + (pUFM)->loIFIMetrics))
#define GET_EXTTEXTMETRIC(pUFM) \
((EXTTEXTMETRIC*)((PBYTE)(pUFM) + (pUFM)->loExtTextMetric))
#define GET_WIDTHTABLE(pUFM) \
((PWIDTHTABLE)((PBYTE)(pUFM) + (pUFM)->loWidthTable))
#define GET_KERNDATA(pUFM) \
((PKERNDATA)((PBYTE)(pUFM) + (pUFM)->loKernPair))
//
// UNIDRVINFO
//
// UNIDRVINFO is used to define printer specific information.
//
typedef struct _INVOC {
DWORD dwCount; // the number of bytes in the invocation string
DWORD loOffset; // byte-offset to the beginning of the array
} INVOC, *PINVOC;
typedef struct _UNIDRVINFO
{
DWORD dwSize;
DWORD flGenFlags;
WORD wType;
WORD fCaps;
WORD wXRes;
WORD wYRes;
short sYAdjust;
short sYMoved;
WORD wPrivateData;
short sShift;
INVOC SelectFont;
INVOC UnSelectFont;
WORD wReserved[4];
} UNIDRVINFO, *PUNIDRVINFO;
#define GET_SELECT_CMD(pUni) \
((PCHAR)(pUni) + (pUni)->SelectFont.loOffset)
#define GET_UNSELECT_CMD(pUni) \
((PCHAR)(pUni) + (pUni)->UnSelectFont.loOffset)
//
// flGenFlags
//
#define UFM_SOFT 0x00000001 // Softfont, thus needs downloading
#define UFM_CART 0x00000002 // This is a cartridge font
#define UFM_SCALABLE 0x00000004 // Font is scalable
//
// wType
//
#define DF_TYPE_HPINTELLIFONT 0 // HP's Intellifont
#define DF_TYPE_TRUETYPE 1 // HP's PCLETTO fonts on LJ4
#define DF_TYPE_PST1 2 // Lexmark PPDS scalable fonts
#define DF_TYPE_CAPSL 3 // Canon CAPSL scalable fonts
#define DF_TYPE_OEM1 4 // OEM scalable font type 1
#define DF_TYPE_OEM2 5 // OEM scalable font type 2
//
// fCaps
//
#define DF_NOITALIC 0x0001 // Cannot italicize via FONTSIMULATION
#define DF_NOUNDER 0x0002 // Cannot underline via FONTSIMULATION
#define DF_XM_CR 0x0004 // send CR after using this font
#define DF_NO_BOLD 0x0008 // Cannot bold via FONTSIMULATION
#define DF_NO_DOUBLE_UNDERLINE 0x0010 // Cannot double underline via
// FONTSIMU ATION
#define DF_NO_STRIKETHRU 0x0020 // Cannot strikethru via FONTSIMULATION
#define DF_BKSP_OK 0x0040 // Can use backspace char, see spec
// for details
//
// EXTTEXTMETRIC
//
// The EXTTEXTMETRIC structure provides extended-metric information for a font.
// All the measurements are given in the specified units,
// regardless of the current mapping mode of the display context.
//
#ifndef _EXTTEXTMETRIC_
#define _EXTTEXTMETRIC_
typedef struct _EXTTEXTMETRIC
{
short emSize;
short emPointSize;
short emOrientation;
short emMasterHeight;
short emMinScale;
short emMaxScale;
short emMasterUnits;
short emCapHeight;
short emXHeight;
short emLowerCaseAscent;
short emLowerCaseDescent;
short emSlant;
short emSuperScript;
short emSubScript;
short emSuperScriptSize;
short emSubScriptSize;
short emUnderlineOffset;
short emUnderlineWidth;
short emDoubleUpperUnderlineOffset;
short emDoubleLowerUnderlineOffset;
short emDoubleUpperUnderlineWidth;
short emDoubleLowerUnderlineWidth;
short emStrikeOutOffset;
short emStrikeOutWidth;
WORD emKernPairs;
WORD emKernTracks;
} EXTTEXTMETRIC, *PEXTTEXTMETRIC;
#endif // _EXTTEXTMETRIC_
//
// WIDTHTABLE
//
// This data structure represents the character width table.
// This width table is a continuous GLYPHHANDLE base,
// not Unicode nor codepage/character code base.
// GLYPHANDLE information is in the GLYPHDATA.
//
typedef struct _WIDTHRUN
{
WORD wStartGlyph; // index of the first glyph handle
WORD wGlyphCount; // number of glyphs covered
DWORD loCharWidthOffset; // glyph width table
} WIDTHRUN, *PWIDTHRUN;
typedef struct _WIDTHTABLE
{
DWORD dwSize; // the size of this structure including every run
DWORD dwRunNum; // the number of widthrun
WIDTHRUN WidthRun[1]; // width run array
} WIDTHTABLE, *PWIDTHTABLE;
//
// The array has wGlyphCount elements and each element is the char width
// for a single glyph. The first width corresponds to glyph index wStartGlyph
// and so on. The byte offset is relative to the beginning of WIDTHTABLE
// structure and must be WORD-aligned.
// In case of Western device font, proportional font has all varibal pitch
// characters. This means that dwRunNum is set to 1 and loCharWidthOffset
// would be an offset from the top of WIDTHTABLE to a width vector of all
// characters.
// In case of Far Eastern device font, basically IFIMETRICS.fwdAveCharWidth and
// IFIMETRICS.fwdMaxCharWidth are used for single byte and double byte character
// width. If a font is proportional, a UFM has a WIDTHTABLE which represents
// only the proportional pitch characters. Other characters use fdwAveCharWidth
// and fwdMaxCharInc for single and double byte characters.
//
//
// KERNDATA
// This data structure represents kerning pair information.
// This kerning pair table is a Unicode base.
//
typedef struct _KERNDATA
{
DWORD dwSize; // the size of this structure including array
DWORD dwKernPairNum; // the number of kerning pair
FD_KERNINGPAIR KernPair[1]; // FD_KERNINGPAIR array
} KERNDATA, *PKERNDATA;
//
//
// G L Y P H S E T D A T A ( G T T )
//
//
//
// UNI_GLYPHSETDATA
//
// GLYPHSETDATA data structure represents a character encoding information
// of printer device font.
//
typedef struct _UNI_GLYPHSETDATA {
DWORD dwSize;
DWORD dwVersion;
DWORD dwFlags;
LONG lPredefinedID;
DWORD dwGlyphCount;
DWORD dwRunCount;
DWORD loRunOffset;
DWORD dwCodePageCount;
DWORD loCodePageOffset;
DWORD loMapTableOffset;
DWORD dwReserved[2];
} UNI_GLYPHSETDATA, *PUNI_GLYPHSETDATA;
#define UNI_GLYPHSETDATA_VERSION_1_0 0x00010000
#define GET_GLYPHRUN(pGTT) \
((PGLYPHRUN) ((PBYTE)(pGTT) + ((PUNI_GLYPHSETDATA)pGTT)->loRunOffset))
#define GET_CODEPAGEINFO(pGTT) \
((PUNI_CODEPAGEINFO) ((PBYTE)(pGTT) + ((PUNI_GLYPHSETDATA)pGTT)->loCodePageOffset))
#define GET_MAPTABLE(pGTT) \
((PMAPTABLE) ((PBYTE)(pGTT) + ((PUNI_GLYPHSETDATA)pGTT)->loMapTableOffset))
//
// UNI_CODEPAGEINFO
//
// This UNI_CODEPAGEINFO dats structure has a list of Codepage values
// which are supported by this UNI_GLYPHSETDATA.
//
typedef struct _UNI_CODEPAGEINFO {
DWORD dwCodePage;
INVOC SelectSymbolSet;
INVOC UnSelectSymbolSet;
} UNI_CODEPAGEINFO, *PUNI_CODEPAGEINFO;
//
// GLYPHRUN
//
// GLYPHRUN dats structure represents the conversion table from Unicode to
// UNI_GLYPHSETDATA specific glyph handle. Glyph handle is continuous number
// starting from zero.
//
typedef struct _GLYPHRUN {
WCHAR wcLow;
WORD wGlyphCount;
} GLYPHRUN, *PGLYPHRUN;
//
// MAPTABLE and TRANSDATA
//
// This MAPTABLE data structure represents a conversion table fron glyph handle
// to codepage/character code.
//
typedef struct _TRANSDATA {
BYTE ubCodePageID; // Codepage index to CODEPAGENFO data structure array
BYTE ubType; // a type of TRANSDATA
union
{
SHORT sCode;
BYTE ubCode;
BYTE ubPairs[2];
} uCode;
} TRANSDATA, *PTRANSDATA;
typedef struct _MAPTABLE {
DWORD dwSize; // the size of MAPTABLE including TRANSDATA array
DWORD dwGlyphNum; // the number of glyphs supported in MAPTABLE
TRANSDATA Trans[1]; // an array of TRANSDATA
} MAPTABLE, *PMAPTABLE;
//
// ubType flags
//
// One of following three can be specified for the type of uCode.
//
#define MTYPE_FORMAT_MASK 0x07
#define MTYPE_COMPOSE 0x01 // wCode is an array of 16-bit offsets from the
// beginning of the MAPTABLE pointing to the
// strings to use for translation.
// bData representes thelength of the translated
// string.
#define MTYPE_DIRECT 0x02 // wCode is a byte data of one-to-one translation
#define MTYPE_PAIRED 0x04 // wCode contains a word data to emit.
//
// One of following tow can be specified for Far East multibyte character.
//
#define MTYPE_DOUBLEBYTECHAR_MASK 0x18
#define MTYPE_SINGLE 0x08 // wCode contains a single byte character code in
// multi byte character string.
#define MTYPE_DOUBLE 0x10 // wCode contains a double byte character code in
// multi byte character string.
//
// One of following three can be specified for replace/add/disable system
// predefined GTT.
//
#define MTYPE_PREDEFIN_MASK 0xe0
#define MTYPE_REPLACE 0x20 // wCode contains a data to replace predefined one.
#define MTYPE_ADD 0x40 // wCode contains a data to add to predefiend one.
#define MTYPE_DISABLE 0x80 // wCode contains a data to remove from predefined.
//
// System predefined character conversion
//
// UNIDRV is going to support following system predefined character conversion.
// By speciffying these number in UNIFM.dwGlyphSetDataRCID;
//
#define CC_NOPRECNV 0x0000FFFF // Not use predefined
//
// ANSI
//
#define CC_DEFAULT 0 // Default Character Conversion
#define CC_CP437 -1 // Unicode to IBM Codepage 437
#define CC_CP850 -2 // Unicode to IBM Codepage 850
#define CC_CP863 -3 // Unicode to IBM Codepage 863
//
// Far East
//
#define CC_BIG5 -10 // Unicode to Chinese Big 5. Codepage 950.
#define CC_ISC -11 // Unicode to Korean Industrial Standard. Codepage 949.
#define CC_JIS -12 // Unicode to JIS X0208. Codepage 932.
#define CC_JIS_ANK -13 // Unicode to JIS X0208 except ANK. Codepage 932.
#define CC_NS86 -14 // Big-5 to National Standstand conversion. Codepage 950
#define CC_TCA -15 // Big-5 to Taipei Computer Association. Codepage 950.
#define CC_GB2312 -16 // Unicode to GB2312. Codepage 936
#define CC_SJIS -17 // Unicode to Shift-JIS. Codepage 932.
#define CC_WANSUNG -18 // Unicode to Extented Wansung. Codepage 949.
//
//
// U N I V E R S A L F O N T F O R M A T ( U F F )
//
//
//
// Font file header
//
typedef struct _UFF_FILEHEADER {
DWORD dwSignature; // File magic number
DWORD dwVersion; // UFF file format version number
DWORD dwSize; // Size of this structure
DWORD nFonts; // Count of fonts in directory
DWORD nGlyphSets; // Count of glyph set data
DWORD nVarData; // Count of variable data
DWORD offFontDir; // Offset of font directory
DWORD dwFlags; // Miscellaneous flags
DWORD dwReserved[4]; // Reserved, set to zero
} UFF_FILEHEADER, *PUFF_FILEHEADER;
//
// Values used in the file header
//
#define UFF_FILE_MAGIC '1FFU'
#define UFF_VERSION_NUMBER 0x00010001
#define FONT_DIR_SORTED 0x00000001
//
// Font directory structure
//
typedef struct _UFF_FONTDIRECTORY {
DWORD dwSignature; // Signature of font metrics record
WORD wSize; // Size of this structure
WORD wFontID; // Unique font ID
SHORT sGlyphID; // Associated glyph ID. 0 is default.
// -ve values are predefined IDs
WORD wFlags; // Miscellaneous flags
DWORD dwInstallerSig; // Signature of installer that installed this font
DWORD offFontName; // Offset to name of font
DWORD offCartridgeName; // Offset to name of font cartridge
DWORD offFontData; // Offset to font data record
DWORD offGlyphData; // Offset to glyph set data
DWORD offVarData; // Offset to softfont data
} UFF_FONTDIRECTORY, *PUFF_FONTDIRECTORY;
#define FONT_REC_SIG 'CERF' // font metrics record signature
#define WINNT_INSTALLER_SIG 'IFTN' // NT font installer
//
// Flags used in font directory
//
#define FONT_FL_UFM 0x0001
#define FONT_FL_IFI 0x0002
#define FONT_FL_SOFTFONT 0x0004
#define FONT_FL_PERMANENT_SF 0x0008
#define FONT_FL_DEVICEFONT 0x0010
#define FONT_FL_GLYPHSET_GTT 0x0020
#define FONT_FL_GLYPHSET_RLE 0x0040
#define FONT_FL_RESERVED 0x8000
//
// Data header
//
typedef struct _DATA_HEADER {
DWORD dwSignature; // Signature of data type
WORD wSize; // Size of this structure
WORD wDataID; // Identifier number for data
DWORD dwDataSize; // Size of data excluding structure
DWORD dwReserved; // Reserved, set to zero
} DATA_HEADER, *PDATA_HEADER;
//
// Data signatures
//
#define DATA_UFM_SIG 'MFUD'
#define DATA_IFI_SIG 'IFID'
#define DATA_GTT_SIG 'TTGD'
#define DATA_CTT_SIG 'TTCD'
#define DATA_VAR_SIG 'RAVD'
//
// Structure passed to font installer dialog proc through LPARAM
//
typedef struct _OEMFONTINSTPARAM {
DWORD cbSize;
HANDLE hPrinter;
HANDLE hModule;
HANDLE hHeap;
DWORD dwFlags;
PWSTR pFontInstallerName;
} OEMFONTINSTPARAM, *POEMFONTINSTPARAM;
#define FG_CANCHANGE 0x00080 // Have access to change data
#define WM_FI_FILENAME 900 // To get the font installer name.
#endif //_PRNTFONT_H_