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

Side by Side Diff: core/src/fpdfapi/fpdf_page/fpdf_page_parser.cpp

Issue 1577453002: Merge to XFA: Clean up misc nits found while fixing bugs. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
Patch Set: Created 4 years, 11 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 unified diff | Download patch
OLDNEW
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 "pageint.h" 7 #include "core/src/fpdfapi/fpdf_page/pageint.h"
8 8
9 #include "core/include/fpdfapi/fpdf_module.h" 9 #include "core/include/fpdfapi/fpdf_module.h"
10 #include "core/include/fpdfapi/fpdf_page.h" 10 #include "core/include/fpdfapi/fpdf_page.h"
11 #include "core/include/fpdfapi/fpdf_serial.h" 11 #include "core/include/fpdfapi/fpdf_serial.h"
12 12
13 #define REQUIRE_PARAMS(count) \ 13 namespace {
14 if (m_ParamCount != count) { \ 14
15 return; \ 15 struct _FX_BSTR {
16 const FX_CHAR* m_Ptr;
17 int m_Size;
18 };
19 #define _FX_BSTRC(str) \
20 { str, sizeof(str) - 1 }
21
22 struct PDF_AbbrPairs {
23 _FX_BSTR full_name;
24 _FX_BSTR abbr;
25 };
26
27 const PDF_AbbrPairs PDF_InlineKeyAbbr[] = {
28 {_FX_BSTRC("BitsPerComponent"), _FX_BSTRC("BPC")},
29 {_FX_BSTRC("ColorSpace"), _FX_BSTRC("CS")},
30 {_FX_BSTRC("Decode"), _FX_BSTRC("D")},
31 {_FX_BSTRC("DecodeParms"), _FX_BSTRC("DP")},
32 {_FX_BSTRC("Filter"), _FX_BSTRC("F")},
33 {_FX_BSTRC("Height"), _FX_BSTRC("H")},
34 {_FX_BSTRC("ImageMask"), _FX_BSTRC("IM")},
35 {_FX_BSTRC("Interpolate"), _FX_BSTRC("I")},
36 {_FX_BSTRC("Width"), _FX_BSTRC("W")},
37 };
38
39 const PDF_AbbrPairs PDF_InlineValueAbbr[] = {
40 {_FX_BSTRC("DeviceGray"), _FX_BSTRC("G")},
41 {_FX_BSTRC("DeviceRGB"), _FX_BSTRC("RGB")},
42 {_FX_BSTRC("DeviceCMYK"), _FX_BSTRC("CMYK")},
43 {_FX_BSTRC("Indexed"), _FX_BSTRC("I")},
44 {_FX_BSTRC("ASCIIHexDecode"), _FX_BSTRC("AHx")},
45 {_FX_BSTRC("ASCII85Decode"), _FX_BSTRC("A85")},
46 {_FX_BSTRC("LZWDecode"), _FX_BSTRC("LZW")},
47 {_FX_BSTRC("FlateDecode"), _FX_BSTRC("Fl")},
48 {_FX_BSTRC("RunLengthDecode"), _FX_BSTRC("RL")},
49 {_FX_BSTRC("CCITTFaxDecode"), _FX_BSTRC("CCF")},
50 {_FX_BSTRC("DCTDecode"), _FX_BSTRC("DCT")},
51 };
52
53 CFX_ByteStringC PDF_FindFullName(const PDF_AbbrPairs* table,
54 size_t count,
55 const CFX_ByteStringC& abbr) {
56 for (size_t i = 0; i < count; ++i) {
57 if (abbr.GetLength() != table[i].abbr.m_Size)
58 continue;
59 if (memcmp(abbr.GetPtr(), table[i].abbr.m_Ptr, abbr.GetLength()))
60 continue;
61 return CFX_ByteStringC(table[i].full_name.m_Ptr, table[i].full_name.m_Size);
16 } 62 }
63 return CFX_ByteStringC();
64 }
65
66 CFX_ByteStringC PDF_FindAbbrName(const PDF_AbbrPairs* table,
67 size_t count,
68 const CFX_ByteStringC& name) {
69 for (size_t i = 0; i < count; ++i) {
70 if (name.GetLength() != table[i].full_name.m_Size)
71 continue;
72 if (memcmp(name.GetPtr(), table[i].full_name.m_Ptr, name.GetLength()))
73 continue;
74 return CFX_ByteStringC(table[i].abbr.m_Ptr, table[i].abbr.m_Size);
75 }
76 return CFX_ByteStringC();
77 }
78
79 } // namespace
17 80
18 CPDF_StreamContentParser::CPDF_StreamContentParser( 81 CPDF_StreamContentParser::CPDF_StreamContentParser(
19 CPDF_Document* pDocument, 82 CPDF_Document* pDocument,
20 CPDF_Dictionary* pPageResources, 83 CPDF_Dictionary* pPageResources,
21 CPDF_Dictionary* pParentResources, 84 CPDF_Dictionary* pParentResources,
22 CFX_Matrix* pmtContentToUser, 85 CFX_Matrix* pmtContentToUser,
23 CPDF_PageObjects* pObjList, 86 CPDF_PageObjects* pObjList,
24 CPDF_Dictionary* pResources, 87 CPDF_Dictionary* pResources,
25 CPDF_Rect* pBBox, 88 CPDF_Rect* pBBox,
26 CPDF_ParseOptions* pOptions, 89 CPDF_ParseOptions* pOptions,
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 FX_BOOL CPDF_StreamContentParser::OnOperator(const FX_CHAR* op) { 417 FX_BOOL CPDF_StreamContentParser::OnOperator(const FX_CHAR* op) {
355 int i = 0; 418 int i = 0;
356 FX_DWORD opid = 0; 419 FX_DWORD opid = 0;
357 while (i < 4 && op[i]) { 420 while (i < 4 && op[i]) {
358 opid = (opid << 8) + op[i]; 421 opid = (opid << 8) + op[i];
359 i++; 422 i++;
360 } 423 }
361 while (i < 4) { 424 while (i < 4) {
362 opid <<= 8; 425 opid <<= 8;
363 i++; 426 i++;
364 }; 427 }
365 int low = 0, high = sizeof g_OpCodes / sizeof(OpCode) - 1; 428 int low = 0, high = sizeof g_OpCodes / sizeof(OpCode) - 1;
366 while (low <= high) { 429 while (low <= high) {
367 int middle = (low + high) / 2; 430 int middle = (low + high) / 2;
368 int compare = opid - g_OpCodes[middle].m_OpId; 431 int compare = opid - g_OpCodes[middle].m_OpId;
369 if (compare == 0) { 432 if (compare == 0) {
370 (this->*g_OpCodes[middle].m_OpHandler)(); 433 (this->*g_OpCodes[middle].m_OpHandler)();
371 return TRUE; 434 return TRUE;
372 } 435 }
373 if (compare < 0) { 436 if (compare < 0) {
374 high = middle - 1; 437 high = middle - 1;
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 m_CurContentMark.GetModify()->AddMark(tag, pDict, bDirect); 487 m_CurContentMark.GetModify()->AddMark(tag, pDict, bDirect);
425 } 488 }
426 } 489 }
427 void CPDF_StreamContentParser::Handle_BeginMarkedContent() { 490 void CPDF_StreamContentParser::Handle_BeginMarkedContent() {
428 if (!m_Options.m_bMarkedContent) { 491 if (!m_Options.m_bMarkedContent) {
429 return; 492 return;
430 } 493 }
431 CFX_ByteString tag = GetString(0); 494 CFX_ByteString tag = GetString(0);
432 m_CurContentMark.GetModify()->AddMark(tag, NULL, FALSE); 495 m_CurContentMark.GetModify()->AddMark(tag, NULL, FALSE);
433 } 496 }
434 struct _FX_BSTR { 497
435 const FX_CHAR* m_Ptr; 498 void PDF_ReplaceAbbr(CPDF_Object* pObj) {
436 int m_Size;
437 };
438 #define _FX_BSTRC(str) \
439 { str, sizeof(str) - 1 }
440 const _FX_BSTR _PDF_InlineKeyAbbr[] = {
441 _FX_BSTRC("BitsPerComponent"),
442 _FX_BSTRC("BPC"),
443 _FX_BSTRC("ColorSpace"),
444 _FX_BSTRC("CS"),
445 _FX_BSTRC("Decode"),
446 _FX_BSTRC("D"),
447 _FX_BSTRC("DecodeParms"),
448 _FX_BSTRC("DP"),
449 _FX_BSTRC("Filter"),
450 _FX_BSTRC("F"),
451 _FX_BSTRC("Height"),
452 _FX_BSTRC("H"),
453 _FX_BSTRC("ImageMask"),
454 _FX_BSTRC("IM"),
455 _FX_BSTRC("Interpolate"),
456 _FX_BSTRC("I"),
457 _FX_BSTRC("Width"),
458 _FX_BSTRC("W"),
459 };
460 const _FX_BSTR _PDF_InlineValueAbbr[] = {
461 _FX_BSTRC("DeviceGray"), _FX_BSTRC("G"),
462 _FX_BSTRC("DeviceRGB"), _FX_BSTRC("RGB"),
463 _FX_BSTRC("DeviceCMYK"), _FX_BSTRC("CMYK"),
464 _FX_BSTRC("Indexed"), _FX_BSTRC("I"),
465 _FX_BSTRC("ASCIIHexDecode"), _FX_BSTRC("AHx"),
466 _FX_BSTRC("ASCII85Decode"), _FX_BSTRC("A85"),
467 _FX_BSTRC("LZWDecode"), _FX_BSTRC("LZW"),
468 _FX_BSTRC("FlateDecode"), _FX_BSTRC("Fl"),
469 _FX_BSTRC("RunLengthDecode"), _FX_BSTRC("RL"),
470 _FX_BSTRC("CCITTFaxDecode"), _FX_BSTRC("CCF"),
471 _FX_BSTRC("DCTDecode"), _FX_BSTRC("DCT"),
472 };
473 static CFX_ByteStringC _PDF_FindFullName(const _FX_BSTR* table,
474 int count,
475 const CFX_ByteStringC& abbr) {
476 int i = 0;
477 while (i < count) {
478 if (abbr.GetLength() == table[i + 1].m_Size &&
479 FXSYS_memcmp(abbr.GetPtr(), table[i + 1].m_Ptr, abbr.GetLength()) ==
480 0) {
481 return CFX_ByteStringC(table[i].m_Ptr, table[i].m_Size);
482 }
483 i += 2;
484 }
485 return CFX_ByteStringC();
486 }
487 void _PDF_ReplaceAbbr(CPDF_Object* pObj) {
488 switch (pObj->GetType()) { 499 switch (pObj->GetType()) {
489 case PDFOBJ_DICTIONARY: { 500 case PDFOBJ_DICTIONARY: {
490 CPDF_Dictionary* pDict = pObj->AsDictionary(); 501 CPDF_Dictionary* pDict = pObj->AsDictionary();
491 FX_POSITION pos = pDict->GetStartPos(); 502 FX_POSITION pos = pDict->GetStartPos();
492 while (pos) { 503 while (pos) {
493 CFX_ByteString key; 504 CFX_ByteString key;
494 CPDF_Object* value = pDict->GetNextElement(pos, key); 505 CPDF_Object* value = pDict->GetNextElement(pos, key);
495 CFX_ByteStringC fullname = _PDF_FindFullName( 506 CFX_ByteStringC fullname = PDF_FindFullName(
496 _PDF_InlineKeyAbbr, sizeof _PDF_InlineKeyAbbr / sizeof(_FX_BSTR), 507 PDF_InlineKeyAbbr, FX_ArraySize(PDF_InlineKeyAbbr), key);
497 key);
498 if (!fullname.IsEmpty()) { 508 if (!fullname.IsEmpty()) {
499 pDict->ReplaceKey(key, fullname); 509 pDict->ReplaceKey(key, fullname);
500 key = fullname; 510 key = fullname;
501 } 511 }
502 512
503 if (value->IsName()) { 513 if (value->IsName()) {
504 CFX_ByteString name = value->GetString(); 514 CFX_ByteString name = value->GetString();
505 fullname = _PDF_FindFullName( 515 fullname = PDF_FindFullName(PDF_InlineValueAbbr,
506 _PDF_InlineValueAbbr, 516 FX_ArraySize(PDF_InlineValueAbbr), name);
507 sizeof _PDF_InlineValueAbbr / sizeof(_FX_BSTR), name);
508 if (!fullname.IsEmpty()) { 517 if (!fullname.IsEmpty()) {
509 pDict->SetAtName(key, fullname); 518 pDict->SetAtName(key, fullname);
510 } 519 }
511 } else { 520 } else {
512 _PDF_ReplaceAbbr(value); 521 PDF_ReplaceAbbr(value);
513 } 522 }
514 } 523 }
515 break; 524 break;
516 } 525 }
517 case PDFOBJ_ARRAY: { 526 case PDFOBJ_ARRAY: {
518 CPDF_Array* pArray = pObj->AsArray(); 527 CPDF_Array* pArray = pObj->AsArray();
519 for (FX_DWORD i = 0; i < pArray->GetCount(); i++) { 528 for (FX_DWORD i = 0; i < pArray->GetCount(); i++) {
520 CPDF_Object* pElement = pArray->GetElement(i); 529 CPDF_Object* pElement = pArray->GetElement(i);
521 if (pElement->IsName()) { 530 if (pElement->IsName()) {
522 CFX_ByteString name = pElement->GetString(); 531 CFX_ByteString name = pElement->GetString();
523 CFX_ByteStringC fullname = _PDF_FindFullName( 532 CFX_ByteStringC fullname = PDF_FindFullName(
524 _PDF_InlineValueAbbr, 533 PDF_InlineValueAbbr, FX_ArraySize(PDF_InlineValueAbbr), name);
525 sizeof _PDF_InlineValueAbbr / sizeof(_FX_BSTR), name);
526 if (!fullname.IsEmpty()) { 534 if (!fullname.IsEmpty()) {
527 pArray->SetAt(i, new CPDF_Name(fullname)); 535 pArray->SetAt(i, new CPDF_Name(fullname));
528 } 536 }
529 } else { 537 } else {
530 _PDF_ReplaceAbbr(pElement); 538 PDF_ReplaceAbbr(pElement);
531 } 539 }
532 } 540 }
533 break; 541 break;
534 } 542 }
535 } 543 }
536 } 544 }
537 static CFX_ByteStringC _PDF_FindAbbrName(const _FX_BSTR* table, 545
538 int count, 546 void PDF_ReplaceFull(CPDF_Object* pObj) {
539 const CFX_ByteStringC& fullName) {
540 int i = 0;
541 while (i < count) {
542 if (fullName.GetLength() == table[i].m_Size &&
543 FXSYS_memcmp(fullName.GetPtr(), table[i].m_Ptr, fullName.GetLength()) ==
544 0) {
545 return CFX_ByteStringC(table[i + 1].m_Ptr, table[i + 1].m_Size);
546 }
547 i += 2;
548 }
549 return CFX_ByteStringC();
550 }
551 void _PDF_ReplaceFull(CPDF_Object* pObj) {
552 switch (pObj->GetType()) { 547 switch (pObj->GetType()) {
553 case PDFOBJ_DICTIONARY: { 548 case PDFOBJ_DICTIONARY: {
554 CPDF_Dictionary* pDict = pObj->AsDictionary(); 549 CPDF_Dictionary* pDict = pObj->AsDictionary();
555 FX_POSITION pos = pDict->GetStartPos(); 550 FX_POSITION pos = pDict->GetStartPos();
556 while (pos) { 551 while (pos) {
557 CFX_ByteString key; 552 CFX_ByteString key;
558 CPDF_Object* value = pDict->GetNextElement(pos, key); 553 CPDF_Object* value = pDict->GetNextElement(pos, key);
559 CFX_ByteStringC abbrName = _PDF_FindAbbrName( 554 CFX_ByteStringC abbrName = PDF_FindAbbrName(
560 _PDF_InlineKeyAbbr, sizeof(_PDF_InlineKeyAbbr) / sizeof(_FX_BSTR), 555 PDF_InlineKeyAbbr, FX_ArraySize(PDF_InlineKeyAbbr), key);
561 key);
562 if (!abbrName.IsEmpty()) { 556 if (!abbrName.IsEmpty()) {
563 pDict->ReplaceKey(key, abbrName); 557 pDict->ReplaceKey(key, abbrName);
564 key = abbrName; 558 key = abbrName;
565 } 559 }
566 if (value->IsName()) { 560 if (value->IsName()) {
567 CFX_ByteString name = value->GetString(); 561 CFX_ByteString name = value->GetString();
568 abbrName = _PDF_FindAbbrName( 562 abbrName = PDF_FindAbbrName(PDF_InlineValueAbbr,
569 _PDF_InlineValueAbbr, 563 FX_ArraySize(PDF_InlineValueAbbr), name);
570 sizeof(_PDF_InlineValueAbbr) / sizeof(_FX_BSTR), name);
571 if (!abbrName.IsEmpty()) { 564 if (!abbrName.IsEmpty()) {
572 pDict->SetAtName(key, abbrName); 565 pDict->SetAtName(key, abbrName);
573 } 566 }
574 } else { 567 } else {
575 _PDF_ReplaceFull(value); 568 PDF_ReplaceFull(value);
576 } 569 }
577 } 570 }
578 break; 571 break;
579 } 572 }
580 case PDFOBJ_ARRAY: { 573 case PDFOBJ_ARRAY: {
581 CPDF_Array* pArray = pObj->AsArray(); 574 CPDF_Array* pArray = pObj->AsArray();
582 for (FX_DWORD i = 0; i < pArray->GetCount(); i++) { 575 for (FX_DWORD i = 0; i < pArray->GetCount(); i++) {
583 CPDF_Object* pElement = pArray->GetElement(i); 576 CPDF_Object* pElement = pArray->GetElement(i);
584 if (pElement->IsName()) { 577 if (pElement->IsName()) {
585 CFX_ByteString name = pElement->GetString(); 578 CFX_ByteString name = pElement->GetString();
586 CFX_ByteStringC abbrName = _PDF_FindAbbrName( 579 CFX_ByteStringC abbrName = PDF_FindAbbrName(
587 _PDF_InlineValueAbbr, 580 PDF_InlineValueAbbr, FX_ArraySize(PDF_InlineValueAbbr), name);
588 sizeof _PDF_InlineValueAbbr / sizeof(_FX_BSTR), name);
589 if (!abbrName.IsEmpty()) { 581 if (!abbrName.IsEmpty()) {
590 pArray->SetAt(i, new CPDF_Name(abbrName)); 582 pArray->SetAt(i, new CPDF_Name(abbrName));
591 } 583 }
592 } else { 584 } else {
593 _PDF_ReplaceFull(pElement); 585 PDF_ReplaceFull(pElement);
594 } 586 }
595 } 587 }
596 break; 588 break;
597 } 589 }
598 } 590 }
599 } 591 }
600 void CPDF_StreamContentParser::Handle_BeginText() { 592 void CPDF_StreamContentParser::Handle_BeginText() {
601 m_pCurStates->m_TextMatrix.Set(1.0f, 0, 0, 1.0f, 0, 0); 593 m_pCurStates->m_TextMatrix.Set(1.0f, 0, 0, 1.0f, 0, 0);
602 OnChangeTextMatrix(); 594 OnChangeTextMatrix();
603 m_pCurStates->m_TextX = 0; 595 m_pCurStates->m_TextX = 0;
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
886 void CPDF_StreamContentParser::Handle_BeginImageData() {} 878 void CPDF_StreamContentParser::Handle_BeginImageData() {}
887 void CPDF_StreamContentParser::Handle_SetLineJoin() { 879 void CPDF_StreamContentParser::Handle_SetLineJoin() {
888 m_pCurStates->m_GraphState.GetModify()->m_LineJoin = 880 m_pCurStates->m_GraphState.GetModify()->m_LineJoin =
889 (CFX_GraphStateData::LineJoin)GetInteger(0); 881 (CFX_GraphStateData::LineJoin)GetInteger(0);
890 } 882 }
891 void CPDF_StreamContentParser::Handle_SetLineCap() { 883 void CPDF_StreamContentParser::Handle_SetLineCap() {
892 m_pCurStates->m_GraphState.GetModify()->m_LineCap = 884 m_pCurStates->m_GraphState.GetModify()->m_LineCap =
893 (CFX_GraphStateData::LineCap)GetInteger(0); 885 (CFX_GraphStateData::LineCap)GetInteger(0);
894 } 886 }
895 void CPDF_StreamContentParser::Handle_SetCMYKColor_Fill() { 887 void CPDF_StreamContentParser::Handle_SetCMYKColor_Fill() {
896 REQUIRE_PARAMS(4); 888 if (m_ParamCount != 4)
889 return;
890
897 FX_FLOAT values[4]; 891 FX_FLOAT values[4];
898 for (int i = 0; i < 4; i++) { 892 for (int i = 0; i < 4; i++) {
899 values[i] = GetNumber(3 - i); 893 values[i] = GetNumber(3 - i);
900 } 894 }
901 CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICECMYK); 895 CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICECMYK);
902 m_pCurStates->m_ColorState.SetFillColor(pCS, values, 4); 896 m_pCurStates->m_ColorState.SetFillColor(pCS, values, 4);
903 } 897 }
904 void CPDF_StreamContentParser::Handle_SetCMYKColor_Stroke() { 898 void CPDF_StreamContentParser::Handle_SetCMYKColor_Stroke() {
905 REQUIRE_PARAMS(4); 899 if (m_ParamCount != 4)
900 return;
901
906 FX_FLOAT values[4]; 902 FX_FLOAT values[4];
907 for (int i = 0; i < 4; i++) { 903 for (int i = 0; i < 4; i++) {
908 values[i] = GetNumber(3 - i); 904 values[i] = GetNumber(3 - i);
909 } 905 }
910 CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICECMYK); 906 CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICECMYK);
911 m_pCurStates->m_ColorState.SetStrokeColor(pCS, values, 4); 907 m_pCurStates->m_ColorState.SetStrokeColor(pCS, values, 4);
912 } 908 }
913 void CPDF_StreamContentParser::Handle_LineTo() { 909 void CPDF_StreamContentParser::Handle_LineTo() {
914 REQUIRE_PARAMS(2); 910 if (m_ParamCount != 2)
911 return;
912
915 if (m_Options.m_bTextOnly) { 913 if (m_Options.m_bTextOnly) {
916 return; 914 return;
917 } 915 }
918 AddPathPoint(GetNumber(1), GetNumber(0), FXPT_LINETO); 916 AddPathPoint(GetNumber(1), GetNumber(0), FXPT_LINETO);
919 } 917 }
920 void CPDF_StreamContentParser::Handle_MoveTo() { 918 void CPDF_StreamContentParser::Handle_MoveTo() {
921 REQUIRE_PARAMS(2); 919 if (m_ParamCount != 2)
920 return;
921
922 if (m_Options.m_bTextOnly) { 922 if (m_Options.m_bTextOnly) {
923 m_pSyntax->SkipPathObject(); 923 m_pSyntax->SkipPathObject();
924 return; 924 return;
925 } 925 }
926 AddPathPoint(GetNumber(1), GetNumber(0), FXPT_MOVETO); 926 AddPathPoint(GetNumber(1), GetNumber(0), FXPT_MOVETO);
927 ParsePathObject(); 927 ParsePathObject();
928 } 928 }
929 void CPDF_StreamContentParser::Handle_SetMiterLimit() { 929 void CPDF_StreamContentParser::Handle_SetMiterLimit() {
930 m_pCurStates->m_GraphState.GetModify()->m_MiterLimit = GetNumber(0); 930 m_pCurStates->m_GraphState.GetModify()->m_MiterLimit = GetNumber(0);
931 } 931 }
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
963 FX_FLOAT y, 963 FX_FLOAT y,
964 FX_FLOAT w, 964 FX_FLOAT w,
965 FX_FLOAT h) { 965 FX_FLOAT h) {
966 AddPathPoint(x, y, FXPT_MOVETO); 966 AddPathPoint(x, y, FXPT_MOVETO);
967 AddPathPoint(x + w, y, FXPT_LINETO); 967 AddPathPoint(x + w, y, FXPT_LINETO);
968 AddPathPoint(x + w, y + h, FXPT_LINETO); 968 AddPathPoint(x + w, y + h, FXPT_LINETO);
969 AddPathPoint(x, y + h, FXPT_LINETO); 969 AddPathPoint(x, y + h, FXPT_LINETO);
970 AddPathPoint(x, y, FXPT_LINETO | FXPT_CLOSEFIGURE); 970 AddPathPoint(x, y, FXPT_LINETO | FXPT_CLOSEFIGURE);
971 } 971 }
972 void CPDF_StreamContentParser::Handle_SetRGBColor_Fill() { 972 void CPDF_StreamContentParser::Handle_SetRGBColor_Fill() {
973 REQUIRE_PARAMS(3); 973 if (m_ParamCount != 3)
974 return;
975
974 FX_FLOAT values[3]; 976 FX_FLOAT values[3];
975 for (int i = 0; i < 3; i++) { 977 for (int i = 0; i < 3; i++) {
976 values[i] = GetNumber(2 - i); 978 values[i] = GetNumber(2 - i);
977 } 979 }
978 CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB); 980 CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB);
979 m_pCurStates->m_ColorState.SetFillColor(pCS, values, 3); 981 m_pCurStates->m_ColorState.SetFillColor(pCS, values, 3);
980 } 982 }
981 void CPDF_StreamContentParser::Handle_SetRGBColor_Stroke() { 983 void CPDF_StreamContentParser::Handle_SetRGBColor_Stroke() {
982 REQUIRE_PARAMS(3); 984 if (m_ParamCount != 3)
985 return;
986
983 FX_FLOAT values[3]; 987 FX_FLOAT values[3];
984 for (int i = 0; i < 3; i++) { 988 for (int i = 0; i < 3; i++) {
985 values[i] = GetNumber(2 - i); 989 values[i] = GetNumber(2 - i);
986 } 990 }
987 CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB); 991 CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB);
988 m_pCurStates->m_ColorState.SetStrokeColor(pCS, values, 3); 992 m_pCurStates->m_ColorState.SetStrokeColor(pCS, values, 3);
989 } 993 }
990 void CPDF_StreamContentParser::Handle_SetRenderIntent() {} 994 void CPDF_StreamContentParser::Handle_SetRenderIntent() {}
991 void CPDF_StreamContentParser::Handle_CloseStrokePath() { 995 void CPDF_StreamContentParser::Handle_CloseStrokePath() {
992 if (m_Options.m_bTextOnly) { 996 if (m_Options.m_bTextOnly) {
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after
1334 for (int i = 0; i < n; i++) { 1338 for (int i = 0; i < n; i++) {
1335 if (pArray->GetElementValue(i)->IsString()) 1339 if (pArray->GetElementValue(i)->IsString())
1336 nsegs++; 1340 nsegs++;
1337 } 1341 }
1338 if (nsegs == 0) { 1342 if (nsegs == 0) {
1339 for (int i = 0; i < n; i++) { 1343 for (int i = 0; i < n; i++) {
1340 m_pCurStates->m_TextX -= 1344 m_pCurStates->m_TextX -=
1341 FXSYS_Mul(pArray->GetNumber(i), 1345 FXSYS_Mul(pArray->GetNumber(i),
1342 m_pCurStates->m_TextState.GetFontSize()) / 1346 m_pCurStates->m_TextState.GetFontSize()) /
1343 1000; 1347 1000;
1344 }; 1348 }
1345 return; 1349 return;
1346 } 1350 }
1347 CFX_ByteString* pStrs = new CFX_ByteString[nsegs]; 1351 CFX_ByteString* pStrs = new CFX_ByteString[nsegs];
1348 FX_FLOAT* pKerning = FX_Alloc(FX_FLOAT, nsegs); 1352 FX_FLOAT* pKerning = FX_Alloc(FX_FLOAT, nsegs);
1349 int iSegment = 0; 1353 int iSegment = 0;
1350 FX_FLOAT fInitKerning = 0; 1354 FX_FLOAT fInitKerning = 0;
1351 for (int i = 0; i < n; i++) { 1355 for (int i = 0; i < n; i++) {
1352 CPDF_Object* pObj = pArray->GetElementValue(i); 1356 CPDF_Object* pObj = pArray->GetElementValue(i);
1353 if (pObj->IsString()) { 1357 if (pObj->IsString()) {
1354 CFX_ByteString str = pObj->GetString(); 1358 CFX_ByteString str = pObj->GetString();
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
1520 m_pObjectList->m_ObjectList.AddTail(pPathObj); 1524 m_pObjectList->m_ObjectList.AddTail(pPathObj);
1521 } 1525 }
1522 if (PathClipType) { 1526 if (PathClipType) {
1523 if (!matrix.IsIdentity()) { 1527 if (!matrix.IsIdentity()) {
1524 Path.Transform(&matrix); 1528 Path.Transform(&matrix);
1525 matrix.SetIdentity(); 1529 matrix.SetIdentity();
1526 } 1530 }
1527 m_pCurStates->m_ClipPath.AppendPath(Path, PathClipType, TRUE); 1531 m_pCurStates->m_ClipPath.AppendPath(Path, PathClipType, TRUE);
1528 } 1532 }
1529 } 1533 }
OLDNEW
« no previous file with comments | « core/src/fpdfapi/fpdf_edit/fpdf_edit_create.cpp ('k') | core/src/fpdfapi/fpdf_page/fpdf_page_parser_old.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698