Commit b2bf12fb authored by Oleg.Korshul's avatar Oleg.Korshul Committed by Alexander Trofimov
parent 109f7c3b
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include "../../Common/OfficeFileFormatChecker.h" #include "../../Common/OfficeFileFormatChecker.h"
#include "nativecontrol.h" #include "nativecontrol.h"
#include <list>
template <typename T> template <typename T>
class CScopeWrapper class CScopeWrapper
...@@ -95,7 +96,7 @@ public: ...@@ -95,7 +96,7 @@ public:
public: public:
void _LOGGING_ERROR_(const std::wstring& strType, const std::wstring& strError) static void _LOGGING_ERROR_(const std::wstring& strType, const std::wstring& strError)
{ {
std::string sT = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(strType); std::string sT = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(strType);
std::string sE = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(strError); std::string sE = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(strError);
...@@ -272,6 +273,8 @@ public: ...@@ -272,6 +273,8 @@ public:
if (!bIsBreak) if (!bIsBreak)
bIsBreak = !this->ExecuteCommand(L"asc_nativeInitBuilder();", false); bIsBreak = !this->ExecuteCommand(L"asc_nativeInitBuilder();", false);
if (!bIsBreak)
bIsBreak = !this->ExecuteCommand(L"asc_SetSilentMode(true);", false);
return !bIsBreak; return !bIsBreak;
} }
...@@ -530,6 +533,7 @@ namespace NSDoctRenderer ...@@ -530,6 +533,7 @@ namespace NSDoctRenderer
bool OpenFile(const std::wstring& path, const std::wstring& params) bool OpenFile(const std::wstring& path, const std::wstring& params)
{ {
CheckFileDir(); CheckFileDir();
NSDirectory::CreateDirectory(m_sFileDir + L"/changes");
COfficeFileFormatChecker oChecker; COfficeFileFormatChecker oChecker;
if (!oChecker.isOfficeFile(path)) if (!oChecker.isOfficeFile(path))
...@@ -923,6 +927,40 @@ namespace NSDoctRenderer ...@@ -923,6 +927,40 @@ namespace NSDoctRenderer
namespace NSDoctRenderer namespace NSDoctRenderer
{ {
void ParceParameters(const std::string& command, std::wstring* params)
{
const char* _commandsPtr = command.c_str();
size_t _commandsLen = command.length();
size_t _currentPos = 0;
int nIndex = 0;
while (true)
{
while (_currentPos < _commandsLen && !(_commandsPtr[_currentPos] == '\"' && _commandsPtr[_currentPos - 1] != '\\'))
++_currentPos;
++_currentPos;
size_t _start = _currentPos;
while (_currentPos < _commandsLen && !(_commandsPtr[_currentPos] == '\"' && _commandsPtr[_currentPos - 1] != '\\'))
++_currentPos;
if (_currentPos > _start)
{
if (_currentPos == (_start + 1))
params[nIndex++] = L"";
else
params[nIndex++] = NSFile::CUtf8Converter::GetUnicodeStringFromUTF8((BYTE*)(_commandsPtr + _start), (LONG)(_currentPos - _start));
}
++_currentPos;
if (_currentPos >= _commandsLen)
break;
}
}
CDocBuilder::CDocBuilder() CDocBuilder::CDocBuilder()
{ {
m_pInternal = new CDocBuilder_Private(); m_pInternal = new CDocBuilder_Private();
...@@ -965,4 +1003,132 @@ namespace NSDoctRenderer ...@@ -965,4 +1003,132 @@ namespace NSDoctRenderer
{ {
return m_pInternal->ExecuteCommand(command); return m_pInternal->ExecuteCommand(command);
} }
bool CDocBuilder::Run(const std::wstring& path)
{
std::wstring sPath = path;
if (!NSFile::CFileBinary::Exists(sPath))
sPath = NSFile::GetProcessDirectory() + L"/" + sPath;
std::string sCommands;
bool bRet = NSFile::CFileBinary::ReadAllTextUtf8A(sPath, sCommands);
if (!bRet)
{
CV8RealTimeWorker::_LOGGING_ERROR_(L"error", L"cannot read run file");
return bRet;
}
std::list<std::string> _commands;
const char* _commandsPtr = sCommands.c_str();
size_t _commandsLen = sCommands.length();
size_t _currentPos = 0;
while (true)
{
while (_currentPos < _commandsLen && (_commandsPtr[_currentPos] == 0x0d || _commandsPtr[_currentPos] == 0x0a))
++_currentPos;
size_t _start = _currentPos;
while (_currentPos < _commandsLen && (_commandsPtr[_currentPos] != 0x0d && _commandsPtr[_currentPos] != 0x0a))
++_currentPos;
if (_currentPos > (_start + 1))
_commands.push_back(std::string(_commandsPtr + _start, _currentPos - _start));
if (_currentPos >= _commandsLen)
break;
}
std::wstring _builder_params[4]; // с запасом
for (std::list<std::string>::iterator i = _commands.begin(); i != _commands.end(); i++)
{
const std::string& command = *i;
const char* _data = command.c_str();
size_t _len = command.length();
if (_data[0] == '#')
continue;
bool bIsBuilder = false;
if (_len > 8)
{
if (_data[0] == 'b' &&
_data[1] == 'u' &&
_data[2] == 'i' &&
_data[3] == 'l' &&
_data[4] == 'd' &&
_data[5] == 'e' &&
_data[6] == 'r' &&
_data[7] == '.')
bIsBuilder = true;
}
bool bIsNoError = true;
if (bIsBuilder)
{
size_t _pos = 8;
while (_data[_pos] != '(')
++_pos;
std::string sFuncNum(_data + 8, _pos - 8);
ParceParameters(command, _builder_params);
if ("OpenFile" == sFuncNum)
bIsNoError = this->OpenFile(_builder_params[0], _builder_params[1]);
else if ("CreateFile" == sFuncNum)
{
if (L"docx" == _builder_params[0])
bIsNoError = this->CreateFile(AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX);
else if (L"pptx" == _builder_params[0])
bIsNoError = this->CreateFile(AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX);
else if (L"xlsx" == _builder_params[0])
bIsNoError = this->CreateFile(AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX);
}
else if ("SetTmpFolder" == sFuncNum)
this->SetTmpFolder(_builder_params[0]);
else if ("CloseFile" == sFuncNum)
this->CloseFile();
else if ("SaveFile" == sFuncNum)
{
int nFormat = AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX;
if (L"docx" == _builder_params[0])
nFormat = AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX;
else if (L"doc" == _builder_params[0])
nFormat = AVS_OFFICESTUDIO_FILE_DOCUMENT_DOC;
else if (L"odt" == _builder_params[0])
nFormat = AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT;
else if (L"rtf" == _builder_params[0])
nFormat = AVS_OFFICESTUDIO_FILE_DOCUMENT_RTF;
else if (L"txt" == _builder_params[0])
nFormat = AVS_OFFICESTUDIO_FILE_DOCUMENT_TXT;
else if (L"pptx" == _builder_params[0])
nFormat = AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX;
else if (L"xlsx" == _builder_params[0])
nFormat = AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX;
else if (L"xls" == _builder_params[0])
nFormat = AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLS;
else if (L"ods" == _builder_params[0])
nFormat = AVS_OFFICESTUDIO_FILE_SPREADSHEET_ODS;
else if (L"csv" == _builder_params[0])
nFormat = AVS_OFFICESTUDIO_FILE_SPREADSHEET_CSV;
else if (L"pdf" == _builder_params[0])
nFormat = AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF;
this->SaveFile(nFormat, _builder_params[1]);
}
}
else
{
bIsNoError = this->ExecuteCommand(NSFile::CUtf8Converter::GetUnicodeStringFromUTF8((BYTE*)_data, (LONG)_len));
}
if (!bIsNoError)
return false;
}
return true;
}
} }
...@@ -22,6 +22,8 @@ namespace NSDoctRenderer ...@@ -22,6 +22,8 @@ namespace NSDoctRenderer
void CloseFile(); void CloseFile();
bool ExecuteCommand(const std::wstring& command); bool ExecuteCommand(const std::wstring& command);
bool Run(const std::wstring& path);
private: private:
CDocBuilder_Private* m_pInternal; CDocBuilder_Private* m_pInternal;
}; };
......
...@@ -18,6 +18,10 @@ CONFIG -= debug_and_release debug_and_release_target ...@@ -18,6 +18,10 @@ CONFIG -= debug_and_release debug_and_release_target
############### destination path ############### ############### destination path ###############
DESTINATION_SDK_PATH = $$PWD/../../../SDK/lib DESTINATION_SDK_PATH = $$PWD/../../../SDK/lib
win32 {
DEFINES += WIN32
}
# WINDOWS # WINDOWS
win32:contains(QMAKE_TARGET.arch, x86_64):{ win32:contains(QMAKE_TARGET.arch, x86_64):{
CONFIG(debug, debug|release) { CONFIG(debug, debug|release) {
......
...@@ -29,8 +29,20 @@ ...@@ -29,8 +29,20 @@
#define AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU AVS_OFFICESTUDIO_FILE_CROSSPLATFORM + 0x0003 #define AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU AVS_OFFICESTUDIO_FILE_CROSSPLATFORM + 0x0003
#define AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_XPS AVS_OFFICESTUDIO_FILE_CROSSPLATFORM + 0x0004 #define AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_XPS AVS_OFFICESTUDIO_FILE_CROSSPLATFORM + 0x0004
#ifdef WIN32
int wmain(int argc, wchar_t *argv[])
#else
int main(int argc, char *argv[]) int main(int argc, char *argv[])
#endif
{ {
if (argc <= 0)
return 0;
std::wstring sBuildFile(argv[argc - 1]);
NSDoctRenderer::CDocBuilder oBuilder;
oBuilder.Run(sBuildFile);
#if 0
NSDoctRenderer::CDocBuilder oBuilder; NSDoctRenderer::CDocBuilder oBuilder;
// tmpfolder // tmpfolder
...@@ -46,6 +58,7 @@ int main(int argc, char *argv[]) ...@@ -46,6 +58,7 @@ int main(int argc, char *argv[])
#endif #endif
oBuilder.SaveFile(AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF, L"D:/TESTFILES/images.pdf"); oBuilder.SaveFile(AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF, L"D:/TESTFILES/images.pdf");
#endif
return 0; return 0;
} }
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