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

Side by Side Diff: core/src/fpdfdoc/doc_form.cpp

Issue 1239313005: Merge to XFA - else after returns. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
Patch Set: Fix issues. Created 5 years, 5 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
« no previous file with comments | « core/src/fpdfdoc/doc_basic.cpp ('k') | core/src/fpdfdoc/doc_formcontrol.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "../../include/fpdfdoc/fpdf_doc.h" 7 #include "../../include/fpdfdoc/fpdf_doc.h"
8 #include "doc_utils.h" 8 #include "doc_utils.h"
9 9
10 const int nMaxRecursion = 32; 10 const int nMaxRecursion = 32;
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 LOGFONTA lf; 350 LOGFONTA lf;
351 } PDF_FONTDATA, FAR* LPDF_FONTDATA; 351 } PDF_FONTDATA, FAR* LPDF_FONTDATA;
352 static int CALLBACK EnumFontFamExProc( ENUMLOGFONTEXA *lpelfe, 352 static int CALLBACK EnumFontFamExProc( ENUMLOGFONTEXA *lpelfe,
353 NEWTEXTMETRICEX *lpntme, 353 NEWTEXTMETRICEX *lpntme,
354 DWORD FontType, 354 DWORD FontType,
355 LPARAM lParam 355 LPARAM lParam
356 ) 356 )
357 { 357 {
358 if (FontType != 0x004 || strchr(lpelfe->elfLogFont.lfFaceName, '@') != NULL) { 358 if (FontType != 0x004 || strchr(lpelfe->elfLogFont.lfFaceName, '@') != NULL) {
359 return 1; 359 return 1;
360 } else {
361 LPDF_FONTDATA pData = (LPDF_FONTDATA)lParam;
362 memcpy(&pData->lf, &lpelfe->elfLogFont, sizeof(LOGFONTA));
363 pData->bFind = TRUE;
364 return 0;
365 } 360 }
361 LPDF_FONTDATA pData = (LPDF_FONTDATA)lParam;
362 memcpy(&pData->lf, &lpelfe->elfLogFont, sizeof(LOGFONTA));
363 pData->bFind = TRUE;
364 return 0;
366 } 365 }
367 static FX_BOOL RetrieveSpecificFont(LOGFONTA& lf) 366 static FX_BOOL RetrieveSpecificFont(LOGFONTA& lf)
368 { 367 {
369 PDF_FONTDATA fd; 368 PDF_FONTDATA fd;
370 memset(&fd, 0, sizeof(PDF_FONTDATA)); 369 memset(&fd, 0, sizeof(PDF_FONTDATA));
371 HDC hDC = ::GetDC(NULL); 370 HDC hDC = ::GetDC(NULL);
372 EnumFontFamiliesExA(hDC, &lf, (FONTENUMPROCA)EnumFontFamExProc, (LPARAM)&fd, 0); 371 EnumFontFamiliesExA(hDC, &lf, (FONTENUMPROCA)EnumFontFamExProc, (LPARAM)&fd, 0);
373 ::ReleaseDC(NULL, hDC); 372 ::ReleaseDC(NULL, hDC);
374 if (fd.bFind) { 373 if (fd.bFind) {
375 memcpy(&lf, &fd.lf, sizeof(LOGFONTA)); 374 memcpy(&lf, &fd.lf, sizeof(LOGFONTA));
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after
693 if (pControl == NULL || csNewFieldName.IsEmpty()) { 692 if (pControl == NULL || csNewFieldName.IsEmpty()) {
694 return FALSE; 693 return FALSE;
695 } 694 }
696 CPDF_FormField* pField = ((CPDF_FormControl*)pControl)->GetField(); 695 CPDF_FormField* pField = ((CPDF_FormControl*)pControl)->GetField();
697 return ValidateFieldName(csNewFieldName, pField->GetFieldType(), pField, pCo ntrol); 696 return ValidateFieldName(csNewFieldName, pField->GetFieldType(), pField, pCo ntrol);
698 } 697 }
699 int CPDF_InterForm::CompareFieldName(const CFX_ByteString& name1, const CFX_Byte String& name2) 698 int CPDF_InterForm::CompareFieldName(const CFX_ByteString& name1, const CFX_Byte String& name2)
700 { 699 {
701 const FX_CHAR* ptr1 = name1; 700 const FX_CHAR* ptr1 = name1;
702 const FX_CHAR* ptr2 = name2; 701 const FX_CHAR* ptr2 = name2;
703 if (name1.GetLength() != name2.GetLength()) { 702 if (name1.GetLength() == name2.GetLength()) {
704 int i = 0;
705 while (ptr1[i] == ptr2[i]) {
706 i ++;
707 }
708 if (i == name1.GetLength()) {
709 return 2;
710 }
711 if (i == name2.GetLength()) {
712 return 3;
713 }
714 return 0;
715 } else {
716 return name1 == name2 ? 1 : 0; 703 return name1 == name2 ? 1 : 0;
717 } 704 }
705 int i = 0;
706 while (ptr1[i] == ptr2[i]) {
707 i ++;
708 }
709 if (i == name1.GetLength()) {
710 return 2;
711 }
712 if (i == name2.GetLength()) {
713 return 3;
714 }
715 return 0;
718 } 716 }
719 int CPDF_InterForm::CompareFieldName(const CFX_WideString& name1, const CFX_Wide String& name2) 717 int CPDF_InterForm::CompareFieldName(const CFX_WideString& name1, const CFX_Wide String& name2)
720 { 718 {
721 const FX_WCHAR* ptr1 = name1.c_str(); 719 const FX_WCHAR* ptr1 = name1.c_str();
722 const FX_WCHAR* ptr2 = name2.c_str(); 720 const FX_WCHAR* ptr2 = name2.c_str();
723 if (name1.GetLength() != name2.GetLength()) { 721 if (name1.GetLength() == name2.GetLength()) {
724 int i = 0;
725 while (ptr1[i] == ptr2[i]) {
726 i ++;
727 }
728 if (i == name1.GetLength()) {
729 return 2;
730 }
731 if (i == name2.GetLength()) {
732 return 3;
733 }
734 return 0;
735 } else {
736 return name1 == name2 ? 1 : 0; 722 return name1 == name2 ? 1 : 0;
737 } 723 }
724 int i = 0;
725 while (ptr1[i] == ptr2[i]) {
726 i ++;
727 }
728 if (i == name1.GetLength()) {
729 return 2;
730 }
731 if (i == name2.GetLength()) {
732 return 3;
733 }
734 return 0;
738 } 735 }
739 FX_DWORD CPDF_InterForm::CountFields(const CFX_WideString &csFieldName) 736 FX_DWORD CPDF_InterForm::CountFields(const CFX_WideString &csFieldName)
740 { 737 {
741 if (csFieldName.IsEmpty()) { 738 if (csFieldName.IsEmpty()) {
742 return (FX_DWORD)m_pFieldTree->m_Root.CountFields(); 739 return (FX_DWORD)m_pFieldTree->m_Root.CountFields();
743 } 740 }
744 CFieldTree::_Node *pNode = m_pFieldTree->FindNode(csFieldName); 741 CFieldTree::_Node *pNode = m_pFieldTree->FindNode(csFieldName);
745 if (pNode == NULL) { 742 if (pNode == NULL) {
746 return 0; 743 return 0;
747 } 744 }
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
896 return NULL; 893 return NULL;
897 } 894 }
898 CPDF_FormControl* CPDF_InterForm::GetControlByDict(CPDF_Dictionary* pWidgetDict) const 895 CPDF_FormControl* CPDF_InterForm::GetControlByDict(CPDF_Dictionary* pWidgetDict) const
899 { 896 {
900 CPDF_FormControl* pControl = NULL; 897 CPDF_FormControl* pControl = NULL;
901 m_ControlMap.Lookup(pWidgetDict, (void*&)pControl); 898 m_ControlMap.Lookup(pWidgetDict, (void*&)pControl);
902 return pControl; 899 return pControl;
903 } 900 }
904 FX_DWORD CPDF_InterForm::CountInternalFields(const CFX_WideString& csFieldName) const 901 FX_DWORD CPDF_InterForm::CountInternalFields(const CFX_WideString& csFieldName) const
905 { 902 {
906 if (m_pFormDict == NULL) { 903 if (!m_pFormDict) {
907 return 0; 904 return 0;
908 } 905 }
909 CPDF_Array* pArray = m_pFormDict->GetArray("Fields"); 906 CPDF_Array* pArray = m_pFormDict->GetArray("Fields");
910 if (pArray == NULL) { 907 if (!pArray) {
911 return 0; 908 return 0;
912 } 909 }
913 if (csFieldName.IsEmpty()) { 910 if (csFieldName.IsEmpty()) {
914 return pArray->GetCount(); 911 return pArray->GetCount();
915 } else { 912 }
916 int iLength = csFieldName.GetLength(); 913 int iLength = csFieldName.GetLength();
917 int iPos = 0; 914 int iPos = 0;
918 CPDF_Dictionary* pDict = NULL; 915 CPDF_Dictionary* pDict = NULL;
919 while (pArray != NULL) { 916 while (pArray != NULL) {
920 CFX_WideString csSub; 917 CFX_WideString csSub;
921 if (iPos < iLength && csFieldName[iPos] == L'.') { 918 if (iPos < iLength && csFieldName[iPos] == L'.') {
922 iPos ++; 919 iPos ++;
920 }
921 while (iPos < iLength && csFieldName[iPos] != L'.') {
922 csSub += csFieldName[iPos ++];
923 }
924 int iCount = pArray->GetCount();
925 FX_BOOL bFind = FALSE;
926 for (int i = 0; i < iCount; i ++) {
927 pDict = pArray->GetDict(i);
928 if (pDict == NULL) {
929 continue;
923 } 930 }
924 while (iPos < iLength && csFieldName[iPos] != L'.') { 931 CFX_WideString csT = pDict->GetUnicodeText("T");
925 csSub += csFieldName[iPos ++]; 932 if (csT == csSub) {
926 } 933 bFind = TRUE;
927 int iCount = pArray->GetCount();
928 FX_BOOL bFind = FALSE;
929 for (int i = 0; i < iCount; i ++) {
930 pDict = pArray->GetDict(i);
931 if (pDict == NULL) {
932 continue;
933 }
934 CFX_WideString csT = pDict->GetUnicodeText("T");
935 if (csT == csSub) {
936 bFind = TRUE;
937 break;
938 }
939 }
940 if (!bFind) {
941 return 0;
942 }
943 if (iPos >= iLength) {
944 break; 934 break;
945 } 935 }
946 pArray = pDict->GetArray("Kids");
947 } 936 }
948 if (pDict == NULL) { 937 if (!bFind) {
949 return 0; 938 return 0;
950 } else {
951 pArray = pDict->GetArray("Kids");
952 if (pArray == NULL) {
953 return 1;
954 } else {
955 return pArray->GetCount();
956 }
957 } 939 }
940 if (iPos >= iLength) {
941 break;
942 }
943 pArray = pDict->GetArray("Kids");
958 } 944 }
945 if (!pDict) {
946 return 0;
947 }
948 pArray = pDict->GetArray("Kids");
949 return pArray ? pArray->GetCount() : 1;
959 } 950 }
951
960 CPDF_Dictionary* CPDF_InterForm::GetInternalField(FX_DWORD index, const CFX_Wide String& csFieldName) const 952 CPDF_Dictionary* CPDF_InterForm::GetInternalField(FX_DWORD index, const CFX_Wide String& csFieldName) const
961 { 953 {
962 if (m_pFormDict == NULL) { 954 if (!m_pFormDict) {
963 return NULL; 955 return nullptr;
964 } 956 }
965 CPDF_Array* pArray = m_pFormDict->GetArray("Fields"); 957 CPDF_Array* pArray = m_pFormDict->GetArray("Fields");
966 if (pArray == NULL) { 958 if (!pArray) {
967 return 0; 959 return nullptr;
968 } 960 }
969 if (csFieldName.IsEmpty()) { 961 if (csFieldName.IsEmpty()) {
970 return pArray->GetDict(index); 962 return pArray->GetDict(index);
971 } else { 963 }
972 int iLength = csFieldName.GetLength(); 964 int iLength = csFieldName.GetLength();
973 int iPos = 0; 965 int iPos = 0;
974 CPDF_Dictionary* pDict = NULL; 966 CPDF_Dictionary* pDict = NULL;
975 while (pArray != NULL) { 967 while (pArray != NULL) {
976 CFX_WideString csSub; 968 CFX_WideString csSub;
977 if (iPos < iLength && csFieldName[iPos] == L'.') { 969 if (iPos < iLength && csFieldName[iPos] == L'.') {
978 iPos ++; 970 iPos ++;
971 }
972 while (iPos < iLength && csFieldName[iPos] != L'.') {
973 csSub += csFieldName[iPos ++];
974 }
975 int iCount = pArray->GetCount();
976 FX_BOOL bFind = FALSE;
977 for (int i = 0; i < iCount; i ++) {
978 pDict = pArray->GetDict(i);
979 if (pDict == NULL) {
980 continue;
979 } 981 }
980 while (iPos < iLength && csFieldName[iPos] != L'.') { 982 CFX_WideString csT = pDict->GetUnicodeText("T");
981 csSub += csFieldName[iPos ++]; 983 if (csT == csSub) {
982 } 984 bFind = TRUE;
983 int iCount = pArray->GetCount();
984 FX_BOOL bFind = FALSE;
985 for (int i = 0; i < iCount; i ++) {
986 pDict = pArray->GetDict(i);
987 if (pDict == NULL) {
988 continue;
989 }
990 CFX_WideString csT = pDict->GetUnicodeText("T");
991 if (csT == csSub) {
992 bFind = TRUE;
993 break;
994 }
995 }
996 if (!bFind) {
997 return NULL;
998 }
999 if (iPos >= iLength) {
1000 break; 985 break;
1001 } 986 }
1002 pArray = pDict->GetArray("Kids");
1003 } 987 }
1004 if (pDict == NULL) { 988 if (!bFind) {
1005 return NULL; 989 return NULL;
1006 } else {
1007 pArray = pDict->GetArray("Kids");
1008 if (pArray == NULL) {
1009 return pDict;
1010 } else {
1011 return pArray->GetDict(index);
1012 }
1013 } 990 }
991 if (iPos >= iLength) {
992 break;
993 }
994 pArray = pDict->GetArray("Kids");
1014 } 995 }
996 if (!pDict) {
997 return nullptr;
998 }
999 pArray = pDict->GetArray("Kids");
1000 return pArray ? pArray->GetDict(index) : pDict;
1015 } 1001 }
1016 FX_BOOL CPDF_InterForm::NeedConstructAP() 1002 FX_BOOL CPDF_InterForm::NeedConstructAP()
1017 { 1003 {
1018 if (m_pFormDict == NULL) { 1004 if (m_pFormDict == NULL) {
1019 return FALSE; 1005 return FALSE;
1020 } 1006 }
1021 return m_pFormDict->GetBoolean("NeedAppearances"); 1007 return m_pFormDict->GetBoolean("NeedAppearances");
1022 } 1008 }
1023 void CPDF_InterForm::NeedConstructAP(FX_BOOL bNeedAP) 1009 void CPDF_InterForm::NeedConstructAP(FX_BOOL bNeedAP)
1024 { 1010 {
(...skipping 613 matching lines...) Expand 10 before | Expand all | Expand 10 after
1638 continue; 1624 continue;
1639 } 1625 }
1640 CPDF_FormControl* pControl = NULL; 1626 CPDF_FormControl* pControl = NULL;
1641 if (m_ControlMap.Lookup(pAnnotDict, (void*&)pControl)) { 1627 if (m_ControlMap.Lookup(pAnnotDict, (void*&)pControl)) {
1642 return iNewPage; 1628 return iNewPage;
1643 } 1629 }
1644 } 1630 }
1645 } while (TRUE); 1631 } while (TRUE);
1646 return -1; 1632 return -1;
1647 } 1633 }
OLDNEW
« no previous file with comments | « core/src/fpdfdoc/doc_basic.cpp ('k') | core/src/fpdfdoc/doc_formcontrol.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698