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 ...@@ -304,14 +304,20 @@ namespace MetaFile
} }
else else
{ {
double dOffset = 0; unsigned int unUnicodeLen = 0;
double dKoefX = m_dScaleX; unsigned int* pUnicode = NSStringExt::CConverter::GetUtf32FromUnicode(wsText, unUnicodeLen);
for (unsigned int unCharIndex = 0; unCharIndex < unCharsCount; unCharIndex++) if (pUnicode && unUnicodeLen)
{ {
std::wstring wsChar; double dOffset = 0;
wsChar += wsText.at(unCharIndex); double dKoefX = m_dScaleX;
m_pRenderer->CommandDrawText(wsChar, dX + dOffset, dY, 0, 0); for (unsigned int unCharIndex = 0; unCharIndex < unUnicodeLen; unCharIndex++)
dOffset += (pDx[unCharIndex] * dKoefX); {
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 ...@@ -63,6 +63,7 @@ namespace MetaFile
if (0 == ulRecordIndex && EMR_HEADER != ulType) if (0 == ulRecordIndex && EMR_HEADER != ulType)
return SetError(); return SetError();
switch (ulType) switch (ulType)
{ {
//----------------------------------------------------------- //-----------------------------------------------------------
...@@ -547,7 +548,7 @@ namespace MetaFile ...@@ -547,7 +548,7 @@ namespace MetaFile
return SetError(); return SetError();
IFont* pFont = GetFont(); 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) if (pFont)
{ {
// Charset -> Codepage: http://support.microsoft.com/kb/165478 // Charset -> Codepage: http://support.microsoft.com/kb/165478
...@@ -577,23 +578,23 @@ namespace MetaFile ...@@ -577,23 +578,23 @@ namespace MetaFile
switch (pFont->GetCharSet()) switch (pFont->GetCharSet())
{ {
default: default:
case DEFAULT_CHARSET: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_DEFAULT; break; case DEFAULT_CHARSET: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_DEFAULT; break;
case SYMBOL_CHARSET: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_DEFAULT; break; case SYMBOL_CHARSET: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_DEFAULT; break;
case ANSI_CHARSET: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_CP1252; break; case ANSI_CHARSET: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_CP1252; break;
case RUSSIAN_CHARSET: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_CP1251; break; case RUSSIAN_CHARSET: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_CP1251; break;
case EASTEUROPE_CHARSET: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_CP1250; break; case EASTEUROPE_CHARSET: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_CP1250; break;
case GREEK_CHARSET: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_CP1253; break; case GREEK_CHARSET: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_CP1253; break;
case TURKISH_CHARSET: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_CP1254; break; case TURKISH_CHARSET: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_CP1254; break;
case BALTIC_CHARSET: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_CP1257; break; case BALTIC_CHARSET: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_CP1257; break;
case HEBREW_CHARSET: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_CP1255; break; case HEBREW_CHARSET: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_CP1255; break;
case ARABIC_CHARSET: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_CP1256; break; case ARABIC_CHARSET: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_CP1256; break;
case SHIFTJIS_CHARSET: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_CP932; break; case SHIFTJIS_CHARSET: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_CP932; break;
case HANGEUL_CHARSET: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_CP949; break; case HANGEUL_CHARSET: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_CP949; break;
case 134/*GB2313_CHARSET*/: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_CP936; break; case 134/*GB2313_CHARSET*/: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_CP936; break;
case CHINESEBIG5_CHARSET: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_CP950; break; case CHINESEBIG5_CHARSET: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_CP950; break;
case THAI_CHARSET: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_CP874; break; case THAI_CHARSET: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_CP874; break;
case JOHAB_CHARSET: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_CP1361; break; case JOHAB_CHARSET: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_CP1361; break;
case VIETNAMESE_CHARSET: eCharSet = NSStringExt::CConverter::SINGLE_BYTE_ENCODING_CP1258; break; case VIETNAMESE_CHARSET: eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_CP1258; break;
} }
} }
...@@ -628,24 +629,64 @@ namespace MetaFile ...@@ -628,24 +629,64 @@ namespace MetaFile
std::wstring wsText = NSStringExt::CConverter::GetUnicodeFromUTF16((unsigned short*)oText.OutputString, oText.Chars); std::wstring wsText = NSStringExt::CConverter::GetUnicodeFromUTF16((unsigned short*)oText.OutputString, oText.Chars);
unsigned int unLen = 0;
int* pDx = NULL; int* pDx = NULL;
if (oText.OutputDx) if (oText.OutputDx && oText.Chars)
{ {
// Utf16 Utf32, pDx
pDx = new int[oText.Chars]; 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 // Y
if (oText.Options & ETO_PDY) 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) if (pDx)
delete[] pDx; delete[] pDx;
......
...@@ -107,7 +107,7 @@ namespace MetaFile ...@@ -107,7 +107,7 @@ namespace MetaFile
} }
std::wstring GetFaceName() 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() int GetWeight()
{ {
......
...@@ -141,7 +141,7 @@ ...@@ -141,7 +141,7 @@
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>..\..\agg-2.4\include;..\..\freetype-2.5.2\include;..\..\cximage\jasper\include;..\..\cximage\jpeg;..\..\cximage\png;..\..\cximage\zlib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <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> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
......
...@@ -65,7 +65,7 @@ void ConvertFolder(CMetaFile &oMetaFile, std::wstring wsFolderPath, const int nT ...@@ -65,7 +65,7 @@ void ConvertFolder(CMetaFile &oMetaFile, std::wstring wsFolderPath, const int nT
double w, h, x, y; double w, h, x, y;
oMetaFile.GetBounds(&x, &y, &w, &h); oMetaFile.GetBounds(&x, &y, &w, &h);
oMetaFile.ConvertToRaster(wsDstFilePath.c_str(), 4, w); oMetaFile.ConvertToRaster(wsDstFilePath.c_str(), 4, 500);
oMetaFile.Close(); oMetaFile.Close();
} }
...@@ -79,7 +79,8 @@ void main() ...@@ -79,7 +79,8 @@ void main()
oFonts.Initialize(); oFonts.Initialize();
CMetaFile oMetaFile(&oFonts); 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); //_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
//_CrtDumpMemoryLeaks(); //_CrtDumpMemoryLeaks();
......
...@@ -97,7 +97,7 @@ namespace MetaFile ...@@ -97,7 +97,7 @@ namespace MetaFile
} }
std::wstring GetFaceName() 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() int GetWeight()
{ {
......
#pragma once #pragma once
//#ifdef _DEBUG #ifdef _DEBUG
//#pragma comment(lib, "../../Qt_build/graphics/project/debug/graphics.lib") #pragma comment(lib, "../../../SDK/lib/win_64/DEBUG/graphics.lib")
//#else #else
//#pragma comment(lib, "../../Qt_build/graphics/project/release/graphics.lib") #pragma comment(lib, "../../../SDK/lib/win_64/graphics.lib")
//#endif #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