diff options
Diffstat (limited to 'core/src/fpdfapi/fpdf_parser/fpdf_parser_utility.cpp')
-rw-r--r-- | core/src/fpdfapi/fpdf_parser/fpdf_parser_utility.cpp | 69 |
1 files changed, 16 insertions, 53 deletions
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_utility.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_utility.cpp index e6e2f2aabe..d1a7231d45 100644 --- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_utility.cpp +++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_utility.cpp @@ -65,11 +65,13 @@ CPDF_SimpleParser::CPDF_SimpleParser(const uint8_t* pData, FX_DWORD dwSize) { m_dwSize = dwSize; m_dwCurPos = 0; } + CPDF_SimpleParser::CPDF_SimpleParser(const CFX_ByteStringC& str) { m_pData = str.GetPtr(); m_dwSize = str.GetLength(); m_dwCurPos = 0; } + void CPDF_SimpleParser::ParseWord(const uint8_t*& pStart, FX_DWORD& dwSize) { pStart = NULL; dwSize = 0; @@ -146,6 +148,7 @@ void CPDF_SimpleParser::ParseWord(const uint8_t*& pStart, FX_DWORD& dwSize) { dwSize++; } } + CFX_ByteStringC CPDF_SimpleParser::GetWord() { const uint8_t* pStart; FX_DWORD dwSize; @@ -190,60 +193,14 @@ CFX_ByteStringC CPDF_SimpleParser::GetWord() { } return CFX_ByteStringC(pStart, dwSize); } -FX_BOOL CPDF_SimpleParser::SearchToken(const CFX_ByteStringC& token) { - int token_len = token.GetLength(); - while (m_dwCurPos < m_dwSize - token_len) { - if (FXSYS_memcmp(m_pData + m_dwCurPos, token.GetPtr(), token_len) == 0) { - break; - } - m_dwCurPos++; - } - if (m_dwCurPos == m_dwSize - token_len) { - return FALSE; - } - m_dwCurPos += token_len; - return TRUE; -} -FX_BOOL CPDF_SimpleParser::SkipWord(const CFX_ByteStringC& token) { - while (1) { - CFX_ByteStringC word = GetWord(); - if (word.IsEmpty()) { - return FALSE; - } - if (word == token) { - return TRUE; - } - } - return FALSE; -} -FX_BOOL CPDF_SimpleParser::FindTagPair(const CFX_ByteStringC& start_token, - const CFX_ByteStringC& end_token, - FX_DWORD& start_pos, - FX_DWORD& end_pos) { - if (!start_token.IsEmpty()) { - if (!SkipWord(start_token)) { - return FALSE; - } - start_pos = m_dwCurPos; - } - while (1) { - end_pos = m_dwCurPos; - CFX_ByteStringC word = GetWord(); - if (word.IsEmpty()) { - return FALSE; - } - if (word == end_token) { - return TRUE; - } - } - return FALSE; -} -FX_BOOL CPDF_SimpleParser::FindTagParam(const CFX_ByteStringC& token, - int nParams) { + +bool CPDF_SimpleParser::FindTagParamFromStart(const CFX_ByteStringC& token, + int nParams) { nParams++; FX_DWORD* pBuf = FX_Alloc(FX_DWORD, nParams); int buf_index = 0; int buf_count = 0; + m_dwCurPos = 0; while (1) { pBuf[buf_index++] = m_dwCurPos; if (buf_index == nParams) { @@ -256,7 +213,7 @@ FX_BOOL CPDF_SimpleParser::FindTagParam(const CFX_ByteStringC& token, CFX_ByteStringC word = GetWord(); if (word.IsEmpty()) { FX_Free(pBuf); - return FALSE; + return false; } if (word == token) { if (buf_count < nParams) { @@ -264,10 +221,10 @@ FX_BOOL CPDF_SimpleParser::FindTagParam(const CFX_ByteStringC& token, } m_dwCurPos = pBuf[buf_index]; FX_Free(pBuf); - return TRUE; + return true; } } - return FALSE; + return false; } CFX_ByteString PDF_NameDecode(const CFX_ByteStringC& bstr) { @@ -291,12 +248,14 @@ CFX_ByteString PDF_NameDecode(const CFX_ByteStringC& bstr) { result.ReleaseBuffer((FX_STRSIZE)(pDest - pDestStart)); return result; } + CFX_ByteString PDF_NameDecode(const CFX_ByteString& orig) { if (!FXSYS_memchr(orig.c_str(), '#', orig.GetLength())) { return orig; } return PDF_NameDecode(CFX_ByteStringC(orig)); } + CFX_ByteString PDF_NameEncode(const CFX_ByteString& orig) { uint8_t* src_buf = (uint8_t*)orig.c_str(); int src_len = orig.GetLength(); @@ -332,6 +291,7 @@ CFX_ByteString PDF_NameEncode(const CFX_ByteString& orig) { res.ReleaseBuffer(); return res; } + CFX_ByteTextBuf& operator<<(CFX_ByteTextBuf& buf, const CPDF_Object* pObj) { if (!pObj) { buf << " null"; @@ -402,6 +362,7 @@ CFX_ByteTextBuf& operator<<(CFX_ByteTextBuf& buf, const CPDF_Object* pObj) { } return buf; } + FX_FLOAT PDF_ClipFloat(FX_FLOAT f) { if (f < 0) { return 0; @@ -411,6 +372,7 @@ FX_FLOAT PDF_ClipFloat(FX_FLOAT f) { } return f; } + static CPDF_Object* SearchNumberNode(CPDF_Dictionary* pNode, int num) { CPDF_Array* pLimits = pNode->GetArrayBy("Limits"); if (pLimits && @@ -447,6 +409,7 @@ static CPDF_Object* SearchNumberNode(CPDF_Dictionary* pNode, int num) { } return NULL; } + CPDF_Object* CPDF_NumberTree::LookupValue(int num) { return SearchNumberNode(m_pRoot, num); } |