summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--BUILD.gn1
-rw-r--r--fxjse/class.cpp5
-rw-r--r--fxjse/include/cfxjse_class.h5
-rw-r--r--fxjse/include/cfxjse_value.h3
-rw-r--r--fxjse/runtime.cpp9
-rw-r--r--fxjse/runtime.h18
-rw-r--r--fxjse/value.cpp4
-rw-r--r--xfa.gyp1
-rw-r--r--xfa/fde/cfde_txtedtengine.cpp25
-rw-r--r--xfa/fde/css/fde_css.cpp27
-rw-r--r--xfa/fde/css/fde_css.h24
-rw-r--r--xfa/fde/css/fde_csscache.cpp6
-rw-r--r--xfa/fde/css/fde_csscache.h6
-rw-r--r--xfa/fde/css/fde_cssdatatable.cpp72
-rw-r--r--xfa/fde/css/fde_cssdatatable.h76
-rw-r--r--xfa/fde/css/fde_cssstyleselector.cpp250
-rw-r--r--xfa/fde/css/fde_cssstyleselector.h276
-rw-r--r--xfa/fde/css/fde_cssstylesheet.cpp89
-rw-r--r--xfa/fde/css/fde_cssstylesheet.h61
-rw-r--r--xfa/fde/css/fde_csssyntax.h3
-rw-r--r--xfa/fde/fde_object.h2
-rw-r--r--xfa/fde/ifde_txtedtengine.h24
-rw-r--r--xfa/fde/tto/fde_textout.h6
-rw-r--r--xfa/fde/xml/fde_xml_imp.cpp109
-rw-r--r--xfa/fde/xml/fde_xml_imp.h44
-rw-r--r--xfa/fgas/crt/fgas_stream.cpp118
-rw-r--r--xfa/fgas/crt/fgas_utils.cpp22
-rw-r--r--xfa/fgas/crt/fgas_utils.h15
-rw-r--r--xfa/fgas/font/fgas_stdfontmgr.cpp4
-rw-r--r--xfa/fgas/font/fgas_stdfontmgr.h3
-rw-r--r--xfa/fgas/layout/fgas_rtfbreak.cpp46
-rw-r--r--xfa/fgas/layout/fgas_rtfbreak.h94
-rw-r--r--xfa/fgas/layout/fgas_textbreak.cpp46
-rw-r--r--xfa/fgas/layout/fgas_textbreak.h50
-rw-r--r--xfa/fxgraphics/cfx_graphics.cpp11
-rw-r--r--xfa/fxgraphics/include/cfx_graphics.h11
36 files changed, 1023 insertions, 543 deletions
diff --git a/BUILD.gn b/BUILD.gn
index e010ace1d4..7930c7c67b 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -919,6 +919,7 @@ if (pdf_enable_xfa) {
"xfa/fde/cfx_chariter.h",
"xfa/fde/cfx_wordbreak.cpp",
"xfa/fde/cfx_wordbreak.h",
+ "xfa/fde/css/fde_css.cpp",
"xfa/fde/css/fde_css.h",
"xfa/fde/css/fde_csscache.cpp",
"xfa/fde/css/fde_csscache.h",
diff --git a/fxjse/class.cpp b/fxjse/class.cpp
index bb133fba58..1dba7f073f 100644
--- a/fxjse/class.cpp
+++ b/fxjse/class.cpp
@@ -272,6 +272,11 @@ CFXJSE_Class* CFXJSE_Class::Create(
return pClass;
}
+CFXJSE_Class::CFXJSE_Class(CFXJSE_Context* lpContext)
+ : m_lpClassDefinition(nullptr), m_pContext(lpContext) {}
+
+CFXJSE_Class::~CFXJSE_Class() {}
+
CFXJSE_Class* CFXJSE_Class::GetClassFromContext(CFXJSE_Context* pContext,
const CFX_ByteStringC& szName) {
for (const auto& pClass : pContext->m_rgClasses) {
diff --git a/fxjse/include/cfxjse_class.h b/fxjse/include/cfxjse_class.h
index bb1db6d48c..b4953d21d3 100644
--- a/fxjse/include/cfxjse_class.h
+++ b/fxjse/include/cfxjse_class.h
@@ -16,6 +16,8 @@ class CFXJSE_Value;
class CFXJSE_Class {
public:
+ ~CFXJSE_Class();
+
static CFXJSE_Class* Create(CFXJSE_Context* pContext,
const FXJSE_CLASS_DESCRIPTOR* lpClassDefintion,
FX_BOOL bIsJSGlobal = FALSE);
@@ -30,8 +32,7 @@ class CFXJSE_Class {
v8::Global<v8::FunctionTemplate>& GetTemplate() { return m_hTemplate; }
protected:
- explicit CFXJSE_Class(CFXJSE_Context* lpContext)
- : m_lpClassDefinition(nullptr), m_pContext(lpContext) {}
+ explicit CFXJSE_Class(CFXJSE_Context* lpContext);
CFX_ByteString m_szClassName;
const FXJSE_CLASS_DESCRIPTOR* m_lpClassDefinition;
diff --git a/fxjse/include/cfxjse_value.h b/fxjse/include/cfxjse_value.h
index 74b4bab2e2..6e14d48f8f 100644
--- a/fxjse/include/cfxjse_value.h
+++ b/fxjse/include/cfxjse_value.h
@@ -11,7 +11,8 @@
class CFXJSE_Value {
public:
- CFXJSE_Value(v8::Isolate* pIsolate) : m_pIsolate(pIsolate) {}
+ explicit CFXJSE_Value(v8::Isolate* pIsolate);
+ ~CFXJSE_Value();
FX_BOOL IsUndefined() const {
if (m_hValue.IsEmpty()) {
diff --git a/fxjse/runtime.cpp b/fxjse/runtime.cpp
index bf171eef7e..29814bdc7e 100644
--- a/fxjse/runtime.cpp
+++ b/fxjse/runtime.cpp
@@ -69,6 +69,11 @@ void FXJSE_Runtime_Release(v8::Isolate* pIsolate) {
FXJSE_Runtime_DisposeCallback);
}
+CFXJSE_RuntimeData::CFXJSE_RuntimeData(v8::Isolate* pIsolate)
+ : m_pIsolate(pIsolate) {}
+
+CFXJSE_RuntimeData::~CFXJSE_RuntimeData() {}
+
CFXJSE_RuntimeData* CFXJSE_RuntimeData::Create(v8::Isolate* pIsolate) {
CFXJSE_RuntimeData* pRuntimeData = new CFXJSE_RuntimeData(pIsolate);
CFXJSE_ScopeUtil_IsolateHandle scope(pIsolate);
@@ -92,6 +97,10 @@ CFXJSE_RuntimeData* CFXJSE_RuntimeData::Get(v8::Isolate* pIsolate) {
CFXJSE_IsolateTracker* CFXJSE_IsolateTracker::g_pInstance = nullptr;
+CFXJSE_IsolateTracker::CFXJSE_IsolateTracker() {}
+
+CFXJSE_IsolateTracker::~CFXJSE_IsolateTracker() {}
+
void CFXJSE_IsolateTracker::Append(v8::Isolate* pIsolate) {
m_OwnedIsolates.push_back(pIsolate);
}
diff --git a/fxjse/runtime.h b/fxjse/runtime.h
index e3b4113a50..ff3be3a521 100644
--- a/fxjse/runtime.h
+++ b/fxjse/runtime.h
@@ -16,6 +16,8 @@ class CFXJSE_RuntimeList;
class CFXJSE_RuntimeData {
public:
+ ~CFXJSE_RuntimeData();
+
static CFXJSE_RuntimeData* Get(v8::Isolate* pIsolate);
v8::Isolate* m_pIsolate;
@@ -23,22 +25,28 @@ class CFXJSE_RuntimeData {
v8::Global<v8::Context> m_hRootContext;
protected:
+ explicit CFXJSE_RuntimeData(v8::Isolate* pIsolate);
+
static CFXJSE_RuntimeData* Create(v8::Isolate* pIsolate);
- CFXJSE_RuntimeData(v8::Isolate* pIsolate) : m_pIsolate(pIsolate) {}
- CFXJSE_RuntimeData();
- CFXJSE_RuntimeData(const CFXJSE_RuntimeData&);
- CFXJSE_RuntimeData& operator=(const CFXJSE_RuntimeData&);
+
+ private:
+ CFXJSE_RuntimeData(const CFXJSE_RuntimeData&) = delete;
+ CFXJSE_RuntimeData& operator=(const CFXJSE_RuntimeData&) = delete;
};
class CFXJSE_IsolateTracker {
public:
typedef void (*DisposeCallback)(v8::Isolate*, bool bOwnedIsolate);
- static CFXJSE_IsolateTracker* g_pInstance;
+
+ CFXJSE_IsolateTracker();
+ ~CFXJSE_IsolateTracker();
void Append(v8::Isolate* pIsolate);
void Remove(v8::Isolate* pIsolate, DisposeCallback lpfnDisposeCallback);
void RemoveAll(DisposeCallback lpfnDisposeCallback);
+ static CFXJSE_IsolateTracker* g_pInstance;
+
protected:
std::vector<v8::Isolate*> m_OwnedIsolates;
};
diff --git a/fxjse/value.cpp b/fxjse/value.cpp
index 743169dd7b..aba640210a 100644
--- a/fxjse/value.cpp
+++ b/fxjse/value.cpp
@@ -64,6 +64,10 @@ void FXJSE_ThrowMessage(const CFX_ByteStringC& utf8Message) {
pIsolate->ThrowException(hError);
}
+CFXJSE_Value::CFXJSE_Value(v8::Isolate* pIsolate) : m_pIsolate(pIsolate) {}
+
+CFXJSE_Value::~CFXJSE_Value() {}
+
CFXJSE_HostObject* CFXJSE_Value::ToHostObject(CFXJSE_Class* lpClass) const {
ASSERT(!m_hValue.IsEmpty());
diff --git a/xfa.gyp b/xfa.gyp
index da0492bf85..7cf0cf7051 100644
--- a/xfa.gyp
+++ b/xfa.gyp
@@ -68,6 +68,7 @@
"xfa/fde/cfx_chariter.h",
"xfa/fde/cfx_wordbreak.cpp",
"xfa/fde/cfx_wordbreak.h",
+ "xfa/fde/css/fde_css.cpp",
"xfa/fde/css/fde_css.h",
"xfa/fde/css/fde_csscache.cpp",
"xfa/fde/css/fde_csscache.h",
diff --git a/xfa/fde/cfde_txtedtengine.cpp b/xfa/fde/cfde_txtedtengine.cpp
index 11a6d5c3f7..8c950f5ab3 100644
--- a/xfa/fde/cfde_txtedtengine.cpp
+++ b/xfa/fde/cfde_txtedtengine.cpp
@@ -24,6 +24,31 @@ const uint32_t kUnicodeParagraphSeparator = 0x2029;
} // namespace
+FDE_TXTEDTPARAMS::FDE_TXTEDTPARAMS()
+ : fPlateWidth(0),
+ fPlateHeight(0),
+ nLineCount(0),
+ dwLayoutStyles(0),
+ dwAlignment(0),
+ dwMode(0),
+ pFont(nullptr),
+ fFontSize(10.0f),
+ dwFontColor(0xff000000),
+ fLineSpace(10.0f),
+ fTabWidth(36),
+ bTabEquidistant(FALSE),
+ wDefChar(0xFEFF),
+ wLineBreakChar('\n'),
+ nCharRotation(0),
+ nLineEnd(0),
+ nHorzScale(100),
+ fCharSpace(0),
+ pEventSink(nullptr) {}
+
+FDE_TXTEDT_TEXTCHANGE_INFO::FDE_TXTEDT_TEXTCHANGE_INFO() {}
+
+FDE_TXTEDT_TEXTCHANGE_INFO::~FDE_TXTEDT_TEXTCHANGE_INFO() {}
+
CFDE_TxtEdtEngine::CFDE_TxtEdtEngine()
: m_pTextBreak(nullptr),
m_nPageLineCount(20),
diff --git a/xfa/fde/css/fde_css.cpp b/xfa/fde/css/fde_css.cpp
new file mode 100644
index 0000000000..053b2774e6
--- /dev/null
+++ b/xfa/fde/css/fde_css.cpp
@@ -0,0 +1,27 @@
+// Copyright 2016 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fde/css/fde_css.h"
+
+FDE_CSSVALUETYPE IFDE_CSSPrimitiveValue::GetType() const {
+ return FDE_CSSVALUETYPE_Primitive;
+}
+
+FDE_CSSVALUETYPE IFDE_CSSValueList::GetType() const {
+ return FDE_CSSVALUETYPE_List;
+}
+
+FDE_CSSRULETYPE IFDE_CSSStyleRule::GetType() const {
+ return FDE_CSSRULETYPE_Style;
+}
+
+FDE_CSSRULETYPE IFDE_CSSMediaRule::GetType() const {
+ return FDE_CSSRULETYPE_Media;
+}
+
+FDE_CSSRULETYPE IFDE_CSSFontFaceRule::GetType() const {
+ return FDE_CSSRULETYPE_FontFace;
+}
diff --git a/xfa/fde/css/fde_css.h b/xfa/fde/css/fde_css.h
index 551f8f8962..a0ede3d9f7 100644
--- a/xfa/fde/css/fde_css.h
+++ b/xfa/fde/css/fde_css.h
@@ -690,9 +690,9 @@ class IFDE_CSSValue {
class IFDE_CSSPrimitiveValue : public IFDE_CSSValue {
public:
- virtual FDE_CSSVALUETYPE GetType() const {
- return FDE_CSSVALUETYPE_Primitive;
- }
+ // IFDE_CSSValue
+ FDE_CSSVALUETYPE GetType() const override;
+
virtual FDE_CSSPRIMITIVETYPE GetPrimitiveType() const = 0;
virtual FX_ARGB GetRGBColor() const = 0;
virtual FX_FLOAT GetFloat() const = 0;
@@ -705,7 +705,9 @@ class IFDE_CSSPrimitiveValue : public IFDE_CSSValue {
class IFDE_CSSValueList : public IFDE_CSSValue {
public:
- virtual FDE_CSSVALUETYPE GetType() const { return FDE_CSSVALUETYPE_List; }
+ // IFDE_CSSValue
+ FDE_CSSVALUETYPE GetType() const override;
+
virtual int32_t CountValues() const = 0;
virtual IFDE_CSSValue* GetValue(int32_t index) const = 0;
};
@@ -715,11 +717,14 @@ class IFDE_CSSRule {
virtual ~IFDE_CSSRule() {}
virtual FDE_CSSRULETYPE GetType() const = 0;
};
+
typedef CFX_MassArrayTemplate<IFDE_CSSRule*> CFDE_CSSRuleArray;
class IFDE_CSSStyleRule : public IFDE_CSSRule {
public:
- virtual FDE_CSSRULETYPE GetType() const { return FDE_CSSRULETYPE_Style; }
+ // IFDE_CSSValue
+ FDE_CSSRULETYPE GetType() const override;
+
virtual int32_t CountSelectorLists() const = 0;
virtual CFDE_CSSSelector* GetSelectorList(int32_t index) const = 0;
virtual CFDE_CSSDeclaration* GetDeclaration() = 0;
@@ -727,7 +732,9 @@ class IFDE_CSSStyleRule : public IFDE_CSSRule {
class IFDE_CSSMediaRule : public IFDE_CSSRule {
public:
- virtual FDE_CSSRULETYPE GetType() const { return FDE_CSSRULETYPE_Media; }
+ // IFDE_CSSValue
+ FDE_CSSRULETYPE GetType() const override;
+
virtual uint32_t GetMediaList() const = 0;
virtual int32_t CountRules() const = 0;
virtual IFDE_CSSRule* GetRule(int32_t index) = 0;
@@ -735,7 +742,9 @@ class IFDE_CSSMediaRule : public IFDE_CSSRule {
class IFDE_CSSFontFaceRule : public IFDE_CSSRule {
public:
- virtual FDE_CSSRULETYPE GetType() const { return FDE_CSSRULETYPE_FontFace; }
+ // IFDE_CSSValue
+ FDE_CSSRULETYPE GetType() const override;
+
virtual CFDE_CSSDeclaration* GetDeclaration() = 0;
};
@@ -760,6 +769,7 @@ class IFDE_CSSStyleSheet : public IFX_Retainable {
virtual int32_t CountRules() const = 0;
virtual IFDE_CSSRule* GetRule(int32_t index) = 0;
};
+
typedef CFX_ArrayTemplate<IFDE_CSSStyleSheet*> CFDE_CSSStyleSheetArray;
struct FDE_CSSLENGTH {
diff --git a/xfa/fde/css/fde_csscache.cpp b/xfa/fde/css/fde_csscache.cpp
index 76a893d2d1..a355a43c61 100644
--- a/xfa/fde/css/fde_csscache.cpp
+++ b/xfa/fde/css/fde_csscache.cpp
@@ -56,6 +56,12 @@ FDE_CSSTagCache::FDE_CSSTagCache(const FDE_CSSTagCache& it)
dwClassHashs.Copy(it.dwClassHashs);
}
+FDE_CSSTagCache::~FDE_CSSTagCache() {}
+
+CFDE_CSSAccelerator::CFDE_CSSAccelerator() {}
+
+CFDE_CSSAccelerator::~CFDE_CSSAccelerator() {}
+
void CFDE_CSSAccelerator::OnEnterTag(CXFA_CSSTagProvider* pTag) {
FDE_CSSTagCache* pTop = GetTopElement();
FDE_CSSTagCache item(pTop, pTag);
diff --git a/xfa/fde/css/fde_csscache.h b/xfa/fde/css/fde_csscache.h
index 28962e45eb..bab86ea880 100644
--- a/xfa/fde/css/fde_csscache.h
+++ b/xfa/fde/css/fde_csscache.h
@@ -15,7 +15,7 @@
class FDE_CSSCacheItem : public CFX_Target {
public:
explicit FDE_CSSCacheItem(IFDE_CSSStyleSheet* p);
- ~FDE_CSSCacheItem();
+ ~FDE_CSSCacheItem() override;
IFDE_CSSStyleSheet* pStylesheet;
uint32_t dwActivity;
@@ -25,6 +25,7 @@ class FDE_CSSTagCache : public CFX_Target {
public:
FDE_CSSTagCache(FDE_CSSTagCache* parent, CXFA_CSSTagProvider* tag);
FDE_CSSTagCache(const FDE_CSSTagCache& it);
+ ~FDE_CSSTagCache() override;
FDE_CSSTagCache* GetParent() const { return pParent; }
CXFA_CSSTagProvider* GetTag() const { return pTag; }
@@ -52,6 +53,9 @@ typedef CFX_ObjectStackTemplate<FDE_CSSTagCache> CFDE_CSSTagStack;
class CFDE_CSSAccelerator : public CFX_Target {
public:
+ CFDE_CSSAccelerator();
+ ~CFDE_CSSAccelerator() override;
+
void OnEnterTag(CXFA_CSSTagProvider* pTag);
void OnLeaveTag(CXFA_CSSTagProvider* pTag);
diff --git a/xfa/fde/css/fde_cssdatatable.cpp b/xfa/fde/css/fde_cssdatatable.cpp
index ac8c466932..c2767e7eb2 100644
--- a/xfa/fde/css/fde_cssdatatable.cpp
+++ b/xfa/fde/css/fde_cssdatatable.cpp
@@ -795,6 +795,14 @@ CFDE_CSSValueList::CFDE_CSSValueList(IFX_MemoryAllocator* pStaticStore,
m_ppList = (IFDE_CSSValue**)pStaticStore->Alloc(iByteCount);
FXSYS_memcpy(m_ppList, list.GetData(), iByteCount);
}
+
+int32_t CFDE_CSSValueList::CountValues() const {
+ return m_iCount;
+}
+
+IFDE_CSSValue* CFDE_CSSValueList::GetValue(int32_t index) const {
+ return m_ppList[index];
+}
FX_BOOL CFDE_CSSValueListParser::NextValue(FDE_CSSPRIMITIVETYPE& eType,
const FX_WCHAR*& pStart,
int32_t& iLength) {
@@ -896,3 +904,67 @@ int32_t CFDE_CSSValueListParser::SkipTo(FX_WCHAR wch,
}
return m_pCur - pStart;
}
+
+CFDE_CSSPrimitiveValue::CFDE_CSSPrimitiveValue(
+ const CFDE_CSSPrimitiveValue& src) = default;
+
+CFDE_CSSPrimitiveValue::CFDE_CSSPrimitiveValue(FX_ARGB color)
+ : m_eType(FDE_CSSPRIMITIVETYPE_RGB), m_dwColor(color) {}
+
+CFDE_CSSPrimitiveValue::CFDE_CSSPrimitiveValue(FDE_CSSPROPERTYVALUE eValue)
+ : m_eType(FDE_CSSPRIMITIVETYPE_Enum), m_eEnum(eValue) {}
+
+CFDE_CSSPrimitiveValue::CFDE_CSSPrimitiveValue(FDE_CSSPRIMITIVETYPE eType,
+ FX_FLOAT fValue)
+ : m_eType(eType), m_fNumber(fValue) {}
+
+CFDE_CSSPrimitiveValue::CFDE_CSSPrimitiveValue(FDE_CSSPRIMITIVETYPE eType,
+ const FX_WCHAR* pValue)
+ : m_eType(eType), m_pString(pValue) {
+ ASSERT(m_pString != nullptr);
+}
+
+CFDE_CSSPrimitiveValue::CFDE_CSSPrimitiveValue(CFDE_CSSFunction* pFunction)
+ : m_eType(FDE_CSSPRIMITIVETYPE_Function), m_pFunction(pFunction) {}
+
+FDE_CSSPRIMITIVETYPE CFDE_CSSPrimitiveValue::GetPrimitiveType() const {
+ return m_eType;
+}
+
+FX_ARGB CFDE_CSSPrimitiveValue::GetRGBColor() const {
+ ASSERT(m_eType == FDE_CSSPRIMITIVETYPE_RGB);
+ return m_dwColor;
+}
+
+FX_FLOAT CFDE_CSSPrimitiveValue::GetFloat() const {
+ ASSERT(m_eType >= FDE_CSSPRIMITIVETYPE_Number &&
+ m_eType <= FDE_CSSPRIMITIVETYPE_PC);
+ return m_fNumber;
+}
+
+const FX_WCHAR* CFDE_CSSPrimitiveValue::GetString(int32_t& iLength) const {
+ ASSERT(m_eType >= FDE_CSSPRIMITIVETYPE_String &&
+ m_eType <= FDE_CSSPRIMITIVETYPE_URI);
+ iLength = FXSYS_wcslen(m_pString);
+ return m_pString;
+}
+
+FDE_CSSPROPERTYVALUE CFDE_CSSPrimitiveValue::GetEnum() const {
+ ASSERT(m_eType == FDE_CSSPRIMITIVETYPE_Enum);
+ return m_eEnum;
+}
+
+const FX_WCHAR* CFDE_CSSPrimitiveValue::GetFuncName() const {
+ ASSERT(m_eType == FDE_CSSPRIMITIVETYPE_Function);
+ return m_pFunction->GetFuncName();
+}
+
+int32_t CFDE_CSSPrimitiveValue::CountArgs() const {
+ ASSERT(m_eType == FDE_CSSPRIMITIVETYPE_Function);
+ return m_pFunction->CountArgs();
+}
+
+IFDE_CSSValue* CFDE_CSSPrimitiveValue::GetArgs(int32_t index) const {
+ ASSERT(m_eType == FDE_CSSPRIMITIVETYPE_Function);
+ return m_pFunction->GetArgs(index);
+}
diff --git a/xfa/fde/css/fde_cssdatatable.h b/xfa/fde/css/fde_cssdatatable.h
index d61ff09ae7..252efdce50 100644
--- a/xfa/fde/css/fde_cssdatatable.h
+++ b/xfa/fde/css/fde_cssdatatable.h
@@ -27,56 +27,26 @@ class CFDE_CSSFunction : public CFX_Target {
IFDE_CSSValueList* m_pArgList;
const FX_WCHAR* m_pszFuncName;
};
+
class CFDE_CSSPrimitiveValue : public IFDE_CSSPrimitiveValue,
public CFX_Target {
public:
- CFDE_CSSPrimitiveValue(const CFDE_CSSPrimitiveValue& src) { *this = src; }
- CFDE_CSSPrimitiveValue(FX_ARGB color)
- : m_eType(FDE_CSSPRIMITIVETYPE_RGB), m_dwColor(color) {}
- CFDE_CSSPrimitiveValue(FDE_CSSPROPERTYVALUE eValue)
- : m_eType(FDE_CSSPRIMITIVETYPE_Enum), m_eEnum(eValue) {}
- CFDE_CSSPrimitiveValue(FDE_CSSPRIMITIVETYPE eType, FX_FLOAT fValue)
- : m_eType(eType), m_fNumber(fValue) {}
- CFDE_CSSPrimitiveValue(FDE_CSSPRIMITIVETYPE eType, const FX_WCHAR* pValue)
- : m_eType(eType), m_pString(pValue) {
- ASSERT(m_pString);
- }
- CFDE_CSSPrimitiveValue(CFDE_CSSFunction* pFunction)
- : m_eType(FDE_CSSPRIMITIVETYPE_Function), m_pFunction(pFunction) {}
-
- virtual FDE_CSSPRIMITIVETYPE GetPrimitiveType() const { return m_eType; }
-
- virtual FX_ARGB GetRGBColor() const {
- ASSERT(m_eType == FDE_CSSPRIMITIVETYPE_RGB);
- return m_dwColor;
- }
- virtual FX_FLOAT GetFloat() const {
- ASSERT(m_eType >= FDE_CSSPRIMITIVETYPE_Number &&
- m_eType <= FDE_CSSPRIMITIVETYPE_PC);
- return m_fNumber;
- }
- virtual const FX_WCHAR* GetString(int32_t& iLength) const {
- ASSERT(m_eType >= FDE_CSSPRIMITIVETYPE_String &&
- m_eType <= FDE_CSSPRIMITIVETYPE_URI);
- iLength = FXSYS_wcslen(m_pString);
- return m_pString;
- }
- virtual FDE_CSSPROPERTYVALUE GetEnum() const {
- ASSERT(m_eType == FDE_CSSPRIMITIVETYPE_Enum);
- return m_eEnum;
- }
- virtual const FX_WCHAR* GetFuncName() const {
- ASSERT(m_eType == FDE_CSSPRIMITIVETYPE_Function);
- return m_pFunction->GetFuncName();
- }
- virtual int32_t CountArgs() const {
- ASSERT(m_eType == FDE_CSSPRIMITIVETYPE_Function);
- return m_pFunction->CountArgs();
- }
- virtual IFDE_CSSValue* GetArgs(int32_t index) const {
- ASSERT(m_eType == FDE_CSSPRIMITIVETYPE_Function);
- return m_pFunction->GetArgs(index);
- }
+ explicit CFDE_CSSPrimitiveValue(FX_ARGB color);
+ explicit CFDE_CSSPrimitiveValue(FDE_CSSPROPERTYVALUE eValue);
+ explicit CFDE_CSSPrimitiveValue(CFDE_CSSFunction* pFunction);
+ CFDE_CSSPrimitiveValue(FDE_CSSPRIMITIVETYPE eType, FX_FLOAT fValue);
+ CFDE_CSSPrimitiveValue(FDE_CSSPRIMITIVETYPE eType, const FX_WCHAR* pValue);
+ CFDE_CSSPrimitiveValue(const CFDE_CSSPrimitiveValue& src);
+
+ // IFDE_CSSPrimitiveValue
+ FDE_CSSPRIMITIVETYPE GetPrimitiveType() const override;
+ FX_ARGB GetRGBColor() const override;
+ FX_FLOAT GetFloat() const override;
+ const FX_WCHAR* GetString(int32_t& iLength) const override;
+ FDE_CSSPROPERTYVALUE GetEnum() const override;
+ const FX_WCHAR* GetFuncName() const override;
+ int32_t CountArgs() const override;
+ IFDE_CSSValue* GetArgs(int32_t index) const override;
FDE_CSSPRIMITIVETYPE m_eType;
union {
@@ -87,21 +57,24 @@ class CFDE_CSSPrimitiveValue : public IFDE_CSSPrimitiveValue,
CFDE_CSSFunction* m_pFunction;
};
};
+
typedef CFX_ArrayTemplate<IFDE_CSSPrimitiveValue*> CFDE_CSSPrimitiveArray;
typedef CFX_ArrayTemplate<IFDE_CSSValue*> CFDE_CSSValueArray;
+
class CFDE_CSSValueList : public IFDE_CSSValueList, public CFX_Target {
public:
CFDE_CSSValueList(IFX_MemoryAllocator* pStaticStore,
const CFDE_CSSValueArray& list);
- virtual int32_t CountValues() const { return m_iCount; }
- virtual IFDE_CSSValue* GetValue(int32_t index) const {
- return m_ppList[index];
- }
+
+ // IFDE_CSSValueList
+ int32_t CountValues() const override;
+ IFDE_CSSValue* GetValue(int32_t index) const override;
protected:
IFDE_CSSValue** m_ppList;
int32_t m_iCount;
};
+
class CFDE_CSSValueListParser : public CFX_Target {
public:
CFDE_CSSValueListParser(const FX_WCHAR* psz, int32_t iLen, FX_WCHAR separator)
@@ -117,6 +90,7 @@ class CFDE_CSSValueListParser : public CFX_Target {
int32_t SkipTo(FX_WCHAR wch,
FX_BOOL bWSSeparator = FALSE,
FX_BOOL bBrContinue = FALSE);
+
const FX_WCHAR* m_pCur;
const FX_WCHAR* m_pEnd;
};
diff --git a/xfa/fde/css/fde_cssstyleselector.cpp b/xfa/fde/css/fde_cssstyleselector.cpp
index 007657d154..6082136fe0 100644
--- a/xfa/fde/css/fde_cssstyleselector.cpp
+++ b/xfa/fde/css/fde_cssstyleselector.cpp
@@ -74,6 +74,12 @@ void CFDE_CSSCounterStyle::DoUpdateIndex(IFDE_CSSValueList* pList) {
}
}
}
+
+CFDE_CSSCounterStyle::CFDE_CSSCounterStyle()
+ : m_pCounterInc(nullptr), m_pCounterReset(nullptr), m_bIndexDirty(FALSE) {}
+
+CFDE_CSSCounterStyle::~CFDE_CSSCounterStyle() {}
+
void CFDE_CSSCounterStyle::UpdateIndex() {
if (!m_bIndexDirty) {
return;
@@ -98,6 +104,7 @@ FDE_CSSRuleData::FDE_CSSRuleData(CFDE_CSSSelector* pSel,
}
}
}
+
void CFDE_CSSRuleCollection::Clear() {
m_IDRules.RemoveAll();
m_TagRules.RemoveAll();
@@ -106,6 +113,17 @@ void CFDE_CSSRuleCollection::Clear() {
m_pStaticStore = nullptr;
m_iSelectors = 0;
}
+
+CFDE_CSSRuleCollection::CFDE_CSSRuleCollection()
+ : m_pStaticStore(nullptr),
+ m_pUniversalRules(nullptr),
+ m_pPersudoRules(nullptr),
+ m_iSelectors(0) {}
+
+CFDE_CSSRuleCollection::~CFDE_CSSRuleCollection() {
+ Clear();
+}
+
void CFDE_CSSRuleCollection::AddRulesFrom(const CFDE_CSSStyleSheetArray& sheets,
uint32_t dwMediaList,
IFGAS_FontMgr* pFontMgr) {
@@ -120,6 +138,7 @@ void CFDE_CSSRuleCollection::AddRulesFrom(const CFDE_CSSStyleSheetArray& sheets,
}
}
}
+
void CFDE_CSSRuleCollection::AddRulesFrom(IFDE_CSSStyleSheet* pStyleSheet,
IFDE_CSSRule* pRule,
uint32_t dwMediaList,
@@ -179,6 +198,7 @@ void CFDE_CSSRuleCollection::AddRulesFrom(IFDE_CSSStyleSheet* pStyleSheet,
break;
}
}
+
void CFDE_CSSRuleCollection::AddRuleTo(CFX_MapPtrToPtr& map,
uint32_t dwKey,
CFDE_CSSSelector* pSel,
@@ -1783,3 +1803,233 @@ FDE_CSSFONTVARIANT CFDE_CSSStyleSelector::ToFontVariant(
return eValue == FDE_CSSPROPERTYVALUE_SmallCaps ? FDE_CSSFONTVARIANT_SmallCaps
: FDE_CSSFONTVARIANT_Normal;
}
+
+CFDE_CSSComputedStyle::CFDE_CSSComputedStyle(IFX_MemoryAllocator* pAlloc)
+ : m_dwRefCount(1), m_pAllocator(pAlloc) {}
+
+CFDE_CSSComputedStyle::~CFDE_CSSComputedStyle() {}
+
+uint32_t CFDE_CSSComputedStyle::Retain() {
+ return ++m_dwRefCount;
+}
+
+uint32_t CFDE_CSSComputedStyle::Release() {
+ uint32_t dwRefCount = --m_dwRefCount;
+ if (dwRefCount == 0) {
+ delete m_NonInheritedData.m_pCounterStyle;
+ FXTARGET_DeleteWith(CFDE_CSSComputedStyle, m_pAllocator, this);
+ }
+ return dwRefCount;
+}
+
+void CFDE_CSSComputedStyle::Reset() {
+ m_InheritedData.Reset();
+ m_NonInheritedData.Reset();
+}
+
+IFDE_CSSFontStyle* CFDE_CSSComputedStyle::GetFontStyles() {
+ return static_cast<IFDE_CSSFontStyle*>(this);
+}
+
+IFDE_CSSBoundaryStyle* CFDE_CSSComputedStyle::GetBoundaryStyles() {
+ return static_cast<IFDE_CSSBoundaryStyle*>(this);
+}
+
+IFDE_CSSPositionStyle* CFDE_CSSComputedStyle::GetPositionStyles() {
+ return static_cast<IFDE_CSSPositionStyle*>(this);
+}
+
+IFDE_CSSParagraphStyle* CFDE_CSSComputedStyle::GetParagraphStyles() {
+ return static_cast<IFDE_CSSParagraphStyle*>(this);
+}
+
+FX_BOOL CFDE_CSSComputedStyle::GetCustomStyle(const CFX_WideStringC& wsName,
+ CFX_WideString& wsValue) const {
+ for (int32_t i = m_CustomProperties.GetSize() - 2; i > -1; i -= 2) {
+ if (wsName == m_CustomProperties[i]) {
+ wsValue = m_CustomProperties[i + 1];
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+int32_t CFDE_CSSComputedStyle::CountFontFamilies() const {
+ return m_InheritedData.m_pFontFamily
+ ? m_InheritedData.m_pFontFamily->CountValues()
+ : 0;
+}
+
+const FX_WCHAR* CFDE_CSSComputedStyle::GetFontFamily(int32_t index) const {
+ return (static_cast<IFDE_CSSPrimitiveValue*>(
+ m_InheritedData.m_pFontFamily->GetValue(index)))
+ ->GetString(index);
+}
+
+uint16_t CFDE_CSSComputedStyle::GetFontWeight() const {
+ return m_InheritedData.m_wFontWeight;
+}
+
+FDE_CSSFONTVARIANT CFDE_CSSComputedStyle::GetFontVariant() const {
+ return static_cast<FDE_CSSFONTVARIANT>(m_InheritedData.m_eFontVariant);
+}
+
+FDE_CSSFONTSTYLE CFDE_CSSComputedStyle::GetFontStyle() const {
+ return static_cast<FDE_CSSFONTSTYLE>(m_InheritedData.m_eFontStyle);
+}
+
+FX_FLOAT CFDE_CSSComputedStyle::GetFontSize() const {
+ return m_InheritedData.m_fFontSize;
+}
+
+FX_ARGB CFDE_CSSComputedStyle::GetColor() const {
+ return m_InheritedData.m_dwFontColor;
+}
+
+void CFDE_CSSComputedStyle::SetFontWeight(uint16_t wFontWeight) {
+ m_InheritedData.m_wFontWeight = wFontWeight;
+}
+
+void CFDE_CSSComputedStyle::SetFontVariant(FDE_CSSFONTVARIANT eFontVariant) {
+ m_InheritedData.m_eFontVariant = eFontVariant;
+}
+
+void CFDE_CSSComputedStyle::SetFontStyle(FDE_CSSFONTSTYLE eFontStyle) {
+ m_InheritedData.m_eFontStyle = eFontStyle;
+}
+
+void CFDE_CSSComputedStyle::SetFontSize(FX_FLOAT fFontSize) {
+ m_InheritedData.m_fFontSize = fFontSize;
+}
+
+void CFDE_CSSComputedStyle::SetColor(FX_ARGB dwFontColor) {
+ m_InheritedData.m_dwFontColor = dwFontColor;
+}
+
+const FDE_CSSRECT* CFDE_CSSComputedStyle::GetBorderWidth() const {
+ return m_NonInheritedData.m_bHasBorder ? &(m_NonInheritedData.m_BorderWidth)
+ : nullptr;
+}
+
+const FDE_CSSRECT* CFDE_CSSComputedStyle::GetMarginWidth() const {
+ return m_NonInheritedData.m_bHasMargin ? &(m_NonInheritedData.m_MarginWidth)
+ : nullptr;
+}
+
+const FDE_CSSRECT* CFDE_CSSComputedStyle::GetPaddingWidth() const {
+ return m_NonInheritedData.m_bHasPadding ? &(m_NonInheritedData.m_PaddingWidth)
+ : nullptr;
+}
+
+void CFDE_CSSComputedStyle::SetMarginWidth(const FDE_CSSRECT& rect) {
+ m_NonInheritedData.m_MarginWidth = rect;
+ m_NonInheritedData.m_bHasMargin = TRUE;
+}
+
+void CFDE_CSSComputedStyle::SetPaddingWidth(const FDE_CSSRECT& rect) {
+ m_NonInheritedData.m_PaddingWidth = rect;
+ m_NonInheritedData.m_bHasPadding = TRUE;
+}
+
+FDE_CSSDISPLAY CFDE_CSSComputedStyle::GetDisplay() const {
+ return static_cast<FDE_CSSDISPLAY>(m_NonInheritedData.m_eDisplay);
+}
+
+FX_FLOAT CFDE_CSSComputedStyle::GetLineHeight() const {
+ return m_InheritedData.m_fLineHeight;
+}
+
+const FDE_CSSLENGTH& CFDE_CSSComputedStyle::GetTextIndent() const {
+ return m_InheritedData.m_TextIndent;
+}
+
+FDE_CSSTEXTALIGN CFDE_CSSComputedStyle::GetTextAlign() const {
+ return static_cast<FDE_CSSTEXTALIGN>(m_InheritedData.m_eTextAligh);
+}
+
+FDE_CSSVERTICALALIGN CFDE_CSSComputedStyle::GetVerticalAlign() const {
+ return static_cast<FDE_CSSVERTICALALIGN>(m_NonInheritedData.m_eVerticalAlign);
+}
+
+FX_FLOAT CFDE_CSSComputedStyle::GetNumberVerticalAlign() const {
+ return m_NonInheritedData.m_fVerticalAlign;
+}
+
+uint32_t CFDE_CSSComputedStyle::GetTextDecoration() const {
+ return m_NonInheritedData.m_dwTextDecoration;
+}
+
+const FDE_CSSLENGTH& CFDE_CSSComputedStyle::GetLetterSpacing() const {
+ return m_InheritedData.m_LetterSpacing;
+}
+
+void CFDE_CSSComputedStyle::SetLineHeight(FX_FLOAT fLineHeight) {
+ m_InheritedData.m_fLineHeight = fLineHeight;
+}
+
+void CFDE_CSSComputedStyle::SetTextIndent(const FDE_CSSLENGTH& textIndent) {
+ m_InheritedData.m_TextIndent = textIndent;
+}
+
+void CFDE_CSSComputedStyle::SetTextAlign(FDE_CSSTEXTALIGN eTextAlign) {
+ m_InheritedData.m_eTextAligh = eTextAlign;
+}
+
+void CFDE_CSSComputedStyle::SetNumberVerticalAlign(FX_FLOAT fAlign) {
+ m_NonInheritedData.m_eVerticalAlign = FDE_CSSVERTICALALIGN_Number,
+ m_NonInheritedData.m_fVerticalAlign = fAlign;
+}
+
+void CFDE_CSSComputedStyle::SetTextDecoration(uint32_t dwTextDecoration) {
+ m_NonInheritedData.m_dwTextDecoration = dwTextDecoration;
+}
+
+void CFDE_CSSComputedStyle::SetLetterSpacing(
+ const FDE_CSSLENGTH& letterSpacing) {
+ m_InheritedData.m_LetterSpacing = letterSpacing;
+}
+
+void CFDE_CSSComputedStyle::AddCustomStyle(const CFX_WideString& wsName,
+ const CFX_WideString& wsValue) {
+ m_CustomProperties.Add(wsName);
+ m_CustomProperties.Add(wsValue);
+}
+
+CFDE_CSSInheritedData::CFDE_CSSInheritedData() {
+ Reset();
+}
+
+void CFDE_CSSInheritedData::Reset() {
+ FXSYS_memset(this, 0, sizeof(CFDE_CSSInheritedData));
+ m_LetterSpacing.Set(FDE_CSSLENGTHUNIT_Normal);
+ m_WordSpacing.Set(FDE_CSSLENGTHUNIT_Normal);
+ m_TextIndent.Set(FDE_CSSLENGTHUNIT_Point, 0);
+ m_fFontSize = 12.0f;
+ m_fLineHeight = 14.0f;
+ m_wFontWeight = 400;
+ m_dwFontColor = 0xFF000000;
+ m_iWidows = 2;
+ m_bTextEmphasisColorCurrent = TRUE;
+ m_iOrphans = 2;
+}
+
+CFDE_CSSNonInheritedData::CFDE_CSSNonInheritedData() {
+ Reset();
+}
+
+void CFDE_CSSNonInheritedData::Reset() {
+ FXSYS_memset(this, 0, sizeof(CFDE_CSSNonInheritedData));
+ m_PaddingWidth.Set(FDE_CSSLENGTHUNIT_Point, 0);
+ m_MarginWidth = m_PaddingWidth;
+ m_BorderWidth = m_PaddingWidth;
+ m_MinBoxSize.Set(FDE_CSSLENGTHUNIT_Point, 0);
+ m_MaxBoxSize.Set(FDE_CSSLENGTHUNIT_None);
+ m_eDisplay = FDE_CSSDISPLAY_Inline;
+ m_fVerticalAlign = 0.0f;
+ m_ColumnCount.Set(FDE_CSSLENGTHUNIT_Auto);
+ m_ColumnGap.Set(FDE_CSSLENGTHUNIT_Normal);
+ m_bColumnRuleColorSame = TRUE;
+ m_ColumnWidth.Set(FDE_CSSLENGTHUNIT_Auto);
+ m_ColumnRuleWidth.Set(FDE_CSSLENGTHUNIT_Auto);
+ m_eTextCombine = FDE_CSSTEXTCOMBINE_None;
+}
diff --git a/xfa/fde/css/fde_cssstyleselector.h b/xfa/fde/css/fde_cssstyleselector.h
index 3af75a7b9e..042e989242 100644
--- a/xfa/fde/css/fde_cssstyleselector.h
+++ b/xfa/fde/css/fde_cssstyleselector.h
@@ -34,12 +34,8 @@ class FDE_CSSRuleData : public CFX_Target {
class CFDE_CSSRuleCollection : public CFX_Target {
public:
- CFDE_CSSRuleCollection()
- : m_pStaticStore(nullptr),
- m_pUniversalRules(nullptr),
- m_pPersudoRules(nullptr),
- m_iSelectors(0) {}
- ~CFDE_CSSRuleCollection() { Clear(); }
+ CFDE_CSSRuleCollection();
+ ~CFDE_CSSRuleCollection() override;
void AddRulesFrom(const CFDE_CSSStyleSheetArray& sheets,
uint32_t dwMediaList,
@@ -211,33 +207,29 @@ struct FDE_CSSCOUNTERDATA {
class CFDE_CSSCounterStyle {
public:
- CFDE_CSSCounterStyle() : m_pCounterInc(nullptr), m_pCounterReset(nullptr) {}
+ CFDE_CSSCounterStyle();
+ ~CFDE_CSSCounterStyle();
void SetCounterIncrementList(IFDE_CSSValueList* pList) {
m_pCounterInc = pList;
m_bIndexDirty = TRUE;
}
-
void SetCounterResetList(IFDE_CSSValueList* pList) {
m_pCounterReset = pList;
m_bIndexDirty = TRUE;
}
-
int32_t CountCounters() {
UpdateIndex();
return m_arrCounterData.GetSize();
}
-
FX_BOOL GetCounterIncrement(int32_t index, int32_t& iValue) {
UpdateIndex();
return m_arrCounterData.ElementAt(index).GetCounterIncrement(iValue);
}
-
FX_BOOL GetCounterReset(int32_t index, int32_t& iValue) {
UpdateIndex();
return m_arrCounterData.ElementAt(index).GetCounterReset(iValue);
}
-
const FX_WCHAR* GetCounterIdentifier(int32_t index) {
UpdateIndex();
return m_arrCounterData.ElementAt(index).m_pszIdent;
@@ -256,19 +248,9 @@ class CFDE_CSSCounterStyle {
class CFDE_CSSInheritedData {
public:
- void Reset() {
- FXSYS_memset(this, 0, sizeof(CFDE_CSSInheritedData));
- m_LetterSpacing.Set(FDE_CSSLENGTHUNIT_Normal);
- m_WordSpacing.Set(FDE_CSSLENGTHUNIT_Normal);
- m_TextIndent.Set(FDE_CSSLENGTHUNIT_Point, 0);
- m_fFontSize = 12.0f;
- m_fLineHeight = 14.0f;
- m_wFontWeight = 400;
- m_dwFontColor = 0xFF000000;
- m_iWidows = 2;
- m_bTextEmphasisColorCurrent = TRUE;
- m_iOrphans = 2;
- }
+ CFDE_CSSInheritedData();
+
+ void Reset();
const FX_WCHAR* m_pszListStyleImage;
FDE_CSSLENGTH m_LetterSpacing;
@@ -306,21 +288,9 @@ class CFDE_CSSInheritedData {
class CFDE_CSSNonInheritedData {
public:
- void Reset() {
- FXSYS_memset(this, 0, sizeof(CFDE_CSSNonInheritedData));
- m_MarginWidth = m_BorderWidth =
- m_PaddingWidth.Set(FDE_CSSLENGTHUNIT_Point, 0);
- m_MinBoxSize.Set(FDE_CSSLENGTHUNIT_Point, 0);
- m_MaxBoxSize.Set(FDE_CSSLENGTHUNIT_None);
- m_eDisplay = FDE_CSSDISPLAY_Inline;
- m_fVerticalAlign = 0.0f;
- m_ColumnCount.Set(FDE_CSSLENGTHUNIT_Auto);
- m_ColumnGap.Set(FDE_CSSLENGTHUNIT_Normal);
- m_bColumnRuleColorSame = TRUE;
- m_ColumnWidth.Set(FDE_CSSLENGTHUNIT_Auto);
- m_ColumnRuleWidth.Set(FDE_CSSLENGTHUNIT_Auto);
- m_eTextCombine = FDE_CSSTEXTCOMBINE_None;
- }
+ CFDE_CSSNonInheritedData();
+
+ void Reset();
IFDE_CSSValueList* m_pContentList;
CFDE_CSSCounterStyle* m_pCounterStyle;
@@ -385,196 +355,62 @@ class CFDE_CSSComputedStyle : public IFDE_CSSComputedStyle,
public IFDE_CSSParagraphStyle,
public CFX_Target {
public:
- CFDE_CSSComputedStyle(IFX_MemoryAllocator* pAlloc)
- : m_dwRefCount(1), m_pAllocator(pAlloc) {}
-
- ~CFDE_CSSComputedStyle() override {}
-
- // IFX_Retainable:
- uint32_t Retain() override { return ++m_dwRefCount; }
- uint32_t Release() override {
- uint32_t dwRefCount = --m_dwRefCount;
- if (dwRefCount == 0) {
- delete m_NonInheritedData.m_pCounterStyle;
- FXTARGET_DeleteWith(CFDE_CSSComputedStyle, m_pAllocator, this);
- }
- return dwRefCount;
- }
-
- // IFDE_CSSComputedStyle:
- void Reset() override {
- m_InheritedData.Reset();
- m_NonInheritedData.Reset();
- }
-
- IFDE_CSSFontStyle* GetFontStyles() override {
- return static_cast<IFDE_CSSFontStyle*>(this);
- }
-
- IFDE_CSSBoundaryStyle* GetBoundaryStyles() override {
- return static_cast<IFDE_CSSBoundaryStyle*>(this);
- }
-
- IFDE_CSSPositionStyle* GetPositionStyles() override {
- return static_cast<IFDE_CSSPositionStyle*>(this);
- }
-
- IFDE_CSSParagraphStyle* GetParagraphStyles() override {
- return static_cast<IFDE_CSSParagraphStyle*>(this);
- }
-
+ CFDE_CSSComputedStyle(IFX_MemoryAllocator* pAlloc);
+ ~CFDE_CSSComputedStyle() override;
+
+ // IFX_Retainable
+ uint32_t Retain() override;
+ uint32_t Release() override;
+
+ // IFDE_CSSComputedStyle
+ void Reset() override;
+ IFDE_CSSFontStyle* GetFontStyles() override;
+ IFDE_CSSBoundaryStyle* GetBoundaryStyles() override;
+ IFDE_CSSPositionStyle* GetPositionStyles() override;
+ IFDE_CSSParagraphStyle* GetParagraphStyles() override;
FX_BOOL GetCustomStyle(const CFX_WideStringC& wsName,
- CFX_WideString& wsValue) const override {
- for (int32_t i = m_CustomProperties.GetSize() - 2; i > -1; i -= 2) {
- if (wsName == m_CustomProperties[i]) {
- wsValue = m_CustomProperties[i + 1];
- return TRUE;
- }
- }
- return FALSE;
- }
+ CFX_WideString& wsValue) const override;
// IFDE_CSSFontStyle:
- int32_t CountFontFamilies() const override {
- return m_InheritedData.m_pFontFamily
- ? m_InheritedData.m_pFontFamily->CountValues()
- : 0;
- }
-
- const FX_WCHAR* GetFontFamily(int32_t index) const override {
- return (static_cast<IFDE_CSSPrimitiveValue*>(
- m_InheritedData.m_pFontFamily->GetValue(index)))
- ->GetString(index);
- }
-
- uint16_t GetFontWeight() const override {
- return m_InheritedData.m_wFontWeight;
- }
-
- FDE_CSSFONTVARIANT GetFontVariant() const override {
- return static_cast<FDE_CSSFONTVARIANT>(m_InheritedData.m_eFontVariant);
- }
-
- FDE_CSSFONTSTYLE GetFontStyle() const override {
- return static_cast<FDE_CSSFONTSTYLE>(m_InheritedData.m_eFontStyle);
- }
-
- FX_FLOAT GetFontSize() const override { return m_InheritedData.m_fFontSize; }
-
- FX_ARGB GetColor() const override { return m_InheritedData.m_dwFontColor; }
-
- void SetFontWeight(uint16_t wFontWeight) override {
- m_InheritedData.m_wFontWeight = wFontWeight;
- }
-
- void SetFontVariant(FDE_CSSFONTVARIANT eFontVariant) override {
- m_InheritedData.m_eFontVariant = eFontVariant;
- }
-
- void SetFontStyle(FDE_CSSFONTSTYLE eFontStyle) override {
- m_InheritedData.m_eFontStyle = eFontStyle;
- }
-
- void SetFontSize(FX_FLOAT fFontSize) override {
- m_InheritedData.m_fFontSize = fFontSize;
- }
-
- void SetColor(FX_ARGB dwFontColor) override {
- m_InheritedData.m_dwFontColor = dwFontColor;
- }
+ int32_t CountFontFamilies() const override;
+ const FX_WCHAR* GetFontFamily(int32_t index) const override;
+ uint16_t GetFontWeight() const override;
+ FDE_CSSFONTVARIANT GetFontVariant() const override;
+ FDE_CSSFONTSTYLE GetFontStyle() const override;
+ FX_FLOAT GetFontSize() const override;
+ FX_ARGB GetColor() const override;
+ void SetFontWeight(uint16_t wFontWeight) override;
+ void SetFontVariant(FDE_CSSFONTVARIANT eFontVariant) override;
+ void SetFontStyle(FDE_CSSFONTSTYLE eFontStyle) override;
+ void SetFontSize(FX_FLOAT fFontSize) override;
+ void SetColor(FX_ARGB dwFontColor) override;
// IFDE_CSSBoundaryStyle:
- const FDE_CSSRECT* GetBorderWidth() const override {
- return m_NonInheritedData.m_bHasBorder ? &(m_NonInheritedData.m_BorderWidth)
- : nullptr;
- }
-
- const FDE_CSSRECT* GetMarginWidth() const override {
- return m_NonInheritedData.m_bHasMargin ? &(m_NonInheritedData.m_MarginWidth)
- : nullptr;
- }
-
- const FDE_CSSRECT* GetPaddingWidth() const override {
- return m_NonInheritedData.m_bHasPadding
- ? &(m_NonInheritedData.m_PaddingWidth)
- : nullptr;
- }
-
- void SetMarginWidth(const FDE_CSSRECT& rect) override {
- m_NonInheritedData.m_MarginWidth = rect;
- m_NonInheritedData.m_bHasMargin = TRUE;
- }
-
- void SetPaddingWidth(const FDE_CSSRECT& rect) override {
- m_NonInheritedData.m_PaddingWidth = rect;
- m_NonInheritedData.m_bHasPadding = TRUE;
- }
+ const FDE_CSSRECT* GetBorderWidth() const override;
+ const FDE_CSSRECT* GetMarginWidth() const override;
+ const FDE_CSSRECT* GetPaddingWidth() const override;
+ void SetMarginWidth(const FDE_CSSRECT& rect) override;
+ void SetPaddingWidth(const FDE_CSSRECT& rect) override;
// IFDE_CSSPositionStyle:
- FDE_CSSDISPLAY GetDisplay() const override {
- return static_cast<FDE_CSSDISPLAY>(m_NonInheritedData.m_eDisplay);
- }
+ FDE_CSSDISPLAY GetDisplay() const override;
// IFDE_CSSParagraphStyle:
- FX_FLOAT GetLineHeight() const override {
- return m_InheritedData.m_fLineHeight;
- }
-
- const FDE_CSSLENGTH& GetTextIndent() const override {
- return m_InheritedData.m_TextIndent;
- }
-
- FDE_CSSTEXTALIGN GetTextAlign() const override {
- return static_cast<FDE_CSSTEXTALIGN>(m_InheritedData.m_eTextAligh);
- }
-
- FDE_CSSVERTICALALIGN GetVerticalAlign() const override {
- return static_cast<FDE_CSSVERTICALALIGN>(
- m_NonInheritedData.m_eVerticalAlign);
- }
-
- FX_FLOAT GetNumberVerticalAlign() const override {
- return m_NonInheritedData.m_fVerticalAlign;
- }
-
- uint32_t GetTextDecoration() const override {
- return m_NonInheritedData.m_dwTextDecoration;
- }
-
- const FDE_CSSLENGTH& GetLetterSpacing() const override {
- return m_InheritedData.m_LetterSpacing;
- }
-
- void SetLineHeight(FX_FLOAT fLineHeight) override {
- m_InheritedData.m_fLineHeight = fLineHeight;
- }
-
- void SetTextIndent(const FDE_CSSLENGTH& textIndent) override {
- m_InheritedData.m_TextIndent = textIndent;
- }
-
- void SetTextAlign(FDE_CSSTEXTALIGN eTextAlign) override {
- m_InheritedData.m_eTextAligh = eTextAlign;
- }
-
- void SetNumberVerticalAlign(FX_FLOAT fAlign) override {
- m_NonInheritedData.m_eVerticalAlign = FDE_CSSVERTICALALIGN_Number,
- m_NonInheritedData.m_fVerticalAlign = fAlign;
- }
-
- void SetTextDecoration(uint32_t dwTextDecoration) override {
- m_NonInheritedData.m_dwTextDecoration = dwTextDecoration;
- }
-
- void SetLetterSpacing(const FDE_CSSLENGTH& letterSpacing) override {
- m_InheritedData.m_LetterSpacing = letterSpacing;
- }
-
+ FX_FLOAT GetLineHeight() const override;
+ const FDE_CSSLENGTH& GetTextIndent() const override;
+ FDE_CSSTEXTALIGN GetTextAlign() const override;
+ FDE_CSSVERTICALALIGN GetVerticalAlign() const override;
+ FX_FLOAT GetNumberVerticalAlign() const override;
+ uint32_t GetTextDecoration() const override;
+ const FDE_CSSLENGTH& GetLetterSpacing() const override;
+ void SetLineHeight(FX_FLOAT fLineHeight) override;
+ void SetTextIndent(const FDE_CSSLENGTH& textIndent) override;
+ void SetTextAlign(FDE_CSSTEXTALIGN eTextAlign) override;
+ void SetNumberVerticalAlign(FX_FLOAT fAlign) override;
+ void SetTextDecoration(uint32_t dwTextDecoration) override;
+ void SetLetterSpacing(const FDE_CSSLENGTH& letterSpacing) override;
void AddCustomStyle(const CFX_WideString& wsName,
- const CFX_WideString& wsValue) {
- m_CustomProperties.Add(wsName);
- m_CustomProperties.Add(wsValue);
- }
+ const CFX_WideString& wsValue);
uint32_t m_dwRefCount;
IFX_MemoryAllocator* m_pAllocator;
diff --git a/xfa/fde/css/fde_cssstylesheet.cpp b/xfa/fde/css/fde_cssstylesheet.cpp
index 6708ca2e72..f0b071223f 100644
--- a/xfa/fde/css/fde_cssstylesheet.cpp
+++ b/xfa/fde/css/fde_cssstylesheet.cpp
@@ -59,6 +59,7 @@ IFDE_CSSStyleSheet* IFDE_CSSStyleSheet::LoadFromStream(
}
return pStyleSheet;
}
+
IFDE_CSSStyleSheet* IFDE_CSSStyleSheet::LoadFromBuffer(
const CFX_WideString& szUrl,
const FX_WCHAR* pBuffer,
@@ -72,6 +73,7 @@ IFDE_CSSStyleSheet* IFDE_CSSStyleSheet::LoadFromBuffer(
}
return pStyleSheet;
}
+
CFDE_CSSStyleSheet::CFDE_CSSStyleSheet(uint32_t dwMediaList)
: m_wCodePage(FX_CODEPAGE_UTF8),
m_wRefCount(1),
@@ -79,9 +81,11 @@ CFDE_CSSStyleSheet::CFDE_CSSStyleSheet(uint32_t dwMediaList)
m_pAllocator(nullptr) {
ASSERT(m_dwMediaList > 0);
}
+
CFDE_CSSStyleSheet::~CFDE_CSSStyleSheet() {
Reset();
}
+
void CFDE_CSSStyleSheet::Reset() {
for (int32_t i = m_RuleArray.GetSize() - 1; i >= 0; --i) {
IFDE_CSSRule* pRule = m_RuleArray.GetAt(i);
@@ -106,9 +110,11 @@ void CFDE_CSSStyleSheet::Reset() {
delete m_pAllocator;
m_pAllocator = nullptr;
}
+
uint32_t CFDE_CSSStyleSheet::Retain() {
return ++m_wRefCount;
}
+
uint32_t CFDE_CSSStyleSheet::Release() {
uint32_t dwRefCount = --m_wRefCount;
if (dwRefCount == 0) {
@@ -116,9 +122,24 @@ uint32_t CFDE_CSSStyleSheet::Release() {
}
return dwRefCount;
}
+
+FX_BOOL CFDE_CSSStyleSheet::GetUrl(CFX_WideString& szUrl) {
+ szUrl = m_szUrl;
+ return szUrl.GetLength() > 0;
+}
+
+uint32_t CFDE_CSSStyleSheet::GetMediaList() const {
+ return m_dwMediaList;
+}
+
+uint16_t CFDE_CSSStyleSheet::GetCodePage() const {
+ return m_wCodePage;
+}
+
int32_t CFDE_CSSStyleSheet::CountRules() const {
return m_RuleArray.GetSize();
}
+
IFDE_CSSRule* CFDE_CSSStyleSheet::GetRule(int32_t index) {
return m_RuleArray.GetAt(index);
}
@@ -178,6 +199,7 @@ FX_BOOL CFDE_CSSStyleSheet::LoadFromSyntax(CFDE_CSSSyntaxParser* pSyntax) {
m_StringCache.clear();
return eStatus != FDE_CSSSYNTAXSTATUS_Error;
}
+
FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadMediaRule(
CFDE_CSSSyntaxParser* pSyntax) {
uint32_t dwMediaList = 0;
@@ -216,6 +238,7 @@ FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadMediaRule(
}
}
}
+
FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadStyleRule(
CFDE_CSSSyntaxParser* pSyntax,
CFDE_CSSRuleArray& ruleArray) {
@@ -280,6 +303,7 @@ FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadStyleRule(
}
}
}
+
FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadFontFaceRule(
CFDE_CSSSyntaxParser* pSyntax,
CFDE_CSSRuleArray& ruleArray) {
@@ -318,6 +342,7 @@ FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadFontFaceRule(
}
}
}
+
FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadImportRule(
CFDE_CSSSyntaxParser* pSyntax) {
for (;;) {
@@ -330,10 +355,12 @@ FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadImportRule(
}
}
}
+
FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadPageRule(
CFDE_CSSSyntaxParser* pSyntax) {
return SkipRuleSet(pSyntax);
}
+
FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::SkipRuleSet(
CFDE_CSSSyntaxParser* pSyntax) {
for (;;) {
@@ -349,6 +376,21 @@ FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::SkipRuleSet(
}
}
}
+
+CFDE_CSSStyleRule::CFDE_CSSStyleRule() : m_ppSelector(NULL), m_iSelectors(0) {}
+
+int32_t CFDE_CSSStyleRule::CountSelectorLists() const {
+ return m_iSelectors;
+}
+
+CFDE_CSSSelector* CFDE_CSSStyleRule::GetSelectorList(int32_t index) const {
+ return m_ppSelector[index];
+}
+
+CFDE_CSSDeclaration* CFDE_CSSStyleRule::GetDeclaration() {
+ return &m_Declaration;
+}
+
void CFDE_CSSStyleRule::SetSelector(IFX_MemoryAllocator* pStaticStore,
const CFDE_CSSSelectorArray& list) {
ASSERT(!m_ppSelector);
@@ -359,6 +401,10 @@ void CFDE_CSSStyleRule::SetSelector(IFX_MemoryAllocator* pStaticStore,
m_ppSelector[i] = list.GetAt(i);
}
}
+
+CFDE_CSSMediaRule::CFDE_CSSMediaRule(uint32_t dwMediaList)
+ : m_dwMediaList(dwMediaList) {}
+
CFDE_CSSMediaRule::~CFDE_CSSMediaRule() {
for (int32_t i = m_RuleArray.GetSize() - 1; i >= 0; --i) {
IFDE_CSSRule* pRule = m_RuleArray.GetAt(i);
@@ -372,9 +418,23 @@ CFDE_CSSMediaRule::~CFDE_CSSMediaRule() {
}
}
}
-inline FX_BOOL FDE_IsCSSChar(FX_WCHAR wch) {
+
+uint32_t CFDE_CSSMediaRule::GetMediaList() const {
+ return m_dwMediaList;
+}
+
+int32_t CFDE_CSSMediaRule::CountRules() const {
+ return m_RuleArray.GetSize();
+}
+
+IFDE_CSSRule* CFDE_CSSMediaRule::GetRule(int32_t index) {
+ return m_RuleArray.GetAt(index);
+}
+
+FX_BOOL FDE_IsCSSChar(FX_WCHAR wch) {
return (wch >= 'a' && wch <= 'z') || (wch >= 'A' && wch <= 'Z');
}
+
int32_t FDE_GetCSSPersudoLen(const FX_WCHAR* psz, const FX_WCHAR* pEnd) {
ASSERT(*psz == ':');
const FX_WCHAR* pStart = psz;
@@ -388,6 +448,7 @@ int32_t FDE_GetCSSPersudoLen(const FX_WCHAR* psz, const FX_WCHAR* pEnd) {
}
return psz - pStart;
}
+
int32_t FDE_GetCSSNameLen(const FX_WCHAR* psz, const FX_WCHAR* pEnd) {
const FX_WCHAR* pStart = psz;
while (psz < pEnd) {
@@ -401,11 +462,33 @@ int32_t FDE_GetCSSNameLen(const FX_WCHAR* psz, const FX_WCHAR* pEnd) {
}
return psz - pStart;
}
+
+CFDE_CSSSelector::CFDE_CSSSelector(FDE_CSSSELECTORTYPE eType,
+ const FX_WCHAR* psz,
+ int32_t iLen,
+ bool bIgnoreCase)
+ : m_eType(eType),
+ m_dwHash(FX_HashCode_GetW(CFX_WideStringC(psz, iLen), bIgnoreCase)),
+ m_pNext(nullptr) {}
+
+FDE_CSSSELECTORTYPE CFDE_CSSSelector::GetType() const {
+ return m_eType;
+}
+
+uint32_t CFDE_CSSSelector::GetNameHash() const {
+ return m_dwHash;
+}
+
+CFDE_CSSSelector* CFDE_CSSSelector::GetNextSelector() const {
+ return m_pNext;
+}
+
CFDE_CSSSelector* CFDE_CSSSelector::FromString(
IFX_MemoryAllocator* pStaticStore,
const FX_WCHAR* psz,
int32_t iLen) {
ASSERT(pStaticStore && psz && iLen > 0);
+
const FX_WCHAR* pStart = psz;
const FX_WCHAR* pEnd = psz + iLen;
for (; psz < pEnd; ++psz) {
@@ -496,3 +579,7 @@ CFDE_CSSSelector* CFDE_CSSSelector::FromString(
pPersudoLast->SetNext(pFirst);
return pPersudoFirst;
}
+
+CFDE_CSSDeclaration* CFDE_CSSFontFaceRule::GetDeclaration() {
+ return &m_Declaration;
+}
diff --git a/xfa/fde/css/fde_cssstylesheet.h b/xfa/fde/css/fde_cssstylesheet.h
index 4c51579661..83eac993e7 100644
--- a/xfa/fde/css/fde_cssstylesheet.h
+++ b/xfa/fde/css/fde_cssstylesheet.h
@@ -19,42 +19,37 @@ class CFDE_CSSSelector : public CFX_Target {
CFDE_CSSSelector(FDE_CSSSELECTORTYPE eType,
const FX_WCHAR* psz,
int32_t iLen,
- bool bIgnoreCase)
- : m_eType(eType),
- m_dwHash(FX_HashCode_GetW(CFX_WideStringC(psz, iLen), bIgnoreCase)),
- m_pNext(nullptr) {}
- virtual FDE_CSSSELECTORTYPE GetType() const { return m_eType; }
+ bool bIgnoreCase);
- virtual uint32_t GetNameHash() const { return m_dwHash; }
+ virtual FDE_CSSSELECTORTYPE GetType() const;
+ virtual uint32_t GetNameHash() const;
+ virtual CFDE_CSSSelector* GetNextSelector() const;
- virtual CFDE_CSSSelector* GetNextSelector() const { return m_pNext; }
static CFDE_CSSSelector* FromString(IFX_MemoryAllocator* pStaticStore,
const FX_WCHAR* psz,
int32_t iLen);
+
void SetNext(CFDE_CSSSelector* pNext) { m_pNext = pNext; }
protected:
- static CFDE_CSSSelector* ParseSelector(IFX_MemoryAllocator* pStaticStore,
- const FX_WCHAR* psz,
- int32_t& iOff,
- int32_t iLen,
- FDE_CSSSELECTORTYPE eType);
void SetType(FDE_CSSSELECTORTYPE eType) { m_eType = eType; }
+
FDE_CSSSELECTORTYPE m_eType;
uint32_t m_dwHash;
CFDE_CSSSelector* m_pNext;
};
+
typedef CFX_ArrayTemplate<CFDE_CSSSelector*> CFDE_CSSSelectorArray;
class CFDE_CSSStyleRule : public IFDE_CSSStyleRule, public CFX_Target {
public:
- CFDE_CSSStyleRule() : m_ppSelector(nullptr), m_iSelectors(0) {}
- int32_t CountSelectorLists() const override { return m_iSelectors; }
- CFDE_CSSSelector* GetSelectorList(int32_t index) const override {
- return m_ppSelector[index];
- }
+ CFDE_CSSStyleRule();
+
+ // IFDE_CSSStyleRule
+ int32_t CountSelectorLists() const override;
+ CFDE_CSSSelector* GetSelectorList(int32_t index) const override;
+ CFDE_CSSDeclaration* GetDeclaration() override;
- CFDE_CSSDeclaration* GetDeclaration() override { return &m_Declaration; }
CFDE_CSSDeclaration& GetDeclImp() { return m_Declaration; }
void SetSelector(IFX_MemoryAllocator* pStaticStore,
const CFDE_CSSSelectorArray& list);
@@ -64,37 +59,42 @@ class CFDE_CSSStyleRule : public IFDE_CSSStyleRule, public CFX_Target {
CFDE_CSSSelector** m_ppSelector;
int32_t m_iSelectors;
};
+
class CFDE_CSSMediaRule : public IFDE_CSSMediaRule, public CFX_Target {
public:
- CFDE_CSSMediaRule(uint32_t dwMediaList) : m_dwMediaList(dwMediaList) {}
- ~CFDE_CSSMediaRule();
+ explicit CFDE_CSSMediaRule(uint32_t dwMediaList);
+ ~CFDE_CSSMediaRule() override;
- virtual uint32_t GetMediaList() const { return m_dwMediaList; }
+ // IFDE_CSSMediaRule
+ uint32_t GetMediaList() const override;
+ int32_t CountRules() const override;
+ IFDE_CSSRule* GetRule(int32_t index) override;
- virtual int32_t CountRules() const { return m_RuleArray.GetSize(); }
- virtual IFDE_CSSRule* GetRule(int32_t index) {
- return m_RuleArray.GetAt(index);
- }
CFDE_CSSRuleArray& GetArray() { return m_RuleArray; }
protected:
uint32_t m_dwMediaList;
CFDE_CSSRuleArray m_RuleArray;
};
+
class CFDE_CSSFontFaceRule : public IFDE_CSSFontFaceRule, public CFX_Target {
public:
- CFDE_CSSDeclaration* GetDeclaration() override { return &m_Declaration; }
+ // IFDE_CSSFontFaceRule
+ CFDE_CSSDeclaration* GetDeclaration() override;
+
CFDE_CSSDeclaration& GetDeclImp() { return m_Declaration; }
protected:
CFDE_CSSDeclaration m_Declaration;
};
+
#define FDE_CSSSWITCHDEFAULTS() \
case FDE_CSSSYNTAXSTATUS_EOS: \
return FDE_CSSSYNTAXSTATUS_EOS; \
case FDE_CSSSYNTAXSTATUS_Error: \
default: \
return FDE_CSSSYNTAXSTATUS_Error;
+
class CFDE_CSSStyleSheet : public IFDE_CSSStyleSheet, public CFX_Target {
public:
CFDE_CSSStyleSheet(uint32_t dwMediaList);
@@ -105,12 +105,9 @@ class CFDE_CSSStyleSheet : public IFDE_CSSStyleSheet, public CFX_Target {
uint32_t Release() override;
// IFDE_CSSStyleSheet:
- FX_BOOL GetUrl(CFX_WideString& szUrl) override {
- szUrl = m_szUrl;
- return szUrl.GetLength() > 0;
- }
- uint32_t GetMediaList() const override { return m_dwMediaList; }
- uint16_t GetCodePage() const override { return m_wCodePage; }
+ FX_BOOL GetUrl(CFX_WideString& szUrl) override;
+ uint32_t GetMediaList() const override;
+ uint16_t GetCodePage() const override;
int32_t CountRules() const override;
IFDE_CSSRule* GetRule(int32_t index) override;
diff --git a/xfa/fde/css/fde_csssyntax.h b/xfa/fde/css/fde_csssyntax.h
index a4e9249055..294dfcb540 100644
--- a/xfa/fde/css/fde_csssyntax.h
+++ b/xfa/fde/css/fde_csssyntax.h
@@ -14,7 +14,8 @@
class CFDE_CSSTextBuf : public CFX_Target {
public:
CFDE_CSSTextBuf();
- ~CFDE_CSSTextBuf();
+ ~CFDE_CSSTextBuf() override;
+
FX_BOOL AttachBuffer(const FX_WCHAR* pBuffer, int32_t iBufLen);
FX_BOOL EstimateSize(int32_t iAllocSize);
int32_t LoadFromStream(IFX_Stream* pTxtStream,
diff --git a/xfa/fde/fde_object.h b/xfa/fde/fde_object.h
index 7df5de2638..2af18ec3b7 100644
--- a/xfa/fde/fde_object.h
+++ b/xfa/fde/fde_object.h
@@ -26,7 +26,7 @@ class CFDE_Brush : public CFX_Target {
class CFDE_Pen : public CFX_Target {
public:
CFDE_Pen() : m_Color(0) {}
- ~CFDE_Pen() {}
+ ~CFDE_Pen() override {}
FX_ARGB GetColor() const { return m_Color; }
void SetColor(FX_ARGB color) { m_Color = color; }
diff --git a/xfa/fde/ifde_txtedtengine.h b/xfa/fde/ifde_txtedtengine.h
index 8ecf46e5c8..cf760035cf 100644
--- a/xfa/fde/ifde_txtedtengine.h
+++ b/xfa/fde/ifde_txtedtengine.h
@@ -82,26 +82,7 @@ enum FDE_TXTEDIT_LINEEND {
};
struct FDE_TXTEDTPARAMS {
- FDE_TXTEDTPARAMS()
- : fPlateWidth(0),
- fPlateHeight(0),
- nLineCount(0),
- dwLayoutStyles(0),
- dwAlignment(0),
- dwMode(0),
- pFont(nullptr),
- fFontSize(10.0f),
- dwFontColor(0xff000000),
- fLineSpace(10.0f),
- fTabWidth(36),
- bTabEquidistant(FALSE),
- wDefChar(0xFEFF),
- wLineBreakChar('\n'),
- nCharRotation(0),
- nLineEnd(0),
- nHorzScale(100),
- fCharSpace(0),
- pEventSink(nullptr) {}
+ FDE_TXTEDTPARAMS();
FX_FLOAT fPlateWidth;
FX_FLOAT fPlateHeight;
@@ -131,6 +112,9 @@ enum FDE_TXTEDT_TEXTCHANGE_TYPE {
};
struct FDE_TXTEDT_TEXTCHANGE_INFO {
+ FDE_TXTEDT_TEXTCHANGE_INFO();
+ ~FDE_TXTEDT_TEXTCHANGE_INFO();
+
int32_t nChangeType;
CFX_WideString wsInsert;
CFX_WideString wsDelete;
diff --git a/xfa/fde/tto/fde_textout.h b/xfa/fde/tto/fde_textout.h
index 4959f2bc69..14ca5e19bb 100644
--- a/xfa/fde/tto/fde_textout.h
+++ b/xfa/fde/tto/fde_textout.h
@@ -10,10 +10,10 @@
#include <memory>
#include "core/fxge/include/fx_dib.h"
+#include "core/fxge/include/fx_ge.h"
#include "xfa/fde/fde_object.h"
#include "xfa/fgas/crt/fgas_utils.h"
#include "xfa/fgas/font/fgas_font.h"
-#include "xfa/fgas/layout/fgas_textbreak.h"
#define FDE_TTOSTYLE_Underline 0x0001
#define FDE_TTOSTYLE_Strikeout 0x0002
@@ -42,6 +42,7 @@
class CFDE_RenderDevice;
class CFX_TxtBreak;
+struct FX_TXTRUN;
struct FDE_TTOPIECE {
int32_t iStartChar;
@@ -55,7 +56,8 @@ class CFDE_TTOLine : public CFX_Target {
public:
CFDE_TTOLine();
CFDE_TTOLine(const CFDE_TTOLine& ttoLine);
- ~CFDE_TTOLine();
+ ~CFDE_TTOLine() override;
+
int32_t AddPiece(int32_t index, const FDE_TTOPIECE& ttoPiece);
int32_t GetSize() const;
FDE_TTOPIECE* GetPtrAt(int32_t index);
diff --git a/xfa/fde/xml/fde_xml_imp.cpp b/xfa/fde/xml/fde_xml_imp.cpp
index b71d8b8f4f..da7e0a2fca 100644
--- a/xfa/fde/xml/fde_xml_imp.cpp
+++ b/xfa/fde/xml/fde_xml_imp.cpp
@@ -80,6 +80,14 @@ CFDE_XMLNode::CFDE_XMLNode()
m_pPrior(nullptr),
m_pNext(nullptr) {}
+void CFDE_XMLNode::Release() {
+ delete this;
+}
+
+FDE_XMLNODETYPE CFDE_XMLNode::GetType() const {
+ return FDE_XMLNODE_Unknown;
+}
+
CFDE_XMLNode::~CFDE_XMLNode() {
DeleteChildren();
}
@@ -93,6 +101,7 @@ void CFDE_XMLNode::DeleteChildren() {
}
m_pChild = nullptr;
}
+
int32_t CFDE_XMLNode::CountChildNodes() const {
int32_t iCount = 0;
CFDE_XMLNode* pChild = m_pChild;
@@ -102,6 +111,7 @@ int32_t CFDE_XMLNode::CountChildNodes() const {
}
return iCount;
}
+
CFDE_XMLNode* CFDE_XMLNode::GetChildNode(int32_t index) const {
CFDE_XMLNode* pChild = m_pChild;
while (pChild) {
@@ -113,6 +123,7 @@ CFDE_XMLNode* CFDE_XMLNode::GetChildNode(int32_t index) const {
}
return nullptr;
}
+
int32_t CFDE_XMLNode::GetChildNodeIndex(CFDE_XMLNode* pNode) const {
int32_t index = 0;
CFDE_XMLNode* pChild = m_pChild;
@@ -125,6 +136,7 @@ int32_t CFDE_XMLNode::GetChildNodeIndex(CFDE_XMLNode* pNode) const {
}
return -1;
}
+
CFDE_XMLNode* CFDE_XMLNode::GetPath(const FX_WCHAR* pPath,
int32_t iLength,
FX_BOOL bQualifiedName) const {
@@ -182,6 +194,7 @@ CFDE_XMLNode* CFDE_XMLNode::GetPath(const FX_WCHAR* pPath,
return pFind;
return pFind->GetPath(pStart, iLength, bQualifiedName);
}
+
int32_t CFDE_XMLNode::InsertChildNode(CFDE_XMLNode* pNode, int32_t index) {
pNode->m_pParent = this;
if (!m_pChild) {
@@ -209,6 +222,7 @@ int32_t CFDE_XMLNode::InsertChildNode(CFDE_XMLNode* pNode, int32_t index) {
pFind->m_pNext = pNode;
return iCount;
}
+
void CFDE_XMLNode::RemoveChildNode(CFDE_XMLNode* pNode) {
ASSERT(m_pChild && pNode);
if (m_pChild == pNode) {
@@ -352,6 +366,7 @@ FX_BOOL CFDE_XMLNode::InsertNodeItem(CFDE_XMLNode::NodeItem eItem,
return FALSE;
}
}
+
CFDE_XMLNode* CFDE_XMLNode::RemoveNodeItem(CFDE_XMLNode::NodeItem eItem) {
CFDE_XMLNode* pNode = nullptr;
switch (eItem) {
@@ -372,9 +387,11 @@ CFDE_XMLNode* CFDE_XMLNode::RemoveNodeItem(CFDE_XMLNode::NodeItem eItem) {
}
return pNode;
}
+
CFDE_XMLNode* CFDE_XMLNode::Clone(FX_BOOL bRecursive) {
return nullptr;
}
+
void CFDE_XMLNode::SaveXMLNode(IFX_Stream* pXMLStream) {
CFDE_XMLNode* pNode = (CFDE_XMLNode*)this;
switch (pNode->GetType()) {
@@ -484,6 +501,7 @@ void CFDE_XMLNode::SaveXMLNode(IFX_Stream* pXMLStream) {
break;
}
}
+
void CFDE_XMLNode::CloneChildren(CFDE_XMLNode* pClone) {
if (!m_pChild) {
return;
@@ -504,6 +522,15 @@ CFDE_XMLInstruction::CFDE_XMLInstruction(const CFX_WideString& wsTarget)
: m_wsTarget(wsTarget) {
ASSERT(m_wsTarget.GetLength() > 0);
}
+
+void CFDE_XMLInstruction::Release() {
+ delete this;
+}
+
+FDE_XMLNODETYPE CFDE_XMLInstruction::GetType() const {
+ return FDE_XMLNODE_Instruction;
+}
+
CFDE_XMLNode* CFDE_XMLInstruction::Clone(FX_BOOL bRecursive) {
CFDE_XMLInstruction* pClone = new CFDE_XMLInstruction(m_wsTarget);
if (!pClone) {
@@ -516,9 +543,11 @@ CFDE_XMLNode* CFDE_XMLInstruction::Clone(FX_BOOL bRecursive) {
}
return pClone;
}
+
int32_t CFDE_XMLInstruction::CountAttributes() const {
return m_Attributes.GetSize() / 2;
}
+
FX_BOOL CFDE_XMLInstruction::GetAttribute(int32_t index,
CFX_WideString& wsAttriName,
CFX_WideString& wsAttriValue) const {
@@ -534,6 +563,7 @@ FX_BOOL CFDE_XMLInstruction::GetAttribute(int32_t index,
}
return FALSE;
}
+
FX_BOOL CFDE_XMLInstruction::HasAttribute(const FX_WCHAR* pwsAttriName) const {
int32_t iCount = m_Attributes.GetSize();
for (int32_t i = 0; i < iCount; i += 2) {
@@ -543,6 +573,7 @@ FX_BOOL CFDE_XMLInstruction::HasAttribute(const FX_WCHAR* pwsAttriName) const {
}
return FALSE;
}
+
void CFDE_XMLInstruction::GetString(const FX_WCHAR* pwsAttriName,
CFX_WideString& wsAttriValue,
const FX_WCHAR* pwsDefValue) const {
@@ -555,6 +586,7 @@ void CFDE_XMLInstruction::GetString(const FX_WCHAR* pwsAttriName,
}
wsAttriValue = pwsDefValue;
}
+
void CFDE_XMLInstruction::SetString(const CFX_WideString& wsAttriName,
const CFX_WideString& wsAttriValue) {
ASSERT(wsAttriName.GetLength() > 0);
@@ -569,6 +601,7 @@ void CFDE_XMLInstruction::SetString(const CFX_WideString& wsAttriName,
m_Attributes.Add(wsAttriName);
m_Attributes.Add(wsAttriValue);
}
+
int32_t CFDE_XMLInstruction::GetInteger(const FX_WCHAR* pwsAttriName,
int32_t iDefValue) const {
int32_t iCount = m_Attributes.GetSize();
@@ -579,12 +612,14 @@ int32_t CFDE_XMLInstruction::GetInteger(const FX_WCHAR* pwsAttriName,
}
return iDefValue;
}
+
void CFDE_XMLInstruction::SetInteger(const FX_WCHAR* pwsAttriName,
int32_t iAttriValue) {
CFX_WideString wsValue;
wsValue.Format(L"%d", iAttriValue);
SetString(pwsAttriName, wsValue);
}
+
FX_FLOAT CFDE_XMLInstruction::GetFloat(const FX_WCHAR* pwsAttriName,
FX_FLOAT fDefValue) const {
int32_t iCount = m_Attributes.GetSize();
@@ -595,12 +630,14 @@ FX_FLOAT CFDE_XMLInstruction::GetFloat(const FX_WCHAR* pwsAttriName,
}
return fDefValue;
}
+
void CFDE_XMLInstruction::SetFloat(const FX_WCHAR* pwsAttriName,
FX_FLOAT fAttriValue) {
CFX_WideString wsValue;
wsValue.Format(L"%f", fAttriValue);
SetString(pwsAttriName, wsValue);
}
+
void CFDE_XMLInstruction::RemoveAttribute(const FX_WCHAR* pwsAttriName) {
int32_t iCount = m_Attributes.GetSize();
for (int32_t i = 0; i < iCount; i += 2) {
@@ -611,9 +648,11 @@ void CFDE_XMLInstruction::RemoveAttribute(const FX_WCHAR* pwsAttriName) {
}
}
}
+
int32_t CFDE_XMLInstruction::CountData() const {
return m_TargetData.GetSize();
}
+
FX_BOOL CFDE_XMLInstruction::GetData(int32_t index,
CFX_WideString& wsData) const {
if (index < 0 || index >= m_TargetData.GetSize()) {
@@ -622,20 +661,34 @@ FX_BOOL CFDE_XMLInstruction::GetData(int32_t index,
wsData = m_TargetData[index];
return TRUE;
}
+
void CFDE_XMLInstruction::AppendData(const CFX_WideString& wsData) {
m_TargetData.Add(wsData);
}
+
void CFDE_XMLInstruction::RemoveData(int32_t index) {
m_TargetData.RemoveAt(index);
}
+CFDE_XMLInstruction::~CFDE_XMLInstruction() {}
+
CFDE_XMLElement::CFDE_XMLElement(const CFX_WideString& wsTag)
: CFDE_XMLNode(), m_wsTag(wsTag), m_Attributes() {
ASSERT(m_wsTag.GetLength() > 0);
}
+
CFDE_XMLElement::~CFDE_XMLElement() {
m_Attributes.RemoveAll();
}
+
+void CFDE_XMLElement::Release() {
+ delete this;
+}
+
+FDE_XMLNODETYPE CFDE_XMLElement::GetType() const {
+ return FDE_XMLNODE_Element;
+}
+
CFDE_XMLNode* CFDE_XMLElement::Clone(FX_BOOL bRecursive) {
CFDE_XMLElement* pClone = new CFDE_XMLElement(m_wsTag);
if (!pClone) {
@@ -661,9 +714,11 @@ CFDE_XMLNode* CFDE_XMLElement::Clone(FX_BOOL bRecursive) {
}
return pClone;
}
+
void CFDE_XMLElement::GetTagName(CFX_WideString& wsTag) const {
wsTag = m_wsTag;
}
+
void CFDE_XMLElement::GetLocalTagName(CFX_WideString& wsTag) const {
FX_STRSIZE iFind = m_wsTag.Find(L':', 0);
if (iFind < 0) {
@@ -672,6 +727,7 @@ void CFDE_XMLElement::GetLocalTagName(CFX_WideString& wsTag) const {
wsTag = m_wsTag.Right(m_wsTag.GetLength() - iFind - 1);
}
}
+
void CFDE_XMLElement::GetNamespacePrefix(CFX_WideString& wsPrefix) const {
FX_STRSIZE iFind = m_wsTag.Find(L':', 0);
if (iFind < 0) {
@@ -680,6 +736,7 @@ void CFDE_XMLElement::GetNamespacePrefix(CFX_WideString& wsPrefix) const {
wsPrefix = m_wsTag.Left(iFind);
}
}
+
void CFDE_XMLElement::GetNamespaceURI(CFX_WideString& wsNamespace) const {
CFX_WideString wsAttri(L"xmlns"), wsPrefix;
GetNamespacePrefix(wsPrefix);
@@ -702,9 +759,11 @@ void CFDE_XMLElement::GetNamespaceURI(CFX_WideString& wsNamespace) const {
break;
}
}
+
int32_t CFDE_XMLElement::CountAttributes() const {
return m_Attributes.GetSize() / 2;
}
+
FX_BOOL CFDE_XMLElement::GetAttribute(int32_t index,
CFX_WideString& wsAttriName,
CFX_WideString& wsAttriValue) const {
@@ -720,6 +779,7 @@ FX_BOOL CFDE_XMLElement::GetAttribute(int32_t index,
}
return FALSE;
}
+
FX_BOOL CFDE_XMLElement::HasAttribute(const FX_WCHAR* pwsAttriName) const {
int32_t iCount = m_Attributes.GetSize();
for (int32_t i = 0; i < iCount; i += 2) {
@@ -729,6 +789,7 @@ FX_BOOL CFDE_XMLElement::HasAttribute(const FX_WCHAR* pwsAttriName) const {
}
return FALSE;
}
+
void CFDE_XMLElement::GetString(const FX_WCHAR* pwsAttriName,
CFX_WideString& wsAttriValue,
const FX_WCHAR* pwsDefValue) const {
@@ -741,6 +802,7 @@ void CFDE_XMLElement::GetString(const FX_WCHAR* pwsAttriName,
}
wsAttriValue = pwsDefValue;
}
+
void CFDE_XMLElement::SetString(const CFX_WideString& wsAttriName,
const CFX_WideString& wsAttriValue) {
ASSERT(wsAttriName.GetLength() > 0);
@@ -755,6 +817,7 @@ void CFDE_XMLElement::SetString(const CFX_WideString& wsAttriName,
m_Attributes.Add(wsAttriName);
m_Attributes.Add(wsAttriValue);
}
+
int32_t CFDE_XMLElement::GetInteger(const FX_WCHAR* pwsAttriName,
int32_t iDefValue) const {
int32_t iCount = m_Attributes.GetSize();
@@ -765,12 +828,14 @@ int32_t CFDE_XMLElement::GetInteger(const FX_WCHAR* pwsAttriName,
}
return iDefValue;
}
+
void CFDE_XMLElement::SetInteger(const FX_WCHAR* pwsAttriName,
int32_t iAttriValue) {
CFX_WideString wsValue;
wsValue.Format(L"%d", iAttriValue);
SetString(pwsAttriName, wsValue);
}
+
FX_FLOAT CFDE_XMLElement::GetFloat(const FX_WCHAR* pwsAttriName,
FX_FLOAT fDefValue) const {
int32_t iCount = m_Attributes.GetSize();
@@ -781,12 +846,14 @@ FX_FLOAT CFDE_XMLElement::GetFloat(const FX_WCHAR* pwsAttriName,
}
return fDefValue;
}
+
void CFDE_XMLElement::SetFloat(const FX_WCHAR* pwsAttriName,
FX_FLOAT fAttriValue) {
CFX_WideString wsValue;
wsValue.Format(L"%f", fAttriValue);
SetString(pwsAttriName, wsValue);
}
+
void CFDE_XMLElement::RemoveAttribute(const FX_WCHAR* pwsAttriName) {
int32_t iCount = m_Attributes.GetSize();
for (int32_t i = 0; i < iCount; i += 2) {
@@ -797,6 +864,7 @@ void CFDE_XMLElement::RemoveAttribute(const FX_WCHAR* pwsAttriName) {
}
}
}
+
void CFDE_XMLElement::GetTextData(CFX_WideString& wsText) const {
CFX_WideTextBuf buffer;
CFDE_XMLNode* pChild = m_pChild;
@@ -815,35 +883,61 @@ void CFDE_XMLElement::GetTextData(CFX_WideString& wsText) const {
}
wsText = buffer.AsStringC();
}
+
void CFDE_XMLElement::SetTextData(const CFX_WideString& wsText) {
if (wsText.GetLength() < 1) {
return;
}
InsertChildNode(new CFDE_XMLText(wsText));
}
+
CFDE_XMLText::CFDE_XMLText(const CFX_WideString& wsText)
: CFDE_XMLNode(), m_wsText(wsText) {}
+
+void CFDE_XMLText::Release() {
+ delete this;
+}
+
+FDE_XMLNODETYPE CFDE_XMLText::GetType() const {
+ return FDE_XMLNODE_Text;
+}
+
CFDE_XMLNode* CFDE_XMLText::Clone(FX_BOOL bRecursive) {
CFDE_XMLText* pClone = new CFDE_XMLText(m_wsText);
return pClone;
}
+CFDE_XMLText::~CFDE_XMLText() {}
+
CFDE_XMLCharData::CFDE_XMLCharData(const CFX_WideString& wsCData)
: CFDE_XMLDeclaration(), m_wsCharData(wsCData) {}
+
+void CFDE_XMLCharData::Release() {
+ delete this;
+}
+
+FDE_XMLNODETYPE CFDE_XMLCharData::GetType() const {
+ return FDE_XMLNODE_CharData;
+}
+
CFDE_XMLNode* CFDE_XMLCharData::Clone(FX_BOOL bRecursive) {
CFDE_XMLCharData* pClone = new CFDE_XMLCharData(m_wsCharData);
return pClone;
}
+CFDE_XMLCharData::~CFDE_XMLCharData() {}
+
CFDE_XMLDoc::CFDE_XMLDoc()
: m_pRoot(nullptr), m_pSyntaxParser(nullptr), m_pXMLParser(nullptr) {
Reset(TRUE);
CFDE_XMLInstruction* pXML = new CFDE_XMLInstruction(L"xml");
m_pRoot->InsertChildNode(pXML);
}
+
CFDE_XMLDoc::~CFDE_XMLDoc() {
Reset(FALSE);
}
+
void CFDE_XMLDoc::Reset(FX_BOOL bInitRoot) {
m_iStatus = 0;
m_pStream = nullptr;
@@ -860,6 +954,7 @@ void CFDE_XMLDoc::Reset(FX_BOOL bInitRoot) {
}
ReleaseParser();
}
+
void CFDE_XMLDoc::ReleaseParser() {
if (m_pXMLParser) {
m_pXMLParser->Release();
@@ -879,14 +974,17 @@ FX_BOOL CFDE_XMLDoc::LoadXML(CFDE_XMLParser* pXMLParser) {
m_pXMLParser = pXMLParser;
return !!m_pXMLParser;
}
+
int32_t CFDE_XMLDoc::DoLoad(IFX_Pause* pPause) {
if (m_iStatus >= 100)
return m_iStatus;
return m_iStatus = m_pXMLParser->DoParser(pPause);
}
+
void CFDE_XMLDoc::CloseXML() {
ReleaseParser();
}
+
void CFDE_XMLDoc::SaveXMLNode(IFX_Stream* pXMLStream, CFDE_XMLNode* pINode) {
CFDE_XMLNode* pNode = (CFDE_XMLNode*)pINode;
switch (pNode->GetType()) {
@@ -996,6 +1094,7 @@ void CFDE_XMLDoc::SaveXMLNode(IFX_Stream* pXMLStream, CFDE_XMLNode* pINode) {
break;
}
}
+
void CFDE_XMLDoc::SaveXML(IFX_Stream* pXMLStream, FX_BOOL bSaveBOM) {
if (!pXMLStream || pXMLStream == m_pStream) {
m_pStream->Seek(FX_STREAMSEEK_Begin, 0);
@@ -1028,9 +1127,11 @@ CFDE_BlockBuffer::CFDE_BlockBuffer(int32_t iAllocStep)
m_iBufferSize(0),
m_iAllocStep(iAllocStep),
m_iStartPosition(0) {}
+
CFDE_BlockBuffer::~CFDE_BlockBuffer() {
ClearBuffer();
}
+
FX_WCHAR* CFDE_BlockBuffer::GetAvailableBlock(int32_t& iIndexInBlock) {
iIndexInBlock = 0;
if (!m_BlockArray.GetSize()) {
@@ -1046,6 +1147,7 @@ FX_WCHAR* CFDE_BlockBuffer::GetAvailableBlock(int32_t& iIndexInBlock) {
iIndexInBlock = iRealIndex % m_iAllocStep;
return m_BlockArray[iRealIndex / m_iAllocStep];
}
+
FX_BOOL CFDE_BlockBuffer::InitBuffer(int32_t iBufferSize) {
ClearBuffer();
int32_t iNumOfBlock = (iBufferSize - 1) / m_iAllocStep + 1;
@@ -1055,6 +1157,7 @@ FX_BOOL CFDE_BlockBuffer::InitBuffer(int32_t iBufferSize) {
m_iBufferSize = iNumOfBlock * m_iAllocStep;
return TRUE;
}
+
void CFDE_BlockBuffer::SetTextChar(int32_t iIndex, FX_WCHAR ch) {
if (iIndex < 0) {
return;
@@ -1077,6 +1180,7 @@ void CFDE_BlockBuffer::SetTextChar(int32_t iIndex, FX_WCHAR ch) {
m_iDataLength = iIndex + 1;
}
}
+
int32_t CFDE_BlockBuffer::DeleteTextChars(int32_t iCount, FX_BOOL bDirection) {
if (iCount <= 0) {
return m_iDataLength;
@@ -1093,6 +1197,7 @@ int32_t CFDE_BlockBuffer::DeleteTextChars(int32_t iCount, FX_BOOL bDirection) {
}
return m_iDataLength;
}
+
void CFDE_BlockBuffer::GetTextData(CFX_WideString& wsTextData,
int32_t iStart,
int32_t iLength) const {
@@ -1135,6 +1240,7 @@ void CFDE_BlockBuffer::GetTextData(CFX_WideString& wsTextData,
}
wsTextData.ReleaseBuffer(iLength);
}
+
void CFDE_BlockBuffer::TextDataIndex2BufIndex(const int32_t iIndex,
int32_t& iBlockIndex,
int32_t& iInnerIndex) const {
@@ -1143,6 +1249,7 @@ void CFDE_BlockBuffer::TextDataIndex2BufIndex(const int32_t iIndex,
iBlockIndex = iRealIndex / m_iAllocStep;
iInnerIndex = iRealIndex % m_iAllocStep;
}
+
void CFDE_BlockBuffer::ClearBuffer() {
m_iBufferSize = 0;
int32_t iSize = m_BlockArray.GetSize();
@@ -1179,6 +1286,7 @@ CFDE_XMLSyntaxParser::CFDE_XMLSyntaxParser()
m_CurNode.iNodeNum = -1;
m_CurNode.eNodeType = FDE_XMLNODE_Unknown;
}
+
void CFDE_XMLSyntaxParser::Init(IFX_Stream* pStream,
int32_t iXMLPlaneSize,
int32_t iTextDataSize) {
@@ -1720,6 +1828,7 @@ static int32_t FX_GetUTF8EncodeLength(const FX_WCHAR* pSrc, int32_t iSrcLen) {
}
return iDstNum;
}
+
FX_FILESIZE CFDE_XMLSyntaxParser::GetCurrentBinaryPos() const {
if (!m_pStream)
return 0;
diff --git a/xfa/fde/xml/fde_xml_imp.h b/xfa/fde/xml/fde_xml_imp.h
index b977d693d8..ba75f6b409 100644
--- a/xfa/fde/xml/fde_xml_imp.h
+++ b/xfa/fde/xml/fde_xml_imp.h
@@ -40,10 +40,10 @@ class CFDE_XMLNode : public CFX_Target {
};
CFDE_XMLNode();
- virtual ~CFDE_XMLNode();
+ ~CFDE_XMLNode() override;
- virtual void Release() { delete this; }
- virtual FDE_XMLNODETYPE GetType() const { return FDE_XMLNODE_Unknown; }
+ virtual void Release();
+ virtual FDE_XMLNODETYPE GetType() const;
virtual CFDE_XMLNode* Clone(FX_BOOL bRecursive);
int32_t CountChildNodes() const;
@@ -73,12 +73,12 @@ class CFDE_XMLNode : public CFX_Target {
class CFDE_XMLInstruction : public CFDE_XMLNode {
public:
- CFDE_XMLInstruction(const CFX_WideString& wsTarget);
- ~CFDE_XMLInstruction() override {}
+ explicit CFDE_XMLInstruction(const CFX_WideString& wsTarget);
+ ~CFDE_XMLInstruction() override;
// CFDE_XMLNode
- void Release() override { delete this; }
- FDE_XMLNODETYPE GetType() const override { return FDE_XMLNODE_Instruction; }
+ void Release() override;
+ FDE_XMLNODETYPE GetType() const override;
CFDE_XMLNode* Clone(FX_BOOL bRecursive) override;
void GetTargetName(CFX_WideString& wsTarget) const { wsTarget = m_wsTarget; }
@@ -109,12 +109,12 @@ class CFDE_XMLInstruction : public CFDE_XMLNode {
class CFDE_XMLElement : public CFDE_XMLNode {
public:
- CFDE_XMLElement(const CFX_WideString& wsTag);
+ explicit CFDE_XMLElement(const CFX_WideString& wsTag);
~CFDE_XMLElement() override;
// CFDE_XMLNode
- void Release() override { delete this; }
- FDE_XMLNODETYPE GetType() const override { return FDE_XMLNODE_Element; }
+ void Release() override;
+ FDE_XMLNODETYPE GetType() const override;
CFDE_XMLNode* Clone(FX_BOOL bRecursive) override;
void GetTagName(CFX_WideString& wsTag) const;
@@ -151,12 +151,12 @@ class CFDE_XMLElement : public CFDE_XMLNode {
class CFDE_XMLText : public CFDE_XMLNode {
public:
- CFDE_XMLText(const CFX_WideString& wsText);
- ~CFDE_XMLText() override {}
+ explicit CFDE_XMLText(const CFX_WideString& wsText);
+ ~CFDE_XMLText() override;
// CFDE_XMLNode
- void Release() override { delete this; }
- FDE_XMLNODETYPE GetType() const override { return FDE_XMLNODE_Text; }
+ void Release() override;
+ FDE_XMLNODETYPE GetType() const override;
CFDE_XMLNode* Clone(FX_BOOL bRecursive) override;
void GetText(CFX_WideString& wsText) const { wsText = m_wsText; }
@@ -167,17 +167,17 @@ class CFDE_XMLText : public CFDE_XMLNode {
class CFDE_XMLDeclaration : public CFDE_XMLNode {
public:
- CFDE_XMLDeclaration() : CFDE_XMLNode() {}
+ CFDE_XMLDeclaration() {}
~CFDE_XMLDeclaration() override {}
};
class CFDE_XMLCharData : public CFDE_XMLDeclaration {
public:
- CFDE_XMLCharData(const CFX_WideString& wsCData);
- ~CFDE_XMLCharData() override {}
+ explicit CFDE_XMLCharData(const CFX_WideString& wsCData);
+ ~CFDE_XMLCharData() override;
- void Release() override { delete this; }
- FDE_XMLNODETYPE GetType() const override { return FDE_XMLNODE_CharData; }
+ void Release() override;
+ FDE_XMLNODETYPE GetType() const override;
CFDE_XMLNode* Clone(FX_BOOL bRecursive) override;
void GetCharData(CFX_WideString& wsCharData) const {
@@ -222,8 +222,8 @@ class CFDE_XMLParser {
class CFDE_BlockBuffer : public CFX_Target {
public:
- CFDE_BlockBuffer(int32_t iAllocStep = 1024 * 1024);
- ~CFDE_BlockBuffer();
+ explicit CFDE_BlockBuffer(int32_t iAllocStep = 1024 * 1024);
+ ~CFDE_BlockBuffer() override;
FX_BOOL InitBuffer(int32_t iBufferSize = 1024 * 1024);
FX_BOOL IsInitialized() { return m_iBufferSize / m_iAllocStep >= 1; }
@@ -259,7 +259,7 @@ class CFDE_BlockBuffer : public CFX_Target {
class CFDE_XMLSyntaxParser : public CFX_Target {
public:
CFDE_XMLSyntaxParser();
- ~CFDE_XMLSyntaxParser();
+ ~CFDE_XMLSyntaxParser() override;
void Release() { delete this; }
void Init(IFX_Stream* pStream,
diff --git a/xfa/fgas/crt/fgas_stream.cpp b/xfa/fgas/crt/fgas_stream.cpp
index 59eb99bcf0..458cf5edad 100644
--- a/xfa/fgas/crt/fgas_stream.cpp
+++ b/xfa/fgas/crt/fgas_stream.cpp
@@ -205,7 +205,8 @@ enum FX_STREAMTYPE {
class CFX_Stream : public IFX_Stream {
public:
CFX_Stream();
- ~CFX_Stream();
+ ~CFX_Stream() override;
+
FX_BOOL LoadFile(const FX_WCHAR* pszSrcFileName, uint32_t dwAccess);
FX_BOOL LoadBuffer(uint8_t* pData, int32_t iTotalSize, uint32_t dwAccess);
FX_BOOL LoadFileRead(IFX_FileRead* pFileRead, uint32_t dwAccess);
@@ -214,28 +215,30 @@ class CFX_Stream : public IFX_Stream {
int32_t iFileSize,
uint32_t dwAccess,
FX_BOOL bReleaseBufferRead);
- virtual void Release();
- virtual IFX_Stream* Retain();
- virtual uint32_t GetAccessModes() const { return m_dwAccess; }
- virtual int32_t GetLength() const;
- virtual int32_t Seek(FX_STREAMSEEK eSeek, int32_t iOffset);
- virtual int32_t GetPosition();
- virtual FX_BOOL IsEOF() const;
- virtual int32_t ReadData(uint8_t* pBuffer, int32_t iBufferSize);
- virtual int32_t ReadString(FX_WCHAR* pStr,
- int32_t iMaxLength,
- FX_BOOL& bEOS,
- int32_t const* pByteSize = NULL);
- virtual int32_t WriteData(const uint8_t* pBuffer, int32_t iBufferSize);
- virtual int32_t WriteString(const FX_WCHAR* pStr, int32_t iLength);
- virtual void Flush();
- virtual FX_BOOL SetLength(int32_t iLength);
- virtual int32_t GetBOM(uint8_t bom[4]) const;
- virtual uint16_t GetCodePage() const;
- virtual uint16_t SetCodePage(uint16_t wCodePage);
- virtual IFX_Stream* CreateSharedStream(uint32_t dwAccess,
- int32_t iOffset,
- int32_t iLength);
+
+ // IFX_Stream
+ void Release() override;
+ IFX_Stream* Retain() override;
+ uint32_t GetAccessModes() const override;
+ int32_t GetLength() const override;
+ int32_t Seek(FX_STREAMSEEK eSeek, int32_t iOffset) override;
+ int32_t GetPosition() override;
+ FX_BOOL IsEOF() const override;
+ int32_t ReadData(uint8_t* pBuffer, int32_t iBufferSize) override;
+ int32_t ReadString(FX_WCHAR* pStr,
+ int32_t iMaxLength,
+ FX_BOOL& bEOS,
+ int32_t const* pByteSize = NULL) override;
+ int32_t WriteData(const uint8_t* pBuffer, int32_t iBufferSize) override;
+ int32_t WriteString(const FX_WCHAR* pStr, int32_t iLength) override;
+ void Flush() override;
+ FX_BOOL SetLength(int32_t iLength) override;
+ int32_t GetBOM(uint8_t bom[4]) const override;
+ uint16_t GetCodePage() const override;
+ uint16_t SetCodePage(uint16_t wCodePage) override;
+ IFX_Stream* CreateSharedStream(uint32_t dwAccess,
+ int32_t iOffset,
+ int32_t iLength) override;
protected:
FX_STREAMTYPE m_eStreamType;
@@ -251,33 +254,31 @@ class CFX_Stream : public IFX_Stream {
class CFX_TextStream : public IFX_Stream {
public:
CFX_TextStream(IFX_Stream* pStream, FX_BOOL bDelStream);
- ~CFX_TextStream();
- virtual void Release();
- virtual IFX_Stream* Retain();
-
- virtual uint32_t GetAccessModes() const;
- virtual int32_t GetLength() const;
- virtual int32_t Seek(FX_STREAMSEEK eSeek, int32_t iOffset);
- virtual int32_t GetPosition();
- virtual FX_BOOL IsEOF() const;
-
- virtual int32_t ReadData(uint8_t* pBuffer, int32_t iBufferSize);
- virtual int32_t ReadString(FX_WCHAR* pStr,
- int32_t iMaxLength,
- FX_BOOL& bEOS,
- int32_t const* pByteSize = NULL);
- virtual int32_t WriteData(const uint8_t* pBuffer, int32_t iBufferSize);
- virtual int32_t WriteString(const FX_WCHAR* pStr, int32_t iLength);
- virtual void Flush();
- virtual FX_BOOL SetLength(int32_t iLength);
+ ~CFX_TextStream() override;
- virtual int32_t GetBOM(uint8_t bom[4]) const;
- virtual uint16_t GetCodePage() const;
- virtual uint16_t SetCodePage(uint16_t wCodePage);
-
- virtual IFX_Stream* CreateSharedStream(uint32_t dwAccess,
- int32_t iOffset,
- int32_t iLength);
+ // IFX_Stream
+ void Release() override;
+ IFX_Stream* Retain() override;
+ uint32_t GetAccessModes() const override;
+ int32_t GetLength() const override;
+ int32_t Seek(FX_STREAMSEEK eSeek, int32_t iOffset) override;
+ int32_t GetPosition() override;
+ FX_BOOL IsEOF() const override;
+ int32_t ReadData(uint8_t* pBuffer, int32_t iBufferSize) override;
+ int32_t ReadString(FX_WCHAR* pStr,
+ int32_t iMaxLength,
+ FX_BOOL& bEOS,
+ int32_t const* pByteSize = NULL) override;
+ int32_t WriteData(const uint8_t* pBuffer, int32_t iBufferSize) override;
+ int32_t WriteString(const FX_WCHAR* pStr, int32_t iLength) override;
+ void Flush() override;
+ FX_BOOL SetLength(int32_t iLength) override;
+ int32_t GetBOM(uint8_t bom[4]) const override;
+ uint16_t GetCodePage() const override;
+ uint16_t SetCodePage(uint16_t wCodePage) override;
+ IFX_Stream* CreateSharedStream(uint32_t dwAccess,
+ int32_t iOffset,
+ int32_t iLength) override;
protected:
uint16_t m_wCodePage;
@@ -294,10 +295,12 @@ class CFX_TextStream : public IFX_Stream {
class CFGAS_FileRead : public IFX_FileRead {
public:
CFGAS_FileRead(IFX_Stream* pStream, FX_BOOL bReleaseStream);
- virtual ~CFGAS_FileRead();
- virtual void Release() { delete this; }
- virtual FX_FILESIZE GetSize();
- virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size);
+ ~CFGAS_FileRead() override;
+
+ // IFX_FileRead
+ void Release() override;
+ FX_FILESIZE GetSize() override;
+ FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override;
protected:
FX_BOOL m_bReleaseStream;
@@ -1260,6 +1263,11 @@ IFX_Stream* CFX_Stream::Retain() {
m_iRefCount++;
return this;
}
+
+uint32_t CFX_Stream::GetAccessModes() const {
+ return m_dwAccess;
+}
+
int32_t CFX_Stream::GetLength() const {
if (m_pStreamImp == NULL) {
return -1;
@@ -1510,3 +1518,7 @@ FX_BOOL CFGAS_FileRead::ReadBlock(void* buffer,
int32_t iLen = m_pStream->ReadData((uint8_t*)buffer, (int32_t)size);
return iLen == (int32_t)size;
}
+
+void CFGAS_FileRead::Release() {
+ delete this;
+}
diff --git a/xfa/fgas/crt/fgas_utils.cpp b/xfa/fgas/crt/fgas_utils.cpp
index 4f15fc4845..6db7aa35ab 100644
--- a/xfa/fgas/crt/fgas_utils.cpp
+++ b/xfa/fgas/crt/fgas_utils.cpp
@@ -12,14 +12,8 @@
class FX_BASEARRAYDATA : public CFX_Target {
public:
- FX_BASEARRAYDATA(int32_t growsize, int32_t blocksize)
- : iGrowSize(growsize),
- iBlockSize(blocksize),
- iTotalCount(0),
- iBlockCount(0),
- pBuffer(nullptr) {}
-
- ~FX_BASEARRAYDATA() { FX_Free(pBuffer); }
+ FX_BASEARRAYDATA(int32_t growsize, int32_t blocksize);
+ ~FX_BASEARRAYDATA() override;
int32_t iGrowSize;
int32_t iBlockSize;
@@ -27,6 +21,18 @@ class FX_BASEARRAYDATA : public CFX_Target {
int32_t iBlockCount;
uint8_t* pBuffer;
};
+
+FX_BASEARRAYDATA::FX_BASEARRAYDATA(int32_t growsize, int32_t blocksize)
+ : iGrowSize(growsize),
+ iBlockSize(blocksize),
+ iTotalCount(0),
+ iBlockCount(0),
+ pBuffer(nullptr) {}
+
+FX_BASEARRAYDATA::~FX_BASEARRAYDATA() {
+ FX_Free(pBuffer);
+}
+
CFX_BaseArray::CFX_BaseArray(int32_t iGrowSize, int32_t iBlockSize) {
ASSERT(iGrowSize > 0 && iBlockSize > 0);
m_pData = new FX_BASEARRAYDATA(iGrowSize, iBlockSize);
diff --git a/xfa/fgas/crt/fgas_utils.h b/xfa/fgas/crt/fgas_utils.h
index 6fef23d968..f01d115b3e 100644
--- a/xfa/fgas/crt/fgas_utils.h
+++ b/xfa/fgas/crt/fgas_utils.h
@@ -15,7 +15,8 @@ class FX_BASEARRAYDATA;
class CFX_BaseArray : public CFX_Target {
protected:
CFX_BaseArray(int32_t iGrowSize, int32_t iBlockSize);
- ~CFX_BaseArray();
+ ~CFX_BaseArray() override;
+
int32_t GetSize() const;
int32_t GetBlockSize() const;
uint8_t* AddSpaceTo(int32_t index);
@@ -184,7 +185,8 @@ class CFX_ObjectBaseArrayTemplate : public CFX_BaseArray {
class CFX_BaseMassArrayImp : public CFX_Target {
public:
CFX_BaseMassArrayImp(int32_t iChunkSize, int32_t iBlockSize);
- ~CFX_BaseMassArrayImp();
+ ~CFX_BaseMassArrayImp() override;
+
uint8_t* AddSpace() { return AddSpaceTo(m_iBlockCount); }
uint8_t* AddSpaceTo(int32_t index);
uint8_t* GetAt(int32_t index) const;
@@ -213,7 +215,8 @@ class CFX_BaseMassArrayImp : public CFX_Target {
class CFX_BaseMassArray : public CFX_Target {
protected:
CFX_BaseMassArray(int32_t iChunkSize, int32_t iBlockSize);
- ~CFX_BaseMassArray();
+ ~CFX_BaseMassArray() override;
+
int32_t GetSize() const;
uint8_t* AddSpaceTo(int32_t index);
uint8_t* GetAt(int32_t index) const;
@@ -360,7 +363,8 @@ class CFX_ObjectMassArrayTemplate : public CFX_BaseMassArray {
class CFX_BaseDiscreteArray : public CFX_Target {
protected:
CFX_BaseDiscreteArray(int32_t iChunkSize, int32_t iBlockSize);
- ~CFX_BaseDiscreteArray();
+ ~CFX_BaseDiscreteArray() override;
+
uint8_t* AddSpaceTo(int32_t index);
uint8_t* GetAt(int32_t index) const;
void RemoveAll();
@@ -391,7 +395,8 @@ typedef CFX_DiscreteArrayTemplate<uint16_t> CFX_WordDiscreteArray;
class CFX_BaseStack : public CFX_Target {
protected:
CFX_BaseStack(int32_t iChunkSize, int32_t iBlockSize);
- ~CFX_BaseStack();
+ ~CFX_BaseStack() override;
+
uint8_t* Push();
void Pop();
uint8_t* GetTopElement() const;
diff --git a/xfa/fgas/font/fgas_stdfontmgr.cpp b/xfa/fgas/font/fgas_stdfontmgr.cpp
index c6c1b19ef7..fc839e9209 100644
--- a/xfa/fgas/font/fgas_stdfontmgr.cpp
+++ b/xfa/fgas/font/fgas_stdfontmgr.cpp
@@ -42,6 +42,10 @@ CFGAS_StdFontMgrImp::~CFGAS_StdFontMgrImp() {
m_Fonts[i]->Release();
}
+void CFGAS_StdFontMgrImp::Release() {
+ delete this;
+}
+
CFGAS_GEFont* CFGAS_StdFontMgrImp::GetDefFontByCodePage(
uint16_t wCodePage,
uint32_t dwFontStyles,
diff --git a/xfa/fgas/font/fgas_stdfontmgr.h b/xfa/fgas/font/fgas_stdfontmgr.h
index b20c942a36..11d91fc7f5 100644
--- a/xfa/fgas/font/fgas_stdfontmgr.h
+++ b/xfa/fgas/font/fgas_stdfontmgr.h
@@ -24,7 +24,7 @@ class CFGAS_StdFontMgrImp : public IFGAS_FontMgr {
~CFGAS_StdFontMgrImp() override;
// IFGAS_FontMgr:
- void Release() override { delete this; }
+ void Release() override;
CFGAS_GEFont* GetDefFontByCodePage(
uint16_t wCodePage,
uint32_t dwFontStyles,
@@ -65,7 +65,6 @@ class CFGAS_StdFontMgrImp : public IFGAS_FontMgr {
uint16_t wCodePage,
uint32_t dwUSB = 999,
FX_WCHAR wUnicode = 0);
- CFGAS_GEFont* GetFont(FX_FONTDESCRIPTOR const* pFD, uint32_t dwFontStyles);
FX_LPEnumAllFonts m_pEnumerator;
CFX_FontDescriptors m_FontFaces;
diff --git a/xfa/fgas/layout/fgas_rtfbreak.cpp b/xfa/fgas/layout/fgas_rtfbreak.cpp
index eed37df35d..848f7f4e93 100644
--- a/xfa/fgas/layout/fgas_rtfbreak.cpp
+++ b/xfa/fgas/layout/fgas_rtfbreak.cpp
@@ -1516,3 +1516,49 @@ int32_t CFX_RTFBreak::GetCharRects(const FX_RTFTEXTOBJ* pText,
}
return iLength;
}
+
+CFX_RTFPiece::CFX_RTFPiece()
+ : m_dwStatus(FX_RTFBREAK_PieceBreak),
+ m_iStartPos(0),
+ m_iWidth(-1),
+ m_iStartChar(0),
+ m_iChars(0),
+ m_iBidiLevel(0),
+ m_iBidiPos(0),
+ m_iFontSize(0),
+ m_iFontHeight(0),
+ m_iHorizontalScale(100),
+ m_iVerticalScale(100),
+ m_dwLayoutStyles(0),
+ m_dwIdentity(0),
+ m_pChars(NULL),
+ m_pUserData(NULL) {}
+
+CFX_RTFPiece::~CFX_RTFPiece() {
+ Reset();
+}
+
+CFX_RTFLine::CFX_RTFLine()
+ : m_LinePieces(16),
+ m_iStart(0),
+ m_iWidth(0),
+ m_iArabicChars(0),
+ m_iMBCSChars(0) {}
+
+CFX_RTFLine::~CFX_RTFLine() {
+ RemoveAll();
+}
+
+FX_RTFTEXTOBJ::FX_RTFTEXTOBJ()
+ : pStr(nullptr),
+ pWidths(nullptr),
+ iLength(0),
+ pFont(nullptr),
+ fFontSize(12.0f),
+ dwLayoutStyles(0),
+ iCharRotation(0),
+ iBidiLevel(0),
+ pRect(nullptr),
+ wLineBreakChar(L'\n'),
+ iHorizontalScale(100),
+ iVerticalScale(100) {}
diff --git a/xfa/fgas/layout/fgas_rtfbreak.h b/xfa/fgas/layout/fgas_rtfbreak.h
index 83d83a6c45..993dc50f97 100644
--- a/xfa/fgas/layout/fgas_rtfbreak.h
+++ b/xfa/fgas/layout/fgas_rtfbreak.h
@@ -64,20 +64,7 @@ class CFGAS_GEFont;
#define FX_RTFLINEALIGNMENT_HigherMask 0x0C
struct FX_RTFTEXTOBJ {
- FX_RTFTEXTOBJ() {
- pStr = NULL;
- pWidths = NULL;
- iLength = 0;
- pFont = NULL;
- fFontSize = 12.0f;
- dwLayoutStyles = 0;
- iCharRotation = 0;
- iBidiLevel = 0;
- pRect = NULL;
- wLineBreakChar = L'\n';
- iHorizontalScale = 100;
- iVerticalScale = 100;
- }
+ FX_RTFTEXTOBJ();
const FX_WCHAR* pStr;
int32_t* pWidths;
@@ -95,23 +82,9 @@ struct FX_RTFTEXTOBJ {
class CFX_RTFPiece : public CFX_Target {
public:
- CFX_RTFPiece()
- : m_dwStatus(FX_RTFBREAK_PieceBreak),
- m_iStartPos(0),
- m_iWidth(-1),
- m_iStartChar(0),
- m_iChars(0),
- m_iBidiLevel(0),
- m_iBidiPos(0),
- m_iFontSize(0),
- m_iFontHeight(0),
- m_iHorizontalScale(100),
- m_iVerticalScale(100),
- m_dwLayoutStyles(0),
- m_dwIdentity(0),
- m_pChars(NULL),
- m_pUserData(NULL) {}
- ~CFX_RTFPiece() { Reset(); }
+ CFX_RTFPiece();
+ ~CFX_RTFPiece() override;
+
void AppendChar(const CFX_RTFChar& tc) {
ASSERT(m_pChars != NULL);
m_pChars->Add(tc);
@@ -171,6 +144,7 @@ class CFX_RTFPiece : public CFX_Target {
m_iHorizontalScale = 100;
m_iVerticalScale = 100;
}
+
uint32_t m_dwStatus;
int32_t m_iStartPos;
int32_t m_iWidth;
@@ -187,17 +161,14 @@ class CFX_RTFPiece : public CFX_Target {
CFX_RTFCharArray* m_pChars;
IFX_Retainable* m_pUserData;
};
+
typedef CFX_BaseArrayTemplate<CFX_RTFPiece> CFX_RTFPieceArray;
class CFX_RTFLine {
public:
- CFX_RTFLine()
- : m_LinePieces(16),
- m_iStart(0),
- m_iWidth(0),
- m_iArabicChars(0),
- m_iMBCSChars(0) {}
- ~CFX_RTFLine() { RemoveAll(); }
+ CFX_RTFLine();
+ ~CFX_RTFLine();
+
int32_t CountChars() const { return m_LineChars.GetSize(); }
CFX_RTFChar& GetChar(int32_t index) {
ASSERT(index > -1 && index < m_LineChars.GetSize());
@@ -233,6 +204,7 @@ class CFX_RTFLine {
m_iArabicChars = 0;
m_iMBCSChars = 0;
}
+
CFX_RTFCharArray m_LineChars;
CFX_RTFPieceArray m_LinePieces;
int32_t m_iStart;
@@ -290,6 +262,30 @@ class CFX_RTFBreak {
uint32_t AppendChar_Others(CFX_RTFChar* pCurChar, int32_t iRotation);
protected:
+ int32_t GetLineRotation(uint32_t dwStyles) const;
+ void SetBreakStatus();
+ CFX_RTFChar* GetLastChar(int32_t index) const;
+ CFX_RTFLine* GetRTFLine(FX_BOOL bReady) const;
+ CFX_RTFPieceArray* GetRTFPieces(FX_BOOL bReady) const;
+ FX_CHARTYPE GetUnifiedCharType(FX_CHARTYPE chartype) const;
+ int32_t GetLastPositionedTab() const;
+ FX_BOOL GetPositionedTab(int32_t& iTabPos) const;
+
+ int32_t GetBreakPos(CFX_RTFCharArray& tca,
+ int32_t& iEndPos,
+ FX_BOOL bAllChars = FALSE,
+ FX_BOOL bOnlyBrk = FALSE);
+ void SplitTextLine(CFX_RTFLine* pCurLine,
+ CFX_RTFLine* pNextLine,
+ FX_BOOL bAllChars = FALSE);
+ FX_BOOL EndBreak_SplitLine(CFX_RTFLine* pNextLine,
+ FX_BOOL bAllChars,
+ uint32_t dwStatus);
+ void EndBreak_BidiLine(CFX_TPOArray& tpos, uint32_t dwStatus);
+ void EndBreak_Alignment(CFX_TPOArray& tpos,
+ FX_BOOL bAllChars,
+ uint32_t dwStatus);
+
uint32_t m_dwPolicies;
int32_t m_iBoundaryStart;
int32_t m_iBoundaryEnd;
@@ -325,28 +321,6 @@ class CFX_RTFBreak {
CFX_RTFLine* m_pCurLine;
int32_t m_iReady;
int32_t m_iTolerance;
- int32_t GetLineRotation(uint32_t dwStyles) const;
- void SetBreakStatus();
- CFX_RTFChar* GetLastChar(int32_t index) const;
- CFX_RTFLine* GetRTFLine(FX_BOOL bReady) const;
- CFX_RTFPieceArray* GetRTFPieces(FX_BOOL bReady) const;
- FX_CHARTYPE GetUnifiedCharType(FX_CHARTYPE chartype) const;
- int32_t GetLastPositionedTab() const;
- FX_BOOL GetPositionedTab(int32_t& iTabPos) const;
- int32_t GetBreakPos(CFX_RTFCharArray& tca,
- int32_t& iEndPos,
- FX_BOOL bAllChars = FALSE,
- FX_BOOL bOnlyBrk = FALSE);
- void SplitTextLine(CFX_RTFLine* pCurLine,
- CFX_RTFLine* pNextLine,
- FX_BOOL bAllChars = FALSE);
- FX_BOOL EndBreak_SplitLine(CFX_RTFLine* pNextLine,
- FX_BOOL bAllChars,
- uint32_t dwStatus);
- void EndBreak_BidiLine(CFX_TPOArray& tpos, uint32_t dwStatus);
- void EndBreak_Alignment(CFX_TPOArray& tpos,
- FX_BOOL bAllChars,
- uint32_t dwStatus);
};
#endif // XFA_FGAS_LAYOUT_FGAS_RTFBREAK_H_
diff --git a/xfa/fgas/layout/fgas_textbreak.cpp b/xfa/fgas/layout/fgas_textbreak.cpp
index c8d33baa80..8eebbed76a 100644
--- a/xfa/fgas/layout/fgas_textbreak.cpp
+++ b/xfa/fgas/layout/fgas_textbreak.cpp
@@ -1662,3 +1662,49 @@ int32_t CFX_TxtBreak::GetCharRects(const FX_TXTRUN* pTxtRun,
}
return iLength;
}
+
+FX_TXTRUN::FX_TXTRUN()
+ : pAccess(nullptr),
+ pIdentity(nullptr),
+ pWidths(nullptr),
+ iLength(0),
+ pFont(nullptr),
+ fFontSize(12),
+ dwStyles(0),
+ iHorizontalScale(100),
+ iVerticalScale(100),
+ iCharRotation(0),
+ dwCharStyles(0),
+ pRect(nullptr),
+ wLineBreakChar(L'\n'),
+ bSkipSpace(TRUE) {}
+
+FX_TXTRUN::~FX_TXTRUN() {}
+
+FX_TXTRUN::FX_TXTRUN(const FX_TXTRUN& other) = default;
+
+CFX_TxtPiece::CFX_TxtPiece()
+ : m_dwStatus(FX_TXTBREAK_PieceBreak),
+ m_iStartPos(0),
+ m_iWidth(-1),
+ m_iStartChar(0),
+ m_iChars(0),
+ m_iBidiLevel(0),
+ m_iBidiPos(0),
+ m_iHorizontalScale(100),
+ m_iVerticalScale(100),
+ m_dwCharStyles(0),
+ m_pChars(NULL),
+ m_pUserData(NULL) {}
+
+CFX_TxtLine::CFX_TxtLine(int32_t iBlockSize)
+ : m_iStart(0), m_iWidth(0), m_iArabicChars(0) {
+ m_pLineChars = new CFX_TxtCharArray;
+ m_pLinePieces = new CFX_TxtPieceArray(16);
+}
+
+CFX_TxtLine::~CFX_TxtLine() {
+ RemoveAll();
+ delete m_pLineChars;
+ delete m_pLinePieces;
+}
diff --git a/xfa/fgas/layout/fgas_textbreak.h b/xfa/fgas/layout/fgas_textbreak.h
index 94fa79f5a6..020fa1a3d3 100644
--- a/xfa/fgas/layout/fgas_textbreak.h
+++ b/xfa/fgas/layout/fgas_textbreak.h
@@ -82,21 +82,9 @@ class IFX_TxtAccess {
};
struct FX_TXTRUN {
- FX_TXTRUN()
- : pAccess(nullptr),
- pIdentity(nullptr),
- pWidths(nullptr),
- iLength(0),
- pFont(nullptr),
- fFontSize(12),
- dwStyles(0),
- iHorizontalScale(100),
- iVerticalScale(100),
- iCharRotation(0),
- dwCharStyles(0),
- pRect(nullptr),
- wLineBreakChar(L'\n'),
- bSkipSpace(TRUE) {}
+ FX_TXTRUN();
+ FX_TXTRUN(const FX_TXTRUN& other);
+ ~FX_TXTRUN();
IFX_TxtAccess* pAccess;
const FDE_TEXTEDITPIECE* pIdentity;
@@ -117,19 +105,8 @@ struct FX_TXTRUN {
class CFX_TxtPiece : public CFX_Target {
public:
- CFX_TxtPiece()
- : m_dwStatus(FX_TXTBREAK_PieceBreak),
- m_iStartPos(0),
- m_iWidth(-1),
- m_iStartChar(0),
- m_iChars(0),
- m_iBidiLevel(0),
- m_iBidiPos(0),
- m_iHorizontalScale(100),
- m_iVerticalScale(100),
- m_dwCharStyles(0),
- m_pChars(NULL),
- m_pUserData(NULL) {}
+ CFX_TxtPiece();
+
int32_t GetEndPos() const {
return m_iWidth < 0 ? m_iStartPos : m_iStartPos + m_iWidth;
}
@@ -148,7 +125,6 @@ class CFX_TxtPiece : public CFX_Target {
*pText++ = (FX_WCHAR)pChar->m_wCharCode;
}
}
-
void GetString(CFX_WideString& wsText) const {
FX_WCHAR* pText = wsText.GetBuffer(m_iChars);
GetString(pText);
@@ -163,6 +139,7 @@ class CFX_TxtPiece : public CFX_Target {
*pWidths++ = pChar->m_iCharWidth;
}
}
+
uint32_t m_dwStatus;
int32_t m_iStartPos;
int32_t m_iWidth;
@@ -176,20 +153,14 @@ class CFX_TxtPiece : public CFX_Target {
CFX_TxtCharArray* m_pChars;
void* m_pUserData;
};
+
typedef CFX_BaseArrayTemplate<CFX_TxtPiece> CFX_TxtPieceArray;
class CFX_TxtLine {
public:
- CFX_TxtLine(int32_t iBlockSize)
- : m_iStart(0), m_iWidth(0), m_iArabicChars(0) {
- m_pLineChars = new CFX_TxtCharArray;
- m_pLinePieces = new CFX_TxtPieceArray(16);
- }
- ~CFX_TxtLine() {
- RemoveAll();
- delete m_pLineChars;
- delete m_pLinePieces;
- }
+ CFX_TxtLine(int32_t iBlockSize);
+ ~CFX_TxtLine();
+
int32_t CountChars() const { return m_pLineChars->GetSize(); }
CFX_TxtChar* GetCharPtr(int32_t index) const {
ASSERT(index > -1 && index < m_pLineChars->GetSize());
@@ -216,6 +187,7 @@ class CFX_TxtLine {
m_iWidth = 0;
m_iArabicChars = 0;
}
+
CFX_TxtCharArray* m_pLineChars;
CFX_TxtPieceArray* m_pLinePieces;
int32_t m_iStart;
diff --git a/xfa/fxgraphics/cfx_graphics.cpp b/xfa/fxgraphics/cfx_graphics.cpp
index 7776f5ef3d..c3f5b7b096 100644
--- a/xfa/fxgraphics/cfx_graphics.cpp
+++ b/xfa/fxgraphics/cfx_graphics.cpp
@@ -1540,6 +1540,17 @@ FWL_Error CFX_Graphics::CalcTextInfo(const CFX_WideString& text,
return FWL_Error::Succeeded;
}
+CFX_Graphics::TInfo::TInfo()
+ : isAntialiasing(TRUE),
+ strokeAlignment(FX_STROKEALIGNMENT_Center),
+ isActOnDash(FALSE),
+ strokeColor(nullptr),
+ fillColor(nullptr),
+ font(nullptr),
+ fontSize(40.0),
+ fontHScale(1.0),
+ fontSpacing(0.0) {}
+
CFX_Graphics::TInfo::TInfo(const TInfo& info)
: graphState(info.graphState),
isAntialiasing(info.isAntialiasing),
diff --git a/xfa/fxgraphics/include/cfx_graphics.h b/xfa/fxgraphics/include/cfx_graphics.h
index 3f969432ea..1c2cb354cc 100644
--- a/xfa/fxgraphics/include/cfx_graphics.h
+++ b/xfa/fxgraphics/include/cfx_graphics.h
@@ -180,16 +180,7 @@ class CFX_Graphics {
private:
struct TInfo {
- TInfo()
- : isAntialiasing(TRUE),
- strokeAlignment(FX_STROKEALIGNMENT_Center),
- isActOnDash(FALSE),
- strokeColor(nullptr),
- fillColor(nullptr),
- font(nullptr),
- fontSize(40.0),
- fontHScale(1.0),
- fontSpacing(0.0) {}
+ TInfo();
explicit TInfo(const TInfo& info);
TInfo& operator=(const TInfo& other);