152 lines
3.8 KiB
C
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__
|