Chromium Code Reviews| Index: core/fpdfapi/fpdf_font/ttgsubtable.h |
| diff --git a/core/fpdfapi/fpdf_font/ttgsubtable.h b/core/fpdfapi/fpdf_font/ttgsubtable.h |
| index 830e67af887d9ed8b1d84082c90d960bf889a546..d675490e2f181ce37e4d21d84731bebddf8d892e 100644 |
| --- a/core/fpdfapi/fpdf_font/ttgsubtable.h |
| +++ b/core/fpdfapi/fpdf_font/ttgsubtable.h |
| @@ -19,6 +19,7 @@ class CFX_GlyphMap { |
| public: |
| CFX_GlyphMap(); |
| ~CFX_GlyphMap(); |
| + |
| void SetAt(int key, int value); |
| FX_BOOL Lookup(int key, int& value); |
| @@ -28,12 +29,11 @@ class CFX_GlyphMap { |
| 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; } |
| + CFX_CTTGSUBTable(void); |
|
dsinclair
2016/06/13 20:24:08
nit: void not needed.
Lei Zhang
2016/06/13 20:44:28
We probably should do a sweep for these separately
Wei Li
2016/06/13 21:38:03
Done.
Wei Li
2016/06/13 21:38:03
Created bug 519 to track the efforts.
|
| + CFX_CTTGSUBTable(FT_Bytes gsub); |
|
dsinclair
2016/06/13 20:24:08
nit: explicit
Wei Li
2016/06/13 21:38:03
Done.
|
| + virtual ~CFX_CTTGSUBTable(); |
|
Lei Zhang
2016/06/13 20:44:28
Does this need to be virtual?
Wei Li
2016/06/13 21:38:03
Probably not needed since this class is not inheri
|
| + |
| + bool IsOk(void) const; |
| bool LoadGSUBTable(FT_Bytes gsub); |
| bool GetVerticalGlyph(uint32_t glyphnum, uint32_t* vglyphnum); |
| @@ -45,10 +45,6 @@ class CFX_CTTGSUBTable { |
| uint16_t LookupList; |
| }; |
| struct TLangSys { |
| - uint16_t LookupOrder; |
| - uint16_t ReqFeatureIndex; |
| - uint16_t FeatureCount; |
| - uint16_t* FeatureIndex; |
| TLangSys() |
| : LookupOrder(0), |
| ReqFeatureIndex(0), |
| @@ -56,75 +52,87 @@ class CFX_CTTGSUBTable { |
| FeatureIndex(nullptr) {} |
| ~TLangSys() { delete[] FeatureIndex; } |
| + uint16_t LookupOrder; |
| + uint16_t ReqFeatureIndex; |
| + uint16_t FeatureCount; |
| + uint16_t* FeatureIndex; |
| + |
| private: |
| TLangSys(const TLangSys&); |
| TLangSys& operator=(const TLangSys&); |
| }; |
| struct TLangSysRecord { |
| + TLangSysRecord() : LangSysTag(0) {} |
| + |
| uint32_t LangSysTag; |
| struct TLangSys LangSys; |
| - TLangSysRecord() : LangSysTag(0) {} |
| private: |
| TLangSysRecord(const TLangSysRecord&); |
| TLangSysRecord& operator=(const TLangSysRecord&); |
| }; |
| struct TScript { |
| + TScript() : DefaultLangSys(0), LangSysCount(0), LangSysRecord(nullptr) {} |
| + ~TScript() { delete[] LangSysRecord; } |
|
dsinclair
2016/06/13 20:24:08
Can we add a todo to go through and update these t
Wei Li
2016/06/13 21:38:03
Done.
|
| + |
| uint16_t DefaultLangSys; |
| uint16_t LangSysCount; |
| struct TLangSysRecord* LangSysRecord; |
| - TScript() : DefaultLangSys(0), LangSysCount(0), LangSysRecord(nullptr) {} |
| - ~TScript() { delete[] LangSysRecord; } |
| private: |
| TScript(const TScript&); |
| TScript& operator=(const TScript&); |
| }; |
| struct TScriptRecord { |
| + TScriptRecord() : ScriptTag(0) {} |
| + |
| uint32_t ScriptTag; |
| struct TScript Script; |
| - TScriptRecord() : ScriptTag(0) {} |
| private: |
| TScriptRecord(const TScriptRecord&); |
| TScriptRecord& operator=(const TScriptRecord&); |
| }; |
| struct TScriptList { |
| - uint16_t ScriptCount; |
| - struct TScriptRecord* ScriptRecord; |
| TScriptList() : ScriptCount(0), ScriptRecord(nullptr) {} |
| ~TScriptList() { delete[] ScriptRecord; } |
| + uint16_t ScriptCount; |
| + struct TScriptRecord* ScriptRecord; |
| + |
| private: |
| TScriptList(const TScriptList&); |
| TScriptList& operator=(const TScriptList&); |
| }; |
| struct TFeature { |
| + TFeature() : FeatureParams(0), LookupCount(0), LookupListIndex(nullptr) {} |
| + ~TFeature() { delete[] LookupListIndex; } |
| + |
| uint16_t FeatureParams; |
| int LookupCount; |
| uint16_t* LookupListIndex; |
| - TFeature() : FeatureParams(0), LookupCount(0), LookupListIndex(nullptr) {} |
| - ~TFeature() { delete[] LookupListIndex; } |
| private: |
| TFeature(const TFeature&); |
| TFeature& operator=(const TFeature&); |
| }; |
| struct TFeatureRecord { |
| + TFeatureRecord() : FeatureTag(0) {} |
| + |
| 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(nullptr) {} |
| ~TFeatureList() { delete[] FeatureRecord; } |
| + int FeatureCount; |
| + struct TFeatureRecord* FeatureRecord; |
| + |
| private: |
| TFeatureList(const TFeatureList&); |
| TFeatureList& operator=(const TFeatureList&); |
| @@ -138,173 +146,165 @@ class CFX_CTTGSUBTable { |
| LOOKUPFLAG_MarkAttachmentType = 0xFF00, |
| }; |
| struct TCoverageFormatBase { |
| - uint16_t CoverageFormat; |
| - CFX_GlyphMap m_glyphMap; |
| TCoverageFormatBase() : CoverageFormat(0) {} |
| virtual ~TCoverageFormatBase() {} |
| + uint16_t CoverageFormat; |
| + CFX_GlyphMap m_glyphMap; |
| + |
| private: |
| TCoverageFormatBase(const TCoverageFormatBase&); |
| TCoverageFormatBase& operator=(const TCoverageFormatBase&); |
| }; |
| struct TCoverageFormat1 : public TCoverageFormatBase { |
| + TCoverageFormat1(); |
| + ~TCoverageFormat1() override; |
| + |
| uint16_t GlyphCount; |
| uint16_t* GlyphArray; |
| - TCoverageFormat1() : GlyphCount(0), GlyphArray(nullptr) { |
| - CoverageFormat = 1; |
| - } |
| - ~TCoverageFormat1() override { delete[] GlyphArray; } |
| private: |
| TCoverageFormat1(const TCoverageFormat1&); |
| TCoverageFormat1& operator=(const TCoverageFormat1&); |
| }; |
| struct TRangeRecord { |
| - uint16_t Start; |
| - uint16_t End; |
| - uint16_t StartCoverageIndex; |
| - TRangeRecord() : Start(0), End(0), StartCoverageIndex(0) {} |
| + TRangeRecord(); |
| + |
| friend bool operator>(const TRangeRecord& r1, const TRangeRecord& r2) { |
| return r1.Start > r2.Start; |
| } |
| + uint16_t Start; |
| + uint16_t End; |
| + uint16_t StartCoverageIndex; |
| + |
| private: |
| TRangeRecord(const TRangeRecord&); |
| }; |
| struct TCoverageFormat2 : public TCoverageFormatBase { |
| + TCoverageFormat2(); |
| + ~TCoverageFormat2() override; |
| + |
| uint16_t RangeCount; |
| struct TRangeRecord* RangeRecord; |
| - TCoverageFormat2() : RangeCount(0), RangeRecord(nullptr) { |
| - CoverageFormat = 2; |
| - } |
| - ~TCoverageFormat2() override { delete[] RangeRecord; } |
| private: |
| TCoverageFormat2(const TCoverageFormat2&); |
| TCoverageFormat2& operator=(const TCoverageFormat2&); |
| }; |
| struct TClassDefFormatBase { |
| - uint16_t ClassFormat; |
| TClassDefFormatBase() : ClassFormat(0) {} |
| virtual ~TClassDefFormatBase() {} |
| + uint16_t ClassFormat; |
| + |
| private: |
| TClassDefFormatBase(const TClassDefFormatBase&); |
| TClassDefFormatBase& operator=(const TClassDefFormatBase&); |
| }; |
| struct TClassDefFormat1 : public TClassDefFormatBase { |
| + TClassDefFormat1(); |
| + ~TClassDefFormat1() override; |
| + |
| uint16_t StartGlyph; |
| uint16_t GlyphCount; |
| uint16_t* ClassValueArray; |
| - TClassDefFormat1() |
| - : StartGlyph(0), GlyphCount(0), ClassValueArray(nullptr) { |
| - ClassFormat = 1; |
| - } |
| - ~TClassDefFormat1() override { delete[] ClassValueArray; } |
| private: |
| TClassDefFormat1(const TClassDefFormat1&); |
| TClassDefFormat1& operator=(const TClassDefFormat1&); |
| }; |
| struct TClassRangeRecord { |
| + TClassRangeRecord() : Start(0), End(0), Class(0) {} |
| + |
| uint16_t Start; |
| uint16_t End; |
| uint16_t Class; |
| - TClassRangeRecord() : Start(0), End(0), Class(0) {} |
| private: |
| TClassRangeRecord(const TClassRangeRecord&); |
| TClassRangeRecord& operator=(const TClassRangeRecord&); |
| }; |
| struct TClassDefFormat2 : public TClassDefFormatBase { |
| + TClassDefFormat2(); |
| + ~TClassDefFormat2() override; |
| + |
| uint16_t ClassRangeCount; |
| struct TClassRangeRecord* ClassRangeRecord; |
| - TClassDefFormat2() : ClassRangeCount(0), ClassRangeRecord(nullptr) { |
| - ClassFormat = 2; |
| - } |
| - ~TClassDefFormat2() override { delete[] ClassRangeRecord; } |
| private: |
| TClassDefFormat2(const TClassDefFormat2&); |
| TClassDefFormat2& operator=(const TClassDefFormat2&); |
| }; |
| struct TDevice { |
| + TDevice() : StartSize(0), EndSize(0), DeltaFormat(0) {} |
| + |
| uint16_t StartSize; |
| uint16_t EndSize; |
| uint16_t DeltaFormat; |
| - TDevice() : StartSize(0), EndSize(0), DeltaFormat(0) {} |
| private: |
| TDevice(const TDevice&); |
| TDevice& operator=(const TDevice&); |
| }; |
| struct TSubTableBase { |
| - uint16_t SubstFormat; |
| TSubTableBase() : SubstFormat(0) {} |
| virtual ~TSubTableBase() {} |
| + uint16_t SubstFormat; |
| + |
| private: |
| TSubTableBase(const TSubTableBase&); |
| TSubTableBase& operator=(const TSubTableBase&); |
| }; |
| struct TSingleSubstFormat1 : public TSubTableBase { |
| + TSingleSubstFormat1(); |
| + ~TSingleSubstFormat1() override; |
| + |
| TCoverageFormatBase* Coverage; |
| int16_t DeltaGlyphID; |
| - TSingleSubstFormat1() : Coverage(nullptr), DeltaGlyphID(0) { |
| - SubstFormat = 1; |
| - } |
| - ~TSingleSubstFormat1() override { delete Coverage; } |
| private: |
| TSingleSubstFormat1(const TSingleSubstFormat1&); |
| TSingleSubstFormat1& operator=(const TSingleSubstFormat1&); |
| }; |
| struct TSingleSubstFormat2 : public TSubTableBase { |
| + TSingleSubstFormat2(); |
| + ~TSingleSubstFormat2() override; |
| + |
| TCoverageFormatBase* Coverage; |
| uint16_t GlyphCount; |
| uint16_t* Substitute; |
| - TSingleSubstFormat2() |
| - : Coverage(nullptr), GlyphCount(0), Substitute(nullptr) { |
| - SubstFormat = 2; |
| - } |
| - ~TSingleSubstFormat2() override { |
| - delete Coverage; |
| - delete[] Substitute; |
| - } |
| private: |
| TSingleSubstFormat2(const TSingleSubstFormat2&); |
| TSingleSubstFormat2& operator=(const TSingleSubstFormat2&); |
| }; |
| struct TLookup { |
| + TLookup(); |
| + ~TLookup(); |
| + |
| uint16_t LookupType; |
| uint16_t LookupFlag; |
| uint16_t SubTableCount; |
| struct TSubTableBase** SubTable; |
| - TLookup() |
| - : LookupType(0), LookupFlag(0), SubTableCount(0), SubTable(nullptr) {} |
| - ~TLookup() { |
| - if (SubTable) { |
| - 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(nullptr) {} |
| ~TLookupList() { delete[] Lookup; } |
| + int LookupCount; |
| + struct TLookup* 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); |
| @@ -319,38 +319,21 @@ class CFX_CTTGSUBTable { |
| void ParseSingleSubst(FT_Bytes raw, TSubTableBase** rec); |
| void ParseSingleSubstFormat1(FT_Bytes raw, TSingleSubstFormat1* rec); |
| void ParseSingleSubstFormat2(FT_Bytes raw, TSingleSubstFormat2* rec); |
| + |
| bool GetVerticalGlyphSub(uint32_t glyphnum, |
| uint32_t* vglyphnum, |
| - struct TFeature* Feature); |
| + struct TFeature* Feature) const; |
| bool GetVerticalGlyphSub2(uint32_t glyphnum, |
| uint32_t* vglyphnum, |
| - struct TLookup* Lookup); |
| - int GetCoverageIndex(struct TCoverageFormatBase* Coverage, uint32_t g); |
| - uint8_t GetUInt8(FT_Bytes& p) const { |
| - uint8_t ret = p[0]; |
| - p += 1; |
| - return ret; |
| - } |
| - int16_t GetInt16(FT_Bytes& p) const { |
| - uint16_t ret = p[0] << 8 | p[1]; |
| - p += 2; |
| - return *(int16_t*)&ret; |
| - } |
| - uint16_t GetUInt16(FT_Bytes& p) const { |
| - uint16_t ret = p[0] << 8 | p[1]; |
| - p += 2; |
| - return ret; |
| - } |
| - int32_t GetInt32(FT_Bytes& p) const { |
| - uint32_t ret = p[0] << 24 | p[1] << 16 | p[2] << 8 | p[3]; |
| - p += 4; |
| - return *(int32_t*)&ret; |
| - } |
| - uint32_t GetUInt32(FT_Bytes& p) const { |
| - uint32_t ret = p[0] << 24 | p[1] << 16 | p[2] << 8 | p[3]; |
| - p += 4; |
| - return ret; |
| - } |
| + struct TLookup* Lookup) const; |
| + int GetCoverageIndex(struct TCoverageFormatBase* Coverage, uint32_t g) const; |
| + |
| + uint8_t GetUInt8(FT_Bytes& p) const; |
| + int16_t GetInt16(FT_Bytes& p) const; |
| + uint16_t GetUInt16(FT_Bytes& p) const; |
| + int32_t GetInt32(FT_Bytes& p) const; |
| + uint32_t GetUInt32(FT_Bytes& p) const; |
| + |
| std::map<uint32_t, uint32_t> m_featureMap; |
| FX_BOOL m_bFeautureMapLoad; |
| bool loaded; |