Commit dd41cfc1 authored by Elen.Subbotina's avatar Elen.Subbotina Committed by Alexander Trofimov

.......

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@59007 954022d7-b5bf-4e40-9824-e11837661b57
parent 96faa3be
......@@ -16,7 +16,7 @@
#include <boost/lexical_cast.hpp>
#include <boost_filesystem_version.h>
//#include "ConvertOO2OOX.h"
#include "source\ConvertXls2Xlsx.h"
#include "..\Common\XmlUtils.h"
#include "..\Common\ASCATLError.h"
......@@ -127,19 +127,13 @@ HRESULT COfficeXlsFile::LoadFromFileImpl(const std::wstring & srcFileName,
{
HRESULT hr = AVS_ERROR_UNEXPECTED;
#ifdef BOOST_FILESYSTEM_LEGACY
const std::wstring ext = boost::algorithm::to_lower_copy(boost::filesystem::wpath(srcFileName).extension());
#else
const std::wstring ext = boost::algorithm::to_lower_copy(boost::filesystem::wpath(srcFileName).extension().string<std::wstring>());
#endif
ProgressCallback ffCallBack;
ffCallBack.OnProgress = OnProgressFunc;
ffCallBack.OnProgressEx = OnProgressExFunc;
ffCallBack.caller = this;
//hr = ConvertXls2Xlsx(ext,srcFileName, dstTempPath, &ffCallBack);
hr = ConvertXls2Xlsx(srcFileName, dstTempPath, &ffCallBack);
if (hr != S_OK) return hr;
......
......@@ -15,7 +15,7 @@
#include "XlsFormat\Logic\SummaryInformationStream\SummaryInformation.h"
//#include "XlsFormat\Auxiliary\HelpersTagsGenerator.h"
HRESULT ConvertXls2Xlsx(const std::wstring &ext, const std::wstring & srcFile, const std::wstring & dstPath, bool bOnlyPresentation, const ProgressCallback* CallBack)
HRESULT ConvertXls2Xlsx(const std::wstring & srcFile, const std::wstring & dstPath, const ProgressCallback* CallBack)
{
HRESULT hr = S_OK;
......@@ -70,7 +70,9 @@ HRESULT ConvertXls2Xlsx(const std::wstring &ext, const std::wstring & srcFile, c
//XLS::BiffStructurePtr root = boost::shared_ptr<XLS::BiffStructure>(new XLS::BiffStructure());
XLS::BinReaderProcessor proc(stream_reader , true);
proc.mandatory(XLS::WorkbookStreamObject(workbook_code_page));
XLS::WorkbookStreamObject workbook;
workbook.set_code_page(workbook_code_page);
proc.mandatory(workbook);
return S_OK;
......
......@@ -3,4 +3,4 @@
struct ProgressCallback;
HRESULT ConvertXls2Xlsx(const std::wstring &ext, const std::wstring & srcFile, const std::wstring & dstPath, bool bOnlyPresentation, const ProgressCallback* CallBack);
\ No newline at end of file
HRESULT ConvertXls2Xlsx(const std::wstring & srcFile, const std::wstring & dstPath, const ProgressCallback* CallBack);
\ No newline at end of file
......@@ -474,13 +474,16 @@ namespace XMLSTUFF
//
//
//// Makes a new XML tag and append it to parent (no attributes set)
//MSXML2::IXMLDOMElementPtr createElement(const std::wstring & tag_name, BiffStructurePtr & parent)
//BiffStructurePtr createElement(const std::wstring & tag_name, BiffStructurePtr & parent)
//{
// MSXML2::IXMLDOMElementPtr own_tag = parent->GetownerDocument()->createElement(tag_name);
// parent->appendChild(own_tag);
// BiffStructurePtr own_tag;// = createElement(tag_name);
//
// if (parent)
// parent->appendChild(own_tag);
//
// return own_tag;
//}
//
const std::wstring tab2sheet_name(const short tabid, std::vector<std::wstring>& sheets_names)
{
......
......@@ -52,6 +52,9 @@ void Document::newDoc(const std::wstring & root_name)
const int Document::appendBinaryData(XLS::BiffStructurePtr & elem, const char * data, const size_t size)
{
if (elem == NULL)
return 0;
boost::shared_array<char> buffer(new char[size]);
memcpy_s(buffer.get(), size, data, size);
return appendBinaryData(elem, buffer, size);
......@@ -60,6 +63,9 @@ const int Document::appendBinaryData(XLS::BiffStructurePtr & elem, const char *
const int Document::appendBinaryData(XLS::BiffStructurePtr & elem, boost::shared_array<char>& pre_allocated_data, const size_t size)
{
if (elem == NULL)
return 0;
std::wstring name = elem->tagName_;
Document* doc = findDocumentByElement(elem);
if(!doc)
......
......@@ -11,8 +11,8 @@ class BinProcessor;
//class BinWriterProcessor;
class CFStreamCacheReader;
class BiffStructure;
typedef boost::shared_ptr<BiffStructure> BiffStructurePtr;
class BaseObject;
typedef boost::shared_ptr<BaseObject> BaseObjectPtr;
// Logical representation of an XML record
class BaseObject
......@@ -23,11 +23,15 @@ public:
virtual boost::shared_ptr<BaseObject> clone() = 0;
virtual const bool read(CFStreamCacheReader& reader, BiffStructurePtr & parent, const bool mandatory) = 0; // Read self and children
virtual const bool read(CFStreamCacheReader& reader, BaseObjectPtr & parent, const bool mandatory) = 0; // Read self and children
virtual void toFrom(BinProcessor& proc) = 0; // This function shall contain only mark functions and is the universal XML serialiser
virtual const std::wstring & getClassName() const = 0; // Must be overridden in every deriver. The return value must be a reference to a static variable inside the getter
void add_child (BaseObjectPtr e) {elements_.push_back(e);}
std::list<BaseObjectPtr> elements_;
};
#define BO_ATTRIB_MARKUP_BEGIN void toFrom(BinProcessor& proc) {
......
......@@ -19,7 +19,7 @@ BiffRecord::~BiffRecord()
// Common algorithm of loading from bin to XML
const bool BiffRecord::read(CFStreamCacheReader& reader, BiffStructurePtr & parent, const bool is_mandatory)
const bool BiffRecord::read(CFStreamCacheReader& reader, BaseObjectPtr & parent, const bool is_mandatory)
{
parent_ = parent;
......
......@@ -18,7 +18,7 @@ public:
~BiffRecord();
// virtual const bool doSomething(BinProcessor& proc);
virtual const bool read(CFStreamCacheReader& reader, BiffStructurePtr & parent, const bool is_mandatory); // Read self and children
virtual const bool read(CFStreamCacheReader& reader, BaseObjectPtr & parent, const bool is_mandatory); // Read self and children
//virtual const bool write(BinWriterProcessor& proc, const bool is_mandatory); // Write self and children
virtual void readFields(CFRecord& record) = 0;
......@@ -34,7 +34,7 @@ private:
virtual const bool storeRecordAndDecideProceeding(CFRecordPtr record); // This function is overridden in BiffRecordSplit
protected:
BiffStructurePtr parent_;
BaseObjectPtr parent_;
};
#define BIFF_RECORD_DEFINE_TYPE_INFO(class_name) public: const CFRecordType::TypeId getTypeId() const { return rt_ ## class_name; }
......
......@@ -46,7 +46,8 @@ private:
public:
BO_ATTRIB_MARKUP_BEGIN
is_contained_in_chart_substream = L"ChartSheetSubstream" == proc.getParent()->tagName_;
//todooo ????
//is_contained_in_chart_substream = L"ChartSheetSubstream" == proc.getParent()->tagName_;
BO_ATTRIB_MARKUP_ATTRIB(fSelected)
if(!is_contained_in_chart_substream)
{
......
......@@ -33,9 +33,7 @@ typedef std::vector<BiffStructurePtr> BiffStructurePtrVector;
class BiffStructure : protected BiffStructure_NoVtbl
{
public:
virtual void add_child (BiffStructurePtr & child) { childs_.push_back(child);}
virtual void add_attributes (BiffStructurePtr & attribute) { attributes_.push_back(attribute);}
virtual BiffStructurePtr clone() = 0;
Document* get_document();
......@@ -53,10 +51,6 @@ public:
virtual const std::wstring & getClassName() const = 0; // Must be overridden in every deriver. The return value must be a reference to a static variable inside the getter
//BiffStructurePtr parent_;
BiffStructurePtrVector childs_;
BiffStructurePtrVector attributes_;
std::wstring tagName_;
protected:
Document * document_;
......
......@@ -61,7 +61,8 @@ const bool CUSTOMVIEW::loadContent(BinProcessor& proc)
proc.optional<RightMargin>();
proc.optional<TopMargin>();
proc.optional<BottomMargin>();
proc.optional(Pls(proc.getParent()));
//proc.optional(Pls(proc.getParent()));
//todoo0 ?????
proc.optional<Setup>();
proc.optional<PrintSize>();
proc.optional<HeaderFooter>();
......
......@@ -37,12 +37,13 @@ public:
const bool loadContent(BinProcessor& proc)
{
if(!proc.mandatory(Pls(proc.getParent())))
//todooo ????
//if(!proc.mandatory(Pls(proc.getParent())))
{
return false;
}
proc.repeated<Continue>(0, 0);
return true;
//proc.repeated<Continue>(0, 0);
//return true;
};
};
......@@ -71,7 +72,8 @@ const bool PAGESETUP::loadContent(BinProcessor& proc)
proc.optional<TopMargin>();
proc.optional<BottomMargin>();
proc.optional<Parenthesis_PAGESETUP_1>();
proc.optional(Pls(proc.getParent())); // OpenOffice Calc stored files workaround
//proc.optional(Pls(proc.getParent())); // OpenOffice Calc stored files workaround
//todooo ?????
proc.mandatory<Setup>();
proc.optional<HeaderFooter>(); // Moved from WorksheetSubstream
......
......@@ -9,7 +9,7 @@
namespace XLS
{;
BinProcessor::BinProcessor(BiffStructurePtr & parent, GlobalWorkbookInfoPtr global_info)
BinProcessor::BinProcessor(BaseObjectPtr & parent, GlobalWorkbookInfoPtr global_info)
: parent_(parent),
global_info_(global_info)
{
......@@ -49,7 +49,7 @@ const bool BinProcessor::repeated(BaseObject& object, const int fromN, const int
// =========================== Reader ======================================
BinReaderProcessor::BinReaderProcessor(CFStreamCacheReader& reader, BiffStructurePtr parent, const bool is_mandatory)
BinReaderProcessor::BinReaderProcessor(CFStreamCacheReader& reader, BaseObjectPtr parent, const bool is_mandatory)
: reader_(reader),
BinProcessor(parent, reader.getGlobalWorkbookInfo()),
is_mandatory_(is_mandatory)
......@@ -87,23 +87,22 @@ const bool BinReaderProcessor::mandatory(BaseObject& object)
void BinReaderProcessor::markAttribute(BiffAttribute& attrib, const std::wstring & attrib_name)
{
attrib.setName(attrib_name);
//attrib.toXML(parent_);
parent_->add_attributes(boost::shared_ptr<BiffStructure>(&attrib));
}
void BinReaderProcessor::markTaggedAttribute(BiffStructure& attrib)
{
parent_->add_attributes(boost::shared_ptr<BiffStructure>(&attrib));
}
void BinReaderProcessor::markVector(BiffStructurePtrVector& vec, BiffStructure& exClone)
{
for(std::vector<BiffStructurePtr>::iterator it = vec.begin(), itEnd = vec.end(); it != itEnd; ++it)
{
parent_->add_child(boost::shared_ptr<BiffStructure>(it->get()));
}
//if (parent_ == NULL) return;
//for(std::vector<BiffStructurePtr>::iterator it = vec.begin(), itEnd = vec.end(); it != itEnd; ++it)
//{
// parent_->add_child(boost::shared_ptr<BiffStructure>(it->get()));
//}
}
......@@ -119,13 +118,15 @@ const bool BinReaderProcessor::readChild(BaseObject& object, const bool is_manda
// We don't update ret_val here because we are reading to the copy of the object.
// And the real object will remain uninitialized
wanted_objects.push_back(object.clone()); // store the copy of the object that was not found (this line is here to take another chance to be read after some trash processed)
for(BaseObjectPtrList::iterator it = wanted_objects.begin()/*, itEnd = */;
it != wanted_objects.end();)
for(BaseObjectPtrList::iterator it = wanted_objects.begin()/*, itEnd = */; it != wanted_objects.end();)
{
const BaseObjectPtr w_object = *it;
if(w_object->read(reader_, parent_, false))
{
// Remove successfully read object from the wanted objects list
parent_->add_child(w_object);
wanted_objects.erase(it++);
}
else
......
......@@ -22,7 +22,7 @@ class CFStreamCacheWriter;
class BinProcessor
{
public:
BinProcessor(BiffStructurePtr & parent, GlobalWorkbookInfoPtr global_info);
BinProcessor(BaseObjectPtr & parent, GlobalWorkbookInfoPtr global_info);
BinProcessor(GlobalWorkbookInfoPtr global_info);
~BinProcessor();
......@@ -61,11 +61,10 @@ public:
virtual const bool getNextSubstreamType(WORD& type) = 0;
virtual void SeekToEOF() = 0;
BiffStructurePtr getParent() const { return parent_;};
BaseObjectPtr getParent() const { return parent_;};
GlobalWorkbookInfoPtr getGlobalWorkbookInfo() const { return global_info_;};
protected:
//MSXML2::IXMLDOMElementPtr parent_;
BiffStructurePtr parent_;
BaseObjectPtr parent_;
GlobalWorkbookInfoPtr global_info_;
};
......@@ -73,7 +72,7 @@ protected:
class BinReaderProcessor : public BinProcessor
{
public:
BinReaderProcessor(CFStreamCacheReader& reader, BiffStructurePtr parent, const bool is_mandatory);
BinReaderProcessor(CFStreamCacheReader& reader, BaseObjectPtr parent, const bool is_mandatory);
BinReaderProcessor(CFStreamCacheReader& reader, const bool is_mandatory); //root ???
virtual const bool optional(BaseObject& object);
......
......@@ -31,7 +31,7 @@ const bool CompositeObject::doSomething(BinProcessor& proc)
*/
const bool CompositeObject::read(CFStreamCacheReader& reader, BiffStructurePtr & parent, const bool is_mandatory)
const bool CompositeObject::read(CFStreamCacheReader& reader, BaseObjectPtr & parent, const bool is_mandatory)
{
//BiffStructurePtr own_tag = XMLSTUFF::createElement(getClassName(), parent);
......@@ -56,7 +56,7 @@ const bool CompositeObject::loadContentRead(BinReaderProcessor& proc)
const bool ABNFParenthesis::read(CFStreamCacheReader& reader, BiffStructurePtr & parent, const bool is_mandatory)
const bool ABNFParenthesis::read(CFStreamCacheReader& reader, BaseObjectPtr & parent, const bool is_mandatory)
{
BinReaderProcessor reader_proc(reader, parent, is_mandatory);
return loadContentRead(reader_proc);
......
......@@ -22,7 +22,7 @@ public:
~CompositeObject();
//virtual const bool doSomething(BinProcessor& proc);
virtual const bool read(CFStreamCacheReader& reader, BiffStructurePtr & parent, const bool mandatory); // Read self and children
virtual const bool read(CFStreamCacheReader& reader, BaseObjectPtr & parent, const bool mandatory); // Read self and children
//virtual const bool write(BinWriterProcessor& proc, const bool is_mandatory); // Write self and children
virtual const bool loadContent(BinProcessor& proc) = 0;
......@@ -43,7 +43,7 @@ class ABNFParenthesis : public CompositeObject
public:
ABNFParenthesis(){};
virtual const bool read(CFStreamCacheReader& reader, BiffStructurePtr & parent, const bool is_mandatory);
virtual const bool read(CFStreamCacheReader& reader, BaseObjectPtr & parent, const bool is_mandatory);
private:
virtual BiffStructurePtr createElement() { return BiffStructurePtr();};
......
......@@ -26,6 +26,11 @@ WorkbookStreamObject::WorkbookStreamObject(const unsigned __int16 code_page)
{
}
void WorkbookStreamObject::set_code_page(const unsigned __int16 code_page)
{
code_page_ = code_page;
}
WorkbookStreamObject::~WorkbookStreamObject()
{
......
......@@ -23,6 +23,8 @@ public:
static const unsigned __int16 DefaultCodePage = OLEPS::CodePage::DefaultCodePage;
void set_code_page(const unsigned __int16 code_page);
private:
unsigned __int16 code_page_;
};
......
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