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

Side by Side Diff: xfa/fxfa/parser/xfa_object_imp.cpp

Issue 2011553004: Complete or comment a couple Script_NodeClass functions (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Created 4 years, 6 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 | « xfa/fgas/localization/fgas_locale.cpp ('k') | no next file » | 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 "xfa/fxfa/parser/xfa_object.h" 7 #include "xfa/fxfa/parser/xfa_object.h"
8 8
9 #include <memory> 9 #include <memory>
10 10
(...skipping 884 matching lines...) Expand 10 before | Expand all | Expand 10 after
895 } 895 }
896 if (iLength >= 2) { 896 if (iLength >= 2) {
897 iValue = pArguments->GetInt32(1); 897 iValue = pArguments->GetInt32(1);
898 } 898 }
899 const XFA_ELEMENTINFO* pElementInfo = 899 const XFA_ELEMENTINFO* pElementInfo =
900 XFA_GetElementByName(wsExpression.AsStringC()); 900 XFA_GetElementByName(wsExpression.AsStringC());
901 CXFA_Node* pNode = GetProperty(iValue, pElementInfo->eName); 901 CXFA_Node* pNode = GetProperty(iValue, pElementInfo->eName);
902 FXJSE_Value_Set(pArguments->GetReturnValue(), 902 FXJSE_Value_Set(pArguments->GetReturnValue(),
903 m_pDocument->GetScriptContext()->GetJSValueFromMap(pNode)); 903 m_pDocument->GetScriptContext()->GetJSValueFromMap(pNode));
904 } 904 }
905
905 void CXFA_Node::Script_NodeClass_IsPropertySpecified( 906 void CXFA_Node::Script_NodeClass_IsPropertySpecified(
906 CFXJSE_Arguments* pArguments) { 907 CFXJSE_Arguments* pArguments) {
907 int32_t iLength = pArguments->GetLength(); 908 int32_t iLength = pArguments->GetLength();
908 if (iLength < 1 || iLength > 3) { 909 if (iLength < 1 || iLength > 3) {
909 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, 910 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD,
910 L"isPropertySpecified"); 911 L"isPropertySpecified");
911 return; 912 return;
912 } 913 }
913 CFX_WideString wsExpression; 914 CFX_WideString wsExpression;
914 FX_BOOL bParent = TRUE; 915 FX_BOOL bParent = TRUE;
915 int32_t iIndex = 0; 916 int32_t iIndex = 0;
916 if (iLength >= 1) { 917 if (iLength >= 1)
Tom Sepez 2016/05/25 17:50:29 nit {} needed because of line break in next stmt.
Wei Li 2016/05/25 18:13:18 Done.
917 CFX_ByteString bsExpression = pArguments->GetUTF8String(0); 918 wsExpression =
918 wsExpression = CFX_WideString::FromUTF8(bsExpression.AsStringC()); 919 CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC());
919 } 920 if (iLength >= 2)
920 if (iLength >= 2) { 921 bParent = pArguments->GetInt32(1) ? TRUE : FALSE;
Tom Sepez 2016/05/25 17:50:29 nit: prefer !!pArguments->GetInt32(1);
Wei Li 2016/05/25 18:13:18 Done.
921 bParent = pArguments->GetInt32(1) == 0 ? FALSE : TRUE; 922 if (iLength >= 3)
922 }
923 if (iLength >= 3) {
924 iIndex = pArguments->GetInt32(2); 923 iIndex = pArguments->GetInt32(2);
925 }
926 FX_BOOL bHas = FALSE; 924 FX_BOOL bHas = FALSE;
927 const XFA_ATTRIBUTEINFO* pAttributeInfo = 925 const XFA_ATTRIBUTEINFO* pAttributeInfo =
928 XFA_GetAttributeByName(wsExpression.AsStringC()); 926 XFA_GetAttributeByName(wsExpression.AsStringC());
929 CFX_WideString wsValue; 927 CFX_WideString wsValue;
930 if (pAttributeInfo) { 928 if (pAttributeInfo)
931 bHas = HasAttribute(pAttributeInfo->eName); 929 bHas = HasAttribute(pAttributeInfo->eName);
932 }
933 if (!bHas) { 930 if (!bHas) {
934 const XFA_ELEMENTINFO* pElementInfo = 931 const XFA_ELEMENTINFO* pElementInfo =
935 XFA_GetElementByName(wsExpression.AsStringC()); 932 XFA_GetElementByName(wsExpression.AsStringC());
936 bHas = (GetProperty(iIndex, pElementInfo->eName) != NULL); 933 bHas = GetProperty(iIndex, pElementInfo->eName) != nullptr;
Tom Sepez 2016/05/25 17:50:29 nit: again !! might be cleaner.
Wei Li 2016/05/25 18:13:18 Done.
934 if (!bHas && bParent && m_pParent) {
Tom Sepez 2016/05/25 17:50:29 Where did the idea for this addition come from? C
Wei Li 2016/05/25 18:13:18 Done.
935 // Also check on the parent.
936 bHas = m_pParent->HasAttribute(pAttributeInfo->eName);
937 if (!bHas)
938 bHas = m_pParent->GetProperty(iIndex, pElementInfo->eName) != nullptr;
Tom Sepez 2016/05/25 17:50:29 nit and here.
Wei Li 2016/05/25 18:13:18 Done.
939 }
937 } 940 }
938 FXJSE_HVALUE hValue = pArguments->GetReturnValue(); 941 FXJSE_HVALUE hValue = pArguments->GetReturnValue();
939 if (hValue) { 942 if (hValue)
940 FXJSE_Value_SetBoolean(hValue, bHas); 943 FXJSE_Value_SetBoolean(hValue, bHas);
941 }
942 } 944 }
945
943 void CXFA_Node::Script_NodeClass_LoadXML(CFXJSE_Arguments* pArguments) { 946 void CXFA_Node::Script_NodeClass_LoadXML(CFXJSE_Arguments* pArguments) {
944 int32_t iLength = pArguments->GetLength(); 947 int32_t iLength = pArguments->GetLength();
945 if (iLength < 1 || iLength > 3) { 948 if (iLength < 1 || iLength > 3) {
946 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"loadXML"); 949 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"loadXML");
947 return; 950 return;
948 } 951 }
949 CFX_WideString wsExpression; 952 CFX_WideString wsExpression;
950 FX_BOOL bIgnoreRoot = TRUE; 953 FX_BOOL bIgnoreRoot = TRUE;
951 FX_BOOL bOverwrite = 0; 954 FX_BOOL bOverwrite = 0;
952 if (iLength >= 1) { 955 if (iLength >= 1) {
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
1071 } 1074 }
1072 1075
1073 void CXFA_Node::Script_NodeClass_SaveXML(CFXJSE_Arguments* pArguments) { 1076 void CXFA_Node::Script_NodeClass_SaveXML(CFXJSE_Arguments* pArguments) {
1074 int32_t iLength = pArguments->GetLength(); 1077 int32_t iLength = pArguments->GetLength();
1075 if (iLength < 0 || iLength > 1) { 1078 if (iLength < 0 || iLength > 1) {
1076 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"saveXML"); 1079 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"saveXML");
1077 return; 1080 return;
1078 } 1081 }
1079 FX_BOOL bPrettyMode = FALSE; 1082 FX_BOOL bPrettyMode = FALSE;
1080 if (iLength == 1) { 1083 if (iLength == 1) {
1081 CFX_ByteString bsPretty = pArguments->GetUTF8String(0); 1084 if (pArguments->GetUTF8String(0) != "pretty") {
1082 if (bsPretty != "pretty") {
1083 ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH); 1085 ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH);
1084 return; 1086 return;
1085 } 1087 }
1086 bPrettyMode = TRUE; 1088 bPrettyMode = TRUE;
1087 } 1089 }
1088 CFX_ByteStringC bsXMLHeader = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; 1090 CFX_ByteStringC bsXMLHeader = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
1089 if (GetPacketID() == XFA_XDPPACKET_Form) { 1091 if (GetPacketID() == XFA_XDPPACKET_Form ||
1090 IFX_MemoryStream* pMemoryStream = FX_CreateMemoryStream(TRUE); 1092 GetPacketID() == XFA_XDPPACKET_Datasets) {
1091 IFX_Stream* pStream = IFX_Stream::CreateStream( 1093 CFDE_XMLNode* pElement = nullptr;
1092 (IFX_FileWrite*)pMemoryStream, 1094 if (GetPacketID() == XFA_XDPPACKET_Datasets) {
1093 FX_STREAMACCESS_Text | FX_STREAMACCESS_Write | FX_STREAMACCESS_Append); 1095 pElement = GetXMLMappingNode();
1096 if (!pElement || pElement->GetType() != FDE_XMLNODE_Element) {
1097 FXJSE_Value_SetUTF8String(pArguments->GetReturnValue(), bsXMLHeader);
1098 return;
1099 }
1100 XFA_DataExporter_DealWithDataGroupNode(this);
1101 }
1102 std::unique_ptr<IFX_MemoryStream> pMemoryStream(
1103 FX_CreateMemoryStream(TRUE));
1104 std::unique_ptr<IFX_Stream> pStream(IFX_Stream::CreateStream(
1105 (IFX_FileWrite*)pMemoryStream.get(),
1106 FX_STREAMACCESS_Text | FX_STREAMACCESS_Write | FX_STREAMACCESS_Append));
1094 if (!pStream) { 1107 if (!pStream) {
1095 FXJSE_Value_SetUTF8String(pArguments->GetReturnValue(), bsXMLHeader); 1108 FXJSE_Value_SetUTF8String(pArguments->GetReturnValue(), bsXMLHeader);
1096 pMemoryStream->Release();
1097 pMemoryStream = NULL;
1098 return; 1109 return;
1099 } 1110 }
1100 pStream->SetCodePage(FX_CODEPAGE_UTF8); 1111 pStream->SetCodePage(FX_CODEPAGE_UTF8);
1101 pStream->WriteData(bsXMLHeader.raw_str(), bsXMLHeader.GetLength()); 1112 pStream->WriteData(bsXMLHeader.raw_str(), bsXMLHeader.GetLength());
1102 XFA_DataExporter_RegenerateFormFile(this, pStream, NULL, TRUE); 1113 if (GetPacketID() == XFA_XDPPACKET_Form)
1114 XFA_DataExporter_RegenerateFormFile(this, pStream.get(), NULL, TRUE);
1115 else
1116 pElement->SaveXMLNode(pStream.get());
1117 // TODO(weili): Check whether we need to save pretty print XML. If so, need
1118 // to implement it. Right now, just put it here to avoid unused variable
1119 // warning.
dsinclair 2016/05/25 17:42:38 Should we file a bug for this and link here?
Wei Li 2016/05/25 18:13:18 Done.
1120 (void)bPrettyMode;
1103 FXJSE_Value_SetUTF8String( 1121 FXJSE_Value_SetUTF8String(
1104 pArguments->GetReturnValue(), 1122 pArguments->GetReturnValue(),
1105 CFX_ByteStringC(pMemoryStream->GetBuffer(), pMemoryStream->GetSize())); 1123 CFX_ByteStringC(pMemoryStream->GetBuffer(), pMemoryStream->GetSize()));
1106 pStream->Release();
1107 pStream = NULL;
1108 if (pMemoryStream) {
1109 pMemoryStream->Release();
1110 pMemoryStream = NULL;
1111 }
1112 return;
1113 }
1114 if (GetPacketID() == XFA_XDPPACKET_Datasets) {
1115 CFDE_XMLNode* pElement = GetXMLMappingNode();
1116 if (!pElement || pElement->GetType() != FDE_XMLNODE_Element) {
1117 FXJSE_Value_SetUTF8String(pArguments->GetReturnValue(), bsXMLHeader);
1118 return;
1119 }
1120 XFA_DataExporter_DealWithDataGroupNode(this);
1121 IFX_MemoryStream* pMemoryStream = FX_CreateMemoryStream(TRUE);
1122 IFX_Stream* pStream = IFX_Stream::CreateStream(
1123 (IFX_FileWrite*)pMemoryStream,
1124 FX_STREAMACCESS_Text | FX_STREAMACCESS_Write | FX_STREAMACCESS_Append);
1125 if (pStream) {
1126 pStream->SetCodePage(FX_CODEPAGE_UTF8);
1127 pStream->WriteData(bsXMLHeader.raw_str(), bsXMLHeader.GetLength());
1128 pElement->SaveXMLNode(pStream);
1129 FXJSE_Value_SetUTF8String(pArguments->GetReturnValue(),
1130 CFX_ByteStringC(pMemoryStream->GetBuffer(),
1131 pMemoryStream->GetSize()));
1132 pStream->Release();
1133 pStream = NULL;
1134 }
1135 if (pMemoryStream) {
1136 pMemoryStream->Release();
1137 pMemoryStream = NULL;
1138 }
1139 return; 1124 return;
1140 } 1125 }
1141 FXJSE_Value_SetUTF8String(pArguments->GetReturnValue(), ""); 1126 FXJSE_Value_SetUTF8String(pArguments->GetReturnValue(), "");
1142 } 1127 }
1143 1128
1144 void CXFA_Node::Script_NodeClass_SetAttribute(CFXJSE_Arguments* pArguments) { 1129 void CXFA_Node::Script_NodeClass_SetAttribute(CFXJSE_Arguments* pArguments) {
1145 int32_t iLength = pArguments->GetLength(); 1130 int32_t iLength = pArguments->GetLength();
1146 if (iLength != 2) { 1131 if (iLength != 2) {
1147 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, 1132 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD,
1148 L"setAttribute"); 1133 L"setAttribute");
(...skipping 4216 matching lines...) Expand 10 before | Expand all | Expand 10 after
5365 return m_pAttachNode->InsertChild(pNewNode, pBeforeNode); 5350 return m_pAttachNode->InsertChild(pNewNode, pBeforeNode);
5366 } 5351 }
5367 FX_BOOL CXFA_AttachNodeList::Remove(CXFA_Node* pNode) { 5352 FX_BOOL CXFA_AttachNodeList::Remove(CXFA_Node* pNode) {
5368 return m_pAttachNode->RemoveChild(pNode); 5353 return m_pAttachNode->RemoveChild(pNode);
5369 } 5354 }
5370 CXFA_Node* CXFA_AttachNodeList::Item(int32_t iIndex) { 5355 CXFA_Node* CXFA_AttachNodeList::Item(int32_t iIndex) {
5371 return m_pAttachNode->GetChild( 5356 return m_pAttachNode->GetChild(
5372 iIndex, XFA_ELEMENT_UNKNOWN, 5357 iIndex, XFA_ELEMENT_UNKNOWN,
5373 m_pAttachNode->GetClassID() == XFA_ELEMENT_Subform); 5358 m_pAttachNode->GetClassID() == XFA_ELEMENT_Subform);
5374 } 5359 }
OLDNEW
« no previous file with comments | « xfa/fgas/localization/fgas_locale.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698