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

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

Issue 984773002: Make conversion between CPDF_Action and its dictionary explicit (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Tabs Created 5 years, 9 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/include/fpdfdoc/fpdf_doc.h ('k') | core/src/fpdfdoc/doc_bookmark.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 CPDF_Dest CPDF_Action::GetDest(CPDF_Document* pDoc) const 8 CPDF_Dest CPDF_Action::GetDest(CPDF_Document* pDoc) const
9 { 9 {
10 if (m_pDict == NULL) { 10 if (m_pDict == NULL) {
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 csURI = pURI->GetString("Base") + csURI; 87 csURI = pURI->GetString("Base") + csURI;
88 } 88 }
89 } 89 }
90 return csURI; 90 return csURI;
91 } 91 }
92 FX_DWORD CPDF_ActionFields::GetFieldsCount() const 92 FX_DWORD CPDF_ActionFields::GetFieldsCount() const
93 { 93 {
94 if (m_pAction == NULL) { 94 if (m_pAction == NULL) {
95 return 0; 95 return 0;
96 } 96 }
97 CPDF_Dictionary* pDict = (CPDF_Dictionary*)(*m_pAction); 97 CPDF_Dictionary* pDict = m_pAction->GetDict();
98 if (pDict == NULL) { 98 if (pDict == NULL) {
99 return 0; 99 return 0;
100 } 100 }
101 CFX_ByteString csType = pDict->GetString("S"); 101 CFX_ByteString csType = pDict->GetString("S");
102 CPDF_Object* pFields = NULL; 102 CPDF_Object* pFields = NULL;
103 if (csType == "Hide") { 103 if (csType == "Hide") {
104 pFields = pDict->GetElementValue("T"); 104 pFields = pDict->GetElementValue("T");
105 } else { 105 } else {
106 pFields = pDict->GetArray("Fields"); 106 pFields = pDict->GetArray("Fields");
107 } 107 }
108 if (pFields == NULL) { 108 if (pFields == NULL) {
109 return 0; 109 return 0;
110 } 110 }
111 int iType = pFields->GetType(); 111 int iType = pFields->GetType();
112 if (iType == PDFOBJ_DICTIONARY) { 112 if (iType == PDFOBJ_DICTIONARY) {
113 return 1; 113 return 1;
114 } else if (iType == PDFOBJ_STRING) { 114 } else if (iType == PDFOBJ_STRING) {
115 return 1; 115 return 1;
116 } else if (iType == PDFOBJ_ARRAY) { 116 } else if (iType == PDFOBJ_ARRAY) {
117 return ((CPDF_Array*)pFields)->GetCount(); 117 return ((CPDF_Array*)pFields)->GetCount();
118 } 118 }
119 return 0; 119 return 0;
120 } 120 }
121 void CPDF_ActionFields::GetAllFields(CFX_PtrArray& fieldObjects) const 121 void CPDF_ActionFields::GetAllFields(CFX_PtrArray& fieldObjects) const
122 { 122 {
123 fieldObjects.RemoveAll(); 123 fieldObjects.RemoveAll();
124 if (m_pAction == NULL) { 124 if (m_pAction == NULL) {
125 return; 125 return;
126 } 126 }
127 CPDF_Dictionary* pDict = (CPDF_Dictionary*)(*m_pAction); 127 CPDF_Dictionary* pDict = m_pAction->GetDict();
128 if (pDict == NULL) { 128 if (pDict == NULL) {
129 return; 129 return;
130 } 130 }
131 CFX_ByteString csType = pDict->GetString("S"); 131 CFX_ByteString csType = pDict->GetString("S");
132 CPDF_Object* pFields = NULL; 132 CPDF_Object* pFields = NULL;
133 if (csType == "Hide") { 133 if (csType == "Hide") {
134 pFields = pDict->GetElementValue("T"); 134 pFields = pDict->GetElementValue("T");
135 } else { 135 } else {
136 pFields = pDict->GetArray("Fields"); 136 pFields = pDict->GetArray("Fields");
137 } 137 }
(...skipping 12 matching lines...) Expand all
150 fieldObjects.Add(pObj); 150 fieldObjects.Add(pObj);
151 } 151 }
152 } 152 }
153 } 153 }
154 } 154 }
155 CPDF_Object* CPDF_ActionFields::GetField(FX_DWORD iIndex) const 155 CPDF_Object* CPDF_ActionFields::GetField(FX_DWORD iIndex) const
156 { 156 {
157 if (m_pAction == NULL) { 157 if (m_pAction == NULL) {
158 return NULL; 158 return NULL;
159 } 159 }
160 CPDF_Dictionary* pDict = (CPDF_Dictionary*)(*m_pAction); 160 CPDF_Dictionary* pDict = m_pAction->GetDict();
161 if (pDict == NULL) { 161 if (pDict == NULL) {
162 return NULL; 162 return NULL;
163 } 163 }
164 CFX_ByteString csType = pDict->GetString("S"); 164 CFX_ByteString csType = pDict->GetString("S");
165 CPDF_Object* pFields = NULL; 165 CPDF_Object* pFields = NULL;
166 if (csType == "Hide") { 166 if (csType == "Hide") {
167 pFields = pDict->GetElementValue("T"); 167 pFields = pDict->GetElementValue("T");
168 } else { 168 } else {
169 pFields = pDict->GetArray("Fields"); 169 pFields = pDict->GetArray("Fields");
170 } 170 }
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 return 1; 253 return 1;
254 } 254 }
255 if (iObjType == PDFOBJ_ARRAY) { 255 if (iObjType == PDFOBJ_ARRAY) {
256 return ((CPDF_Array*)pNext)->GetCount(); 256 return ((CPDF_Array*)pNext)->GetCount();
257 } 257 }
258 return 0; 258 return 0;
259 } 259 }
260 CPDF_Action CPDF_Action::GetSubAction(FX_DWORD iIndex) const 260 CPDF_Action CPDF_Action::GetSubAction(FX_DWORD iIndex) const
261 { 261 {
262 if (m_pDict == NULL || !m_pDict->KeyExist("Next")) { 262 if (m_pDict == NULL || !m_pDict->KeyExist("Next")) {
263 return NULL; 263 return CPDF_Action();
264 } 264 }
265 CPDF_Object* pNext = m_pDict->GetElementValue("Next"); 265 CPDF_Object* pNext = m_pDict->GetElementValue("Next");
266 int iObjType = pNext->GetType(); 266 int iObjType = pNext->GetType();
267 if (iObjType == PDFOBJ_DICTIONARY) { 267 if (iObjType == PDFOBJ_DICTIONARY) {
268 CPDF_Dictionary *pDict = static_cast<CPDF_Dictionary*>(pNext);
268 if (iIndex == 0) { 269 if (iIndex == 0) {
269 return (CPDF_Dictionary*)pNext; 270 return CPDF_Action(pDict);
270 } 271 }
272 } else if (iObjType == PDFOBJ_ARRAY) {
273 CPDF_Array* pArray = static_cast<CPDF_Array*>(pNext);
274 return CPDF_Action(pArray->GetDict(iIndex));
271 } 275 }
272 if (iObjType == PDFOBJ_ARRAY) { 276 return CPDF_Action();
273 return ((CPDF_Array*)pNext)->GetDict(iIndex);
274 }
275 return NULL;
276 } 277 }
277 const FX_CHAR* g_sAATypes[] = {"E", "X", "D", "U", "Fo", "Bl", "PO", "PC", "PV", "PI", 278 const FX_CHAR* g_sAATypes[] = {"E", "X", "D", "U", "Fo", "Bl", "PO", "PC", "PV", "PI",
278 "O", "C", 279 "O", "C",
279 "K", "F", "V", "C", 280 "K", "F", "V", "C",
280 "WC", "WS", "DS", "WP", "DP", 281 "WC", "WS", "DS", "WP", "DP",
281 "" 282 ""
282 }; 283 };
283 FX_BOOL CPDF_AAction::ActionExist(AActionType eType) const 284 FX_BOOL CPDF_AAction::ActionExist(AActionType eType) const
284 { 285 {
285 if (m_pDict == NULL) { 286 if (m_pDict == NULL) {
286 return FALSE; 287 return FALSE;
287 } 288 }
288 return m_pDict->KeyExist(g_sAATypes[(int)eType]); 289 return m_pDict->KeyExist(g_sAATypes[(int)eType]);
289 } 290 }
290 CPDF_Action CPDF_AAction::GetAction(AActionType eType) const 291 CPDF_Action CPDF_AAction::GetAction(AActionType eType) const
291 { 292 {
292 if (m_pDict == NULL) { 293 if (!m_pDict) {
293 return NULL; 294 return CPDF_Action();
294 } 295 }
295 return m_pDict->GetDict(g_sAATypes[(int)eType]); 296 return CPDF_Action(m_pDict->GetDict(g_sAATypes[(int)eType]));
296 } 297 }
297 FX_POSITION CPDF_AAction::GetStartPos() const 298 FX_POSITION CPDF_AAction::GetStartPos() const
298 { 299 {
299 if (m_pDict == NULL) { 300 if (m_pDict == NULL) {
300 return NULL; 301 return NULL;
301 } 302 }
302 return m_pDict->GetStartPos(); 303 return m_pDict->GetStartPos();
303 } 304 }
304 CPDF_Action CPDF_AAction::GetNextAction(FX_POSITION& pos, AActionType& eType) co nst 305 CPDF_Action CPDF_AAction::GetNextAction(FX_POSITION& pos, AActionType& eType) co nst
305 { 306 {
306 if (m_pDict == NULL) { 307 if (m_pDict == NULL) {
307 return NULL; 308 return CPDF_Action();
308 } 309 }
309 CFX_ByteString csKey; 310 CFX_ByteString csKey;
310 CPDF_Object* pObj = m_pDict->GetNextElement(pos, csKey); 311 CPDF_Object* pObj = m_pDict->GetNextElement(pos, csKey);
311 if (pObj != NULL) { 312 if (!pObj) {
312 CPDF_Object* pDirect = pObj->GetDirect(); 313 return CPDF_Action();
313 if (pDirect != NULL && pDirect->GetType() == PDFOBJ_DICTIONARY) { 314 }
314 int i = 0; 315 CPDF_Object* pDirect = pObj->GetDirect();
315 while (g_sAATypes[i][0] != '\0') { 316 if (!pDirect || pDirect->GetType() != PDFOBJ_DICTIONARY) {
316 if (csKey == g_sAATypes[i]) { 317 return CPDF_Action();
317 break; 318 }
318 } 319 int i = 0;
319 i ++; 320 while (g_sAATypes[i][0] != '\0') {
320 } 321 if (csKey == g_sAATypes[i]) {
321 eType = (AActionType)i; 322 break;
322 return (CPDF_Dictionary*)pDirect;
323 } 323 }
324 i++;
324 } 325 }
325 return NULL; 326 eType = (AActionType)i;
327 return CPDF_Action(static_cast<CPDF_Dictionary*>(pDirect));
326 } 328 }
327 CPDF_DocJSActions::CPDF_DocJSActions(CPDF_Document* pDoc) 329 CPDF_DocJSActions::CPDF_DocJSActions(CPDF_Document* pDoc)
328 { 330 {
329 m_pDocument = pDoc; 331 m_pDocument = pDoc;
330 } 332 }
331 int CPDF_DocJSActions::CountJSActions() const 333 int CPDF_DocJSActions::CountJSActions() const
332 { 334 {
333 ASSERT(m_pDocument != NULL); 335 ASSERT(m_pDocument != NULL);
334 CPDF_NameTree name_tree(m_pDocument, FX_BSTRC("JavaScript")); 336 CPDF_NameTree name_tree(m_pDocument, FX_BSTRC("JavaScript"));
335 return name_tree.GetCount(); 337 return name_tree.GetCount();
336 } 338 }
337 CPDF_Action CPDF_DocJSActions::GetJSAction(int index, CFX_ByteString& csName) co nst 339 CPDF_Action CPDF_DocJSActions::GetJSAction(int index, CFX_ByteString& csName) co nst
338 { 340 {
339 ASSERT(m_pDocument != NULL); 341 ASSERT(m_pDocument != NULL);
340 CPDF_NameTree name_tree(m_pDocument, FX_BSTRC("JavaScript")); 342 CPDF_NameTree name_tree(m_pDocument, FX_BSTRC("JavaScript"));
341 CPDF_Object *pAction = name_tree.LookupValue(index, csName); 343 CPDF_Object *pAction = name_tree.LookupValue(index, csName);
342 if (pAction == NULL || pAction->GetType() != PDFOBJ_DICTIONARY) { 344 if (pAction == NULL || pAction->GetType() != PDFOBJ_DICTIONARY) {
343 return NULL; 345 return CPDF_Action();
344 } 346 }
345 return pAction->GetDict(); 347 return CPDF_Action(pAction->GetDict());
346 } 348 }
347 CPDF_Action CPDF_DocJSActions::GetJSAction(const CFX_ByteString& csName) const 349 CPDF_Action CPDF_DocJSActions::GetJSAction(const CFX_ByteString& csName) const
348 { 350 {
349 ASSERT(m_pDocument != NULL); 351 ASSERT(m_pDocument != NULL);
350 CPDF_NameTree name_tree(m_pDocument, FX_BSTRC("JavaScript")); 352 CPDF_NameTree name_tree(m_pDocument, FX_BSTRC("JavaScript"));
351 CPDF_Object *pAction = name_tree.LookupValue(csName); 353 CPDF_Object *pAction = name_tree.LookupValue(csName);
352 if (pAction == NULL || pAction->GetType() != PDFOBJ_DICTIONARY) { 354 if (pAction == NULL || pAction->GetType() != PDFOBJ_DICTIONARY) {
353 return NULL; 355 return CPDF_Action();
354 } 356 }
355 return pAction->GetDict(); 357 return CPDF_Action(pAction->GetDict());
356 } 358 }
357 int CPDF_DocJSActions::FindJSAction(const CFX_ByteString& csName) const 359 int CPDF_DocJSActions::FindJSAction(const CFX_ByteString& csName) const
358 { 360 {
359 ASSERT(m_pDocument != NULL); 361 ASSERT(m_pDocument != NULL);
360 CPDF_NameTree name_tree(m_pDocument, FX_BSTRC("JavaScript")); 362 CPDF_NameTree name_tree(m_pDocument, FX_BSTRC("JavaScript"));
361 return name_tree.GetIndex(csName); 363 return name_tree.GetIndex(csName);
362 } 364 }
OLDNEW
« no previous file with comments | « core/include/fpdfdoc/fpdf_doc.h ('k') | core/src/fpdfdoc/doc_bookmark.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698