From 31c7b73b71bd7352f96a82716b5e81d7fa24f37f Mon Sep 17 00:00:00 2001 From: Lei Zhang Date: Fri, 19 Feb 2016 10:53:24 -0800 Subject: Remove CFX_{Byte,Wide}String::ConvertFrom(). Use/add CFX_{Byte,Wide}String::FromFoo() instead. R=tsepez@chromium.org Review URL: https://codereview.chromium.org/1711893003 . --- core/include/fxcrt/fx_string.h | 9 ++--- core/src/fpdfdoc/doc_basic_unittest.cpp | 3 +- core/src/fpdfdoc/doc_form.cpp | 65 +++++++++++++++------------------ core/src/fxcrt/fx_basic_bstring.cpp | 23 +++++------- core/src/fxcrt/fx_basic_wstring.cpp | 28 ++++++++------ core/src/fxcrt/fx_extension.cpp | 3 +- 6 files changed, 63 insertions(+), 68 deletions(-) (limited to 'core') diff --git a/core/include/fxcrt/fx_string.h b/core/include/fxcrt/fx_string.h index 36eba8d1c1..c625bfa925 100644 --- a/core/include/fxcrt/fx_string.h +++ b/core/include/fxcrt/fx_string.h @@ -289,8 +289,6 @@ class CFX_ByteString { CFX_WideString UTF8Decode() const; - void ConvertFrom(const CFX_WideString& str, CFX_CharMap* pCharMap = NULL); - FX_DWORD GetID(FX_STRSIZE start_pos = 0) const; #define FXFORMAT_SIGNED 1 @@ -561,7 +559,10 @@ class CFX_WideString { ~CFX_WideString(); - static CFX_WideString FromLocal(const char* str, FX_STRSIZE len = -1); + static CFX_WideString FromLocal(const CFX_ByteString& str); + + static CFX_WideString FromCodePage(const CFX_ByteString& str, + FX_WORD codepage); static CFX_WideString FromUTF8(const char* str, FX_STRSIZE len); @@ -685,8 +686,6 @@ class CFX_WideString { CFX_ByteString UTF16LE_Encode() const; - void ConvertFrom(const CFX_ByteString& str, CFX_CharMap* pCharMap = NULL); - protected: class StringData { public: diff --git a/core/src/fpdfdoc/doc_basic_unittest.cpp b/core/src/fpdfdoc/doc_basic_unittest.cpp index ecc603aa9e..c2fd3ff2b2 100644 --- a/core/src/fpdfdoc/doc_basic_unittest.cpp +++ b/core/src/fpdfdoc/doc_basic_unittest.cpp @@ -145,8 +145,7 @@ TEST(doc_basic_filespec, SetFileName) { CPDF_FileSpec file_spec1(str_obj.get()); file_spec1.SetFileName(test_data.input); // Check internal object value. - CFX_ByteString str; - str.ConvertFrom(test_data.expected); + CFX_ByteString str = CFX_ByteString::FromUnicode(test_data.expected); EXPECT_TRUE(str == str_obj->GetString()); // Check we can get the file name back. CFX_WideString file_name; diff --git a/core/src/fpdfdoc/doc_form.cpp b/core/src/fpdfdoc/doc_form.cpp index 460a44a7df..9252e073e0 100644 --- a/core/src/fpdfdoc/doc_form.cpp +++ b/core/src/fpdfdoc/doc_form.cpp @@ -8,8 +8,35 @@ #include "core/src/fpdfdoc/doc_utils.h" #include "third_party/base/stl_util.h" +namespace { + const int nMaxRecursion = 32; +const struct SupportFieldEncoding { + const FX_CHAR* m_name; + FX_WORD m_codePage; +} g_fieldEncoding[] = { + {"BigFive", 950}, + {"GBK", 936}, + {"Shift-JIS", 932}, + {"UHC", 949}, +}; + +CFX_WideString FPDFDOC_FDF_GetFieldValue(const CPDF_Dictionary& pFieldDict, + const CFX_ByteString& bsEncoding) { + const CFX_ByteString csBValue = pFieldDict.GetStringBy("V"); + for (const auto& encoding : g_fieldEncoding) { + if (bsEncoding == encoding.m_name) + return CFX_WideString::FromCodePage(csBValue, encoding.m_codePage); + } + CFX_ByteString csTemp = csBValue.Left(2); + if (csTemp == "\xFF\xFE" || csTemp == "\xFE\xFF") + return PDF_DecodeText(csBValue); + return CFX_WideString::FromLocal(csBValue); +} + +} // namespace + class CFieldNameExtractor { public: explicit CFieldNameExtractor(const CFX_WideString& full_name) { @@ -1088,39 +1115,7 @@ CFDF_Document* CPDF_InterForm::ExportToFDF( } return pDoc; } -const struct _SupportFieldEncoding { - const FX_CHAR* m_name; - int32_t m_codePage; -} g_fieldEncoding[] = { - {"BigFive", 950}, - {"GBK", 936}, - {"Shift-JIS", 932}, - {"UHC", 949}, -}; -static void FPDFDOC_FDF_GetFieldValue(CPDF_Dictionary* pFieldDict, - CFX_WideString& csValue, - CFX_ByteString& bsEncoding) { - CFX_ByteString csBValue = pFieldDict->GetStringBy("V"); - int32_t iCount = sizeof(g_fieldEncoding) / sizeof(g_fieldEncoding[0]); - int32_t i = 0; - for (; i < iCount; ++i) - if (bsEncoding == g_fieldEncoding[i].m_name) { - break; - } - if (i < iCount) { - CFX_CharMap* pCharMap = - CFX_CharMap::GetDefaultMapper(g_fieldEncoding[i].m_codePage); - FXSYS_assert(pCharMap); - csValue.ConvertFrom(csBValue, pCharMap); - return; - } - CFX_ByteString csTemp = csBValue.Left(2); - if (csTemp == "\xFF\xFE" || csTemp == "\xFE\xFF") { - csValue = PDF_DecodeText(csBValue); - } else { - csValue = CFX_WideString::FromLocal(csBValue); - } -} + void CPDF_InterForm::FDF_ImportField(CPDF_Dictionary* pFieldDict, const CFX_WideString& parent_name, FX_BOOL bNotify, @@ -1150,8 +1145,8 @@ void CPDF_InterForm::FDF_ImportField(CPDF_Dictionary* pFieldDict, if (!pField) { return; } - CFX_WideString csWValue; - FPDFDOC_FDF_GetFieldValue(pFieldDict, csWValue, m_bsEncoding); + CFX_WideString csWValue = + FPDFDOC_FDF_GetFieldValue(*pFieldDict, m_bsEncoding); int iType = pField->GetFieldType(); if (bNotify && m_pFormNotify) { int iRet = 0; diff --git a/core/src/fxcrt/fx_basic_bstring.cpp b/core/src/fxcrt/fx_basic_bstring.cpp index e0d1146068..85e5041095 100644 --- a/core/src/fxcrt/fx_basic_bstring.cpp +++ b/core/src/fxcrt/fx_basic_bstring.cpp @@ -910,25 +910,20 @@ CFX_WideString CFX_ByteString::UTF8Decode() const { } return decoder.GetResult(); } + +// static CFX_ByteString CFX_ByteString::FromUnicode(const FX_WCHAR* str, FX_STRSIZE len) { - if (len < 0) { - len = FXSYS_wcslen(str); - } - CFX_ByteString bstr; - bstr.ConvertFrom(CFX_WideString(str, len)); - return bstr; + FX_STRSIZE str_len = len >= 0 ? len : FXSYS_wcslen(str); + return FromUnicode(CFX_WideString(str, str_len)); } + +// static CFX_ByteString CFX_ByteString::FromUnicode(const CFX_WideString& str) { - return FromUnicode(str.c_str(), str.GetLength()); -} -void CFX_ByteString::ConvertFrom(const CFX_WideString& str, - CFX_CharMap* pCharMap) { - if (!pCharMap) { - pCharMap = CFX_CharMap::GetDefaultMapper(); - } - *this = (*pCharMap->m_GetByteString)(pCharMap, str); + CFX_CharMap* pCharMap = CFX_CharMap::GetDefaultMapper(); + return (*pCharMap->m_GetByteString)(pCharMap, str); } + int CFX_ByteString::Compare(const CFX_ByteStringC& str) const { if (!m_pData) { return str.IsEmpty() ? 0 : -1; diff --git a/core/src/fxcrt/fx_basic_wstring.cpp b/core/src/fxcrt/fx_basic_wstring.cpp index 2370c87cf1..d83aa85213 100644 --- a/core/src/fxcrt/fx_basic_wstring.cpp +++ b/core/src/fxcrt/fx_basic_wstring.cpp @@ -303,13 +303,7 @@ CFX_ByteString CFX_WideString::UTF16LE_Encode() const { result.ReleaseBuffer(len * 2 + 2); return result; } -void CFX_WideString::ConvertFrom(const CFX_ByteString& str, - CFX_CharMap* pCharMap) { - if (!pCharMap) { - pCharMap = CFX_CharMap::GetDefaultMapper(); - } - *this = pCharMap->m_GetWideString(pCharMap, str); -} + void CFX_WideString::Reserve(FX_STRSIZE len) { GetBuffer(len); ReleaseBuffer(GetLength()); @@ -346,11 +340,20 @@ FX_WCHAR* CFX_WideString::GetBuffer(FX_STRSIZE nMinBufLength) { pOldData->Release(); return m_pData->m_String; } -CFX_WideString CFX_WideString::FromLocal(const char* str, FX_STRSIZE len) { - CFX_WideString result; - result.ConvertFrom(CFX_ByteString(str, len)); - return result; + +// static +CFX_WideString CFX_WideString::FromLocal(const CFX_ByteString& str) { + return FromCodePage(str, 0); } + +// static +CFX_WideString CFX_WideString::FromCodePage(const CFX_ByteString& str, + FX_WORD codepage) { + CFX_CharMap* pCharMap = CFX_CharMap::GetDefaultMapper(codepage); + return pCharMap->m_GetWideString(pCharMap, str); +} + +// static CFX_WideString CFX_WideString::FromUTF8(const char* str, FX_STRSIZE len) { if (!str || 0 == len) { return CFX_WideString(); @@ -362,6 +365,8 @@ CFX_WideString CFX_WideString::FromUTF8(const char* str, FX_STRSIZE len) { } return decoder.GetResult(); } + +// static CFX_WideString CFX_WideString::FromUTF16LE(const unsigned short* wstr, FX_STRSIZE wlen) { if (!wstr || 0 == wlen) { @@ -376,6 +381,7 @@ CFX_WideString CFX_WideString::FromUTF16LE(const unsigned short* wstr, result.ReleaseBuffer(wlen); return result; } + FX_STRSIZE CFX_WideString::WStringLength(const unsigned short* str) { FX_STRSIZE len = 0; if (str) diff --git a/core/src/fxcrt/fx_extension.cpp b/core/src/fxcrt/fx_extension.cpp index fa6245c9d3..cae1763c7e 100644 --- a/core/src/fxcrt/fx_extension.cpp +++ b/core/src/fxcrt/fx_extension.cpp @@ -133,7 +133,8 @@ FX_FLOAT FXSYS_strtof(const FX_CHAR* pcsStr, if (iLength < 0) { iLength = (int32_t)FXSYS_strlen(pcsStr); } - CFX_WideString ws = CFX_WideString::FromLocal(pcsStr, iLength); + CFX_WideString ws = + CFX_WideString::FromLocal(CFX_ByteString(pcsStr, iLength)); return FXSYS_wcstof(ws.c_str(), iLength, pUsedLen); } FX_FLOAT FXSYS_wcstof(const FX_WCHAR* pwsStr, -- cgit v1.2.3