Files
core/ASCOfficeOdtFile/Source/DocxFormat/Logic/Run.cpp
Elen.Subbotina 6138139c4e исправлен проект - подключен "старый" DocxFormat (тот который с AVS - без вытирания буста)
git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@53593 954022d7-b5bf-4e40-9824-e11837661b57
2016-05-20 22:37:54 +03:00

159 lines
3.0 KiB
C++

// auto inserted precompiled begin
#include "precompiled_docxformat.h"
// auto inserted precompiled end
#include "Run.h"
#include "./../FormatError.h"
#include "Utility.h"
#include <utility>
#include <boost/foreach.hpp>
#include "Text.h"
#include "Symbol.h"
namespace OOX
{
namespace Logic
{
Run::Run()
{
}
Run::~Run()
{
}
Run::Run(const XML::XNode& node)
{
fromXML(node);
}
Run::Run(const std::string& text)
{
fromTxt(text);
}
Run::Run(const std::string& text, const RunProperty& runProperty)
{
fromTxt(text);
Property = runProperty;
}
const Run& Run::operator =(const XML::XNode& node)
{
fromXML(node);
return *this;
}
const Run& Run::operator =(const std::string& text)
{
fromTxt(text);
return *this;
}
void Run::fromXML(const XML::XNode& node)
{
const XML::XElement element(node);
Property = element.element("rPr");
for (XML::const_node_iterator i = element.Nodes.begin(); i != element.Nodes.end(); ++i)
{
if (i->isElement())
{
const XML::XElement element(*i);
if (element.XName == "AlternateContent")
{
for (XML::const_element_iterator j = element.Elements.begin(); j != element.Elements.end(); ++j)
{
const XML::XElement oElement(*j);
if (oElement.XName == "Fallback")
{
for (XML::const_element_iterator j = element.Elements.begin(); j != element.Elements.end(); ++j)
fromXML (*j);
break;
}
}
}
if (element.XName == "t" ||element.XName == "tab" || element.XName == "br" ||
element.XName == "drawing" || element.XName == "pict" || element.XName == "footnoteRef" ||
element.XName == "endnoteRef" || element.XName == "continuationSeparator" ||
element.XName == "separator" || element.XName == "footnoteReference" ||
element.XName == "endnoteReference" || element.XName == "object" ||
element.XName == "fldChar" || element.XName == "instrText" || element.XName == "sym")
{
Items->push_back(RunItem(*i));
}
}
else if (i->isText())
{
XML::XText text(*i);
Items->push_back(RunItem(text.Value));
}
}
}
void Run::fromTxt(const std::string& text)
{
add(text);
}
const XML::XNode Run::toXML() const
{
return
XML::XElement(ns.w + "r",
XML::Write(Property) +
XML::Write(Items)
);
}
const std::string Run::toTxt() const
{
std::string text;
BOOST_FOREACH(const RunItem& item, *Items)
{
text += item.toTxt();
}
return text;
}
const bool Run::empty() const
{
return Items->empty();
}
void Run::clear()
{
Items->clear();
}
void Run::add(RunItemBase* item)
{
Items->push_back(RunItem(item));
}
void Run::add(const std::string& text)
{
Items->push_back(RunItem(new Text(text)));
}
} // namespace Logic
} // namespace OOX