| Index: fpdfsdk/src/fpdfformfill.cpp
|
| diff --git a/fpdfsdk/src/fpdfformfill.cpp b/fpdfsdk/src/fpdfformfill.cpp
|
| index 5825456b1911e2e7adef62166b8a781859fc15fe..e39d62330798bdd9888270809675dfa215307517 100644
|
| --- a/fpdfsdk/src/fpdfformfill.cpp
|
| +++ b/fpdfsdk/src/fpdfformfill.cpp
|
| @@ -7,10 +7,12 @@
|
| #include "public/fpdf_formfill.h"
|
|
|
| #include <memory>
|
| +#include <vector>
|
|
|
| #include "fpdfsdk/include/fsdk_define.h"
|
| #include "fpdfsdk/include/fsdk_mgr.h"
|
| #include "public/fpdfview.h"
|
| +#include "third_party/base/stl_util.h"
|
|
|
| #ifdef PDF_ENABLE_XFA
|
| #include "fpdfsdk/include/fpdfxfa/fpdfxfa_app.h"
|
| @@ -35,6 +37,16 @@ CPDFSDK_PageView* FormHandleToPageView(FPDF_FORMHANDLE hHandle,
|
| return pSDKDoc ? pSDKDoc->GetPageView(pPage, TRUE) : nullptr;
|
| }
|
|
|
| +#ifdef PDF_ENABLE_XFA
|
| +std::vector<CFX_ByteString>* FromFPDFStringHandle(FPDF_STRINGHANDLE handle) {
|
| + return reinterpret_cast<std::vector<CFX_ByteString>*>(handle);
|
| +}
|
| +
|
| +FPDF_STRINGHANDLE ToFPDFStringHandle(std::vector<CFX_ByteString>* strings) {
|
| + return reinterpret_cast<FPDF_STRINGHANDLE>(strings);
|
| +}
|
| +#endif // PDF_ENABLE_XFA
|
| +
|
| } // namespace
|
|
|
| DLLEXPORT int STDCALL FPDFPage_HasFormFieldAtPoint(FPDF_FORMHANDLE hHandle,
|
| @@ -467,6 +479,7 @@ DLLEXPORT void STDCALL FPDF_Widget_Copy(FPDF_DOCUMENT document,
|
| }
|
| *size = real_size;
|
| }
|
| +
|
| DLLEXPORT void STDCALL FPDF_Widget_Cut(FPDF_DOCUMENT document,
|
| FPDF_WIDGET hWidget,
|
| FPDF_WIDESTRING wsText,
|
| @@ -502,6 +515,7 @@ DLLEXPORT void STDCALL FPDF_Widget_Cut(FPDF_DOCUMENT document,
|
| }
|
| *size = real_size;
|
| }
|
| +
|
| DLLEXPORT void STDCALL FPDF_Widget_Paste(FPDF_DOCUMENT document,
|
| FPDF_WIDGET hWidget,
|
| FPDF_WIDESTRING wsText,
|
| @@ -522,6 +536,7 @@ DLLEXPORT void STDCALL FPDF_Widget_Paste(FPDF_DOCUMENT document,
|
| CFX_WideString wstr = CFX_WideString::FromUTF16LE(wsText, size);
|
| pXFAMenuHander->Paste((IXFA_Widget*)hWidget, wstr);
|
| }
|
| +
|
| DLLEXPORT void STDCALL
|
| FPDF_Widget_ReplaceSpellCheckWord(FPDF_DOCUMENT document,
|
| FPDF_WIDGET hWidget,
|
| @@ -547,13 +562,14 @@ FPDF_Widget_ReplaceSpellCheckWord(FPDF_DOCUMENT document,
|
| CFX_ByteStringC bs(bsText);
|
| pXFAMenuHander->ReplaceSpellCheckWord((IXFA_Widget*)hWidget, ptPopup, bs);
|
| }
|
| +
|
| DLLEXPORT void STDCALL
|
| FPDF_Widget_GetSpellCheckWords(FPDF_DOCUMENT document,
|
| FPDF_WIDGET hWidget,
|
| float x,
|
| float y,
|
| FPDF_STRINGHANDLE* stringHandle) {
|
| - if (NULL == hWidget || NULL == document)
|
| + if (!hWidget || !document)
|
| return;
|
|
|
| CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document;
|
| @@ -563,69 +579,63 @@ FPDF_Widget_GetSpellCheckWords(FPDF_DOCUMENT document,
|
|
|
| IXFA_MenuHandler* pXFAMenuHander =
|
| CPDFXFA_App::GetInstance()->GetXFAApp()->GetMenuHandler();
|
| - if (pXFAMenuHander == NULL)
|
| + if (!pXFAMenuHander)
|
| return;
|
|
|
| - CFX_ByteStringArray* sSuggestWords = new CFX_ByteStringArray;
|
| + std::vector<CFX_ByteString>* sSuggestWords = new std::vector<CFX_ByteString>;
|
| CFX_PointF ptPopup;
|
| ptPopup.x = x;
|
| ptPopup.y = y;
|
| - pXFAMenuHander->GetSuggestWords((IXFA_Widget*)hWidget, ptPopup,
|
| - *sSuggestWords);
|
| - *stringHandle = (FPDF_STRINGHANDLE)sSuggestWords;
|
| + pXFAMenuHander->GetSuggestWords(reinterpret_cast<IXFA_Widget*>(hWidget),
|
| + ptPopup, *sSuggestWords);
|
| + *stringHandle = ToFPDFStringHandle(sSuggestWords);
|
| }
|
| -DLLEXPORT int STDCALL FPDF_StringHandleCounts(FPDF_STRINGHANDLE stringHandle) {
|
| - if (stringHandle == NULL)
|
| - return -1;
|
| - CFX_ByteStringArray* sSuggestWords = (CFX_ByteStringArray*)stringHandle;
|
| - return sSuggestWords->GetSize();
|
| +
|
| +DLLEXPORT int STDCALL FPDF_StringHandleCounts(FPDF_STRINGHANDLE sHandle) {
|
| + std::vector<CFX_ByteString>* sSuggestWords = FromFPDFStringHandle(sHandle);
|
| + return sSuggestWords ? pdfium::CollectionSize<int>(*sSuggestWords) : -1;
|
| }
|
| +
|
| DLLEXPORT FPDF_BOOL STDCALL
|
| -FPDF_StringHandleGetStringByIndex(FPDF_STRINGHANDLE stringHandle,
|
| +FPDF_StringHandleGetStringByIndex(FPDF_STRINGHANDLE sHandle,
|
| int index,
|
| FPDF_BYTESTRING bsText,
|
| FPDF_DWORD* size) {
|
| - if (stringHandle == NULL || size == NULL)
|
| + if (!sHandle || !size)
|
| return FALSE;
|
| - int count = FPDF_StringHandleCounts(stringHandle);
|
| +
|
| + int count = FPDF_StringHandleCounts(sHandle);
|
| if (index < 0 || index >= count)
|
| return FALSE;
|
|
|
| - CFX_ByteStringArray sSuggestWords = *(CFX_ByteStringArray*)stringHandle;
|
| - int len = sSuggestWords[index].GetLength();
|
| -
|
| - if (bsText == NULL) {
|
| + std::vector<CFX_ByteString>* sSuggestWords = FromFPDFStringHandle(sHandle);
|
| + int len = (*sSuggestWords)[index].GetLength();
|
| + if (!bsText) {
|
| *size = len;
|
| return TRUE;
|
| }
|
|
|
| int real_size = len < *size ? len : *size;
|
| if (real_size > 0)
|
| - FXSYS_memcpy((void*)bsText, (const FX_CHAR*)(sSuggestWords[index]),
|
| + FXSYS_memcpy((void*)bsText, (const FX_CHAR*)(*sSuggestWords)[index],
|
| real_size);
|
| *size = real_size;
|
| -
|
| return TRUE;
|
| }
|
| +
|
| DLLEXPORT void STDCALL
|
| FPDF_StringHandleRelease(FPDF_STRINGHANDLE stringHandle) {
|
| - if (stringHandle == NULL)
|
| - return;
|
| - CFX_ByteStringArray* sSuggestWords = (CFX_ByteStringArray*)stringHandle;
|
| - delete sSuggestWords;
|
| + delete FromFPDFStringHandle(stringHandle);
|
| }
|
|
|
| DLLEXPORT FPDF_BOOL STDCALL
|
| FPDF_StringHandleAddString(FPDF_STRINGHANDLE stringHandle,
|
| FPDF_BYTESTRING bsText,
|
| FPDF_DWORD size) {
|
| - if (stringHandle == NULL || bsText == NULL || size <= 0)
|
| + if (!stringHandle || !bsText || size == 0)
|
| return FALSE;
|
|
|
| - CFX_ByteStringArray* stringArr = (CFX_ByteStringArray*)stringHandle;
|
| - CFX_ByteString bsStr(bsText, size);
|
| -
|
| - stringArr->Add(bsStr);
|
| + FromFPDFStringHandle(stringHandle)->push_back(CFX_ByteString(bsText, size));
|
| return TRUE;
|
| }
|
| #endif // PDF_ENABLE_XFA
|
|
|