Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(180)

Unified Diff: xfa/fde/xml/cfx_saxreader.cpp

Issue 1990003002: Move fgas_sax into individual files in fde. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: xfa/fde/xml/cfx_saxreader.cpp
diff --git a/xfa/fgas/xml/fgas_sax.cpp b/xfa/fde/xml/cfx_saxreader.cpp
similarity index 76%
rename from xfa/fgas/xml/fgas_sax.cpp
rename to xfa/fde/xml/cfx_saxreader.cpp
index 1128e1184f90faee49b44ede02e392db6a414722..bbe7ed27c9def7f1ee3e1e5f73c1149b41238168 100644
--- a/xfa/fgas/xml/fgas_sax.cpp
+++ b/xfa/fde/xml/cfx_saxreader.cpp
@@ -4,16 +4,77 @@
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-#include "xfa/fgas/xml/fgas_sax.h"
+#include "xfa/fde/xml/cfx_saxreader.h"
#include <algorithm>
#include "xfa/fxfa/include/xfa_checksum.h"
+enum class CFX_SaxMode {
+ Text = 0,
+ NodeStart,
+ DeclOrComment,
+ DeclNode,
+ Comment,
+ CommentContent,
+ TagName,
+ TagAttributeName,
+ TagAttributeEqual,
+ TagAttributeValue,
+ TagMaybeClose,
+ TagClose,
+ TagEnd,
+ TargetData,
+ MAX
+};
+
+class CFX_SAXItem {
+ public:
+ CFX_SAXItem()
+ : m_pNode(NULL),
Tom Sepez 2016/05/18 20:14:12 nit: nullptrs
dsinclair 2016/05/18 20:24:52 Done.
+ m_eNode(CFX_SaxNode::Unknown),
+ m_dwID(0),
+ m_bSkip(FALSE),
+ m_pPrev(NULL),
+ m_pNext(NULL) {}
+ void* m_pNode;
Tom Sepez 2016/05/18 20:14:12 nit: blank line before
dsinclair 2016/05/18 20:24:52 Done.
+ CFX_SaxNode m_eNode;
+ uint32_t m_dwID;
+ FX_BOOL m_bSkip;
+ CFX_SAXItem* m_pPrev;
+ CFX_SAXItem* m_pNext;
+};
+
+class CFX_SAXCommentContext {
+ public:
+ CFX_SAXCommentContext() : m_iHeaderCount(0), m_iTailCount(0) {}
+ int32_t m_iHeaderCount;
+ int32_t m_iTailCount;
+};
+
namespace {
const uint32_t kSaxFileBufSize = 32768;
+typedef void (CFX_SAXReader::*FX_SAXReader_LPFParse)();
+static const FX_SAXReader_LPFParse
+ g_FX_SAXReader_LPFParse[static_cast<int>(CFX_SaxMode::MAX)] = {
+ &CFX_SAXReader::ParseText,
+ &CFX_SAXReader::ParseNodeStart,
+ &CFX_SAXReader::ParseDeclOrComment,
+ &CFX_SAXReader::ParseDeclNode,
+ &CFX_SAXReader::ParseComment,
+ &CFX_SAXReader::ParseCommentContent,
+ &CFX_SAXReader::ParseTagName,
+ &CFX_SAXReader::ParseTagAttributeName,
+ &CFX_SAXReader::ParseTagAttributeEqual,
+ &CFX_SAXReader::ParseTagAttributeValue,
+ &CFX_SAXReader::ParseMaybeClose,
+ &CFX_SAXReader::ParseTagClose,
+ &CFX_SAXReader::ParseTagEnd,
+ &CFX_SAXReader::ParseTargetData,
+};
+
} // namespace
CFX_SAXFile::CFX_SAXFile()
@@ -165,7 +226,7 @@ void CFX_SAXReader::ReallocNameBuffer() {
m_pszName = (uint8_t*)FX_Realloc(uint8_t, m_pszName, m_iNameSize);
}
inline FX_BOOL CFX_SAXReader::SkipSpace(uint8_t ch) {
- return (m_dwParseMode & FX_SAXPARSEMODE_NotSkipSpace) == 0 && ch < 0x21;
+ return (m_dwParseMode & CFX_SaxParseMode_NotSkipSpace) == 0 && ch < 0x21;
}
int32_t CFX_SAXReader::StartParse(IFX_FileRead* pFile,
uint32_t dwStart,
@@ -177,8 +238,8 @@ int32_t CFX_SAXReader::StartParse(IFX_FileRead* pFile,
return -1;
}
m_iState = 0;
- m_eMode = FX_SAXMODE_Text;
- m_ePrevMode = FX_SAXMODE_Text;
+ m_eMode = CFX_SaxMode::Text;
+ m_ePrevMode = CFX_SaxMode::Text;
m_bCharData = FALSE;
m_dwDataOffset = 0;
m_pRoot = m_pCurItem = new CFX_SAXItem;
@@ -186,23 +247,7 @@ int32_t CFX_SAXReader::StartParse(IFX_FileRead* pFile,
m_dwParseMode = dwParseMode;
return 0;
}
-typedef void (CFX_SAXReader::*FX_SAXReader_LPFParse)();
-static const FX_SAXReader_LPFParse g_FX_SAXReader_LPFParse[FX_SAXMODE_MAX] = {
- &CFX_SAXReader::ParseText,
- &CFX_SAXReader::ParseNodeStart,
- &CFX_SAXReader::ParseDeclOrComment,
- &CFX_SAXReader::ParseDeclNode,
- &CFX_SAXReader::ParseComment,
- &CFX_SAXReader::ParseCommentContent,
- &CFX_SAXReader::ParseTagName,
- &CFX_SAXReader::ParseTagAttributeName,
- &CFX_SAXReader::ParseTagAttributeEqual,
- &CFX_SAXReader::ParseTagAttributeValue,
- &CFX_SAXReader::ParseMaybeClose,
- &CFX_SAXReader::ParseTagClose,
- &CFX_SAXReader::ParseTagEnd,
- &CFX_SAXReader::ParseTargetData,
-};
+
int32_t CFX_SAXReader::ContinueParse(IFX_Pause* pPause) {
if (m_iState < 0 || m_iState > 99) {
return m_iState;
@@ -213,7 +258,7 @@ int32_t CFX_SAXReader::ContinueParse(IFX_Pause* pPause) {
const uint8_t* pBuf = m_File.m_pBuf;
while (index < size) {
m_CurByte = pBuf[index];
- (this->*g_FX_SAXReader_LPFParse[m_eMode])();
+ (this->*g_FX_SAXReader_LPFParse[static_cast<int>(m_eMode)])();
index++;
}
m_File.m_dwCur += index;
@@ -243,7 +288,7 @@ void CFX_SAXReader::ParseChar(uint8_t ch) {
int32_t iLen = csEntity.GetLength();
if (iLen > 0) {
if (csEntity[0] == '#') {
- if ((m_dwParseMode & FX_SAXPARSEMODE_NotConvert_sharp) == 0) {
+ if ((m_dwParseMode & CFX_SaxParseMode_NotConvert_sharp) == 0) {
ch = 0;
uint8_t w;
if (iLen > 1 && csEntity[1] == 'x') {
@@ -274,23 +319,23 @@ void CFX_SAXReader::ParseChar(uint8_t ch) {
}
} else {
if (csEntity.Compare("amp") == 0) {
- if ((m_dwParseMode & FX_SAXPARSEMODE_NotConvert_amp) == 0) {
+ if ((m_dwParseMode & CFX_SaxParseMode_NotConvert_amp) == 0) {
m_pszData[m_iEntityStart++] = '&';
}
} else if (csEntity.Compare("lt") == 0) {
- if ((m_dwParseMode & FX_SAXPARSEMODE_NotConvert_lt) == 0) {
+ if ((m_dwParseMode & CFX_SaxParseMode_NotConvert_lt) == 0) {
m_pszData[m_iEntityStart++] = '<';
}
} else if (csEntity.Compare("gt") == 0) {
- if ((m_dwParseMode & FX_SAXPARSEMODE_NotConvert_gt) == 0) {
+ if ((m_dwParseMode & CFX_SaxParseMode_NotConvert_gt) == 0) {
m_pszData[m_iEntityStart++] = '>';
}
} else if (csEntity.Compare("apos") == 0) {
- if ((m_dwParseMode & FX_SAXPARSEMODE_NotConvert_apos) == 0) {
+ if ((m_dwParseMode & CFX_SaxParseMode_NotConvert_apos) == 0) {
m_pszData[m_iEntityStart++] = '\'';
}
} else if (csEntity.Compare("quot") == 0) {
- if ((m_dwParseMode & FX_SAXPARSEMODE_NotConvert_quot) == 0) {
+ if ((m_dwParseMode & CFX_SaxParseMode_NotConvert_quot) == 0) {
m_pszData[m_iEntityStart++] = '\"';
}
}
@@ -321,7 +366,7 @@ void CFX_SAXReader::ParseText() {
}
Push();
m_dwNodePos = m_File.m_dwCur + m_File.m_dwBufIndex;
- m_eMode = FX_SAXMODE_NodeStart;
+ m_eMode = CFX_SaxMode::NodeStart;
return;
}
if (m_iDataPos < 1 && SkipSpace(m_CurByte)) {
@@ -331,41 +376,41 @@ void CFX_SAXReader::ParseText() {
}
void CFX_SAXReader::ParseNodeStart() {
if (m_CurByte == '?') {
- m_pCurItem->m_eNode = FX_SAXNODE_Instruction;
- m_eMode = FX_SAXMODE_TagName;
+ m_pCurItem->m_eNode = CFX_SaxNode::Instruction;
+ m_eMode = CFX_SaxMode::TagName;
return;
}
if (m_CurByte == '!') {
- m_eMode = FX_SAXMODE_DeclOrComment;
+ m_eMode = CFX_SaxMode::DeclOrComment;
return;
}
if (m_CurByte == '/') {
- m_eMode = FX_SAXMODE_TagEnd;
+ m_eMode = CFX_SaxMode::TagEnd;
return;
}
if (m_CurByte == '>') {
Pop();
- m_eMode = FX_SAXMODE_Text;
+ m_eMode = CFX_SaxMode::Text;
return;
}
if (m_CurByte > 0x20) {
m_dwDataOffset = m_File.m_dwBufIndex;
- m_pCurItem->m_eNode = FX_SAXNODE_Tag;
- m_eMode = FX_SAXMODE_TagName;
+ m_pCurItem->m_eNode = CFX_SaxNode::Tag;
+ m_eMode = CFX_SaxMode::TagName;
AppendData(m_CurByte);
}
}
void CFX_SAXReader::ParseDeclOrComment() {
if (m_CurByte == '-') {
- m_eMode = FX_SAXMODE_Comment;
- m_pCurItem->m_eNode = FX_SAXNODE_Comment;
+ m_eMode = CFX_SaxMode::Comment;
+ m_pCurItem->m_eNode = CFX_SaxNode::Comment;
if (m_pCommentContext == NULL) {
m_pCommentContext = new CFX_SAXCommentContext;
}
m_pCommentContext->m_iHeaderCount = 1;
m_pCommentContext->m_iTailCount = 0;
} else {
- m_eMode = FX_SAXMODE_DeclNode;
+ m_eMode = CFX_SaxMode::DeclNode;
m_dwDataOffset = m_File.m_dwBufIndex;
m_SkipChar = '>';
m_SkipStack.Add('>');
@@ -375,7 +420,7 @@ void CFX_SAXReader::ParseDeclOrComment() {
void CFX_SAXReader::ParseComment() {
m_pCommentContext->m_iHeaderCount = 2;
m_dwNodePos = m_File.m_dwCur + m_File.m_dwBufIndex;
- m_eMode = FX_SAXMODE_CommentContent;
+ m_eMode = CFX_SaxMode::CommentContent;
}
void CFX_SAXReader::ParseCommentContent() {
if (m_CurByte == '-') {
@@ -387,7 +432,7 @@ void CFX_SAXReader::ParseCommentContent() {
NotifyTargetData();
}
Pop();
- m_eMode = FX_SAXMODE_Text;
+ m_eMode = CFX_SaxMode::Text;
} else {
while (m_pCommentContext->m_iTailCount > 0) {
AppendData('-');
@@ -408,15 +453,15 @@ void CFX_SAXReader::ParseTagName() {
NotifyEnter();
}
if (m_CurByte < 0x21) {
- m_eMode = FX_SAXMODE_TagAttributeName;
+ m_eMode = CFX_SaxMode::TagAttributeName;
} else if (m_CurByte == '/' || m_CurByte == '?') {
m_ePrevMode = m_eMode;
- m_eMode = FX_SAXMODE_TagMaybeClose;
+ m_eMode = CFX_SaxMode::TagMaybeClose;
} else {
if (m_pHandler) {
NotifyBreak();
}
- m_eMode = FX_SAXMODE_Text;
+ m_eMode = CFX_SaxMode::Text;
}
} else {
AppendData(m_CurByte);
@@ -430,19 +475,19 @@ void CFX_SAXReader::ParseTagAttributeName() {
m_iNameLength = m_iDataPos;
m_iDataPos = 0;
m_SkipChar = 0;
- m_eMode = m_CurByte == '=' ? FX_SAXMODE_TagAttributeValue
- : FX_SAXMODE_TagAttributeEqual;
+ m_eMode = m_CurByte == '=' ? CFX_SaxMode::TagAttributeValue
+ : CFX_SaxMode::TagAttributeEqual;
return;
}
if (m_CurByte == '/' || m_CurByte == '>' || m_CurByte == '?') {
if (m_CurByte == '/' || m_CurByte == '?') {
m_ePrevMode = m_eMode;
- m_eMode = FX_SAXMODE_TagMaybeClose;
+ m_eMode = CFX_SaxMode::TagMaybeClose;
} else {
if (m_pHandler) {
NotifyBreak();
}
- m_eMode = FX_SAXMODE_Text;
+ m_eMode = CFX_SaxMode::Text;
}
return;
}
@@ -454,12 +499,12 @@ void CFX_SAXReader::ParseTagAttributeName() {
void CFX_SAXReader::ParseTagAttributeEqual() {
if (m_CurByte == '=') {
m_SkipChar = 0;
- m_eMode = FX_SAXMODE_TagAttributeValue;
+ m_eMode = CFX_SaxMode::TagAttributeValue;
return;
- } else if (m_pCurItem->m_eNode == FX_SAXNODE_Instruction) {
+ } else if (m_pCurItem->m_eNode == CFX_SaxNode::Instruction) {
m_iDataPos = m_iNameLength;
AppendName(0x20);
- m_eMode = FX_SAXMODE_TargetData;
+ m_eMode = CFX_SaxMode::TargetData;
ParseTargetData();
}
}
@@ -474,7 +519,7 @@ void CFX_SAXReader::ParseTagAttributeValue() {
}
}
m_SkipChar = 0;
- m_eMode = FX_SAXMODE_TagAttributeName;
+ m_eMode = CFX_SaxMode::TagAttributeName;
return;
}
ParseChar(m_CurByte);
@@ -491,7 +536,7 @@ void CFX_SAXReader::ParseTagAttributeValue() {
}
void CFX_SAXReader::ParseMaybeClose() {
if (m_CurByte == '>') {
- if (m_pCurItem->m_eNode == FX_SAXNODE_Instruction) {
+ if (m_pCurItem->m_eNode == CFX_SaxNode::Instruction) {
m_iNameLength = m_iDataPos;
m_iDataPos = 0;
if (m_pHandler) {
@@ -499,21 +544,21 @@ void CFX_SAXReader::ParseMaybeClose() {
}
}
ParseTagClose();
- m_eMode = FX_SAXMODE_Text;
- } else if (m_ePrevMode == FX_SAXMODE_TagName) {
+ m_eMode = CFX_SaxMode::Text;
+ } else if (m_ePrevMode == CFX_SaxMode::TagName) {
AppendData('/');
- m_eMode = FX_SAXMODE_TagName;
- m_ePrevMode = FX_SAXMODE_Text;
+ m_eMode = CFX_SaxMode::TagName;
+ m_ePrevMode = CFX_SaxMode::Text;
ParseTagName();
- } else if (m_ePrevMode == FX_SAXMODE_TagAttributeName) {
+ } else if (m_ePrevMode == CFX_SaxMode::TagAttributeName) {
AppendName('/');
- m_eMode = FX_SAXMODE_TagAttributeName;
- m_ePrevMode = FX_SAXMODE_Text;
+ m_eMode = CFX_SaxMode::TagAttributeName;
+ m_ePrevMode = CFX_SaxMode::Text;
ParseTagAttributeName();
- } else if (m_ePrevMode == FX_SAXMODE_TargetData) {
+ } else if (m_ePrevMode == CFX_SaxMode::TargetData) {
AppendName('?');
- m_eMode = FX_SAXMODE_TargetData;
- m_ePrevMode = FX_SAXMODE_Text;
+ m_eMode = CFX_SaxMode::TargetData;
+ m_ePrevMode = CFX_SaxMode::Text;
ParseTargetData();
}
}
@@ -537,7 +582,7 @@ void CFX_SAXReader::ParseTagEnd() {
NotifyEnd();
}
Pop();
- m_eMode = FX_SAXMODE_Text;
+ m_eMode = CFX_SaxMode::Text;
} else {
ParseChar(m_CurByte);
}
@@ -545,7 +590,7 @@ void CFX_SAXReader::ParseTagEnd() {
void CFX_SAXReader::ParseTargetData() {
if (m_CurByte == '?') {
m_ePrevMode = m_eMode;
- m_eMode = FX_SAXMODE_TagMaybeClose;
+ m_eMode = CFX_SaxMode::TagMaybeClose;
} else {
AppendName(m_CurByte);
}
@@ -608,7 +653,7 @@ void CFX_SAXReader::SkipNode() {
} else {
Pop();
}
- m_eMode = FX_SAXMODE_Text;
+ m_eMode = CFX_SaxMode::Text;
}
}
break;
@@ -619,16 +664,17 @@ void CFX_SAXReader::SkipNode() {
}
void CFX_SAXReader::NotifyData() {
- if (m_pCurItem->m_eNode == FX_SAXNODE_Tag)
- m_pHandler->OnTagData(m_pCurItem->m_pNode,
- m_bCharData ? FX_SAXNODE_CharData : FX_SAXNODE_Text,
- CFX_ByteStringC(m_pszData, m_iDataLength),
- m_File.m_dwCur + m_dwDataOffset);
+ if (m_pCurItem->m_eNode == CFX_SaxNode::Tag)
+ m_pHandler->OnTagData(
+ m_pCurItem->m_pNode,
+ m_bCharData ? CFX_SaxNode::CharData : CFX_SaxNode::Text,
+ CFX_ByteStringC(m_pszData, m_iDataLength),
+ m_File.m_dwCur + m_dwDataOffset);
}
void CFX_SAXReader::NotifyEnter() {
- if (m_pCurItem->m_eNode == FX_SAXNODE_Tag ||
- m_pCurItem->m_eNode == FX_SAXNODE_Instruction) {
+ if (m_pCurItem->m_eNode == CFX_SaxNode::Tag ||
+ m_pCurItem->m_eNode == CFX_SaxNode::Instruction) {
m_pCurItem->m_pNode =
m_pHandler->OnTagEnter(CFX_ByteStringC(m_pszData, m_iDataLength),
m_pCurItem->m_eNode, m_dwNodePos);
@@ -636,8 +682,8 @@ void CFX_SAXReader::NotifyEnter() {
}
void CFX_SAXReader::NotifyAttribute() {
- if (m_pCurItem->m_eNode == FX_SAXNODE_Tag ||
- m_pCurItem->m_eNode == FX_SAXNODE_Instruction) {
+ if (m_pCurItem->m_eNode == CFX_SaxNode::Tag ||
+ m_pCurItem->m_eNode == CFX_SaxNode::Instruction) {
m_pHandler->OnTagAttribute(m_pCurItem->m_pNode,
CFX_ByteStringC(m_pszName, m_iNameLength),
CFX_ByteStringC(m_pszData, m_iDataLength));
@@ -645,19 +691,19 @@ void CFX_SAXReader::NotifyAttribute() {
}
void CFX_SAXReader::NotifyBreak() {
- if (m_pCurItem->m_eNode == FX_SAXNODE_Tag)
+ if (m_pCurItem->m_eNode == CFX_SaxNode::Tag)
m_pHandler->OnTagBreak(m_pCurItem->m_pNode);
}
void CFX_SAXReader::NotifyClose() {
- if (m_pCurItem->m_eNode == FX_SAXNODE_Tag ||
- m_pCurItem->m_eNode == FX_SAXNODE_Instruction) {
+ if (m_pCurItem->m_eNode == CFX_SaxNode::Tag ||
+ m_pCurItem->m_eNode == CFX_SaxNode::Instruction) {
m_pHandler->OnTagClose(m_pCurItem->m_pNode, m_dwNodePos);
}
}
void CFX_SAXReader::NotifyEnd() {
- if (m_pCurItem->m_eNode != FX_SAXNODE_Tag)
+ if (m_pCurItem->m_eNode != CFX_SaxNode::Tag)
return;
m_pHandler->OnTagEnd(m_pCurItem->m_pNode,
@@ -665,11 +711,11 @@ void CFX_SAXReader::NotifyEnd() {
}
void CFX_SAXReader::NotifyTargetData() {
- if (m_pCurItem->m_eNode == FX_SAXNODE_Instruction) {
+ if (m_pCurItem->m_eNode == CFX_SaxNode::Instruction) {
m_pHandler->OnTargetData(m_pCurItem->m_pNode, m_pCurItem->m_eNode,
CFX_ByteStringC(m_pszName, m_iNameLength),
m_dwNodePos);
- } else if (m_pCurItem->m_eNode == FX_SAXNODE_Comment) {
+ } else if (m_pCurItem->m_eNode == CFX_SaxNode::Comment) {
m_pHandler->OnTargetData(m_pCurItem->m_pNode, m_pCurItem->m_eNode,
CFX_ByteStringC(m_pszData, m_iDataLength),
m_dwNodePos);

Powered by Google App Engine
This is Rietveld 408576698