windows-nt/Source/XPSP1/NT/shell/ext/mlang/font.h
2020-09-26 16:20:57 +08:00

152 lines
3.8 KiB
C

/********************************************************************
*
* Header Name : font.h
* Font structures defines for MLang fontlink2
*
********************************************************************/
#ifndef __FONT_H__
#define __FONT_H__
#define TWO_BYTE_NUM(p) (((p[0])<<8)|(p[1]))
#define FOUR_BYTE_NUM(p) (((p[0])<<24)|((p[1])<<16)|((p[2])<<8)|(p[3]))
#define OFFSET_OS2CPRANGE sizeof(SHORT) * 24 + sizeof(PANOSE) + sizeof(ULONG) * 4 + sizeof(CHAR) * 4
#define MAX_FONT_FILE_NAME 48
#define FONT_TABLE_INIT_SIZE 100
#define FONT_DATA_FILE_NAME TEXT("mlfcache.dat")
#define FONT_DATA_SIGNATURE "mlang font data"
#define REGFONTKEYNT TEXT("Software\\Microsoft\\Windows NT\\CurrentVersion\\Fonts")
#define REGFONTKEY95 TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Fonts")
#define FONT_FOLDER TEXT("fonts")
#define MAX_FONT_INDEX 30
#define FONTDATATABLENUM 2
// Font database file format:
// Table header
// Table Entry [Table Entry]
// Table data [Table data]
typedef struct tagFontDataHeader{
char FileSig[16];
DWORD dwVersion;
DWORD dwCheckSum;
WORD nTable;
} FONTDATAHEADER;
typedef struct tagFontTable{
char szName[4];
DWORD dwOffset;
DWORD dwSize;
} FONTDATATABLE;
typedef struct {
char TTCTag [4];
BYTE Version [4];
BYTE DirCount [4];
BYTE OffsetTTF1[4];
} TTC_HEAD;
typedef struct {
BYTE Version [4];
BYTE NumTables [2];
BYTE SearchRange [2];
BYTE EntrySelector[2];
BYTE RangeShift [2];
} TTF_HEAD;
typedef struct {
char Tag [4];
BYTE CheckSum[4];
BYTE Offset [4];
BYTE Length [4];
} TABLE_DIR;
typedef struct {
BYTE Format[2];
BYTE NumRec[2];
BYTE Offset[2];
} NAME_TABLE;
#define FONT_SUBFAMILY_NAME 2
#define FONT_NAME 4
#define MICROSOFT_PLATFORM 3
#define UNICODE_INDEXING 1
#define CMAP_FORMAT_FOUR 4
#define APPLE_UNICODE_PLATFORM 0
#define APPLE_UNICODE_INDEXING 3
#define UNICODE_SYMBOL_INDEXING 0
typedef struct {
BYTE Platform[2];
BYTE Encoding[2]; // = 1 if string is in Unicode
BYTE LangID [2];
BYTE NameID [2]; // = 2 for font subfamily name
BYTE Length [2];
BYTE Offset [2];
} NAME_RECORD;
typedef struct {
BYTE Version [2];
BYTE NumTables[2];
} CMAP_HEAD;
typedef struct {
BYTE Platform[2]; // = 3 if Microsoft
BYTE Encoding[2]; // = 1 if string is in Unicode
BYTE Offset [4];
} CMAP_TABLE;
typedef struct {
BYTE Platform[2]; // = 3 if Microsoft
BYTE Encoding[2]; // = 1 if string is in Unicode
BYTE Offset [4];
} OS2_TABLE;
typedef struct {
BYTE Format [2]; // must be 4
BYTE Length [2];
BYTE Version [2];
BYTE SegCountX2 [2];
BYTE SeachgRange [2];
BYTE EntrySelector[2];
BYTE RangeShift [2];
} CMAP_FORMAT;
// font table
typedef struct tagFontInfo{
TCHAR szFaceName[LF_FACESIZE];
TCHAR szFileName[MAX_FONT_FILE_NAME];
DWORD dwCodePages[2];
LOGFONT lf;
DWORD dwUniSubRanges[4];
SCRIPT_IDS scripts;
} FONTINFO;
typedef struct tagSCRIPT
{
SCRIPT_ID sid;
UINT uidDescription; // script name (localization needed)
UINT uiCodePage; // can be NULL to indicate no Windows code pages
WCHAR wcCandidate; // primary candiate for the script
UINT uidFixedWidthFont; // default fixed width font (localization needed)
UINT uidProportionalFont;// default proportional font (localization needed)
DWORD dwFlags; // script level flag
} SCRIPT;
//Unicode range table
typedef struct tagURangeFont{
WCHAR wcFrom;
WCHAR wcTo;
int nFonts;
int *pFontIndex;
} URANGEFONT;
extern UINT g_cScript;
extern const SCRIPT ScriptTable[];
//Script
#endif // __FONT_H__