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

Side by Side Diff: core/fpdfdoc/cpdf_interform.cpp

Issue 2345063002: Use string pools in some dictionaries (Closed)
Patch Set: Remove default ctor Created 4 years, 3 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 2016 PDFium Authors. All rights reserved. 1 // Copyright 2016 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 <vector> 7 #include <vector>
8 8
9 #include "core/fpdfapi/fpdf_font/include/cpdf_font.h" 9 #include "core/fpdfapi/fpdf_font/include/cpdf_font.h"
10 #include "core/fpdfapi/fpdf_font/include/cpdf_fontencoding.h" 10 #include "core/fpdfapi/fpdf_font/include/cpdf_fontencoding.h"
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 void AddFont(CPDF_Dictionary*& pFormDict, 51 void AddFont(CPDF_Dictionary*& pFormDict,
52 CPDF_Document* pDocument, 52 CPDF_Document* pDocument,
53 const CPDF_Font* pFont, 53 const CPDF_Font* pFont,
54 CFX_ByteString& csNameTag); 54 CFX_ByteString& csNameTag);
55 55
56 void InitDict(CPDF_Dictionary*& pFormDict, CPDF_Document* pDocument) { 56 void InitDict(CPDF_Dictionary*& pFormDict, CPDF_Document* pDocument) {
57 if (!pDocument) 57 if (!pDocument)
58 return; 58 return;
59 59
60 if (!pFormDict) { 60 if (!pFormDict) {
61 pFormDict = new CPDF_Dictionary; 61 pFormDict = new CPDF_Dictionary(pDocument);
62 uint32_t dwObjNum = pDocument->AddIndirectObject(pFormDict); 62 uint32_t dwObjNum = pDocument->AddIndirectObject(pFormDict);
63 CPDF_Dictionary* pRoot = pDocument->GetRoot(); 63 CPDF_Dictionary* pRoot = pDocument->GetRoot();
64 pRoot->SetReferenceFor("AcroForm", pDocument, dwObjNum); 64 pRoot->SetReferenceFor("AcroForm", pDocument, dwObjNum);
65 } 65 }
66 66
67 CFX_ByteString csDA; 67 CFX_ByteString csDA;
68 if (!pFormDict->KeyExist("DR")) { 68 if (!pFormDict->KeyExist("DR")) {
69 CFX_ByteString csBaseName; 69 CFX_ByteString csBaseName;
70 CFX_ByteString csDefault; 70 CFX_ByteString csDefault;
71 uint8_t charSet = CPDF_InterForm::GetNativeCharSet(); 71 uint8_t charSet = CPDF_InterForm::GetNativeCharSet();
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 CFX_ByteString csTag; 385 CFX_ByteString csTag;
386 if (FindFont(pFormDict, pFont, csTag)) { 386 if (FindFont(pFormDict, pFont, csTag)) {
387 csNameTag = csTag; 387 csNameTag = csTag;
388 return; 388 return;
389 } 389 }
390 if (!pFormDict) 390 if (!pFormDict)
391 InitDict(pFormDict, pDocument); 391 InitDict(pFormDict, pDocument);
392 392
393 CPDF_Dictionary* pDR = pFormDict->GetDictFor("DR"); 393 CPDF_Dictionary* pDR = pFormDict->GetDictFor("DR");
394 if (!pDR) { 394 if (!pDR) {
395 pDR = new CPDF_Dictionary; 395 pDR = new CPDF_Dictionary(pDocument);
396 pFormDict->SetFor("DR", pDR); 396 pFormDict->SetFor("DR", pDR);
397 } 397 }
398 CPDF_Dictionary* pFonts = pDR->GetDictFor("Font"); 398 CPDF_Dictionary* pFonts = pDR->GetDictFor("Font");
399 if (!pFonts) { 399 if (!pFonts) {
400 pFonts = new CPDF_Dictionary; 400 pFonts = new CPDF_Dictionary(pDocument);
401 pDR->SetFor("Font", pFonts); 401 pDR->SetFor("Font", pFonts);
402 } 402 }
403 if (csNameTag.IsEmpty()) 403 if (csNameTag.IsEmpty())
404 csNameTag = pFont->GetBaseFont(); 404 csNameTag = pFont->GetBaseFont();
405 405
406 csNameTag.Remove(' '); 406 csNameTag.Remove(' ');
407 csNameTag = CPDF_InterForm::GenerateNewResourceName(pDR, "Font", 4, 407 csNameTag = CPDF_InterForm::GenerateNewResourceName(pDR, "Font", 4,
408 csNameTag.c_str()); 408 csNameTag.c_str());
409 pFonts->SetReferenceFor(csNameTag, pDocument, pFont->GetFontDict()); 409 pFonts->SetReferenceFor(csNameTag, pDocument, pFont->GetFontDict());
410 } 410 }
(...skipping 1078 matching lines...) Expand 10 before | Expand all | Expand 10 after
1489 if (!pDoc) 1489 if (!pDoc)
1490 return nullptr; 1490 return nullptr;
1491 1491
1492 CPDF_Dictionary* pMainDict = pDoc->GetRoot()->GetDictFor("FDF"); 1492 CPDF_Dictionary* pMainDict = pDoc->GetRoot()->GetDictFor("FDF");
1493 if (!pdf_path.IsEmpty()) { 1493 if (!pdf_path.IsEmpty()) {
1494 if (bSimpleFileSpec) { 1494 if (bSimpleFileSpec) {
1495 CFX_WideString wsFilePath = CPDF_FileSpec::EncodeFileName(pdf_path); 1495 CFX_WideString wsFilePath = CPDF_FileSpec::EncodeFileName(pdf_path);
1496 pMainDict->SetStringFor("F", CFX_ByteString::FromUnicode(wsFilePath)); 1496 pMainDict->SetStringFor("F", CFX_ByteString::FromUnicode(wsFilePath));
1497 pMainDict->SetStringFor("UF", PDF_EncodeText(wsFilePath)); 1497 pMainDict->SetStringFor("UF", PDF_EncodeText(wsFilePath));
1498 } else { 1498 } else {
1499 CPDF_FileSpec filespec; 1499 CPDF_FileSpec filespec(pDoc);
1500 filespec.SetFileName(pdf_path); 1500 filespec.SetFileName(pdf_path);
1501 pMainDict->SetFor("F", filespec.GetObj()); 1501 pMainDict->SetFor("F", filespec.GetObj());
1502 } 1502 }
1503 } 1503 }
1504 1504
1505 CPDF_Array* pFields = new CPDF_Array; 1505 CPDF_Array* pFields = new CPDF_Array;
1506 pMainDict->SetFor("Fields", pFields); 1506 pMainDict->SetFor("Fields", pFields);
1507 int nCount = m_pFieldTree->m_Root.CountFields(); 1507 int nCount = m_pFieldTree->m_Root.CountFields();
1508 for (int i = 0; i < nCount; i++) { 1508 for (int i = 0; i < nCount; i++) {
1509 CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i); 1509 CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i);
1510 if (!pField || pField->GetType() == CPDF_FormField::PushButton) 1510 if (!pField || pField->GetType() == CPDF_FormField::PushButton)
1511 continue; 1511 continue;
1512 1512
1513 uint32_t dwFlags = pField->GetFieldFlags(); 1513 uint32_t dwFlags = pField->GetFieldFlags();
1514 if (dwFlags & 0x04) 1514 if (dwFlags & 0x04)
1515 continue; 1515 continue;
1516 1516
1517 if (bIncludeOrExclude == pdfium::ContainsValue(fields, pField)) { 1517 if (bIncludeOrExclude == pdfium::ContainsValue(fields, pField)) {
1518 if ((dwFlags & 0x02) != 0 && pField->m_pDict->GetStringFor("V").IsEmpty()) 1518 if ((dwFlags & 0x02) != 0 && pField->m_pDict->GetStringFor("V").IsEmpty())
1519 continue; 1519 continue;
1520 1520
1521 CFX_WideString fullname = FPDF_GetFullName(pField->GetFieldDict()); 1521 CFX_WideString fullname = FPDF_GetFullName(pField->GetFieldDict());
1522 CPDF_Dictionary* pFieldDict = new CPDF_Dictionary; 1522 CPDF_Dictionary* pFieldDict = new CPDF_Dictionary(pDoc);
1523 pFieldDict->SetFor("T", new CPDF_String(fullname)); 1523 pFieldDict->SetFor("T", new CPDF_String(fullname));
1524 if (pField->GetType() == CPDF_FormField::CheckBox || 1524 if (pField->GetType() == CPDF_FormField::CheckBox ||
1525 pField->GetType() == CPDF_FormField::RadioButton) { 1525 pField->GetType() == CPDF_FormField::RadioButton) {
1526 CFX_WideString csExport = pField->GetCheckValue(FALSE); 1526 CFX_WideString csExport = pField->GetCheckValue(FALSE);
1527 CFX_ByteString csBExport = PDF_EncodeText(csExport); 1527 CFX_ByteString csBExport = PDF_EncodeText(csExport);
1528 CPDF_Object* pOpt = FPDF_GetFieldAttr(pField->m_pDict, "Opt"); 1528 CPDF_Object* pOpt = FPDF_GetFieldAttr(pField->m_pDict, "Opt");
1529 if (pOpt) 1529 if (pOpt)
1530 pFieldDict->SetStringFor("V", csBExport); 1530 pFieldDict->SetStringFor("V", csBExport);
1531 else 1531 else
1532 pFieldDict->SetNameFor("V", csBExport); 1532 pFieldDict->SetNameFor("V", csBExport);
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
1624 FDF_ImportField(pField, L"", bNotify); 1624 FDF_ImportField(pField, L"", bNotify);
1625 } 1625 }
1626 if (bNotify && m_pFormNotify) 1626 if (bNotify && m_pFormNotify)
1627 m_pFormNotify->AfterFormImportData(this); 1627 m_pFormNotify->AfterFormImportData(this);
1628 return TRUE; 1628 return TRUE;
1629 } 1629 }
1630 1630
1631 void CPDF_InterForm::SetFormNotify(IPDF_FormNotify* pNotify) { 1631 void CPDF_InterForm::SetFormNotify(IPDF_FormNotify* pNotify) {
1632 m_pFormNotify = pNotify; 1632 m_pFormNotify = pNotify;
1633 } 1633 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698