Commit 9d0a226a authored by Ilya.Kirillov's avatar Ilya.Kirillov Committed by Alexander Trofimov

Исправлены баги с конвертацией строк с кодировками CP932, CP936, CP949, CP950, CP1361

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@65575 954022d7-b5bf-4e40-9824-e11837661b57
parent a2304e4b
...@@ -24,43 +24,44 @@ namespace NSStringExt ...@@ -24,43 +24,44 @@ namespace NSStringExt
} }
// end define // end define
#define NSSTRING_WITHLEADBYTE_CP(LEAD_CHAR, UnicodeMapCP, UnicodeMapWithLeadByte, lCount, pData) \ static void NSSTRING_WITHLEADBYTE_CP(wchar_t** ppUnicode, unsigned short LEAD_CHAR, const unsigned short* UnicodeMapCP, const TCodePagePair* UnicodeMapWithLeadByte, long lCount, const unsigned char* pData)
{\ {
int nLeadByte = -1;\ int nLeadByte = -1;
for (long i = 0; i < lCount; i++)\ int nUnicodePos = 0;
{\ for (long i = 0; i < lCount; ++i)
unsigned char unCode = (unsigned char)pData[i];\ {
unsigned short ushUnicode = UnicodeMapCP[unCode];\ unsigned char unCode = (unsigned char)pData[i];
if (-1 == nLeadByte)\ unsigned short ushUnicode = UnicodeMapCP[unCode];
{\ if (-1 == nLeadByte)
if (LEAD_CHAR != ushUnicode)\ {
{\ if (LEAD_CHAR != ushUnicode)
pUnicode[i] = ushUnicode;\ {
nLeadByte = -1;\ (*ppUnicode)[nUnicodePos++] = ushUnicode;
}\ nLeadByte = -1;
else\ }
{\ else
nLeadByte = ushUnicode;\ {
}\ nLeadByte = unCode;
}\ }
else\ }
{\ else
unsigned short ushCode = (nLeadByte << 16) | ushUnicode;\ {
pUnicode[i] = 0x0020;\ unsigned short ushCode = (nLeadByte << 8) | unCode;
TCodePagePair *pPair = (TCodePagePair*)UnicodeMapWithLeadByte;\ TCodePagePair *pPair = (TCodePagePair*)UnicodeMapWithLeadByte;
while(0xFFFF != pPair->ushCode)\ while (0xFFFF != pPair->ushCode)
{\ {
if (ushCode == pPair->ushCode)\ if (ushCode == pPair->ushCode)
{\ {
pUnicode[i] = pPair->ushUnicode;\ (*ppUnicode)[nUnicodePos++] = pPair->ushUnicode;
break;\ break;
}\ }
pPair++;\ pPair++;
}\ }
}\ nLeadByte = -1;
}\ }
}
(*ppUnicode)[nUnicodePos++] = 0x0000;
} }
// end define
class CConverter class CConverter
{ {
...@@ -124,15 +125,15 @@ namespace NSStringExt ...@@ -124,15 +125,15 @@ namespace NSStringExt
case SINGLE_BYTE_ENCODING_CP1256: NSSTRING_COMMON_CP(NSStringExt::c_anUnicodeMapCP1256, lCount, pData); break; case SINGLE_BYTE_ENCODING_CP1256: NSSTRING_COMMON_CP(NSStringExt::c_anUnicodeMapCP1256, lCount, pData); break;
case SINGLE_BYTE_ENCODING_CP1257: NSSTRING_COMMON_CP(NSStringExt::c_anUnicodeMapCP1257, lCount, pData); break; case SINGLE_BYTE_ENCODING_CP1257: NSSTRING_COMMON_CP(NSStringExt::c_anUnicodeMapCP1257, lCount, pData); break;
case SINGLE_BYTE_ENCODING_CP1258: NSSTRING_COMMON_CP(NSStringExt::c_anUnicodeMapCP1258, lCount, pData); break; case SINGLE_BYTE_ENCODING_CP1258: NSSTRING_COMMON_CP(NSStringExt::c_anUnicodeMapCP1258, lCount, pData); break;
case SINGLE_BYTE_ENCODING_CP932: NSSTRING_WITHLEADBYTE_CP(MSCP932_LEAD_CHAR, NSStringExt::c_anUnicodeMapCP932, c_aoUnicodeMapCP932WithLeadByte, lCount, pData); break; case SINGLE_BYTE_ENCODING_CP932: NSSTRING_WITHLEADBYTE_CP(&pUnicode, MSCP932_LEAD_CHAR, NSStringExt::c_anUnicodeMapCP932, c_aoUnicodeMapCP932WithLeadByte, lCount, pData); break;
case SINGLE_BYTE_ENCODING_CP936: NSSTRING_WITHLEADBYTE_CP(MSCP936_LEAD_CHAR, NSStringExt::c_anUnicodeMapCP936, NSStringExt::c_aoUnicodeMapCP936WithLeadByte, lCount, pData); break; case SINGLE_BYTE_ENCODING_CP936: NSSTRING_WITHLEADBYTE_CP(&pUnicode, MSCP936_LEAD_CHAR, NSStringExt::c_anUnicodeMapCP936, NSStringExt::c_aoUnicodeMapCP936WithLeadByte, lCount, pData); break;
case SINGLE_BYTE_ENCODING_CP949: NSSTRING_WITHLEADBYTE_CP(MSCP949_LEAD_CHAR, NSStringExt::c_anUnicodeMapCP949, NSStringExt::c_aoUnicodeMapCP949WithLeadByte, lCount, pData); break; case SINGLE_BYTE_ENCODING_CP949: NSSTRING_WITHLEADBYTE_CP(&pUnicode, MSCP949_LEAD_CHAR, NSStringExt::c_anUnicodeMapCP949, NSStringExt::c_aoUnicodeMapCP949WithLeadByte, lCount, pData); break;
case SINGLE_BYTE_ENCODING_CP950: NSSTRING_WITHLEADBYTE_CP(MSCP950_LEAD_CHAR, NSStringExt::c_anUnicodeMapCP950, NSStringExt::c_aoUnicodeMapCP950WithLeadByte, lCount, pData); break; case SINGLE_BYTE_ENCODING_CP950: NSSTRING_WITHLEADBYTE_CP(&pUnicode, MSCP950_LEAD_CHAR, NSStringExt::c_anUnicodeMapCP950, NSStringExt::c_aoUnicodeMapCP950WithLeadByte, lCount, pData); break;
case SINGLE_BYTE_ENCODING_CP1361:NSSTRING_WITHLEADBYTE_CP(MSCP1361_LEAD_CHAR, NSStringExt::c_anUnicodeMapCP1361, NSStringExt::c_aoUnicodeMapCP1361WithLeadByte, lCount, pData); break; case SINGLE_BYTE_ENCODING_CP1361:NSSTRING_WITHLEADBYTE_CP(&pUnicode, MSCP1361_LEAD_CHAR, NSStringExt::c_anUnicodeMapCP1361, NSStringExt::c_aoUnicodeMapCP1361WithLeadByte, lCount, pData); break;
} }
pUnicode[lCount] = 0; pUnicode[lCount] = 0;
std::wstring s(pUnicode, lCount); std::wstring s(pUnicode);
if (pUnicode) if (pUnicode)
delete[] pUnicode; delete[] pUnicode;
......
...@@ -169,7 +169,8 @@ namespace MetaFile ...@@ -169,7 +169,8 @@ namespace MetaFile
dTempTextW *= m_dScaleX; dTempTextW *= m_dScaleX;
std::wstring wsTempText; std::wstring wsTempText;
wsTempText += wsText.at(unCharsCount - 1); wsTempText += wsText.at(wsText.length() - 1);
//wsTempText += wsText.at(unCharsCount - 1);
pFontManager->LoadString1(wsTempText, 0, 0); pFontManager->LoadString1(wsTempText, 0, 0);
TBBox oBox = pFontManager->MeasureString2(); TBBox oBox = pFontManager->MeasureString2();
......
...@@ -579,7 +579,8 @@ namespace MetaFile ...@@ -579,7 +579,8 @@ namespace MetaFile
} }
std::wstring wsTempText; std::wstring wsTempText;
wsTempText += wsText.at(unCharsCount - 1); wsTempText += wsText.at(wsText.length() - 1);
//wsTempText += wsText.at(unCharsCount - 1);
pFontManager->LoadString1(wsTempText, 0, 0); pFontManager->LoadString1(wsTempText, 0, 0);
TBBox oBox = pFontManager->MeasureString2(); TBBox oBox = pFontManager->MeasureString2();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment