|
|
/*++
Copyright (c) 1996 - 1999 Microsoft Corporation
Module Name:
sfttpcl.h
Abstract:
TT outline download header file.
Environment:
Windows NT Unidrv driver
Revision History:
06/03/97 -ganeshp- Created
dd-mm-yy -author- description
--*/
#ifndef _SFTTPCL_H
#define _SFTTPCL_H
/*
* True Type data structures */ typedef signed char SBYTE; /*
* Table Directory for True Type Font files */ #define TABLE_DIR_ENTRY_SIZE (16/sizeof(int))
#define TABLE_DIR_ENTRY 4 * TABLE_DIR_ENTRY_SIZE
#define SIZEOF_TABLEDIR 8 * TABLE_DIR_ENTRY
typedef ULONG TT_TAG; #define TRUE_TYPE_HEADER 12
#define NUM_DIR_ENTRIES 8
typedef unsigned short int uFWord; typedef short int FWord; /* Some True Type Font default values */ #define TT_QUALITY_LETTER 2
#define DEF_WIDTHTYPE 0
#define DEF_SERIFSTYLE 0
#define DEF_FONTNUMBER 0
#define DEF_STYLE 0x03e0
#define DEF_TYPEFACE 254
#define DEF_STROKEWEIGHT 0
#define DEF_XHEIGHT 0
#define DEF_CAPHEIGHT 0
#define DEF_SYMBOLSET 0x7502
#define MAX_SEGMENTS 0x200
#define MAX_CHAR 0x100
#define x_UNICODE 0x78
#define H_UNICODE 0x48
#define INVALID_GLYPH 0xffff
#define MAX_FONTS 8
#define MORE_COMPONENTS 0x20
#define FIXED_SPACING 0
#define PROPORTIONAL_SPACING 1
#define LEN_FONTNAME 16
#define LEN_PANOSE 10
#define LEN_COMPLEMENTNUM 8
#define UB_SYMBOLSET 56
#define RESERVED_CHARID 0xffff
#define PCL_MAXHEADER_SIZE 32767
#define PANOSE_TAG 0x4150 // "PA" swapped
#define CE_TAG 'EC'
#define CC_TAG 'CC'
#define GC_TAG 'CG'
#define SEG_TAG 0x5447 // already swapped
#define Null_TAG 0xffff
#define CHAR_COMP_TAG 0x4343
#define PLATFORM_MS 3
#define SYMBOL_FONT 0
#define UNICODE_FONT 1
#define TT_BOUND_FONT 2
#define TT_2BYTE_FONT 3
#define TT_UNBOUND_FONT 11
#define FAMILY_NAME 4
// For Parsing Method 21 we need to start at 0x2100
#define FIRST_TT_2B_CHAR_CODE 0x2100
#define SHORT_OFFSET 0
#define LONG_OFFSET 1
/*
* Constants used for compound glyphs */ #define ARG_1_AND_2_ARE_WORDS 0x01
#define WE_HAVE_A_SCALE 0x08
#define MORE_COMPONENTS 0x20
#define WE_HAVE_AN_X_AND_Y_SCALE 0x40
#define WE_HAVE_A_TWO_BY_TWO 0x80
/* TT Table directory header. This is the first str */ typedef struct { FIXED version; USHORT numTables; USHORT searchRange; USHORT entrySelector; USHORT rangeShift; } TRUETYPEHEADER;
/* TT Table directory structure. */ typedef struct { ULONG uTag; ULONG uCheckSum; ULONG uOffset; ULONG uLength; } TABLEDIR;
typedef TABLEDIR ATABLEDIR[NUM_DIR_ENTRIES]; typedef TABLEDIR *PTABLEDIR;
/* List of tables needed for PCL TT download. They are listed in order. */
#define TABLEOS2 "OS/2" /* Not sent to PCL header */
#define TABLEPCLT "PCLT" /* Not sent to PCL header */
#define TABLECMAP "cmap" /* Not sent to PCL header */
#define TABLECVT "cvt "
#define TABLEFPGM "fpgm"
#define TABLEGDIR "gdir" /* This is PCL specific table. Not a TT table */
#define TABLEGLYF "glyf" /* This table is not sent in PCL font header */
#define TABLEHEAD "head"
#define TABLEHHEA "hhea"
#define TABLEHMTX "hmtx"
#define TABLELOCA "loca" /* Not sent to PCL header */
#define TABLEMAXP "maxp"
#define TABLENAME "name" /* Not sent to PCL header */
#define TABLEPOST "post" /* Not sent to PCL header */
#define TABLEPREP "prep"
typedef struct { ULONG u1; ULONG u2; } DATETIME;
typedef struct { FIXED version; FIXED fontRevision; ULONG checkSumAdjustment; ULONG magicNumber; USHORT flags; USHORT unitsPerEm; DATETIME dateCreated; DATETIME dateModified; SHORT xMin; SHORT yMin; SHORT xMax; SHORT yMax; USHORT macStyle; USHORT lowestRecPPEM; SHORT fontDirectionHint; SHORT indexToLocFormat; } HEAD_TABLE;
typedef struct { BYTE stuff[34]; USHORT numberOfHMetrics; } HHEA_TABLE;
typedef struct { uFWord advanceWidth; FWord leftSideBearing; } HORIZONTALMETRICS;
typedef struct { HORIZONTALMETRICS longHorMetric[1]; } HMTXTABLE;
typedef struct { uFWord advanceWidth; } HMTX_INFO;
typedef struct { FIXED version; USHORT numGlyphs; } MAXP_TABLE;
typedef struct { USHORT version; SHORT xAvgCharWidth; USHORT usWeightClass; USHORT usWidthClass; SHORT fsType; SHORT ySubscriptXSize; SHORT ySubscriptYSize; SHORT ySubscriptXOffset; SHORT ySubscriptYOffset; SHORT ySuperscriptXSize; SHORT ySuperscriptYSize; SHORT ySuperscriptXOffset; SHORT ySuperscriptYOffset; SHORT yStrikeoutSize; SHORT yStrikeoutPosition; SHORT sFamilyClass; PANOSE Panose; SHORT ss1; SHORT ss2; SHORT ss3; ULONG ulCharRange[3]; SHORT ss4; USHORT fsSelection; USHORT usFirstCharIndex; USHORT usLastCharIndex; USHORT sTypoAscender; USHORT sTypoDescender; USHORT sTypoLineGap; USHORT usWinAscent; USHORT usWinDescent; } OS2_TABLE;
typedef struct { FIXED FormatType; FIXED italicAngle; SHORT underlinePosition; SHORT underlineThickness; ULONG isFixedPitch; /* set to 0 if proportional, else !0 */ } POST_TABLE;
typedef struct { ULONG Version; ULONG FontNumber; USHORT Pitch; USHORT xHeight; USHORT Style; USHORT TypeFamily; USHORT CapHeight; USHORT SymbolSet; char Typeface[LEN_FONTNAME]; char CharacterComplement[8]; char FileName[6]; char StrokeWeight; char WidthType; BYTE SerifStyle; } PCLT_TABLE;
typedef struct { USHORT PlatformID; USHORT EncodingID; ULONG offset; } ENCODING_TABLE;
typedef struct { USHORT Version; USHORT nTables; ENCODING_TABLE encodingTable[3]; } CMAP_TABLE;
typedef struct { USHORT format; USHORT length; USHORT Version; USHORT SegCountx2; USHORT SearchRange; USHORT EntrySelector; USHORT RangeShift; } GLYPH_MAP_TABLE;
typedef struct { SHORT numberOfContours; FWord xMin; FWord yMin; FWord xMax; FWORD yMax; // SHORT GlyphDesc[1];
} GLYPH_DATA_HEADER;
typedef struct { CMAP_TABLE cmapTable; ULONG offset; } GLYPH_DATA;
typedef struct { USHORT PlatformID; USHORT EncodingID; USHORT LanguageID; USHORT NameID; USHORT StringLen; USHORT StringOffset; } NAME_RECORD;
typedef struct { USHORT FormatSelector; USHORT NumOfNameRecords; USHORT Offset; NAME_RECORD *pNameRecord; } NAME_TABLE;
typedef struct { ULONG ulOffset; ULONG ulLength; } FONT_DATA;
/* Segment data */ #define CE_SEG_SIGNATURE 'EC'
typedef struct { WORD wSig; WORD wSize; WORD wSizeAlign; WORD wStyle; // 1 = italics, 0,2,3=reserved.
WORD wStyleAlign; // 1 = italics, 0,2,3=reserved.
WORD wStrokeWeight; WORD wSizing; } CE_SEGMENT;
//
// From PCL TechRef.pdf
//
// Character Complement Numbers
//
// The "Intellifont Unbound Scalable Font Header" (header) includes a
// 64 bit field (bytes 78-85) which contains the Character Complement
// number. For TrueType fonts, in the "15 Font Header for
// Scalable Fonts" (unbound), the Character Complement number is
// included in the accompanying "Font Data" section of the
// header.
// The Character Complement number identifies the symbol collections
// in the font. Each bit in this field corresponds to a symbol collection
// (not all bits are currently defined; refer to Appendix D in the PCL 5
// Comparison Guide).
//
// This 8-byte field works in conjunction with the Character Complement
// field in the header of a type 10 or 11 (unbound) font to determine the
// compatibility of a symbol set with an unbound font. These two fields
// identify the unbound fonts in the printer which contain the symbol
// collections required to build a symbol set. Refer to "Scalable
// Fonts" in Chapter 9, for a description of symbol collections and
// unbound fonts.
// Each bit in the field represents a specific collection. Setting a bit to 1
// indicates that collection is required; setting the bit to 0 indicates that
// collection is not required. (Bit 63 refers to the most significant bit of
// the first byte, and bit 0 refers to the least significant bit of the eight
// byte field.) The bit representations for the collections are shown
// below.
//
// MSL Symbol index
//
// Bit Field Designated Use
// 58-63 Reserved for Latin fonts.
// 55-57 Reserved for Cyrillic fonts.
// 52-54 Reserved for Arabic fonts.
// 50-51 Reserved for Greek fonts.
// 48-49 Reserved for Hebrew fonts.
// 3-47 Miscellaneous uses (South Asian, Armenian,
// other alphabets, bar codes, OCR, Math, PC Semi-graphics, etc.).
// 0-2 Symbol Index field. 111 - MSL Symbol Index
//
// Unicode Symbol Index
//
// Bit Field Designated Use
// 32-63 Miscellaneous uses (South Asian, Armenian, other
// alphabets, bar codes, OCR, Math, etc.).
// 28-31 Reserved for Latin fonts.
// 22-27 Reserved for platform/application variant fonts.
// 3-21 Reserved for Cyrillic, Arabic, Greek and Hebrew fonts.
// 0-2 Symbol Index field. 110 - Unicode Symbol Index
//
// MSL Symbol Index Character Complement Bits
// Bit Value
// 63 0 if font is compatible with standard Latin character
// sets (e.g., Roman-8, ISO 8859-1 Latin 1);
// 1 otherwise.
// 62 0 if font is compatible with East European Latin
// character sets (e.g., ISO 8859-2 Latin 2); 1 otherwise.
// 61 0 if font contains Turkish character sets
// (e.g., ISO 8859/9 Latin 5); 1 otherwise.
// 34 0 if font has access to the math characters of the
// Math-8, PS Math and Ventura Math character sets;
// 1 otherwise.
// 33 0 if font has access to the semi-graphic characters of
// the PC-8, PC-850, etc. character sets; 1 otherwise.
// 32 0 if font is compatible with ITC Zapf Dingbats series
// 100, 200, etc.;
// 1 otherwise.
// 2, 1, 0
// 111 if font is arranged in MSL Symbol Index order.
//
// Unicode Symbol Index Character Complement Bits
// Bit Value
// 31 0 if font is compatible with 7-bit ASCII;
// 1 otherwise.
// 30 0 if font is compatible with ISO 8859/1 Latin 1 (West
// Europe) character sets;
// 1 otherwise.
// 29 0 if font is compatible with ISO 8859/2 Latin 2 (East
// Europe) character sets;
// 1 otherwise.
// 28 0 if font is compatible with Latin 5 (Turkish) character
// sets (e.g., ISO 8859/9 Latin 5, PC-Turkish);
// 1 otherwise.
// 27 0 if font is compatible with Desktop Publishing
// character sets (e.g., Windows 3.1 Latin 1, DeskTop, MC Text);
// 1 otherwise.
// 26 0 if font is compatible with character sets requiring a
// wider selection of accents (e.g., MC Text, ISO 8859/1 Latin 1);
// 1 otherwise.
// 25 0 if font is compatible with traditional PCL character
// sets (e.g., Roman-8, Legal, ISO 4 United Kingdom);
// 1 otherwise.
// 24 0 if font is compatible with the Macintosh character set (MC Text);
// 1 otherwise.
// 23 0 if font is compatible with PostScript Standard Encoding (PS Text);
// 1 otherwise.
// 22 0 if font is compatible with Code Pages
// (e.g., PC-8, PC 850, PC-Turk, etc.);
// 1 otherwise.
// 2,1,0
// 110 if font is arranged in Unicode Symbol Index order.
//
#define CC_SEG_SIGNATURE 'CC'
typedef struct { WORD wSig; WORD wSize; WORD wSizeAlign; //
// 64 bit field
//
WORD wCCNumber1; WORD wCCNumber2; WORD wCCNumber3; WORD wCCNumber4; } CC_SEGMENT;
#define GC_SEG_SIGNATURE 'CG'
typedef struct { WORD wSig; WORD wSize; WORD wSizeAlign; WORD wFormat; // = 0
WORD wDefaultGalleyChar; //FFFF
WORD wNumberOfRegions; // 1 (Hebrew)
struct { WORD wRegionUpperLeft; // 0
WORD wRegionLowerRight; // FFFE
WORD wRegional; // FFFE
} RegionChar[1]; } GC_SEGMENT;
/* True Type character descriptor */ typedef struct { BYTE bFormat; BYTE bContinuation; BYTE bDescSize; BYTE bClass; WORD wCharDataSize; WORD wGlyphID; } TTCH_HEADER;
/* Unbound True Type Font Descriptor */ typedef struct { USHORT usSize; BYTE bFormat; BYTE bFontType; BYTE bStyleMSB; BYTE bReserve1; USHORT usBaselinePosition; USHORT usCellWidth; USHORT usCellHeight; BYTE bOrientation; BYTE bSpacing; USHORT usSymbolSet; USHORT usPitch; USHORT usHeight; USHORT usXHeight; SBYTE sbWidthType; BYTE bStyleLSB; SBYTE sbStrokeWeight; BYTE bTypefaceLSB; BYTE bTypefaceMSB; BYTE bSerifStyle; BYTE bQuality; SBYTE sbPlacement; SBYTE sbUnderlinePos; SBYTE sbUnderlineThickness; USHORT Reserve2; USHORT Reserve3; USHORT Reserve4; USHORT usNumberContours; BYTE bPitchExtended; BYTE bHeightExtended; WORD wCapHeight; ULONG ulFontNum; char FontName[LEN_FONTNAME]; WORD wScaleFactor; SHORT sMasterUnderlinePosition; USHORT usMasterUnderlineHeight; BYTE bFontScaling; BYTE bVariety; } UB_TT_HEADER;
/* Bounded True Type Font Descriptor */ typedef struct { USHORT usSize; /* Number of bytes in here */ BYTE bFormat; /* Descriptor Format TT is 15 */ BYTE bFontType; /* 7, 8, or PC-8 style font */ BYTE bStyleMSB; BYTE wReserve1; /* Reserved */ WORD wBaselinePosition; /* TT = 0 */ USHORT wCellWide; /* head.xMax - xMin */ USHORT wCellHeight; /* head.yMax - yMin */ BYTE bOrientation; /* TT = 0 */ BYTE bSpacing; /* post.isFixedPitch */ WORD wSymSet; /* PCLT.symbolSet */ WORD wPitch; /* hmtx.advanceWidth */ WORD wHeight; /* TT = 0 */ WORD wXHeight; /* PCLT.xHeight */ SBYTE sbWidthType; /* PCLT.widthType */ BYTE bStyleLSB; SBYTE sbStrokeWeight; /* OS2.usWeightClass */ BYTE bTypefaceLSB; /* */ BYTE bTypefaceMSB; /* */ BYTE bSerifStyle; /* PCLT.serifStyle */ BYTE bQuality; SBYTE sbPlacement; /* TT = 0 */ SBYTE sbUnderlinePos; /* TT = 0 */ SBYTE sbUnderlineThickness; /* TT = 0 */ USHORT usTextHeight; /* Reserved */ USHORT usTextWidth; /* Reserved */ WORD wFirstCode; /* OS2.usFirstCharIndex */ WORD wLastCode; /* OS2.usLastCharIndex */ BYTE bPitchExtended; /* TT = 0 */ BYTE bHeightExtended; /* TT = 0 */ USHORT usCapHeight; /* PCLT.capHeight */ ULONG ulFontNum; /* PCLT.FontNumber */ char FontName[LEN_FONTNAME]; /* name.FontFamilyName */ WORD wScaleFactor; /* head.unitsPerEm */ SHORT sMasterUnderlinePosition; /* post.underlinePosition */ USHORT usMasterUnderlineHeight; /* post.underlineThickness */ BYTE bFontScaling; /* TT = 1 */ BYTE bVariety; /* TT = 0 */ } TT_HEADER;
#endif // !_SFTTPCL_H
|