Skip to content

Commit

Permalink
CharsetConverter: add ability to fail on incorrect character to some …
Browse files Browse the repository at this point in the history
…functions
  • Loading branch information
Karlson2k committed Sep 19, 2013
1 parent c318f21 commit a878c77
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 12 deletions.
17 changes: 9 additions & 8 deletions xbmc/utils/CharsetConverter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -454,7 +454,8 @@ void CCharsetConverter::reset(void)

// The bVisualBiDiFlip forces a flip of characters for hebrew/arabic languages, only set to false if the flipping
// of the string is already made or the string is not displayed in the GUI
bool CCharsetConverter::utf8ToW(const std::string& utf8StringSrc, std::wstring& wStringDst, bool bVisualBiDiFlip /*= true*/, bool forceLTRReadingOrder /*= false*/, bool* bWasFlipped /*= NULL*/)
bool CCharsetConverter::utf8ToW(const std::string& utf8StringSrc, std::wstring& wStringDst, bool bVisualBiDiFlip /*= true*/,
bool forceLTRReadingOrder /*= false*/, bool failOnBadChar /*= false*/, bool* bWasFlipped /*= NULL*/)
{
// Try to flip hebrew/arabic characters, if any
if (bVisualBiDiFlip)
Expand All @@ -463,12 +464,12 @@ bool CCharsetConverter::utf8ToW(const std::string& utf8StringSrc, std::wstring&
FriBidiCharType charset = forceLTRReadingOrder ? FRIBIDI_TYPE_LTR : FRIBIDI_TYPE_PDF;
logicalToVisualBiDi(utf8StringSrc, strFlipped, FRIBIDI_UTF8, charset, bWasFlipped);
CSingleLock lock(m_critSection);
return convert(m_iconvUtf8toW,1,UTF8_SOURCE,WCHAR_CHARSET,strFlipped,wStringDst);
return convert(m_iconvUtf8toW,1,UTF8_SOURCE,WCHAR_CHARSET,strFlipped,wStringDst, failOnBadChar);
}
else
{
CSingleLock lock(m_critSection);
return convert(m_iconvUtf8toW,1,UTF8_SOURCE,WCHAR_CHARSET,utf8StringSrc,wStringDst);
return convert(m_iconvUtf8toW,1,UTF8_SOURCE,WCHAR_CHARSET,utf8StringSrc,wStringDst, failOnBadChar);
}
}

Expand Down Expand Up @@ -563,7 +564,7 @@ bool CCharsetConverter::unknownToUTF8(std::string& stringSrcDst)
return unknownToUTF8(source, stringSrcDst);
}

bool CCharsetConverter::unknownToUTF8(const std::string& stringSrc, std::string& utf8StringDst)
bool CCharsetConverter::unknownToUTF8(const std::string& stringSrc, std::string& utf8StringDst, bool failOnBadChar /*= false*/)
{
// checks whether it's utf8 already, and if not converts using the sourceCharset if given, else the string charset
if (isValidUtf8(stringSrc))
Expand All @@ -572,13 +573,13 @@ bool CCharsetConverter::unknownToUTF8(const std::string& stringSrc, std::string&
return true;
}
CSingleLock lock(m_critSection);
return convert(m_iconvStringCharsetToUtf8, m_Utf8CharMaxSize, g_langInfo.GetGuiCharSet(), "UTF-8", stringSrc, utf8StringDst);
return convert(m_iconvStringCharsetToUtf8, m_Utf8CharMaxSize, g_langInfo.GetGuiCharSet(), "UTF-8", stringSrc, utf8StringDst, failOnBadChar);
}

bool CCharsetConverter::wToUTF8(const std::wstring& wStringSrc, std::string& utf8StringDst)
bool CCharsetConverter::wToUTF8(const std::wstring& wStringSrc, std::string& utf8StringDst, bool failOnBadChar /*= false*/)
{
CSingleLock lock(m_critSection);
return convert(m_iconvWtoUtf8,m_Utf8CharMaxSize,WCHAR_CHARSET,"UTF-8",wStringSrc,utf8StringDst);
return convert(m_iconvWtoUtf8,m_Utf8CharMaxSize,WCHAR_CHARSET,"UTF-8",wStringSrc,utf8StringDst, failOnBadChar);
}

bool CCharsetConverter::utf16BEtoUTF8(const std::u16string& utf16StringSrc, std::string& utf8StringDst)
Expand Down Expand Up @@ -670,7 +671,7 @@ bool CCharsetConverter::utf32ToStringCharset(const unsigned long* utf32StringSrc
return false;
}

bool CCharsetConverter::utf8ToSystem(std::string& stringSrcDst)
bool CCharsetConverter::utf8ToSystem(std::string& stringSrcDst, bool failOnBadChar /*= false*/)
{
std::string strSrc(stringSrcDst);
return utf8To("", strSrc, stringSrcDst);
Expand Down
10 changes: 6 additions & 4 deletions xbmc/utils/CharsetConverter.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,9 @@ class CCharsetConverter : public ISettingCallback

void clear();

bool utf8ToW(const std::string& utf8StringSrc, std::wstring& wStringDst, bool bVisualBiDiFlip = true, bool forceLTRReadingOrder = false, bool* bWasFlipped = NULL);
bool utf8ToW(const std::string& utf8StringSrc, std::wstring& wStringDst,
bool bVisualBiDiFlip = true, bool forceLTRReadingOrder = false,
bool failOnBadChar = false, bool* bWasFlipped = NULL);

bool utf16LEtoW(const std::u16string& utf16String, std::wstring& wString);

Expand All @@ -51,7 +53,7 @@ class CCharsetConverter : public ISettingCallback
bool utf8ToStringCharset(const std::string& utf8StringSrc, std::string& stringDst);

bool utf8ToStringCharset(std::string& stringSrcDst);
bool utf8ToSystem(std::string& stringSrcDst);
bool utf8ToSystem(std::string& stringSrcDst, bool failOnBadChar = false);

bool utf8To(const std::string& strDestCharset, const std::string& utf8StringSrc, std::string& stringDst);
bool utf8To(const std::string& strDestCharset, const std::string& utf8StringSrc, std::u16string& utf16StringDst);
Expand All @@ -65,7 +67,7 @@ class CCharsetConverter : public ISettingCallback

bool ucs2CharsetToStringCharset(const std::u16string& ucs2StringSrc, std::string& stringDst, bool swap = false);

bool wToUTF8(const std::wstring& wStringSrc, std::string& utf8StringDst);
bool wToUTF8(const std::wstring& wStringSrc, std::string& utf8StringDst, bool failOnBadChar = false);
bool utf16BEtoUTF8(const std::u16string& utf16StringSrc, std::string& utf8StringDst);
bool utf16LEtoUTF8(const std::u16string& utf16StringSrc, std::string& utf8StringDst);
bool ucs2ToUTF8(const std::u16string& ucs2StringSrc, std::string& utf8StringDst);
Expand All @@ -80,7 +82,7 @@ class CCharsetConverter : public ISettingCallback
bool isBidiCharset(const std::string& charset);

bool unknownToUTF8(std::string& stringSrcDst);
bool unknownToUTF8(const std::string& stringSrc, std::string& utf8StringDst);
bool unknownToUTF8(const std::string& stringSrc, std::string& utf8StringDst, bool failOnBadChar = false);

bool toW(const std::string& stringSrc, std::wstring& wStringDst, const std::string& enc);
bool fromW(const std::wstring& wStringSrc, std::string& stringDst, const std::string& enc);
Expand Down

0 comments on commit a878c77

Please sign in to comment.