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

Исправлен баг с чтением команды EMR_EXTTEXTOUTW.

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@65043 954022d7-b5bf-4e40-9824-e11837661b57
parent fd0fa876
......@@ -304,14 +304,20 @@ namespace MetaFile
}
else
{
double dOffset = 0;
double dKoefX = m_dScaleX;
for (unsigned int unCharIndex = 0; unCharIndex < unCharsCount; unCharIndex++)
unsigned int unUnicodeLen = 0;
unsigned int* pUnicode = NSStringExt::CConverter::GetUtf32FromUnicode(wsText, unUnicodeLen);
if (pUnicode && unUnicodeLen)
{
std::wstring wsChar;
wsChar += wsText.at(unCharIndex);
m_pRenderer->CommandDrawText(wsChar, dX + dOffset, dY, 0, 0);
dOffset += (pDx[unCharIndex] * dKoefX);
double dOffset = 0;
double dKoefX = m_dScaleX;
for (unsigned int unCharIndex = 0; unCharIndex < unUnicodeLen; unCharIndex++)
{
std::wstring wsChar = NSStringExt::CConverter::GetUnicodeFromUTF32(&*(pUnicode + unCharIndex), 1);
m_pRenderer->CommandDrawText(wsChar, dX + dOffset, dY, 0, 0);
dOffset += (pDx[unCharIndex] * dKoefX);
}
delete[] pUnicode;
}
}
......
......@@ -63,6 +63,7 @@ namespace MetaFile
if (0 == ulRecordIndex && EMR_HEADER != ulType)
return SetError();
switch (ulType)
{
//-----------------------------------------------------------
......@@ -547,7 +548,7 @@ namespace MetaFile
return SetError();
IFont* pFont = GetFont();
NSStringExt::CConverter::ESingleByteEncoding eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_DEFAULT;
NSStringExt::CConverter::ESingleByteEncoding eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_DEFAULT;
if (pFont)
{
// Charset -> Codepage: http://support.microsoft.com/kb/165478
......@@ -577,23 +578,23 @@ namespace MetaFile
switch (pFont->GetCharSet())
{
default:
case DEFAULT_CHARSET: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_DEFAULT; break;
case SYMBOL_CHARSET: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_DEFAULT; break;
case ANSI_CHARSET: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_CP1252; break;
case RUSSIAN_CHARSET: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_CP1251; break;
case EASTEUROPE_CHARSET: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_CP1250; break;
case GREEK_CHARSET: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_CP1253; break;
case TURKISH_CHARSET: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_CP1254; break;
case BALTIC_CHARSET: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_CP1257; break;
case HEBREW_CHARSET: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_CP1255; break;
case ARABIC_CHARSET: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_CP1256; break;
case SHIFTJIS_CHARSET: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_CP932; break;
case HANGEUL_CHARSET: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_CP949; break;
case 134/*GB2313_CHARSET*/: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_CP936; break;
case CHINESEBIG5_CHARSET: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_CP950; break;
case THAI_CHARSET: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_CP874; break;
case JOHAB_CHARSET: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_CP1361; break;
case VIETNAMESE_CHARSET: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_CP1258; break;
case DEFAULT_CHARSET: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_DEFAULT; break;
case SYMBOL_CHARSET: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_DEFAULT; break;
case ANSI_CHARSET: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_CP1252; break;
case RUSSIAN_CHARSET: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_CP1251; break;
case EASTEUROPE_CHARSET: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_CP1250; break;
case GREEK_CHARSET: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_CP1253; break;
case TURKISH_CHARSET: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_CP1254; break;
case BALTIC_CHARSET: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_CP1257; break;
case HEBREW_CHARSET: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_CP1255; break;
case ARABIC_CHARSET: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_CP1256; break;
case SHIFTJIS_CHARSET: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_CP932; break;
case HANGEUL_CHARSET: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_CP949; break;
case 134/*GB2313_CHARSET*/: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_CP936; break;
case CHINESEBIG5_CHARSET: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_CP950; break;
case THAI_CHARSET: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_CP874; break;
case JOHAB_CHARSET: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_CP1361; break;
case VIETNAMESE_CHARSET: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_CP1258; break;
}
}
......@@ -628,24 +629,64 @@ namespace MetaFile
std::wstring wsText = NSStringExt::CConverter::GetUnicodeFromUTF16((unsigned short*)oText.OutputString, oText.Chars);
unsigned int unLen = 0;
int* pDx = NULL;
if (oText.OutputDx)
if (oText.OutputDx && oText.Chars)
{
// Utf16 Utf32, pDx
pDx = new int[oText.Chars];
if (pDx)
unLen = 0;
unsigned short* pUtf16 = (unsigned short*)oText.OutputString;
wchar_t wLeading, wTrailing;
unsigned int unCode;
unsigned int unPos = 0;
while (unPos < oText.Chars)
{
for (unsigned int unIndex = 0; unIndex < oText.Chars; unIndex++)
wLeading = pUtf16[unPos++];
if (wLeading < 0xD800 || wLeading > 0xDFFF)
{
pDx[unIndex] = oText.OutputDx[unIndex];
pDx[unLen++] = oText.OutputDx[unPos - 1];
}
else if (wLeading >= 0xDC00)
{
//
continue;
}
else
{
unCode = (wLeading & 0x3FF) << 10;
wTrailing = pUtf16[unPos++];
if (wTrailing < 0xDC00 || wTrailing > 0xDFFF)
{
//
continue;
}
else
{
pDx[unLen++] = oText.OutputDx[unPos - 2] + oText.OutputDx[unPos - 1];
}
// Y
if (oText.Options & ETO_PDY)
unIndex++;
unPos++;
}
// Y
if (oText.Options & ETO_PDY)
unPos++;
}
}
else
{
unLen = 0;
unsigned int* pUnicodes = NSStringExt::CConverter::GetUtf32FromUnicode(wsText, unLen);
if (pUnicodes)
delete[] pUnicodes;
}
DrawText(wsText, oText.Chars, oText.Reference.x, oText.Reference.y, pDx);
if (unLen)
DrawText(wsText, unLen, oText.Reference.x, oText.Reference.y, pDx);
if (pDx)
delete[] pDx;
......
......@@ -107,7 +107,7 @@ namespace MetaFile
}
std::wstring GetFaceName()
{
return NSFile::CUtf8Converter::GetWStringFromUTF16(LogFontEx.LogFont.FaceName, 32);
return std::wstring(NSFile::CUtf8Converter::GetWStringFromUTF16(LogFontEx.LogFont.FaceName, 32).c_str());
}
int GetWeight()
{
......
......@@ -141,7 +141,7 @@
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>..\..\agg-2.4\include;..\..\freetype-2.5.2\include;..\..\cximage\jasper\include;..\..\cximage\jpeg;..\..\cximage\png;..\..\cximage\zlib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<DisableSpecificWarnings>4005;4018</DisableSpecificWarnings>
<DisableSpecificWarnings>4005;4018;4267</DisableSpecificWarnings>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
......
......@@ -65,7 +65,7 @@ void ConvertFolder(CMetaFile &oMetaFile, std::wstring wsFolderPath, const int nT
double w, h, x, y;
oMetaFile.GetBounds(&x, &y, &w, &h);
oMetaFile.ConvertToRaster(wsDstFilePath.c_str(), 4, w);
oMetaFile.ConvertToRaster(wsDstFilePath.c_str(), 4, 500);
oMetaFile.Close();
}
......@@ -79,7 +79,8 @@ void main()
oFonts.Initialize();
CMetaFile oMetaFile(&oFonts);
ConvertFolder(oMetaFile, L"D://test//_svm//", c_lMetaSvm);
//ConvertFolder(oMetaFile, L"D://Test Files//Wmf//Test//", c_lMetaWmf);
ConvertFolder(oMetaFile, L"D://Test Files//Emf//Temp//", c_lMetaEmf);
//_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
//_CrtDumpMemoryLeaks();
......
......@@ -97,7 +97,7 @@ namespace MetaFile
}
std::wstring GetFaceName()
{
return NSStringExt::CConverter::GetUnicodeFromSingleByteString((const unsigned char*)Facename, 32);
return std::wstring(NSStringExt::CConverter::GetUnicodeFromSingleByteString((const unsigned char*)Facename, 32).c_str());
}
int GetWeight()
{
......
#pragma once
//#ifdef _DEBUG
//#pragma comment(lib, "../../Qt_build/graphics/project/debug/graphics.lib")
//#else
//#pragma comment(lib, "../../Qt_build/graphics/project/release/graphics.lib")
//#endif
#ifdef _DEBUG
#pragma comment(lib, "../../../SDK/lib/win_64/DEBUG/graphics.lib")
#else
#pragma comment(lib, "../../../SDK/lib/win_64/graphics.lib")
#endif
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