| OLD | NEW |
| 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 "../../public/fpdf_doc.h" | 7 #include "../../public/fpdf_doc.h" |
| 8 #include "../include/fsdk_define.h" | 8 #include "../include/fsdk_define.h" |
| 9 #include "../include/fpdfxfa/fpdfxfa_doc.h" | 9 #include "../include/fpdfxfa/fpdfxfa_doc.h" |
| 10 #include "../include/fpdfxfa/fpdfxfa_page.h" | 10 #include "../include/fpdfxfa/fpdfxfa_page.h" |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 121 | 121 |
| 122 DLLEXPORT FPDF_ACTION STDCALL FPDFBookmark_GetAction(FPDF_BOOKMARK pDict) { | 122 DLLEXPORT FPDF_ACTION STDCALL FPDFBookmark_GetAction(FPDF_BOOKMARK pDict) { |
| 123 if (!pDict) | 123 if (!pDict) |
| 124 return NULL; | 124 return NULL; |
| 125 CPDF_Bookmark bookmark((CPDF_Dictionary*)pDict); | 125 CPDF_Bookmark bookmark((CPDF_Dictionary*)pDict); |
| 126 return bookmark.GetAction().GetDict(); | 126 return bookmark.GetAction().GetDict(); |
| 127 } | 127 } |
| 128 | 128 |
| 129 DLLEXPORT unsigned long STDCALL FPDFAction_GetType(FPDF_ACTION pDict) { | 129 DLLEXPORT unsigned long STDCALL FPDFAction_GetType(FPDF_ACTION pDict) { |
| 130 if (!pDict) | 130 if (!pDict) |
| 131 return 0; | 131 return PDFACTION_UNSUPPORTED; |
| 132 |
| 132 CPDF_Action action((CPDF_Dictionary*)pDict); | 133 CPDF_Action action((CPDF_Dictionary*)pDict); |
| 133 CPDF_Action::ActionType type = action.GetType(); | 134 CPDF_Action::ActionType type = action.GetType(); |
| 134 switch (type) { | 135 switch (type) { |
| 135 case CPDF_Action::GoTo: | 136 case CPDF_Action::GoTo: |
| 136 return PDFACTION_GOTO; | 137 return PDFACTION_GOTO; |
| 137 case CPDF_Action::GoToR: | 138 case CPDF_Action::GoToR: |
| 138 return PDFACTION_REMOTEGOTO; | 139 return PDFACTION_REMOTEGOTO; |
| 139 case CPDF_Action::URI: | 140 case CPDF_Action::URI: |
| 140 return PDFACTION_URI; | 141 return PDFACTION_URI; |
| 141 case CPDF_Action::Launch: | 142 case CPDF_Action::Launch: |
| 142 return PDFACTION_LAUNCH; | 143 return PDFACTION_LAUNCH; |
| 143 default: | 144 default: |
| 144 return PDFACTION_UNSUPPORTED; | 145 return PDFACTION_UNSUPPORTED; |
| 145 } | 146 } |
| 146 return PDFACTION_UNSUPPORTED; | |
| 147 } | 147 } |
| 148 | 148 |
| 149 DLLEXPORT FPDF_DEST STDCALL FPDFAction_GetDest(FPDF_DOCUMENT document, | 149 DLLEXPORT FPDF_DEST STDCALL FPDFAction_GetDest(FPDF_DOCUMENT document, |
| 150 FPDF_ACTION pDict) { | 150 FPDF_ACTION pDict) { |
| 151 if (!document) | 151 if (!document || !pDict) |
| 152 return NULL; | 152 return nullptr; |
| 153 if (!pDict) | 153 |
| 154 return NULL; | |
| 155 CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); | 154 CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); |
| 156 CPDF_Action action((CPDF_Dictionary*)pDict); | 155 CPDF_Action action((CPDF_Dictionary*)pDict); |
| 157 return action.GetDest(pDoc).GetObject(); | 156 return action.GetDest(pDoc).GetObject(); |
| 158 } | 157 } |
| 159 | 158 |
| 159 DLLEXPORT unsigned long STDCALL |
| 160 FPDFAction_GetFilePath(FPDF_ACTION pDict, void* buffer, unsigned long buflen) { |
| 161 unsigned long type = FPDFAction_GetType(pDict); |
| 162 if (type != PDFACTION_REMOTEGOTO && type != PDFACTION_LAUNCH) |
| 163 return 0; |
| 164 |
| 165 CPDF_Action action((CPDF_Dictionary*)pDict); |
| 166 CFX_ByteString path = action.GetFilePath().UTF8Encode(); |
| 167 unsigned long len = path.GetLength() + 1; |
| 168 if (buffer && buflen >= len) |
| 169 FXSYS_memcpy(buffer, path.c_str(), len); |
| 170 return len; |
| 171 } |
| 172 |
| 160 DLLEXPORT unsigned long STDCALL FPDFAction_GetURIPath(FPDF_DOCUMENT document, | 173 DLLEXPORT unsigned long STDCALL FPDFAction_GetURIPath(FPDF_DOCUMENT document, |
| 161 FPDF_ACTION pDict, | 174 FPDF_ACTION pDict, |
| 162 void* buffer, | 175 void* buffer, |
| 163 unsigned long buflen) { | 176 unsigned long buflen) { |
| 164 if (!document) | 177 if (!document || !pDict) |
| 165 return 0; | 178 return 0; |
| 166 if (!pDict) | 179 |
| 167 return 0; | |
| 168 CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); | 180 CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); |
| 169 CPDF_Action action((CPDF_Dictionary*)pDict); | 181 CPDF_Action action((CPDF_Dictionary*)pDict); |
| 170 CFX_ByteString path = action.GetURI(pDoc); | 182 CFX_ByteString path = action.GetURI(pDoc); |
| 171 unsigned long len = path.GetLength() + 1; | 183 unsigned long len = path.GetLength() + 1; |
| 172 if (buffer != NULL && buflen >= len) | 184 if (buffer && buflen >= len) |
| 173 FXSYS_memcpy(buffer, path.c_str(), len); | 185 FXSYS_memcpy(buffer, path.c_str(), len); |
| 174 return len; | 186 return len; |
| 175 } | 187 } |
| 176 | 188 |
| 177 DLLEXPORT unsigned long STDCALL FPDFDest_GetPageIndex(FPDF_DOCUMENT document, | 189 DLLEXPORT unsigned long STDCALL FPDFDest_GetPageIndex(FPDF_DOCUMENT document, |
| 178 FPDF_DEST pDict) { | 190 FPDF_DEST pDict) { |
| 179 if (!document) | 191 if (!document || !pDict) |
| 180 return 0; | 192 return 0; |
| 181 if (!pDict) | 193 |
| 182 return 0; | |
| 183 CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); | 194 CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); |
| 184 CPDF_Dest dest((CPDF_Array*)pDict); | 195 CPDF_Dest dest((CPDF_Array*)pDict); |
| 185 return dest.GetPageIndex(pDoc); | 196 return dest.GetPageIndex(pDoc); |
| 186 } | 197 } |
| 187 | 198 |
| 188 DLLEXPORT FPDF_LINK STDCALL | 199 DLLEXPORT FPDF_LINK STDCALL |
| 189 FPDFLink_GetLinkAtPoint(FPDF_PAGE page, double x, double y) { | 200 FPDFLink_GetLinkAtPoint(FPDF_PAGE page, double x, double y) { |
| 190 CPDFXFA_Page* pXFAPage = (CPDFXFA_Page*)page; | 201 CPDFXFA_Page* pXFAPage = (CPDFXFA_Page*)page; |
| 191 CPDF_Page* pPage = pXFAPage->GetPDFPage(); | 202 CPDF_Page* pPage = pXFAPage->GetPDFPage(); |
| 192 if (!pPage) | 203 if (!pPage) |
| (...skipping 18 matching lines...) Expand all Loading... |
| 211 if (!pLinkList) | 222 if (!pLinkList) |
| 212 return -1; | 223 return -1; |
| 213 | 224 |
| 214 int z_order = -1; | 225 int z_order = -1; |
| 215 pLinkList->GetLinkAtPoint(pPage, (FX_FLOAT)x, (FX_FLOAT)y, &z_order); | 226 pLinkList->GetLinkAtPoint(pPage, (FX_FLOAT)x, (FX_FLOAT)y, &z_order); |
| 216 return z_order; | 227 return z_order; |
| 217 } | 228 } |
| 218 | 229 |
| 219 DLLEXPORT FPDF_DEST STDCALL FPDFLink_GetDest(FPDF_DOCUMENT document, | 230 DLLEXPORT FPDF_DEST STDCALL FPDFLink_GetDest(FPDF_DOCUMENT document, |
| 220 FPDF_LINK pDict) { | 231 FPDF_LINK pDict) { |
| 221 if (!document) | 232 if (!document || !pDict) |
| 222 return NULL; | 233 return nullptr; |
| 223 if (!pDict) | 234 |
| 224 return NULL; | |
| 225 CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); | 235 CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); |
| 226 CPDF_Link link((CPDF_Dictionary*)pDict); | 236 CPDF_Link link((CPDF_Dictionary*)pDict); |
| 227 FPDF_DEST dest = link.GetDest(pDoc).GetObject(); | 237 FPDF_DEST dest = link.GetDest(pDoc).GetObject(); |
| 228 if (dest) | 238 if (dest) |
| 229 return dest; | 239 return dest; |
| 230 // If this link is not directly associated with a dest, we try to get action | 240 // If this link is not directly associated with a dest, we try to get action |
| 231 CPDF_Action action = link.GetAction(); | 241 CPDF_Action action = link.GetAction(); |
| 232 if (!action) | 242 if (!action) |
| 233 return NULL; | 243 return nullptr; |
| 234 return action.GetDest(pDoc).GetObject(); | 244 return action.GetDest(pDoc).GetObject(); |
| 235 } | 245 } |
| 236 | 246 |
| 237 DLLEXPORT FPDF_ACTION STDCALL FPDFLink_GetAction(FPDF_LINK pDict) { | 247 DLLEXPORT FPDF_ACTION STDCALL FPDFLink_GetAction(FPDF_LINK pDict) { |
| 238 if (!pDict) | 248 if (!pDict) |
| 239 return NULL; | 249 return nullptr; |
| 250 |
| 240 CPDF_Link link((CPDF_Dictionary*)pDict); | 251 CPDF_Link link((CPDF_Dictionary*)pDict); |
| 241 return link.GetAction().GetDict(); | 252 return link.GetAction().GetDict(); |
| 242 } | 253 } |
| 243 | 254 |
| 244 DLLEXPORT FPDF_BOOL STDCALL FPDFLink_Enumerate(FPDF_PAGE page, | 255 DLLEXPORT FPDF_BOOL STDCALL FPDFLink_Enumerate(FPDF_PAGE page, |
| 245 int* startPos, | 256 int* startPos, |
| 246 FPDF_LINK* linkAnnot) { | 257 FPDF_LINK* linkAnnot) { |
| 247 if (!page || !startPos || !linkAnnot) | 258 if (!page || !startPos || !linkAnnot) |
| 248 return FALSE; | 259 return FALSE; |
| 249 CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); | 260 CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 325 return 0; | 336 return 0; |
| 326 CFX_WideString text = pInfo->GetUnicodeText(tag); | 337 CFX_WideString text = pInfo->GetUnicodeText(tag); |
| 327 // Use UTF-16LE encoding | 338 // Use UTF-16LE encoding |
| 328 CFX_ByteString encodedText = text.UTF16LE_Encode(); | 339 CFX_ByteString encodedText = text.UTF16LE_Encode(); |
| 329 unsigned long len = encodedText.GetLength(); | 340 unsigned long len = encodedText.GetLength(); |
| 330 if (buffer && buflen >= len) { | 341 if (buffer && buflen >= len) { |
| 331 FXSYS_memcpy(buffer, encodedText.c_str(), len); | 342 FXSYS_memcpy(buffer, encodedText.c_str(), len); |
| 332 } | 343 } |
| 333 return len; | 344 return len; |
| 334 } | 345 } |
| OLD | NEW |