Compare commits

..

6 Commits

Author SHA1 Message Date
288d89301a fix bug 33801 2017-01-31 17:16:28 +03:00
4d519e8f26 x2t - version up, .. 2017-01-31 15:02:34 +03:00
1bd2c0b852 Merge branch 'hotfix/v4.2.7' into develop
fix bug 33867
2017-01-31 13:57:55 +03:00
82b0f4bce8 DiagramDrawing losing images 2017-01-31 13:50:16 +03:00
5635239274 fix crash on windows 2017-01-31 13:12:43 +03:00
765ca861fb fix bug 33842 (corrupted xlsx->csv convertion) 2017-01-27 15:22:14 +03:00
10 changed files with 34 additions and 263 deletions

View File

@ -1744,6 +1744,9 @@ void CDrawingConverter::doc_LoadDiagram(PPTX::Logic::SpTreeElem *result, XmlUtil
if (pDiagramDrawing)
{
result->InitElem(new PPTX::Logic::SpTree(*pDiagramDrawing->m_oShapeTree));
//to correct write blipFill rId to binary
m_strCurrentRelsPath = pDiagramDrawing->GetReadPath().GetPath();
SetCurrentRelsPath();
}
else
{//BG-FSC1.docx

View File

@ -60,11 +60,13 @@ namespace PPTX
return *this;
}
public:
virtual void fromXML(XmlUtils::CXmlNode& node)
private:
virtual void fromXML2(XmlUtils::CXmlNode& node, bool bClear)
{
RunElems.clear();
if (bClear)
{
RunElems.clear();
}
XmlUtils::CXmlNodes oNodes;
if (node.GetNodes(_T("*"), oNodes))
@ -94,19 +96,24 @@ namespace PPTX
//todo better check (a14 can be math, slicer)
if(oNodeChoice.GetAttributeIfExist(L"Requires", sRequires) && L"a14" == sRequires)
{
fromXML(oNodeChoice);
fromXML2(oNodeChoice, false);
}
else if (oNode.GetNode(_T("mc:Fallback"), oNodeFall))
{
fromXML(oNodeFall);
fromXML2(oNodeFall, false);
}
}
}
}
}
FillParentPointersForChilds();
}
public:
virtual void fromXML(XmlUtils::CXmlNode& node)
{
fromXML2(node, true);
}
virtual std::wstring toXML() const
{
XmlUtils::CNodeValue oValue;

View File

@ -35,10 +35,6 @@ INCLUDEPATH += \
../../../DesktopEditor/xml/libxml2/include
core_mac {
DEFINES += \
_ASC_USE_UNICODE_CONVERTER_ \
UNICODECONVERTER_USE_DYNAMIC_LIBRARY
LIBS += $$DESTDIR -lUnicodeConverter
}

View File

@ -36,9 +36,7 @@
#include "../../../Common/FileWriter.h"
#include "../../../Common/DocxFormat/Source/XML/Utils.h"
#ifdef _ASC_USE_UNICODE_CONVERTER_
#include "../../../UnicodeConverter/UnicodeConverter.h"
#endif
#include "../../../UnicodeConverter/UnicodeConverter.h"
#include "UniversalConverterUtils.h"
@ -695,7 +693,7 @@ public:
return 1252;//ANSI
}
#ifdef _ASC_USE_UNICODE_CONVERTER_
static std::wstring convert_string(std::string::const_iterator start, std::string::const_iterator end, int nCodepage = 0)
{
std::string sCodePage;
@ -737,100 +735,6 @@ public:
return oConverter.fromUnicode(inptr, insize, sCodePage.c_str());
}
#else
static std::wstring convert_string(std::string::const_iterator start, std::string::const_iterator end, int nCodepage = 0)
{
std::wstring w_out;
bool ansi = true;
size_t insize = end - start;
char *inptr = (char*)start.operator ->();
if (nCodepage > 0)
{
#if defined (_WIN32) || defined (_WIN64)
int insize = MultiByteToWideChar(nCodepage, 0, inptr, -1, NULL, NULL);
wchar_t *out = new wchar_t[insize];
if (out && MultiByteToWideChar(nCodepage, 0, inptr, -1, out, insize) > 0)
{
w_out = std::wstring(out);
ansi = false;
}
if (out) delete []out;
#else
std::string sCodepage = "CP" + std::to_string(nCodepage);
iconv_t ic= iconv_open("WCHAR_T", sCodepage.c_str());
if (ic != (iconv_t) -1)
{
size_t nconv = 0, avail = (insize) * sizeof(wchar_t);
wchar_t *out = new wchar_t[insize];
nconv = iconv (ic, &inptr, &insize, (char**)&out, &avail);
if (nconv == 0)
{
w_out = std::wstring(out);
ansi = false;
}
if (out) delete []out;
iconv_close(ic);
}
#endif
}
if (ansi)
w_out = std::wstring(start, end);
return w_out;
}
static std::string convert_string(std::wstring::const_iterator start, std::wstring::const_iterator end, int nCodepage = 0)
{
std::string out;
bool ansi = true;
size_t insize = end - start;
char *inptr = (char*)start.operator ->();
char* outptr = (char*)out.c_str();
if (nCodepage > 0)
{
#if defined (_WIN32) || defined (_WIN64)
insize = WideCharToMultiByte(nCodepage, 0, (LPCWSTR)inptr, -1, NULL, 0, NULL, NULL);
out.reserve(insize);
if (WideCharToMultiByte(nCodepage, 0, (LPCWSTR)inptr, -1, outptr, (int)insize, NULL, NULL) > 0)
{
out.resize(insize);
ansi = false;
}
#else
out.reserve(insize);
std::string sCodepage = "CP" + std::to_string(nCodepage);
iconv_t ic= iconv_open(sCodepage.c_str(), "WCHAR_T");
if (ic != (iconv_t) -1)
{
size_t nconv = 0, avail = insize * sizeof(wchar_t);
nconv = iconv (ic, &inptr, &insize, &outptr, &avail);
if (nconv == 0)
{
out.resize(insize);
ansi = false;
}
iconv_close(ic);
}
#endif
}
if (ansi)
out = std::string(start, end);
return out;
}
#endif
static int CodepageToCharset( int nCodepage )
{
#if defined (_WIN32) || defined(_WIN64)

View File

@ -31,14 +31,6 @@
*/
#include "HelpFunc.h"
#ifndef _ASC_USE_UNICODE_CONVERTER_
#if defined (_WIN32) || defined (_WIN64)
#include "shlwapi.h"
#else
#include <iconv.h>
#endif
#endif
#include "../../../../UnicodeConverter/UnicodeConverter.h"
#include <Logic/Biff_structures/CellRangeRef.h>
@ -454,7 +446,6 @@ const size_t hex_str2int(const std::wstring::const_iterator& it_begin, const std
return numeric;
}
#ifdef _ASC_USE_UNICODE_CONVERTER_
const std::wstring toStdWString(std::string ansi_string, const unsigned int code_page)
{
std::string sCodePage;
@ -506,131 +497,6 @@ const std::string toStdString(std::wstring wide_string, const unsigned int code_
NSUnicodeConverter::CUnicodeConverter oConverter;
return oConverter.fromUnicode(wide_string, sCodePage.c_str());
}
#else
const std::string toStdString(std::wstring wide_string, const unsigned int code_page)
{
#if defined (_WIN32) || defined (_WIN64)
const int nSize = WideCharToMultiByte(code_page, 0, wide_string.c_str(), wide_string.length(), NULL, 0, NULL, NULL);
char *sTemp = new char[nSize];
if (!sTemp)
return std::string();
int size = WideCharToMultiByte(code_page, 0, wide_string.c_str(), wide_string.length(), sTemp, nSize, NULL, NULL);
std::string sResult(sTemp, size);
delete []sTemp;
return sResult;
#else
std::string out;
bool ansi = true;
size_t insize = wide_string.length();
out.reserve(insize);
char *inptr = (char*)wide_string.c_str();
char* outptr = (char*)out.c_str();
if (code_page >= 0)
{
std::string sCodepage = "CP" + std::to_string(code_page);
iconv_t ic= iconv_open(sCodepage.c_str(), "WCHAR_T");
if (ic != (iconv_t) -1)
{
size_t nconv = 0, avail = insize * sizeof(wchar_t);
nconv = iconv (ic, &inptr, &insize, &outptr, &avail);
if (nconv == 0) ansi = false;
iconv_close(ic);
}
}
if (ansi)
out = std::string(wide_string.begin(), wide_string.end());
return out;
#endif
}
const std::wstring toStdWString(char* ansi, int size, const unsigned int code_page)
{
std::string sCodePage;
for (int i = 0; i < UNICODE_CONVERTER_ENCODINGS_COUNT; ++i)
{
if (code_page == NSUnicodeConverter::Encodings[i].WindowsCodePage)
{
sCodePage = NSUnicodeConverter::Encodings[i].Name;
break;
}
}
if (!sCodePage.empty())
{
NSUnicodeConverter::CUnicodeConverter oConverter;
return oConverter.toUnicode(ansi, size, sCodePage.c_str());
}
#if defined (_WIN32) || defined (_WIN64)
const int nSize = MultiByteToWideChar(code_page, 0, ansi, size, NULL, 0);
wchar_t *sTemp = new wchar_t[nSize];
if (!sTemp)
return std::wstring();
int size_out = MultiByteToWideChar(code_page, 0, ansi, size, sTemp, nSize);
std::wstring sResult(sTemp, size_out);
delete []sTemp;
return sResult;
#else
bool bAnsi = true;
size_t insize = size;
std::wstring w_out;
char *inptr = ansi;
if (code_page >= 0)
{
std::string sCodepage = "CP" + std::to_string(code_page);
iconv_t ic= iconv_open("WCHAR_T", sCodepage.c_str());
if (ic != (iconv_t) -1)
{
size_t nconv = 0, avail = (insize + 1) * sizeof(wchar_t);
char* out_str = new char[avail];
char* outptr = out_str;
nconv = iconv (ic, &inptr, &insize, &outptr, &avail);
if (nconv == 0)
{
insize = size;
((wchar_t*)out_str)[insize] = 0;
w_out = std::wstring((wchar_t*)out_str, insize);
bAnsi = false;
}
iconv_close(ic);
delete []out_str;
}
}
if (bAnsi)
{
std::string ansi_string(ansi, size);
w_out = std::wstring(ansi_string.begin(), ansi_string.end());
}
return w_out;
#endif
}
const std::wstring toStdWString(std::string ansi_string, const unsigned int code_page)
{
return toStdWString((char*)ansi_string.c_str(), (int)ansi_string.length(), code_page);
}
#endif
} // namespace STR
@ -639,7 +505,6 @@ namespace XMLSTUFF
{;
const std::wstring tab2sheet_name(const short tabid, std::vector<std::wstring>& sheets_names)
{
if(tabid >= 0 && static_cast<unsigned short>(tabid) < sheets_names.size())

View File

@ -29,10 +29,6 @@ DEFINES += _DEBUG
}
core_mac {
DEFINES += \
_ASC_USE_UNICODE_CONVERTER_ \
UNICODECONVERTER_USE_DYNAMIC_LIBRARY
LIBS += $$DESTDIR -lUnicodeConverter
}

View File

@ -213,6 +213,7 @@ namespace OOX
}
virtual void read(const CPath& oRootPath, const CPath& oFilePath)
{
m_oReadPath = oFilePath;
IFileContainer::Read( oRootPath, oFilePath );
//#ifdef USE_LITE_READER
@ -259,7 +260,12 @@ namespace OOX
{
return type().DefaultFileName();
}
const CPath& GetReadPath()
{
return m_oReadPath;
}
CPath m_oReadPath;
NSCommon::nullable<PPTX::Logic::SpTree> m_oShapeTree;
};

View File

@ -1041,14 +1041,8 @@ namespace NSFile
for (int nIndex = 0; nIndex < 1000; ++nIndex)
{
wsFileName = wsTemp;
#if defined(_WIN32) || defined (_WIN64)
wchar_t buff[32] ={};
size_t sz = 0;
_itow_s(nTime + nIndex, buff, sz, 10);
wsFileName.append(buff, sz);
#else
wsFileName.append(std::to_wstring(nTime + nIndex));
#endif
if (wsExt)
{
wsFileName.append(wsExt);

View File

@ -248,16 +248,16 @@ namespace NExtractTools
}
else return AVS_FILEUTILS_ERROR_CONVERT; }
return xlsx_dir2xlst_bin(sTempUnpackedXLSX, sTo, params);
return xlsx_dir2xlst_bin(sTempUnpackedXLSX, sTo, params, true);
}
int xlsx_dir2xlst_bin (const std::wstring &sXlsxDir, const std::wstring &sTo, InputParams& params)
int xlsx_dir2xlst_bin (const std::wstring &sXlsxDir, const std::wstring &sTo, InputParams& params, bool bXmlOptions)
{
// Save to file (from temp dir)
BinXlsxRW::CXlsxSerializer m_oCXlsxSerializer;
m_oCXlsxSerializer.setFontDir(params.getFontPath());
return m_oCXlsxSerializer.saveToFile (sTo, sXlsxDir, params.getXmlOptions()) ? 0 : AVS_FILEUTILS_ERROR_CONVERT;
return m_oCXlsxSerializer.saveToFile (sTo, sXlsxDir, bXmlOptions ? params.getXmlOptions() : L"") ? 0 : AVS_FILEUTILS_ERROR_CONVERT;
}
// xslx -> xslt
@ -2053,11 +2053,11 @@ namespace NExtractTools
}
else if(AVS_OFFICESTUDIO_FILE_OTHER_JSON == nFormatTo)
{
nRes = xlsx_dir2xlst_bin(sFrom, sTo, params);
nRes = xlsx_dir2xlst_bin(sFrom, sTo, params, true);
}
else if(AVS_OFFICESTUDIO_FILE_CANVAS_SPREADSHEET == nFormatTo)
{
nRes = xlsx_dir2xlst_bin(sFrom, sTo, params);
nRes = xlsx_dir2xlst_bin(sFrom, sTo, params, true);
}
else
{
@ -2065,9 +2065,9 @@ namespace NExtractTools
NSDirectory::CreateDirectory(sXlstDir);
std::wstring sTFile = sXlstDir + FILE_SEPARATOR_STR + _T("Editor.bin");
if(AVS_OFFICESTUDIO_FILE_SPREADSHEET_CSV == nFormatTo)
nRes = xlsx_dir2xlst_bin(sFrom, sTFile, params);
nRes = xlsx_dir2xlst_bin(sFrom, sTFile, params, false);
else
nRes = xlsx_dir2xlst_bin(sFrom, sTFile, params);
nRes = xlsx_dir2xlst_bin(sFrom, sTFile, params, true);
if(SUCCEEDED_X2T(nRes))
{
nRes = fromXlstBin(sTFile, sTo, nFormatTo, sTemp, sThemeDir, bFromChanges, bPaid, params);

View File

@ -56,7 +56,7 @@ namespace NExtractTools
int doct2docx (const std::wstring &sFrom, const std::wstring &sTo, const std::wstring &sTemp, bool bFromChanges, const std::wstring &sThemeDir, InputParams& params);
int xlsx2xlst_bin (const std::wstring &sFrom, const std::wstring &sTo, const std::wstring &sTemp, InputParams& params);
int xlsx_dir2xlst_bin (const std::wstring &sFrom, const std::wstring &sTo, InputParams& params);
int xlsx_dir2xlst_bin (const std::wstring &sFrom, const std::wstring &sTo, InputParams& params, bool bXmlOptions);
int xlsx2xlst (const std::wstring &sFrom, const std::wstring &sTo, const std::wstring &sTemp, InputParams& params);
int xlst_bin2xlsx (const std::wstring &sFrom, const std::wstring &sTo, const std::wstring &sTemp, bool bFromChanges, const std::wstring &sThemeDir, InputParams& params);
int xlst_bin2xlsx_dir (const std::wstring &sFrom, const std::wstring &sToResult, const std::wstring &sTo, bool bFromChanges, const std::wstring &sThemeDir, InputParams& params);