OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "../../../include/fpdfapi/fpdf_parser.h" | 7 #include "../../../include/fpdfapi/fpdf_parser.h" |
8 const char PDF_CharType[256] = { | 8 const char PDF_CharType[256] = { |
9 //NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO S
I | 9 //NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO S
I |
10 'W', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'W', 'W', 'R', 'W', 'W', 'R', '
R', | 10 'W', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'W', 'W', 'R', 'W', 'W', 'R', '
R', |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 } | 187 } |
188 m_dwCurPos ++; | 188 m_dwCurPos ++; |
189 } | 189 } |
190 if (m_dwCurPos < m_dwSize) { | 190 if (m_dwCurPos < m_dwSize) { |
191 m_dwCurPos ++; | 191 m_dwCurPos ++; |
192 } | 192 } |
193 return CFX_ByteStringC(pStart, (FX_STRSIZE)(m_dwCurPos - (pStart - m_pDa
ta))); | 193 return CFX_ByteStringC(pStart, (FX_STRSIZE)(m_dwCurPos - (pStart - m_pDa
ta))); |
194 } | 194 } |
195 return CFX_ByteStringC(pStart, dwSize); | 195 return CFX_ByteStringC(pStart, dwSize); |
196 } | 196 } |
197 FX_BOOL CPDF_SimpleParser::SearchToken(const CFX_ByteStringC& token) | 197 bool CPDF_SimpleParser::SearchToken(const CFX_ByteStringC& token) |
198 { | 198 { |
199 int token_len = token.GetLength(); | 199 int token_len = token.GetLength(); |
200 while (m_dwCurPos < m_dwSize - token_len) { | 200 while (m_dwCurPos < m_dwSize - token_len) { |
201 if (FXSYS_memcmp(m_pData + m_dwCurPos, token.GetPtr(), token_len) == 0)
{ | 201 if (FXSYS_memcmp(m_pData + m_dwCurPos, token.GetPtr(), token_len) == 0)
{ |
202 break; | 202 break; |
203 } | 203 } |
204 m_dwCurPos ++; | 204 m_dwCurPos ++; |
205 } | 205 } |
206 if (m_dwCurPos == m_dwSize - token_len) { | 206 if (m_dwCurPos == m_dwSize - token_len) { |
207 return FALSE; | 207 return false; |
208 } | 208 } |
209 m_dwCurPos += token_len; | 209 m_dwCurPos += token_len; |
210 return TRUE; | 210 return true; |
211 } | 211 } |
212 FX_BOOL CPDF_SimpleParser::SkipWord(const CFX_ByteStringC& token) | 212 bool CPDF_SimpleParser::SkipWord(const CFX_ByteStringC& token) |
213 { | 213 { |
214 while (1) { | 214 while (1) { |
215 CFX_ByteStringC word = GetWord(); | 215 CFX_ByteStringC word = GetWord(); |
216 if (word.IsEmpty()) { | 216 if (word.IsEmpty()) { |
217 return FALSE; | 217 return false; |
218 } | 218 } |
219 if (word == token) { | 219 if (word == token) { |
220 return TRUE; | 220 return true; |
221 } | 221 } |
222 } | 222 } |
223 return FALSE; | 223 return false; |
224 } | 224 } |
225 FX_BOOL CPDF_SimpleParser::FindTagPair(const CFX_ByteStringC& start_token, const
CFX_ByteStringC& end_token, | 225 bool CPDF_SimpleParser::FindTagPair(const CFX_ByteStringC& start_token, const CF
X_ByteStringC& end_token, |
226 FX_DWORD& start_pos, FX_DWORD& end_pos) | 226 FX_DWORD& start_pos, FX_DWORD& end_pos) |
227 { | 227 { |
228 if (!start_token.IsEmpty()) { | 228 if (!start_token.IsEmpty()) { |
229 if (!SkipWord(start_token)) { | 229 if (!SkipWord(start_token)) { |
230 return FALSE; | 230 return false; |
231 } | 231 } |
232 start_pos = m_dwCurPos; | 232 start_pos = m_dwCurPos; |
233 } | 233 } |
234 while (1) { | 234 while (1) { |
235 end_pos = m_dwCurPos; | 235 end_pos = m_dwCurPos; |
236 CFX_ByteStringC word = GetWord(); | 236 CFX_ByteStringC word = GetWord(); |
237 if (word.IsEmpty()) { | 237 if (word.IsEmpty()) { |
238 return FALSE; | 238 return false; |
239 } | 239 } |
240 if (word == end_token) { | 240 if (word == end_token) { |
241 return TRUE; | 241 return true; |
242 } | 242 } |
243 } | 243 } |
244 return FALSE; | 244 return false; |
245 } | 245 } |
246 FX_BOOL CPDF_SimpleParser::FindTagParam(const CFX_ByteStringC& token, int nParam
s) | 246 bool CPDF_SimpleParser::FindTagParam(const CFX_ByteStringC& token, int nParams) |
247 { | 247 { |
248 nParams ++; | 248 nParams ++; |
249 FX_DWORD* pBuf = FX_Alloc(FX_DWORD, nParams); | 249 FX_DWORD* pBuf = FX_Alloc(FX_DWORD, nParams); |
250 int buf_index = 0; | 250 int buf_index = 0; |
251 int buf_count = 0; | 251 int buf_count = 0; |
252 while (1) { | 252 while (1) { |
253 pBuf[buf_index++] = m_dwCurPos; | 253 pBuf[buf_index++] = m_dwCurPos; |
254 if (buf_index == nParams) { | 254 if (buf_index == nParams) { |
255 buf_index = 0; | 255 buf_index = 0; |
256 } | 256 } |
257 buf_count ++; | 257 buf_count ++; |
258 if (buf_count > nParams) { | 258 if (buf_count > nParams) { |
259 buf_count = nParams; | 259 buf_count = nParams; |
260 } | 260 } |
261 CFX_ByteStringC word = GetWord(); | 261 CFX_ByteStringC word = GetWord(); |
262 if (word.IsEmpty()) { | 262 if (word.IsEmpty()) { |
263 FX_Free(pBuf); | 263 FX_Free(pBuf); |
264 return FALSE; | 264 return false; |
265 } | 265 } |
266 if (word == token) { | 266 if (word == token) { |
267 if (buf_count < nParams) { | 267 if (buf_count < nParams) { |
268 continue; | 268 continue; |
269 } | 269 } |
270 m_dwCurPos = pBuf[buf_index]; | 270 m_dwCurPos = pBuf[buf_index]; |
271 FX_Free(pBuf); | 271 FX_Free(pBuf); |
272 return TRUE; | 272 return true; |
273 } | 273 } |
274 } | 274 } |
275 return FALSE; | 275 return false; |
276 } | 276 } |
277 static int _hex2dec(char ch) | 277 static int _hex2dec(char ch) |
278 { | 278 { |
279 if (ch >= '0' && ch <= '9') { | 279 if (ch >= '0' && ch <= '9') { |
280 return ch - '0'; | 280 return ch - '0'; |
281 } | 281 } |
282 if (ch >= 'a' && ch <= 'f') { | 282 if (ch >= 'a' && ch <= 'f') { |
283 return ch - 'a' + 10; | 283 return ch - 'a' + 10; |
284 } | 284 } |
285 if (ch >= 'A' && ch <= 'F') { | 285 if (ch >= 'A' && ch <= 'F') { |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
360 switch (pObj->GetType()) { | 360 switch (pObj->GetType()) { |
361 case PDFOBJ_NULL: | 361 case PDFOBJ_NULL: |
362 buf << FX_BSTRC(" null"); | 362 buf << FX_BSTRC(" null"); |
363 break; | 363 break; |
364 case PDFOBJ_BOOLEAN: | 364 case PDFOBJ_BOOLEAN: |
365 case PDFOBJ_NUMBER: | 365 case PDFOBJ_NUMBER: |
366 buf << " " << pObj->GetString(); | 366 buf << " " << pObj->GetString(); |
367 break; | 367 break; |
368 case PDFOBJ_STRING: { | 368 case PDFOBJ_STRING: { |
369 CFX_ByteString str = pObj->GetString(); | 369 CFX_ByteString str = pObj->GetString(); |
370 FX_BOOL bHex = ((CPDF_String*)pObj)->IsHex(); | 370 bool bHex = ((CPDF_String*)pObj)->IsHex(); |
371 buf << PDF_EncodeString(str, bHex); | 371 buf << PDF_EncodeString(str, bHex); |
372 break; | 372 break; |
373 } | 373 } |
374 case PDFOBJ_NAME: { | 374 case PDFOBJ_NAME: { |
375 CFX_ByteString str = pObj->GetString(); | 375 CFX_ByteString str = pObj->GetString(); |
376 buf << FX_BSTRC("/") << PDF_NameEncode(str); | 376 buf << FX_BSTRC("/") << PDF_NameEncode(str); |
377 break; | 377 break; |
378 } | 378 } |
379 case PDFOBJ_REFERENCE: { | 379 case PDFOBJ_REFERENCE: { |
380 CPDF_Reference* p = (CPDF_Reference*)pObj; | 380 CPDF_Reference* p = (CPDF_Reference*)pObj; |
(...skipping 28 matching lines...) Expand all Loading... |
409 buf << pValue; | 409 buf << pValue; |
410 } | 410 } |
411 } | 411 } |
412 buf << FX_BSTRC(">>"); | 412 buf << FX_BSTRC(">>"); |
413 break; | 413 break; |
414 } | 414 } |
415 case PDFOBJ_STREAM: { | 415 case PDFOBJ_STREAM: { |
416 CPDF_Stream* p = (CPDF_Stream*)pObj; | 416 CPDF_Stream* p = (CPDF_Stream*)pObj; |
417 buf << p->GetDict() << FX_BSTRC("stream\r\n"); | 417 buf << p->GetDict() << FX_BSTRC("stream\r\n"); |
418 CPDF_StreamAcc acc; | 418 CPDF_StreamAcc acc; |
419 acc.LoadAllData(p, TRUE); | 419 acc.LoadAllData(p, true); |
420 buf.AppendBlock(acc.GetData(), acc.GetSize()); | 420 buf.AppendBlock(acc.GetData(), acc.GetSize()); |
421 buf << FX_BSTRC("\r\nendstream"); | 421 buf << FX_BSTRC("\r\nendstream"); |
422 break; | 422 break; |
423 } | 423 } |
424 default: | 424 default: |
425 ASSERT(FALSE); | 425 ASSERT(false); |
426 break; | 426 break; |
427 } | 427 } |
428 return buf; | 428 return buf; |
429 } | 429 } |
430 FX_FLOAT PDF_ClipFloat(FX_FLOAT f) | 430 FX_FLOAT PDF_ClipFloat(FX_FLOAT f) |
431 { | 431 { |
432 if (f < 0) { | 432 if (f < 0) { |
433 return 0; | 433 return 0; |
434 } | 434 } |
435 if (f > 1.0f) { | 435 if (f > 1.0f) { |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
470 if (pFound) { | 470 if (pFound) { |
471 return pFound; | 471 return pFound; |
472 } | 472 } |
473 } | 473 } |
474 return NULL; | 474 return NULL; |
475 } | 475 } |
476 CPDF_Object* CPDF_NumberTree::LookupValue(int num) | 476 CPDF_Object* CPDF_NumberTree::LookupValue(int num) |
477 { | 477 { |
478 return SearchNumberNode(m_pRoot, num); | 478 return SearchNumberNode(m_pRoot, num); |
479 } | 479 } |
OLD | NEW |