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 "core/include/fpdfdoc/fpdf_doc.h" | 7 #include "core/include/fpdfdoc/fpdf_doc.h" |
8 #include "doc_utils.h" | 8 #include "doc_utils.h" |
9 | 9 |
10 static const int FPDFDOC_UTILS_MAXRECURSION = 32; | 10 static const int FPDFDOC_UTILS_MAXRECURSION = 32; |
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
272 } | 272 } |
273 CPDF_Dictionary* pDR = pFormDict->GetDict("DR"); | 273 CPDF_Dictionary* pDR = pFormDict->GetDict("DR"); |
274 if (!pDR) { | 274 if (!pDR) { |
275 return 0; | 275 return 0; |
276 } | 276 } |
277 CPDF_Dictionary* pFonts = pDR->GetDict("Font"); | 277 CPDF_Dictionary* pFonts = pDR->GetDict("Font"); |
278 if (!pFonts) { | 278 if (!pFonts) { |
279 return 0; | 279 return 0; |
280 } | 280 } |
281 FX_DWORD dwCount = 0; | 281 FX_DWORD dwCount = 0; |
282 FX_POSITION pos = pFonts->GetStartPos(); | 282 for (const auto& it : *pFonts) { |
283 while (pos) { | 283 CPDF_Object* pObj = it.second; |
284 CPDF_Object* pObj = NULL; | |
285 CFX_ByteString csKey; | |
286 pObj = pFonts->GetNextElement(pos, csKey); | |
287 if (!pObj) { | 284 if (!pObj) { |
288 continue; | 285 continue; |
289 } | 286 } |
290 if (CPDF_Dictionary* pDirect = ToDictionary(pObj->GetDirect())) { | 287 if (CPDF_Dictionary* pDirect = ToDictionary(pObj->GetDirect())) { |
291 if (pDirect->GetString("Type") == "Font") { | 288 if (pDirect->GetString("Type") == "Font") { |
292 dwCount++; | 289 dwCount++; |
293 } | 290 } |
294 } | 291 } |
295 } | 292 } |
296 return dwCount; | 293 return dwCount; |
297 } | 294 } |
298 CPDF_Font* GetInterFormFont(CPDF_Dictionary* pFormDict, | 295 CPDF_Font* GetInterFormFont(CPDF_Dictionary* pFormDict, |
299 CPDF_Document* pDocument, | 296 CPDF_Document* pDocument, |
300 FX_DWORD index, | 297 FX_DWORD index, |
301 CFX_ByteString& csNameTag) { | 298 CFX_ByteString& csNameTag) { |
302 if (!pFormDict) { | 299 if (!pFormDict) { |
303 return NULL; | 300 return NULL; |
304 } | 301 } |
305 CPDF_Dictionary* pDR = pFormDict->GetDict("DR"); | 302 CPDF_Dictionary* pDR = pFormDict->GetDict("DR"); |
306 if (!pDR) { | 303 if (!pDR) { |
307 return NULL; | 304 return NULL; |
308 } | 305 } |
309 CPDF_Dictionary* pFonts = pDR->GetDict("Font"); | 306 CPDF_Dictionary* pFonts = pDR->GetDict("Font"); |
310 if (!pFonts) { | 307 if (!pFonts) { |
311 return NULL; | 308 return NULL; |
312 } | 309 } |
313 FX_DWORD dwCount = 0; | 310 FX_DWORD dwCount = 0; |
314 FX_POSITION pos = pFonts->GetStartPos(); | 311 for (const auto& it : *pFonts) { |
315 while (pos) { | 312 const CFX_ByteString& csKey = it.first; |
316 CPDF_Object* pObj = NULL; | 313 CPDF_Object* pObj = it.second; |
317 CFX_ByteString csKey; | |
318 pObj = pFonts->GetNextElement(pos, csKey); | |
319 if (!pObj) { | 314 if (!pObj) { |
320 continue; | 315 continue; |
321 } | 316 } |
322 CPDF_Dictionary* pElement = ToDictionary(pObj->GetDirect()); | 317 CPDF_Dictionary* pElement = ToDictionary(pObj->GetDirect()); |
323 if (!pElement) | 318 if (!pElement) |
324 continue; | 319 continue; |
325 if (pElement->GetString("Type") != "Font") | 320 if (pElement->GetString("Type") != "Font") |
326 continue; | 321 continue; |
327 if (dwCount == index) { | 322 if (dwCount == index) { |
328 csNameTag = csKey; | 323 csNameTag = csKey; |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
364 return NULL; | 359 return NULL; |
365 } | 360 } |
366 CPDF_Dictionary* pDR = pFormDict->GetDict("DR"); | 361 CPDF_Dictionary* pDR = pFormDict->GetDict("DR"); |
367 if (!pDR) { | 362 if (!pDR) { |
368 return NULL; | 363 return NULL; |
369 } | 364 } |
370 CPDF_Dictionary* pFonts = pDR->GetDict("Font"); | 365 CPDF_Dictionary* pFonts = pDR->GetDict("Font"); |
371 if (!pFonts) { | 366 if (!pFonts) { |
372 return NULL; | 367 return NULL; |
373 } | 368 } |
374 FX_POSITION pos = pFonts->GetStartPos(); | 369 for (const auto& it : *pFonts) { |
375 while (pos) { | 370 const CFX_ByteString& csKey = it.first; |
376 CPDF_Object* pObj = NULL; | 371 CPDF_Object* pObj = it.second; |
377 CFX_ByteString csKey; | |
378 pObj = pFonts->GetNextElement(pos, csKey); | |
379 if (!pObj) { | 372 if (!pObj) { |
380 continue; | 373 continue; |
381 } | 374 } |
382 CPDF_Dictionary* pElement = ToDictionary(pObj->GetDirect()); | 375 CPDF_Dictionary* pElement = ToDictionary(pObj->GetDirect()); |
383 if (!pElement) | 376 if (!pElement) |
384 continue; | 377 continue; |
385 if (pElement->GetString("Type") != "Font") | 378 if (pElement->GetString("Type") != "Font") |
386 continue; | 379 continue; |
387 | 380 |
388 CPDF_Font* pFind = pDocument->LoadFont(pElement); | 381 CPDF_Font* pFind = pDocument->LoadFont(pElement); |
(...skipping 18 matching lines...) Expand all Loading... |
407 return NULL; | 400 return NULL; |
408 } | 401 } |
409 CPDF_Dictionary* pDR = pFormDict->GetDict("DR"); | 402 CPDF_Dictionary* pDR = pFormDict->GetDict("DR"); |
410 if (!pDR) { | 403 if (!pDR) { |
411 return NULL; | 404 return NULL; |
412 } | 405 } |
413 CPDF_Dictionary* pFonts = pDR->GetDict("Font"); | 406 CPDF_Dictionary* pFonts = pDR->GetDict("Font"); |
414 if (!pFonts) { | 407 if (!pFonts) { |
415 return NULL; | 408 return NULL; |
416 } | 409 } |
417 FX_POSITION pos = pFonts->GetStartPos(); | 410 for (const auto& it : *pFonts) { |
418 while (pos) { | 411 const CFX_ByteString& csKey = it.first; |
419 CPDF_Object* pObj = NULL; | 412 CPDF_Object* pObj = it.second; |
420 CFX_ByteString csKey; | |
421 pObj = pFonts->GetNextElement(pos, csKey); | |
422 if (!pObj) { | 413 if (!pObj) { |
423 continue; | 414 continue; |
424 } | 415 } |
425 CPDF_Dictionary* pElement = ToDictionary(pObj->GetDirect()); | 416 CPDF_Dictionary* pElement = ToDictionary(pObj->GetDirect()); |
426 if (!pElement) | 417 if (!pElement) |
427 continue; | 418 continue; |
428 if (pElement->GetString("Type") != "Font") | 419 if (pElement->GetString("Type") != "Font") |
429 continue; | 420 continue; |
430 CPDF_Font* pFind = pDocument->LoadFont(pElement); | 421 CPDF_Font* pFind = pDocument->LoadFont(pElement); |
431 if (!pFind) { | 422 if (!pFind) { |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
465 return FALSE; | 456 return FALSE; |
466 } | 457 } |
467 CPDF_Dictionary* pDR = pFormDict->GetDict("DR"); | 458 CPDF_Dictionary* pDR = pFormDict->GetDict("DR"); |
468 if (!pDR) { | 459 if (!pDR) { |
469 return FALSE; | 460 return FALSE; |
470 } | 461 } |
471 CPDF_Dictionary* pFonts = pDR->GetDict("Font"); | 462 CPDF_Dictionary* pFonts = pDR->GetDict("Font"); |
472 if (!pFonts) { | 463 if (!pFonts) { |
473 return FALSE; | 464 return FALSE; |
474 } | 465 } |
475 FX_POSITION pos = pFonts->GetStartPos(); | 466 for (const auto& it : *pFonts) { |
476 while (pos) { | 467 const CFX_ByteString& csKey = it.first; |
477 CPDF_Object* pObj = NULL; | 468 CPDF_Object* pObj = it.second; |
478 CFX_ByteString csKey; | |
479 pObj = pFonts->GetNextElement(pos, csKey); | |
480 if (!pObj) { | 469 if (!pObj) { |
481 continue; | 470 continue; |
482 } | 471 } |
483 CPDF_Dictionary* pElement = ToDictionary(pObj->GetDirect()); | 472 CPDF_Dictionary* pElement = ToDictionary(pObj->GetDirect()); |
484 if (!pElement) | 473 if (!pElement) |
485 continue; | 474 continue; |
486 if (pElement->GetString("Type") != "Font") { | 475 if (pElement->GetString("Type") != "Font") { |
487 continue; | 476 continue; |
488 } | 477 } |
489 if (pFont->GetFontDict() == pElement) { | 478 if (pFont->GetFontDict() == pElement) { |
(...skipping 15 matching lines...) Expand all Loading... |
505 if (!pDR) { | 494 if (!pDR) { |
506 return FALSE; | 495 return FALSE; |
507 } | 496 } |
508 CPDF_Dictionary* pFonts = pDR->GetDict("Font"); | 497 CPDF_Dictionary* pFonts = pDR->GetDict("Font"); |
509 if (!pFonts) { | 498 if (!pFonts) { |
510 return FALSE; | 499 return FALSE; |
511 } | 500 } |
512 if (csFontName.GetLength() > 0) { | 501 if (csFontName.GetLength() > 0) { |
513 csFontName.Remove(' '); | 502 csFontName.Remove(' '); |
514 } | 503 } |
515 FX_POSITION pos = pFonts->GetStartPos(); | 504 for (const auto& it : *pFonts) { |
516 while (pos) { | 505 const CFX_ByteString& csKey = it.first; |
517 CPDF_Object* pObj = NULL; | 506 CPDF_Object* pObj = it.second; |
518 CFX_ByteString csKey, csTmp; | |
519 pObj = pFonts->GetNextElement(pos, csKey); | |
520 if (!pObj) { | 507 if (!pObj) { |
521 continue; | 508 continue; |
522 } | 509 } |
523 CPDF_Dictionary* pElement = ToDictionary(pObj->GetDirect()); | 510 CPDF_Dictionary* pElement = ToDictionary(pObj->GetDirect()); |
524 if (!pElement) | 511 if (!pElement) |
525 continue; | 512 continue; |
526 if (pElement->GetString("Type") != "Font") { | 513 if (pElement->GetString("Type") != "Font") { |
527 continue; | 514 continue; |
528 } | 515 } |
529 pFont = pDocument->LoadFont(pElement); | 516 pFont = pDocument->LoadFont(pElement); |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
712 CPDF_Object* pAttr = pFieldDict->GetElementValue(name); | 699 CPDF_Object* pAttr = pFieldDict->GetElementValue(name); |
713 if (pAttr) { | 700 if (pAttr) { |
714 return pAttr; | 701 return pAttr; |
715 } | 702 } |
716 CPDF_Dictionary* pParent = pFieldDict->GetDict("Parent"); | 703 CPDF_Dictionary* pParent = pFieldDict->GetDict("Parent"); |
717 if (!pParent) { | 704 if (!pParent) { |
718 return NULL; | 705 return NULL; |
719 } | 706 } |
720 return FPDF_GetFieldAttr(pParent, name, nLevel + 1); | 707 return FPDF_GetFieldAttr(pParent, name, nLevel + 1); |
721 } | 708 } |
OLD | NEW |