mirror of
https://github.com/tesseract-ocr/tesseract.git
synced 2024-12-23 15:07:49 +08:00
229 lines
5.3 KiB
C
229 lines
5.3 KiB
C
|
/* I don't expect anyone to run this program, ever again. It is
|
||
|
* included primarily as documentation for how the GlyphLessFont was
|
||
|
* created.
|
||
|
*/
|
||
|
|
||
|
/* The OpenType data types, we'll duplicate the definitions so that
|
||
|
* the code shall be (as far as possible) self-documenting simply by
|
||
|
* referencing the OpenType specification. Note that the specification
|
||
|
* is soemwhat inconsistent with regards to usage, naming and capitalisation
|
||
|
* of the names for these data types.
|
||
|
*/
|
||
|
typedef char BYTE;
|
||
|
typedef char CHAR;
|
||
|
typedef unsigned short USHORT;
|
||
|
typedef short SHORT;
|
||
|
typedef struct _uint24 {char top8;unsigned short bottom16;} UINT24;
|
||
|
typedef unsigned long ULONG;
|
||
|
typedef long LONG;
|
||
|
typedef unsigned long Fixed;
|
||
|
typedef SHORT FWORD;
|
||
|
typedef USHORT UFWORD;
|
||
|
typedef unsigned short F2DOT14;
|
||
|
typedef struct _datetime {long upper;long lower;} LONGDATETIME;
|
||
|
typedef char Tag[4];
|
||
|
typedef USHORT GlyphId;
|
||
|
typedef USHORT Offset;
|
||
|
typedef struct _longHorMetric {USHORT advanceWidth;SHORT lsb;} longHorMetric;
|
||
|
|
||
|
/* And now definitions for each of the OpenType tables we will wish to use */
|
||
|
|
||
|
typedef struct {
|
||
|
Fixed sfnt_version;
|
||
|
USHORT numTables;
|
||
|
USHORT searchRange;
|
||
|
USHORT entrySelector;
|
||
|
USHORT rangeShift;
|
||
|
} Offset_Table;
|
||
|
|
||
|
typedef struct {
|
||
|
Tag tag; /* The spec defines this as a ULONG,
|
||
|
but also as a 'Tag' in its own right */
|
||
|
ULONG checkSum;
|
||
|
ULONG offset;
|
||
|
ULONG length;
|
||
|
} TableRecord;
|
||
|
|
||
|
typedef struct {
|
||
|
USHORT version;
|
||
|
USHORT numTables;
|
||
|
} cmap_header;
|
||
|
|
||
|
typedef struct {
|
||
|
USHORT platformID;
|
||
|
USHORT encodingID;
|
||
|
ULONG Offset;
|
||
|
} cmap_record;
|
||
|
|
||
|
typedef struct {
|
||
|
USHORT format;
|
||
|
USHORT length;
|
||
|
USHORT language;
|
||
|
BYTE glyphIDArray[256];
|
||
|
} format0_cmap_table;
|
||
|
|
||
|
/* This structure only works for single segment format 4 tables,
|
||
|
for multiple segments it must be constructed */
|
||
|
typedef struct {
|
||
|
USHORT format;
|
||
|
USHORT length;
|
||
|
USHORT language;
|
||
|
USHORT segCountx2;
|
||
|
USHORT searchRange;
|
||
|
USHORT entrySelector;
|
||
|
USHORT rangeShift;
|
||
|
USHORT endcount;
|
||
|
USHORT reservedPad;
|
||
|
USHORT startCount;
|
||
|
SHORT idDelta;
|
||
|
USHORT idRangeOffset;
|
||
|
USHORT glyphIdArray[2];
|
||
|
} format4_cmap_table;
|
||
|
|
||
|
typedef struct {
|
||
|
USHORT format;
|
||
|
USHORT length;
|
||
|
USHORT language;
|
||
|
USHORT firstCode;
|
||
|
USHORT entryCount;
|
||
|
USHORT glyphIDArray;
|
||
|
} format6_cmap_table;
|
||
|
|
||
|
typedef struct {
|
||
|
cmap_header header;
|
||
|
cmap_record records[2];
|
||
|
format6_cmap_table AppleTable;
|
||
|
format6_cmap_table MSTable;
|
||
|
} cmap_table;
|
||
|
|
||
|
typedef struct {
|
||
|
Fixed version;
|
||
|
Fixed FontRevision;
|
||
|
ULONG checkSumAdjustment;
|
||
|
ULONG MagicNumber;
|
||
|
USHORT Flags;
|
||
|
USHORT unitsPerEm;
|
||
|
LONGDATETIME created;
|
||
|
LONGDATETIME modified;
|
||
|
SHORT xMin;
|
||
|
SHORT yMin;
|
||
|
SHORT xMax;
|
||
|
SHORT yMax;
|
||
|
USHORT macStyle;
|
||
|
USHORT lowestRecPPEM;
|
||
|
SHORT FontDirectionHint;
|
||
|
SHORT indexToLocFormat;
|
||
|
SHORT glyphDataFormat;
|
||
|
SHORT PAD;
|
||
|
} head_table;
|
||
|
|
||
|
typedef struct {
|
||
|
Fixed version;
|
||
|
FWORD Ascender;
|
||
|
FWORD Descender;
|
||
|
FWORD LineGap;
|
||
|
UFWORD advanceWidthMax;
|
||
|
FWORD minLeftSideBearing;
|
||
|
FWORD minRightSideBearing;
|
||
|
FWORD xMaxExtent;
|
||
|
SHORT caretSlopeRise;
|
||
|
SHORT caretSlopeRun;
|
||
|
SHORT caretOffset;
|
||
|
SHORT reserved1;
|
||
|
SHORT reserved2;
|
||
|
SHORT reserved3;
|
||
|
SHORT reserved4;
|
||
|
SHORT metricDataFormat;
|
||
|
USHORT numberOfHMetrics;
|
||
|
} hhea_table;
|
||
|
|
||
|
typedef struct {
|
||
|
longHorMetric hMetrics[2];
|
||
|
} hmtx_table;
|
||
|
|
||
|
typedef struct {
|
||
|
Fixed version;
|
||
|
USHORT numGlyphs;
|
||
|
USHORT maxPoints;
|
||
|
USHORT maxContours;
|
||
|
USHORT maxCompositePoints;
|
||
|
USHORT maxCompositeContours;
|
||
|
USHORT maxZones;
|
||
|
USHORT maxTwilightPoints;
|
||
|
USHORT maxStorage;
|
||
|
USHORT maxFunctionDefs;
|
||
|
USHORT maxInstructionDefs;
|
||
|
USHORT maxStackElements;
|
||
|
USHORT maxSizeOfInstructions;
|
||
|
USHORT maxComponentElements;
|
||
|
USHORT maxComponentDepth;
|
||
|
} maxp_table;
|
||
|
|
||
|
typedef struct {
|
||
|
USHORT platformID;
|
||
|
USHORT encodingID;
|
||
|
USHORT languageID;
|
||
|
USHORT nameID;
|
||
|
USHORT length;
|
||
|
USHORT offset;
|
||
|
} NameRecord;
|
||
|
|
||
|
typedef struct {
|
||
|
USHORT format;
|
||
|
USHORT count;
|
||
|
USHORT stringOffset;
|
||
|
NameRecord nameRecord[3];
|
||
|
} name_table;
|
||
|
|
||
|
typedef struct {
|
||
|
USHORT version;
|
||
|
SHORT xAvgCharWidth;
|
||
|
USHORT usWeightClass;
|
||
|
USHORT usWidthClass;
|
||
|
USHORT fsType;
|
||
|
SHORT ySubscriptXSize;
|
||
|
SHORT ySubscriptYSize;
|
||
|
SHORT ySubscriptXOffset;
|
||
|
SHORT ySubscriptYOffset;
|
||
|
SHORT ySuperscriptXSize;
|
||
|
SHORT ySuperscriptYSize;
|
||
|
SHORT ySuperscriptXOffset;
|
||
|
SHORT ySuperscriptYOffset;
|
||
|
SHORT yStrikeoutSize;
|
||
|
SHORT yStrikeoutPosition;
|
||
|
SHORT sFamilyClass;
|
||
|
BYTE panose[10];
|
||
|
ULONG ulUnicodeRange1;
|
||
|
ULONG ulUnicodeRange2;
|
||
|
ULONG ulUnicodeRange3;
|
||
|
ULONG ulUnicodeRange4;
|
||
|
CHAR achVendID[4];
|
||
|
USHORT fsSelection;
|
||
|
USHORT usFirstCharIndex;
|
||
|
USHORT usLastCharIndex;
|
||
|
SHORT sTypoAscender;
|
||
|
SHORT sTypoDescender;
|
||
|
SHORT sTypoLineGap;
|
||
|
USHORT usWinAscent;
|
||
|
USHORT usWinDescent;
|
||
|
ULONG ulCodePageRange1;
|
||
|
ULONG ulCodePageRange2;
|
||
|
SHORT sxHeight;
|
||
|
SHORT sCapHeight;
|
||
|
USHORT usDefaultChar;
|
||
|
USHORT usBreakChar;
|
||
|
USHORT usMaxContent;
|
||
|
} OS2_table;
|
||
|
|
||
|
typedef struct {
|
||
|
Fixed version;
|
||
|
Fixed italicAngle;
|
||
|
FWORD underlinePosition;
|
||
|
FWORD underlineThickness;
|
||
|
ULONG isFixedPitch;
|
||
|
ULONG minMemType42;
|
||
|
ULONG maxMemType42;
|
||
|
ULONG minMemType1;
|
||
|
ULONG maxMemType1;
|
||
|
} post_table;
|