Index: core/src/fpdfapi/fpdf_font/ttgsubtable.h |
diff --git a/core/src/fpdfapi/fpdf_font/ttgsubtable.h b/core/src/fpdfapi/fpdf_font/ttgsubtable.h |
index 1b18f82d6e22f78844c434ae779fae604bc29915..b717c7af8b492359f445c0ce00b70dcea305dcb3 100644 |
--- a/core/src/fpdfapi/fpdf_font/ttgsubtable.h |
+++ b/core/src/fpdfapi/fpdf_font/ttgsubtable.h |
@@ -11,404 +11,391 @@ |
#include "../../../include/fxcrt/fx_basic.h" |
#include "common.h" |
-class CFX_GlyphMap |
-{ |
-public: |
- CFX_GlyphMap(); |
- ~CFX_GlyphMap(); |
- void SetAt(int key, int value); |
- FX_BOOL Lookup(int key, int &value); |
-protected: |
- CFX_BinaryBuf m_Buffer; |
+class CFX_GlyphMap { |
+ public: |
+ CFX_GlyphMap(); |
+ ~CFX_GlyphMap(); |
+ void SetAt(int key, int value); |
+ FX_BOOL Lookup(int key, int& value); |
+ |
+ protected: |
+ CFX_BinaryBuf m_Buffer; |
}; |
-class CFX_CTTGSUBTable |
-{ |
-public: |
- CFX_CTTGSUBTable(void): m_bFeautureMapLoad(FALSE), loaded(false) {}; |
- CFX_CTTGSUBTable(FT_Bytes gsub): m_bFeautureMapLoad(FALSE), loaded(false) |
- { |
- LoadGSUBTable(gsub); |
+class CFX_CTTGSUBTable { |
+ public: |
+ CFX_CTTGSUBTable(void) : m_bFeautureMapLoad(FALSE), loaded(false){}; |
+ CFX_CTTGSUBTable(FT_Bytes gsub) : m_bFeautureMapLoad(FALSE), loaded(false) { |
+ LoadGSUBTable(gsub); |
+ } |
+ virtual ~CFX_CTTGSUBTable() {} |
+ bool IsOk(void) const { return loaded; } |
+ bool LoadGSUBTable(FT_Bytes gsub); |
+ bool GetVerticalGlyph(TT_uint32_t glyphnum, TT_uint32_t* vglyphnum); |
+ |
+ private: |
+ struct tt_gsub_header { |
+ TT_uint32_t Version; |
+ TT_uint16_t ScriptList; |
+ TT_uint16_t FeatureList; |
+ TT_uint16_t LookupList; |
+ }; |
+ struct TLangSys { |
+ TT_uint16_t LookupOrder; |
+ TT_uint16_t ReqFeatureIndex; |
+ TT_uint16_t FeatureCount; |
+ TT_uint16_t* FeatureIndex; |
+ TLangSys() |
+ : LookupOrder(0), |
+ ReqFeatureIndex(0), |
+ FeatureCount(0), |
+ FeatureIndex(NULL) {} |
+ ~TLangSys() { |
+ if (FeatureIndex) { |
+ delete[] FeatureIndex; |
+ } |
} |
- virtual ~CFX_CTTGSUBTable() {} |
- bool IsOk(void) const |
- { |
- return loaded; |
+ |
+ private: |
+ TLangSys(const TLangSys&); |
+ TLangSys& operator=(const TLangSys&); |
+ }; |
+ struct TLangSysRecord { |
+ TT_uint32_t LangSysTag; |
+ struct TLangSys LangSys; |
+ TLangSysRecord() : LangSysTag(0) {} |
+ |
+ private: |
+ TLangSysRecord(const TLangSysRecord&); |
+ TLangSysRecord& operator=(const TLangSysRecord&); |
+ }; |
+ struct TScript { |
+ TT_uint16_t DefaultLangSys; |
+ TT_uint16_t LangSysCount; |
+ struct TLangSysRecord* LangSysRecord; |
+ TScript() : DefaultLangSys(0), LangSysCount(0), LangSysRecord(NULL) {} |
+ ~TScript() { |
+ if (LangSysRecord) { |
+ delete[] LangSysRecord; |
+ } |
} |
- bool LoadGSUBTable(FT_Bytes gsub); |
- bool GetVerticalGlyph(TT_uint32_t glyphnum, TT_uint32_t *vglyphnum); |
-private: |
- struct tt_gsub_header { |
- TT_uint32_t Version; |
- TT_uint16_t ScriptList; |
- TT_uint16_t FeatureList; |
- TT_uint16_t LookupList; |
- }; |
- struct TLangSys { |
- TT_uint16_t LookupOrder; |
- TT_uint16_t ReqFeatureIndex; |
- TT_uint16_t FeatureCount; |
- TT_uint16_t *FeatureIndex; |
- TLangSys(): LookupOrder(0), ReqFeatureIndex(0), FeatureCount(0), FeatureIndex(NULL) {} |
- ~TLangSys() |
- { |
- if(FeatureIndex) { |
- delete[] FeatureIndex; |
- } |
- } |
- private: |
- TLangSys(const TLangSys&); |
- TLangSys& operator=(const TLangSys&); |
- }; |
- struct TLangSysRecord { |
- TT_uint32_t LangSysTag; |
- struct TLangSys LangSys; |
- TLangSysRecord(): LangSysTag(0) {} |
- private: |
- TLangSysRecord(const TLangSysRecord&); |
- TLangSysRecord& operator=(const TLangSysRecord&); |
- }; |
- struct TScript { |
- TT_uint16_t DefaultLangSys; |
- TT_uint16_t LangSysCount; |
- struct TLangSysRecord *LangSysRecord; |
- TScript(): DefaultLangSys(0), LangSysCount(0), LangSysRecord(NULL) {} |
- ~TScript() |
- { |
- if(LangSysRecord) { |
- delete[] LangSysRecord; |
- } |
- } |
- private: |
- TScript(const TScript&); |
- TScript& operator=(const TScript&); |
- }; |
- struct TScriptRecord { |
- TT_uint32_t ScriptTag; |
- struct TScript Script; |
- TScriptRecord(): ScriptTag(0) {} |
- private: |
- TScriptRecord(const TScriptRecord&); |
- TScriptRecord& operator=(const TScriptRecord&); |
- }; |
- struct TScriptList { |
- TT_uint16_t ScriptCount; |
- struct TScriptRecord *ScriptRecord; |
- TScriptList(): ScriptCount(0), ScriptRecord(NULL) {} |
- ~TScriptList() |
- { |
- if(ScriptRecord) { |
- delete[] ScriptRecord; |
- } |
- } |
- private: |
- TScriptList(const TScriptList&); |
- TScriptList& operator=(const TScriptList&); |
- }; |
- struct TFeature { |
- TT_uint16_t FeatureParams; |
- int LookupCount; |
- TT_uint16_t *LookupListIndex; |
- TFeature(): FeatureParams(0), LookupCount(0), LookupListIndex(NULL) {} |
- ~TFeature() |
- { |
- if(LookupListIndex) { |
- delete[] LookupListIndex; |
- } |
- } |
- private: |
- TFeature(const TFeature&); |
- TFeature& operator=(const TFeature&); |
- }; |
- struct TFeatureRecord { |
- TT_uint32_t FeatureTag; |
- struct TFeature Feature; |
- TFeatureRecord(): FeatureTag(0) {} |
- private: |
- TFeatureRecord(const TFeatureRecord&); |
- TFeatureRecord& operator=(const TFeatureRecord&); |
- }; |
- struct TFeatureList { |
- int FeatureCount; |
- struct TFeatureRecord *FeatureRecord; |
- TFeatureList(): FeatureCount(0), FeatureRecord(NULL) {} |
- ~TFeatureList() |
- { |
- if(FeatureRecord) { |
- delete[] FeatureRecord; |
- } |
- } |
- private: |
- TFeatureList(const TFeatureList&); |
- TFeatureList& operator=(const TFeatureList&); |
- }; |
- enum TLookupFlag { |
- LOOKUPFLAG_RightToLeft = 0x0001, |
- LOOKUPFLAG_IgnoreBaseGlyphs = 0x0002, |
- LOOKUPFLAG_IgnoreLigatures = 0x0004, |
- LOOKUPFLAG_IgnoreMarks = 0x0008, |
- LOOKUPFLAG_Reserved = 0x00F0, |
- LOOKUPFLAG_MarkAttachmentType = 0xFF00, |
- }; |
- struct TCoverageFormatBase { |
- TT_uint16_t CoverageFormat; |
- CFX_GlyphMap m_glyphMap; |
- TCoverageFormatBase(): CoverageFormat(0) {} |
- virtual ~TCoverageFormatBase() {} |
- private: |
- TCoverageFormatBase(const TCoverageFormatBase&); |
- TCoverageFormatBase& operator=(const TCoverageFormatBase&); |
- }; |
- struct TCoverageFormat1: public TCoverageFormatBase { |
- TT_uint16_t GlyphCount; |
- TT_uint16_t *GlyphArray; |
- TCoverageFormat1(): GlyphCount(0), GlyphArray(NULL) |
- { |
- CoverageFormat = 1; |
- } |
- ~TCoverageFormat1() |
- { |
- if(GlyphArray) { |
- delete[] GlyphArray; |
- } |
- } |
- private: |
- TCoverageFormat1(const TCoverageFormat1&); |
- TCoverageFormat1& operator=(const TCoverageFormat1&); |
- }; |
- struct TRangeRecord { |
- TT_uint16_t Start; |
- TT_uint16_t End; |
- TT_uint16_t StartCoverageIndex; |
- TRangeRecord(): Start(0), End(0), StartCoverageIndex(0) {} |
- friend bool operator > (const TRangeRecord &r1, const TRangeRecord &r2) |
- { |
- return r1.Start > r2.Start; |
- } |
- private: |
- TRangeRecord(const TRangeRecord&); |
- }; |
- struct TCoverageFormat2: public TCoverageFormatBase { |
- TT_uint16_t RangeCount; |
- struct TRangeRecord *RangeRecord; |
- TCoverageFormat2(): RangeCount(0), RangeRecord(NULL) |
- { |
- CoverageFormat = 2; |
- } |
- ~TCoverageFormat2() |
- { |
- if(RangeRecord) { |
- delete[] RangeRecord; |
- } |
- } |
- private: |
- TCoverageFormat2(const TCoverageFormat2&); |
- TCoverageFormat2& operator=(const TCoverageFormat2&); |
- }; |
- struct TClassDefFormatBase { |
- TT_uint16_t ClassFormat; |
- TClassDefFormatBase(): ClassFormat(0) {} |
- virtual ~TClassDefFormatBase() {} |
- private: |
- TClassDefFormatBase(const TClassDefFormatBase&); |
- TClassDefFormatBase& operator=(const TClassDefFormatBase&); |
- }; |
- struct TClassDefFormat1: public TClassDefFormatBase { |
- TT_uint16_t StartGlyph; |
- TT_uint16_t GlyphCount; |
- TT_uint16_t *ClassValueArray; |
- TClassDefFormat1(): StartGlyph(0), GlyphCount(0), ClassValueArray(NULL) |
- { |
- ClassFormat = 1; |
- } |
- ~TClassDefFormat1() |
- { |
- if(ClassValueArray) { |
- delete[] ClassValueArray; |
- } |
- } |
- private: |
- TClassDefFormat1(const TClassDefFormat1&); |
- TClassDefFormat1& operator=(const TClassDefFormat1&); |
- }; |
- struct TClassRangeRecord { |
- TT_uint16_t Start; |
- TT_uint16_t End; |
- TT_uint16_t Class; |
- TClassRangeRecord(): Start(0), End(0), Class(0) {} |
- private: |
- TClassRangeRecord(const TClassRangeRecord&); |
- TClassRangeRecord& operator=(const TClassRangeRecord&); |
- }; |
- struct TClassDefFormat2: public TClassDefFormatBase { |
- TT_uint16_t ClassRangeCount; |
- struct TClassRangeRecord *ClassRangeRecord; |
- TClassDefFormat2(): ClassRangeCount(0), ClassRangeRecord(NULL) |
- { |
- ClassFormat = 2; |
- } |
- ~TClassDefFormat2() |
- { |
- if(ClassRangeRecord) { |
- delete[] ClassRangeRecord; |
- } |
- } |
- private: |
- TClassDefFormat2(const TClassDefFormat2&); |
- TClassDefFormat2& operator=(const TClassDefFormat2&); |
- }; |
- struct TDevice { |
- TT_uint16_t StartSize; |
- TT_uint16_t EndSize; |
- TT_uint16_t DeltaFormat; |
- TDevice(): StartSize(0), EndSize(0), DeltaFormat(0) {} |
- private: |
- TDevice(const TDevice&); |
- TDevice& operator=(const TDevice&); |
- }; |
- struct TSubTableBase { |
- TT_uint16_t SubstFormat; |
- TSubTableBase(): SubstFormat(0) {} |
- virtual ~TSubTableBase() {} |
- private: |
- TSubTableBase(const TSubTableBase&); |
- TSubTableBase& operator=(const TSubTableBase&); |
- }; |
- struct TSingleSubstFormat1: public TSubTableBase { |
- TCoverageFormatBase *Coverage; |
- TT_int16_t DeltaGlyphID; |
- TSingleSubstFormat1(): Coverage(NULL), DeltaGlyphID(0) |
- { |
- SubstFormat = 1; |
- } |
- ~TSingleSubstFormat1() |
- { |
- delete Coverage; |
- } |
- private: |
- TSingleSubstFormat1(const TSingleSubstFormat1&); |
- TSingleSubstFormat1& operator=(const TSingleSubstFormat1&); |
- }; |
- struct TSingleSubstFormat2: public TSubTableBase { |
- TCoverageFormatBase *Coverage; |
- TT_uint16_t GlyphCount; |
- TT_uint16_t *Substitute; |
- TSingleSubstFormat2(): Coverage(NULL), GlyphCount(0), Substitute(NULL) |
- { |
- SubstFormat = 2; |
- } |
- ~TSingleSubstFormat2() |
- { |
- delete Coverage; |
- delete[] Substitute; |
- } |
- private: |
- TSingleSubstFormat2(const TSingleSubstFormat2&); |
- TSingleSubstFormat2& operator=(const TSingleSubstFormat2&); |
- }; |
- struct TLookup { |
- TT_uint16_t LookupType; |
- TT_uint16_t LookupFlag; |
- TT_uint16_t SubTableCount; |
- struct TSubTableBase **SubTable; |
- TLookup(): LookupType(0), LookupFlag(0), SubTableCount(0), SubTable(NULL) {} |
- ~TLookup() |
- { |
- if(SubTableCount > 0 && SubTable != NULL) { |
- for(int i = 0; i < SubTableCount; i++) { |
- delete SubTable[i]; |
- } |
- delete[] SubTable; |
- } |
- } |
- private: |
- TLookup(const TLookup&); |
- TLookup& operator=(const TLookup&); |
- }; |
- struct TLookupList { |
- int LookupCount; |
- struct TLookup *Lookup; |
- TLookupList(): LookupCount(0), Lookup(NULL) {} |
- ~TLookupList() |
- { |
- if(Lookup) { |
- delete[] Lookup; |
- } |
- } |
- private: |
- TLookupList(const TLookupList&); |
- TLookupList& operator=(const TLookupList&); |
- }; |
- bool Parse( |
- FT_Bytes scriptlist, |
- FT_Bytes featurelist, |
- FT_Bytes lookuplist); |
- void ParseScriptList(FT_Bytes raw, TScriptList *rec); |
- void ParseScript(FT_Bytes raw, TScript *rec); |
- void ParseLangSys(FT_Bytes raw, TLangSys *rec); |
- void ParseFeatureList(FT_Bytes raw, TFeatureList *rec); |
- void ParseFeature(FT_Bytes raw, TFeature *rec); |
- void ParseLookupList(FT_Bytes raw, TLookupList *rec); |
- void ParseLookup(FT_Bytes raw, TLookup *rec); |
- void ParseCoverage(FT_Bytes raw, TCoverageFormatBase **rec); |
- void ParseCoverageFormat1(FT_Bytes raw, TCoverageFormat1 *rec); |
- void ParseCoverageFormat2(FT_Bytes raw, TCoverageFormat2 *rec); |
- void ParseSingleSubst(FT_Bytes raw, TSubTableBase **rec); |
- void ParseSingleSubstFormat1(FT_Bytes raw, TSingleSubstFormat1 *rec); |
- void ParseSingleSubstFormat2(FT_Bytes raw, TSingleSubstFormat2 *rec); |
- bool GetVerticalGlyphSub( |
- TT_uint32_t glyphnum, |
- TT_uint32_t *vglyphnum, |
- struct TFeature *Feature); |
- bool GetVerticalGlyphSub2( |
- TT_uint32_t glyphnum, |
- TT_uint32_t *vglyphnum, |
- struct TLookup *Lookup); |
- int GetCoverageIndex(struct TCoverageFormatBase *Coverage, TT_uint32_t g); |
- TT_uint8_t GetUInt8(FT_Bytes& p) const |
- { |
- TT_uint8_t ret = p[0]; |
- p += 1; |
- return ret; |
+ |
+ private: |
+ TScript(const TScript&); |
+ TScript& operator=(const TScript&); |
+ }; |
+ struct TScriptRecord { |
+ TT_uint32_t ScriptTag; |
+ struct TScript Script; |
+ TScriptRecord() : ScriptTag(0) {} |
+ |
+ private: |
+ TScriptRecord(const TScriptRecord&); |
+ TScriptRecord& operator=(const TScriptRecord&); |
+ }; |
+ struct TScriptList { |
+ TT_uint16_t ScriptCount; |
+ struct TScriptRecord* ScriptRecord; |
+ TScriptList() : ScriptCount(0), ScriptRecord(NULL) {} |
+ ~TScriptList() { |
+ if (ScriptRecord) { |
+ delete[] ScriptRecord; |
+ } |
} |
- TT_int16_t GetInt16(FT_Bytes& p) const |
- { |
- TT_uint16_t ret = p[0] << 8 | p[1]; |
- p += 2; |
- return *(TT_int16_t*)&ret; |
+ |
+ private: |
+ TScriptList(const TScriptList&); |
+ TScriptList& operator=(const TScriptList&); |
+ }; |
+ struct TFeature { |
+ TT_uint16_t FeatureParams; |
+ int LookupCount; |
+ TT_uint16_t* LookupListIndex; |
+ TFeature() : FeatureParams(0), LookupCount(0), LookupListIndex(NULL) {} |
+ ~TFeature() { |
+ if (LookupListIndex) { |
+ delete[] LookupListIndex; |
+ } |
} |
- TT_uint16_t GetUInt16(FT_Bytes& p) const |
- { |
- TT_uint16_t ret = p[0] << 8 | p[1]; |
- p += 2; |
- return ret; |
+ |
+ private: |
+ TFeature(const TFeature&); |
+ TFeature& operator=(const TFeature&); |
+ }; |
+ struct TFeatureRecord { |
+ TT_uint32_t FeatureTag; |
+ struct TFeature Feature; |
+ TFeatureRecord() : FeatureTag(0) {} |
+ |
+ private: |
+ TFeatureRecord(const TFeatureRecord&); |
+ TFeatureRecord& operator=(const TFeatureRecord&); |
+ }; |
+ struct TFeatureList { |
+ int FeatureCount; |
+ struct TFeatureRecord* FeatureRecord; |
+ TFeatureList() : FeatureCount(0), FeatureRecord(NULL) {} |
+ ~TFeatureList() { |
+ if (FeatureRecord) { |
+ delete[] FeatureRecord; |
+ } |
+ } |
+ |
+ private: |
+ TFeatureList(const TFeatureList&); |
+ TFeatureList& operator=(const TFeatureList&); |
+ }; |
+ enum TLookupFlag { |
+ LOOKUPFLAG_RightToLeft = 0x0001, |
+ LOOKUPFLAG_IgnoreBaseGlyphs = 0x0002, |
+ LOOKUPFLAG_IgnoreLigatures = 0x0004, |
+ LOOKUPFLAG_IgnoreMarks = 0x0008, |
+ LOOKUPFLAG_Reserved = 0x00F0, |
+ LOOKUPFLAG_MarkAttachmentType = 0xFF00, |
+ }; |
+ struct TCoverageFormatBase { |
+ TT_uint16_t CoverageFormat; |
+ CFX_GlyphMap m_glyphMap; |
+ TCoverageFormatBase() : CoverageFormat(0) {} |
+ virtual ~TCoverageFormatBase() {} |
+ |
+ private: |
+ TCoverageFormatBase(const TCoverageFormatBase&); |
+ TCoverageFormatBase& operator=(const TCoverageFormatBase&); |
+ }; |
+ struct TCoverageFormat1 : public TCoverageFormatBase { |
+ TT_uint16_t GlyphCount; |
+ TT_uint16_t* GlyphArray; |
+ TCoverageFormat1() : GlyphCount(0), GlyphArray(NULL) { CoverageFormat = 1; } |
+ ~TCoverageFormat1() { |
+ if (GlyphArray) { |
+ delete[] GlyphArray; |
+ } |
+ } |
+ |
+ private: |
+ TCoverageFormat1(const TCoverageFormat1&); |
+ TCoverageFormat1& operator=(const TCoverageFormat1&); |
+ }; |
+ struct TRangeRecord { |
+ TT_uint16_t Start; |
+ TT_uint16_t End; |
+ TT_uint16_t StartCoverageIndex; |
+ TRangeRecord() : Start(0), End(0), StartCoverageIndex(0) {} |
+ friend bool operator>(const TRangeRecord& r1, const TRangeRecord& r2) { |
+ return r1.Start > r2.Start; |
+ } |
+ |
+ private: |
+ TRangeRecord(const TRangeRecord&); |
+ }; |
+ struct TCoverageFormat2 : public TCoverageFormatBase { |
+ TT_uint16_t RangeCount; |
+ struct TRangeRecord* RangeRecord; |
+ TCoverageFormat2() : RangeCount(0), RangeRecord(NULL) { |
+ CoverageFormat = 2; |
+ } |
+ ~TCoverageFormat2() { |
+ if (RangeRecord) { |
+ delete[] RangeRecord; |
+ } |
} |
- TT_int32_t GetInt32(FT_Bytes& p) const |
- { |
- TT_uint32_t ret = p[0] << 24 | p[1] << 16 | p[2] << 8 | p[3]; |
- p += 4; |
- return *(TT_int32_t*)&ret; |
+ |
+ private: |
+ TCoverageFormat2(const TCoverageFormat2&); |
+ TCoverageFormat2& operator=(const TCoverageFormat2&); |
+ }; |
+ struct TClassDefFormatBase { |
+ TT_uint16_t ClassFormat; |
+ TClassDefFormatBase() : ClassFormat(0) {} |
+ virtual ~TClassDefFormatBase() {} |
+ |
+ private: |
+ TClassDefFormatBase(const TClassDefFormatBase&); |
+ TClassDefFormatBase& operator=(const TClassDefFormatBase&); |
+ }; |
+ struct TClassDefFormat1 : public TClassDefFormatBase { |
+ TT_uint16_t StartGlyph; |
+ TT_uint16_t GlyphCount; |
+ TT_uint16_t* ClassValueArray; |
+ TClassDefFormat1() : StartGlyph(0), GlyphCount(0), ClassValueArray(NULL) { |
+ ClassFormat = 1; |
} |
- TT_uint32_t GetUInt32(FT_Bytes& p) const |
- { |
- TT_uint32_t ret = p[0] << 24 | p[1] << 16 | p[2] << 8 | p[3]; |
- p += 4; |
- return ret; |
+ ~TClassDefFormat1() { |
+ if (ClassValueArray) { |
+ delete[] ClassValueArray; |
+ } |
+ } |
+ |
+ private: |
+ TClassDefFormat1(const TClassDefFormat1&); |
+ TClassDefFormat1& operator=(const TClassDefFormat1&); |
+ }; |
+ struct TClassRangeRecord { |
+ TT_uint16_t Start; |
+ TT_uint16_t End; |
+ TT_uint16_t Class; |
+ TClassRangeRecord() : Start(0), End(0), Class(0) {} |
+ |
+ private: |
+ TClassRangeRecord(const TClassRangeRecord&); |
+ TClassRangeRecord& operator=(const TClassRangeRecord&); |
+ }; |
+ struct TClassDefFormat2 : public TClassDefFormatBase { |
+ TT_uint16_t ClassRangeCount; |
+ struct TClassRangeRecord* ClassRangeRecord; |
+ TClassDefFormat2() : ClassRangeCount(0), ClassRangeRecord(NULL) { |
+ ClassFormat = 2; |
} |
- CFX_CMapDWordToDWord m_featureMap; |
- FX_BOOL m_bFeautureMapLoad; |
- bool loaded; |
- struct tt_gsub_header header; |
- struct TScriptList ScriptList; |
- struct TFeatureList FeatureList; |
- struct TLookupList LookupList; |
+ ~TClassDefFormat2() { |
+ if (ClassRangeRecord) { |
+ delete[] ClassRangeRecord; |
+ } |
+ } |
+ |
+ private: |
+ TClassDefFormat2(const TClassDefFormat2&); |
+ TClassDefFormat2& operator=(const TClassDefFormat2&); |
+ }; |
+ struct TDevice { |
+ TT_uint16_t StartSize; |
+ TT_uint16_t EndSize; |
+ TT_uint16_t DeltaFormat; |
+ TDevice() : StartSize(0), EndSize(0), DeltaFormat(0) {} |
+ |
+ private: |
+ TDevice(const TDevice&); |
+ TDevice& operator=(const TDevice&); |
+ }; |
+ struct TSubTableBase { |
+ TT_uint16_t SubstFormat; |
+ TSubTableBase() : SubstFormat(0) {} |
+ virtual ~TSubTableBase() {} |
+ |
+ private: |
+ TSubTableBase(const TSubTableBase&); |
+ TSubTableBase& operator=(const TSubTableBase&); |
+ }; |
+ struct TSingleSubstFormat1 : public TSubTableBase { |
+ TCoverageFormatBase* Coverage; |
+ TT_int16_t DeltaGlyphID; |
+ TSingleSubstFormat1() : Coverage(NULL), DeltaGlyphID(0) { SubstFormat = 1; } |
+ ~TSingleSubstFormat1() { delete Coverage; } |
+ |
+ private: |
+ TSingleSubstFormat1(const TSingleSubstFormat1&); |
+ TSingleSubstFormat1& operator=(const TSingleSubstFormat1&); |
+ }; |
+ struct TSingleSubstFormat2 : public TSubTableBase { |
+ TCoverageFormatBase* Coverage; |
+ TT_uint16_t GlyphCount; |
+ TT_uint16_t* Substitute; |
+ TSingleSubstFormat2() : Coverage(NULL), GlyphCount(0), Substitute(NULL) { |
+ SubstFormat = 2; |
+ } |
+ ~TSingleSubstFormat2() { |
+ delete Coverage; |
+ delete[] Substitute; |
+ } |
+ |
+ private: |
+ TSingleSubstFormat2(const TSingleSubstFormat2&); |
+ TSingleSubstFormat2& operator=(const TSingleSubstFormat2&); |
+ }; |
+ struct TLookup { |
+ TT_uint16_t LookupType; |
+ TT_uint16_t LookupFlag; |
+ TT_uint16_t SubTableCount; |
+ struct TSubTableBase** SubTable; |
+ TLookup() |
+ : LookupType(0), LookupFlag(0), SubTableCount(0), SubTable(NULL) {} |
+ ~TLookup() { |
+ if (SubTableCount > 0 && SubTable != NULL) { |
+ for (int i = 0; i < SubTableCount; i++) { |
+ delete SubTable[i]; |
+ } |
+ delete[] SubTable; |
+ } |
+ } |
+ |
+ private: |
+ TLookup(const TLookup&); |
+ TLookup& operator=(const TLookup&); |
+ }; |
+ struct TLookupList { |
+ int LookupCount; |
+ struct TLookup* Lookup; |
+ TLookupList() : LookupCount(0), Lookup(NULL) {} |
+ ~TLookupList() { |
+ if (Lookup) { |
+ delete[] Lookup; |
+ } |
+ } |
+ |
+ private: |
+ TLookupList(const TLookupList&); |
+ TLookupList& operator=(const TLookupList&); |
+ }; |
+ bool Parse(FT_Bytes scriptlist, FT_Bytes featurelist, FT_Bytes lookuplist); |
+ void ParseScriptList(FT_Bytes raw, TScriptList* rec); |
+ void ParseScript(FT_Bytes raw, TScript* rec); |
+ void ParseLangSys(FT_Bytes raw, TLangSys* rec); |
+ void ParseFeatureList(FT_Bytes raw, TFeatureList* rec); |
+ void ParseFeature(FT_Bytes raw, TFeature* rec); |
+ void ParseLookupList(FT_Bytes raw, TLookupList* rec); |
+ void ParseLookup(FT_Bytes raw, TLookup* rec); |
+ void ParseCoverage(FT_Bytes raw, TCoverageFormatBase** rec); |
+ void ParseCoverageFormat1(FT_Bytes raw, TCoverageFormat1* rec); |
+ void ParseCoverageFormat2(FT_Bytes raw, TCoverageFormat2* rec); |
+ void ParseSingleSubst(FT_Bytes raw, TSubTableBase** rec); |
+ void ParseSingleSubstFormat1(FT_Bytes raw, TSingleSubstFormat1* rec); |
+ void ParseSingleSubstFormat2(FT_Bytes raw, TSingleSubstFormat2* rec); |
+ bool GetVerticalGlyphSub(TT_uint32_t glyphnum, |
+ TT_uint32_t* vglyphnum, |
+ struct TFeature* Feature); |
+ bool GetVerticalGlyphSub2(TT_uint32_t glyphnum, |
+ TT_uint32_t* vglyphnum, |
+ struct TLookup* Lookup); |
+ int GetCoverageIndex(struct TCoverageFormatBase* Coverage, TT_uint32_t g); |
+ TT_uint8_t GetUInt8(FT_Bytes& p) const { |
+ TT_uint8_t ret = p[0]; |
+ p += 1; |
+ return ret; |
+ } |
+ TT_int16_t GetInt16(FT_Bytes& p) const { |
+ TT_uint16_t ret = p[0] << 8 | p[1]; |
+ p += 2; |
+ return *(TT_int16_t*)&ret; |
+ } |
+ TT_uint16_t GetUInt16(FT_Bytes& p) const { |
+ TT_uint16_t ret = p[0] << 8 | p[1]; |
+ p += 2; |
+ return ret; |
+ } |
+ TT_int32_t GetInt32(FT_Bytes& p) const { |
+ TT_uint32_t ret = p[0] << 24 | p[1] << 16 | p[2] << 8 | p[3]; |
+ p += 4; |
+ return *(TT_int32_t*)&ret; |
+ } |
+ TT_uint32_t GetUInt32(FT_Bytes& p) const { |
+ TT_uint32_t ret = p[0] << 24 | p[1] << 16 | p[2] << 8 | p[3]; |
+ p += 4; |
+ return ret; |
+ } |
+ CFX_CMapDWordToDWord m_featureMap; |
+ FX_BOOL m_bFeautureMapLoad; |
+ bool loaded; |
+ struct tt_gsub_header header; |
+ struct TScriptList ScriptList; |
+ struct TFeatureList FeatureList; |
+ struct TLookupList LookupList; |
}; |
-class CFX_GSUBTable final : public IFX_GSUBTable |
-{ |
-public: |
- ~CFX_GSUBTable() override {} |
- virtual FX_BOOL GetVerticalGlyph(FX_DWORD glyphnum, FX_DWORD* vglyphnum) override; |
+class CFX_GSUBTable final : public IFX_GSUBTable { |
+ public: |
+ ~CFX_GSUBTable() override {} |
+ virtual FX_BOOL GetVerticalGlyph(FX_DWORD glyphnum, |
+ FX_DWORD* vglyphnum) override; |
- CFX_CTTGSUBTable m_GsubImp; |
+ CFX_CTTGSUBTable m_GsubImp; |
}; |
#endif // CORE_SRC_FPDFAPI_FPDF_FONT_TTGSUBTABLE_H_ |