Files
core/OdfFile/Reader/Converter/pptx_text_context.cpp
Elena Subbotina e57c7ed76e fix bug #76601
2025-09-10 19:31:13 +03:00

980 lines
27 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* (c) Copyright Ascensio System SIA 2010-2023
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
#include "pptx_conversion_context.h"
#include "pptx_text_context.h"
#include <iostream>
#include <list>
#include <xml/simple_xml_writer.h>
#include <xml/utils.h>
#include "../Format/odf_document.h"
#include "../Format/odfcontext.h"
#include "../Format/calcs_styles.h"
#include "../Format/style_text_properties.h"
namespace cpdoccore {
namespace oox {
class pptx_text_context::Impl: boost::noncopyable
{
public:
Impl(odf_reader::odf_read_context & odf_context_, pptx_conversion_context & pptx_context_);
public:
styles_context & get_styles_context() { return styles_context_; }
void add_text(const std::wstring & text);
void add_paragraph(const std::wstring & para);
void start_paragraph(const std::wstring & styleName);
void end_paragraph ();
void start_span (const std::wstring & styleName);
void end_span ();
std::wstring end_span2 ();
void start_object();
std::wstring end_object ();
void start_base_style(const std::wstring baseStyleName, const odf_types::style_family::type baseStyleType);
void end_base_style();
void ApplyTextProperties (std::wstring style, std::wstring para_style, odf_reader::text_format_properties & propertiesOut, bool inStyle = false);
void ApplyParagraphProperties (std::wstring para_style, odf_reader::paragraph_format_properties & propertiesOut, bool inStyle = false);
void ApplyListProperties (odf_reader::paragraph_format_properties & propertiesOut, int Level);
odf_reader::style_list_level_properties* ApplyListProperties (odf_reader::paragraph_format_properties & propertiesOut, odf_reader::text_list_style* text_list_style, int Level);
void set_local_styles_container(odf_reader::styles_container* local_styles_);//это если стили объектов содержатся в другом документе
hyperlink_data get_hyperlink();
void start_hyperlink();
void set_rel_id(const std::wstring& rId);
void set_action(const std::wstring& action);
void end_hyperlink ();
void start_list (const std::wstring & StyleName, bool Continue = false);
void end_list ();
void start_list_item(bool restart = false);
void end_list_item ();
void start_field (field_type type, const std::wstring & styleName);
void end_field ();
void start_comment ();
std::wstring end_comment();
std::wstring get_last_paragraph_style_name();
bool in_list_;
bool process_layouts_;
private:
styles_context styles_context_;
odf_reader::odf_read_context & odf_context_ ;
std::wstring hyperlink_hId;
hyperlink_data hyperlink_;
bool in_span;
bool in_paragraph;
bool in_comment;
bool is_predump;
odf_reader::styles_container * local_styles_ptr_;
void write_rPr (std::wostream & strm);
void write_pPr (std::wostream & strm);
void write_t (std::wostream & strm);
std::wstring dump_paragraph();
void dump_run();
void dump_field();
size_t paragraphs_cout_; //???? тока из за начала отсчета?
std::wstringstream text_; //приходящий текст
std::wstringstream paragraph_; //перманенто скидываемые параграфы
std::wstringstream run_; //перманенто скидываемые куски с быть может разными свойствами
std::wstring last_paragraph_style_name_;
std::wstring paragraph_style_name_;
std::wstring span_style_name_;
std::wstring base_style_name_;
odf_types::style_family::type base_style_family_;//Presentation Or SpreadSheet
//-------------------------------------------------------------------------------
std::vector<std::wstring> list_style_stack_;
bool first_element_list_item_;
_CP_OPT(odf_types::length) last_run_font_size_;
int new_list_style_number_; // счетчик для нумерации имен созданных в процессе конвертации стилей
boost::unordered_map<std::wstring, std::wstring> list_style_renames_; // цепочки переименований нумераций
void write_list_styles(std::wostream & strm);
//void write_list_properties(std::wostream & strm);
std::wstring find_list_rename(const std::wstring & ListStyleName);
std::wstring current_list_style();
///////////////////////////
field_type field_type_;
std::wstringstream field_value_;
pptx_conversion_context & pptx_context_;
};
pptx_text_context::Impl::Impl(odf_reader::odf_read_context & odf_contxt_, pptx_conversion_context & pptx_contxt_):
odf_context_(odf_contxt_), pptx_context_(pptx_contxt_),
paragraphs_cout_(0), in_paragraph(false),in_span(false), in_comment(false), field_type_(none)
{
new_list_style_number_=0;
local_styles_ptr_ = NULL;
process_layouts_ = false;
}
void pptx_text_context::Impl::add_text(const std::wstring & text)
{
if (field_type_)
field_value_ << text;
else
text_ << text;
}
void pptx_text_context::Impl::add_paragraph(const std::wstring & para)
{
paragraph_ << para;
}
void pptx_text_context::Impl::set_local_styles_container(odf_reader::styles_container * local_styles_)
{
local_styles_ptr_= local_styles_;
}
void pptx_text_context::Impl::start_paragraph(const std::wstring & styleName)
{
if (paragraphs_cout_++ > 0)
{
//if (in_list_ == false || in_comment == true)
//{
//// конец предыдущего абзаца и начало следующего
////text_ << L"&#10;";
// text_ << L"\n";
//}
//else/* (paragraph_style_name_ != styleName)*/
{
is_predump = true;
dump_paragraph();
}
}else
{
text_.str(std::wstring());
field_value_.str(std::wstring());
}
last_paragraph_style_name_ = paragraph_style_name_;
paragraph_style_name_ = styleName;
in_paragraph = true;
is_predump = false;
}
void pptx_text_context::Impl::end_paragraph()
{
in_paragraph = false;
}
void pptx_text_context::Impl::start_span(const std::wstring & styleName)//кусок текста в абзаце(параграфе) со своими свойствами - этто может быть и 1 буква
{
int text_size = text_.str().length();
if ((span_style_name_ != styleName && text_size > 0) || in_span)
{
dump_run();
}
span_style_name_ = styleName;
in_span = true;
}
void pptx_text_context::Impl::end_span()
{
dump_run();
span_style_name_ = L"";
in_span = false;
}
std::wstring pptx_text_context::Impl::end_span2()
{
dump_run();
span_style_name_ = L"";
in_span = false;
return run_.str();
}
void pptx_text_context::Impl::start_hyperlink()
{
dump_run();//проверить
}
void pptx_text_context::Impl::end_hyperlink()
{
dump_run();
hyperlink_ = { L"", L"" };
}
void pptx_text_context::Impl::ApplyTextProperties(std::wstring style_name, std::wstring para_style_name, odf_reader::text_format_properties & propertiesOut, bool inStyle)
{
std::vector<const odf_reader::style_instance *> instances;
odf_reader::style_instance* defaultStyle = NULL;
odf_reader::style_instance* para_style = NULL;
odf_reader::style_instance* text_style = NULL;
odf_reader::style_instance* baseStyle = NULL;
if (local_styles_ptr_)
{
para_style = local_styles_ptr_->style_by_name (para_style_name, odf_types::style_family::Paragraph, inStyle);
text_style = local_styles_ptr_->style_by_name (style_name, odf_types::style_family::Text, inStyle);
defaultStyle = local_styles_ptr_->style_default_by_type (odf_types::style_family::Text);
baseStyle = local_styles_ptr_->style_by_name (base_style_name_, base_style_family_, inStyle);
}
else
{
para_style = odf_context_.styleContainer().style_by_name (para_style_name, odf_types::style_family::Paragraph, inStyle);
text_style = odf_context_.styleContainer().style_by_name (style_name, odf_types::style_family::Text, inStyle);
defaultStyle = odf_context_.styleContainer().style_default_by_type (odf_types::style_family::Text);
baseStyle = odf_context_.styleContainer().style_by_name (base_style_name_, base_style_family_, inStyle);
}
if (defaultStyle) instances.push_back(defaultStyle);
if (baseStyle) instances.push_back(baseStyle);
if (para_style) instances.push_back(para_style);
if (text_style) instances.push_back(text_style);
if (text_style) get_styles_context().start_process_style(text_style);
else if (para_style) get_styles_context().start_process_style(para_style);
else get_styles_context().start_process_style(baseStyle);
odf_reader::text_format_properties_ptr text_props = calc_text_properties_content(instances);
if (text_props)
{
propertiesOut.apply_from(*text_props.get());
}
}
odf_reader::style_list_level_properties* pptx_text_context::Impl::ApplyListProperties(odf_reader::paragraph_format_properties & propertiesOut, odf_reader::text_list_style* text_list_style, int Level)
{
if (!text_list_style) return NULL;
if (Level >= (int)text_list_style->content_.size()) return NULL;
odf_reader::office_element_ptr elm = text_list_style->content_[Level];
odf_reader::office_element_ptr elm_list;
if (elm->get_type() == typeTextListLevelStyleBullet)
{
odf_reader::text_list_level_style_bullet* list_bullet = dynamic_cast<odf_reader::text_list_level_style_bullet *>(elm.get());
if (list_bullet)elm_list = list_bullet->list_level_properties_;
}
if (elm->get_type() == typeTextListLevelStyleNumber)
{
odf_reader::text_list_level_style_number* list_number = dynamic_cast<odf_reader::text_list_level_style_number *>(elm.get());
if (list_number)elm_list = list_number->list_level_properties_;
}
if (elm->get_type() == typeTextListLevelStyleImage)
{
odf_reader::text_list_level_style_image* list_image = dynamic_cast<odf_reader::text_list_level_style_image *>(elm.get());
if (list_image)elm_list = list_image->list_level_properties_;
}
////////////////////
odf_reader::style_list_level_properties* list_properties = NULL;
if (elm_list)
{
list_properties = dynamic_cast<odf_reader::style_list_level_properties *>(elm_list.get());
}
elm->pptx_convert(pptx_context_);
return list_properties;
}
void pptx_text_context::Impl::ApplyListProperties(odf_reader::paragraph_format_properties & propertiesOut, int Level)
{
if (Level < 0) return;
if (list_style_stack_.empty()) return;
odf_reader::text_list_style* text_list_style = odf_context_.listStyleContainer().list_style_by_name(list_style_stack_.back());
odf_reader::style_list_level_properties* list_properties = ApplyListProperties(propertiesOut, text_list_style, Level);
if (list_properties)
{
propertiesOut.fo_text_indent_ = list_properties->text_min_label_width_;
if (list_properties->text_space_before_)
{
double spaceBeforeTwip = list_properties->text_space_before_->get_value_unit(odf_types::length::pt);
if (spaceBeforeTwip > 0)
{
propertiesOut.fo_margin_left_ = odf_types::length(spaceBeforeTwip, odf_types::length::pt);
}
}
if (list_properties->fo_width_)
{
}
}
}
void pptx_text_context::Impl::ApplyParagraphProperties(std::wstring style_name, odf_reader::paragraph_format_properties & propertiesOut, bool inStyle)
{
std::vector<const odf_reader::style_instance *> instances;
odf_reader::style_instance* style = NULL;
odf_reader::style_instance* defaultStyle = NULL;
odf_reader::style_instance* baseStyle = NULL;
if (local_styles_ptr_)
{
style = local_styles_ptr_->style_by_name (style_name, odf_types::style_family::Paragraph, inStyle);
defaultStyle = local_styles_ptr_->style_default_by_type (odf_types::style_family::Paragraph);
baseStyle = local_styles_ptr_->style_by_name (base_style_name_, base_style_family_, inStyle);
}
else
{
style = odf_context_.styleContainer().style_by_name (style_name, odf_types::style_family::Paragraph, inStyle);
defaultStyle = odf_context_.styleContainer().style_default_by_type (odf_types::style_family::Paragraph);
baseStyle = odf_context_.styleContainer().style_by_name (base_style_name_, base_style_family_, inStyle);
}
if (defaultStyle) instances.push_back(defaultStyle);
if (baseStyle) instances.push_back(baseStyle);
if (style) instances.push_back(style);
if (style) get_styles_context().start_process_style(style);
else get_styles_context().start_process_style(baseStyle);
propertiesOut.apply_from(calc_paragraph_properties_content(instances));
}
void pptx_text_context::Impl::write_pPr(std::wostream & strm)
{
get_styles_context().start();
int level = list_style_stack_.size() - 1;
if (is_predump)
level--;
odf_reader::paragraph_format_properties paragraph_properties_;
ApplyParagraphProperties (paragraph_style_name_, paragraph_properties_, process_layouts_);
ApplyListProperties (paragraph_properties_, level);//выравнивания листа накатим на свойства параграфа
paragraph_properties_.pptx_convert(pptx_context_);
const std::wstring& paragraphAttr = get_styles_context().paragraph_attr().str();
const std::wstring & paragraphNodes = get_styles_context().paragraph_nodes().str();
if (level < 0 && paragraphAttr.length() < 1 && paragraphNodes.empty()) return;
strm << L"<a:pPr ";
if (level >= 0)
{
if (level > 8) level = 0;
strm << L"lvl=\"" << level << L"\" ";
}
strm << paragraphAttr;
strm << ">";
strm << paragraphNodes;
if (process_layouts_)
{
odf_reader::text_format_properties text_properties_;
ApplyTextProperties(L"", paragraph_style_name_, text_properties_, process_layouts_);
text_properties_.oox_serialize(strm, true, odf_context_.fontContainer(), true);
}
if (level >= 0 )
{
strm << get_styles_context().list_style().str();
}
strm << L"</a:pPr>";
}
void pptx_text_context::Impl::write_t(std::wostream & strm)
{
}
void pptx_text_context::Impl::write_rPr(std::wostream & strm)
{
if (paragraph_style_name_.empty() && span_style_name_.empty() && !(!hyperlink_hId.empty()) && base_style_name_.empty())
return;
odf_reader::text_format_properties text_properties_;
ApplyTextProperties(span_style_name_, paragraph_style_name_, text_properties_, true);
get_styles_context().start();
get_styles_context().hlinkClick() = hyperlink_hId;
text_properties_.pptx_convert(pptx_context_);
if (text_properties_.fo_font_size_ && text_properties_.fo_font_size_->get_type() == odf_types::font_size::Length)
last_run_font_size_ = text_properties_.fo_font_size_->get_length();
strm << get_styles_context().text_style().str();
}
std::wstring pptx_text_context::Impl::dump_paragraph(/*bool last*/)
{
if (in_comment) return L"";
end_span();
std::wstring str_run = run_.str();
if (false == str_run.empty() || false == paragraph_style_name_.empty() || (false == base_style_name_.empty() && process_layouts_))
{
CP_XML_WRITER(paragraph_)
{
CP_XML_NODE(L"a:p")
{
write_pPr(CP_XML_STREAM());
if (str_run.length() > 0)
{
CP_XML_STREAM() << run_.str();
}
CP_XML_NODE(L"a:endParaRPr")
{
odf_reader::paragraph_format_properties parap_props;
ApplyParagraphProperties(paragraph_style_name_, parap_props, false);
if (last_run_font_size_ && !parap_props.fo_margin_top_)
{
int sz = last_run_font_size_->get_value_unit(odf_types::length::pt) * 100;
CP_XML_ATTR(L"sz", sz);
}
last_run_font_size_ = boost::none;
}
}
}
run_.str(std::wstring());
}
return paragraph_.str();
}
#if defined (_WIN32) || defined (_WIN64)
#include <Objbase.h>
#endif
void pptx_text_context::Impl::dump_field()
{
if (field_type_ == none) return;
CP_XML_WRITER(run_)
{
CP_XML_NODE(L"a:fld")
{
std::wstring content = XmlUtils::EncodeXmlString(field_value_.str());
std::wstring string_id;
std::wstring string_type;
#if defined (_WIN32) || defined (_WIN64)
GUID new_id;
CoCreateGuid(&new_id);
wchar_t str[100]={};
StringFromGUID2(new_id,str,100);
string_id = str;
#endif
switch (field_type_)
{
case page_number:
{
string_type = L"slidenum";
#if !defined (_WIN32) && !defined (_WIN64)
string_id = L"{5CC2A059-B141-45A7-B910-B096D6D06820}";
#endif
// content = L"#";
}
break;
case date:
{
string_type = L"datetime1";
#if !defined (_WIN32) && !defined (_WIN64)
string_id = L"{1D1B89AE-8D35-4BB5-B492-6D9BE4F23A39}";
#endif
if (content.length()<1)content = XmlUtils::EncodeXmlString(L"01.01.2000");
}
break;
case time:
{
string_type = L"datetime11";
#if !defined (_WIN32) && !defined (_WIN64)
string_id = L"{03DA74A9-E3F2-4F30-AAF9-CC1A83980D5E}";
#endif
if (content.length()<1)content = XmlUtils::EncodeXmlString(L"00:00:00");
}
break;
case datetime:
{
string_type = L"datetime1";
#if !defined (_WIN32) && !defined (_WIN64)
string_id = L"{A9EA0FE8-FEF9-4B2F-BC9D-19DDCDB4AB9B}";
#endif
}break;
}
if (string_type.length()>0)
{
CP_XML_ATTR(L"id", string_id);
CP_XML_ATTR(L"type", string_type);
CP_XML_NODE(L"a:t")
{
CP_XML_STREAM() << content;
}
}
else
{
//запишем как обычный текст
text_ << content;
}
}
}
field_value_.str(std::wstring());
field_type_ = none;
}
void pptx_text_context::Impl::dump_run()
{
if (in_comment) return;
dump_field();
//if (process_layouts_)
// return;
const std::wstring content = XmlUtils::EncodeXmlString(text_.str());
//if (content.length() <1 && span_style_name_.length()<1) return ; ... провеить с пустыми строками нужны ли ...
if (content.length() > 0)
{
CP_XML_WRITER(run_)
{
CP_XML_NODE(L"a:r")
{
write_rPr(CP_XML_STREAM());
CP_XML_NODE(L"a:t")
{
//CP_XML_ATTR(L"xml:space", L"preserve");
CP_XML_STREAM() << content;
}
}
text_.str(std::wstring());
}
}
else
{
odf_reader::text_format_properties text_properties_;
ApplyTextProperties(span_style_name_, paragraph_style_name_, text_properties_);
if (text_properties_.fo_font_size_ && text_properties_.fo_font_size_->get_type() == odf_types::font_size::Length)
last_run_font_size_ = text_properties_.fo_font_size_->get_length();
}
hyperlink_hId =L"";
}
void pptx_text_context::Impl::start_base_style(const std::wstring baseStyleName, const odf_types::style_family::type baseStyleType)
{
base_style_name_ = baseStyleName;
base_style_family_ = baseStyleType;
}
void pptx_text_context::Impl::end_base_style()
{
base_style_name_ = L"";
base_style_family_ = odf_types::style_family::None;
}
void pptx_text_context::Impl::start_object()
{
paragraphs_cout_ = 0;
run_.str(std::wstring());
paragraph_.str(std::wstring());
text_.str(std::wstring());
field_value_.str(std::wstring());
paragraph_style_name_ = L"";
span_style_name_ = L"";
}
std::wstring pptx_text_context::Impl::end_object()
{
dump_paragraph(/*true*/);
std::wstring str_paragraph = paragraph_.str();
std::wstringstream str_output;
if (str_paragraph.length() > 0)
{
write_list_styles(str_output);
str_output << str_paragraph;
}
paragraphs_cout_ = 0;
run_.str(std::wstring());
paragraph_.str(std::wstring());
text_.str(std::wstring());
field_value_.str(std::wstring());
paragraph_style_name_ = L"";
span_style_name_=L"";
return str_output.str();
}
void pptx_text_context::Impl::start_list_item(bool restart)
{
if (paragraphs_cout_ > 0 && restart)
{
dump_paragraph();
}
in_list_ = true;
first_element_list_item_ = true;
if (restart && !list_style_stack_.empty())
{
const std::wstring curStyleName = current_list_style();
const std::wstring newStyleName = curStyleName + std::to_wstring(new_list_style_number_++);
list_style_renames_[curStyleName] = newStyleName;
odf_reader::list_style_container & lists = odf_context_.listStyleContainer();
odf_reader::text_list_style * curStyle = lists.list_style_by_name(curStyleName);
lists.add_list_style(curStyle, newStyleName);
end_list();
start_list(newStyleName);
}
}
void pptx_text_context::Impl::start_list(const std::wstring & StyleName, bool Continue)
{
if (paragraphs_cout_ > 0 && ( in_paragraph || !list_style_stack_.empty()))
{
dump_paragraph();
}
if (!StyleName.empty())
{
std::wstring name = StyleName;
if (Continue)
name = find_list_rename(name);
list_style_stack_.push_back(name);
}
else if (!list_style_stack_.empty())
list_style_stack_.push_back(list_style_stack_.back());
else
list_style_stack_.push_back(L"");
}
void pptx_text_context::Impl::end_list()
{
in_list_ = false;
list_style_stack_.pop_back();// пока не стираем .. как сохраним в lstStyles - очистим
}
std::wstring pptx_text_context::Impl::current_list_style()
{
if (!list_style_stack_.empty())
return list_style_stack_.back();
else
return L"";
}
std::wstring pptx_text_context::Impl::find_list_rename(const std::wstring & ListStyleName)
{
std::wstring name = ListStyleName;
while (list_style_renames_.count(name) > 0)
name = list_style_renames_.at(name);
return name;
}
void pptx_text_context::Impl::end_list_item()
{
dump_paragraph();
if (paragraphs_cout_ != 0)
paragraphs_cout_--;
paragraph_style_name_ = L"";
in_list_ = false;
}
void pptx_text_context::Impl::start_field(field_type type, const std::wstring & styleName)
{
field_type_ = type;
}
void pptx_text_context::Impl::start_comment()
{
in_comment = true;//отдельная ветка - так как без форматирования
}
std::wstring pptx_text_context::Impl::end_comment()
{
std::wstring str_comment = text_.str();
text_.str(std::wstring());
in_comment = false;
paragraphs_cout_ = 0;
paragraph_style_name_ = L"";
span_style_name_=L"";
return str_comment;
}
void pptx_text_context::Impl::end_field()
{
dump_run();
field_type_ = none;
}
void pptx_text_context::Impl::write_list_styles(std::wostream & strm)//defaults style paragraph & lists
{
odf_reader::list_style_container & list_styles = odf_context_.listStyleContainer();
if (list_styles.empty())
return;
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"a:lstStyle");
//{
// //defPPr
// //...
// //list levels 0 - 8
// BOOST_FOREACH(std::wstring & st_name, list_style_stack_ )
// {
// odf_reader::text_list_style * s = list_styles.list_style_by_name(st_name);
//
// BOOST_FOREACH(odf_reader::office_element_ptr & elm, s->get_content())
// {
// elm->pptx_convert(pptx_context_);
// }
// }
// CP_XML_STREAM() << get_styles_context().list_style().str();
//}
}
list_style_stack_.clear();
}
void pptx_text_context::Impl::set_rel_id(const std::wstring& rId)
{
hyperlink_.rId = rId;
}
void pptx_text_context::Impl::set_action(const std::wstring& action)
{
hyperlink_.action = action;
}
hyperlink_data pptx_text_context::Impl::get_hyperlink()
{
return hyperlink_;
}
std::wstring pptx_text_context::Impl::get_last_paragraph_style_name()
{
return last_paragraph_style_name_;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
pptx_text_context::pptx_text_context(odf_reader::odf_read_context & odf_context_, pptx_conversion_context & pptx_context_):
impl_(new pptx_text_context::Impl(odf_context_,pptx_context_))
{}
pptx_text_context::~pptx_text_context()
{
}
void pptx_text_context::set_local_styles_container(odf_reader::styles_container* local_styles_)
{
return impl_->set_local_styles_container(local_styles_);
}
void pptx_text_context::add_paragraph(const std::wstring & para)
{
return impl_->add_paragraph(para);
}
void pptx_text_context::add_text(const std::wstring & text)
{
return impl_->add_text(text);
}
bool pptx_text_context::in_list()
{
return impl_->in_list_;
}
void pptx_text_context::start_paragraph(const std::wstring & styleName)
{
return impl_->start_paragraph(styleName);
}
void pptx_text_context::end_paragraph()
{
return impl_->end_paragraph();
}
void pptx_text_context::start_span(const std::wstring & styleName)
{
return impl_->start_span(styleName);
}
void pptx_text_context::end_span()
{
return impl_->end_span();
}
std::wstring pptx_text_context::end_span2()
{
return impl_->end_span2();
}
void pptx_text_context::start_list_item(bool restart)
{
return impl_->start_list_item(restart);
}
void pptx_text_context::end_list_item()
{
return impl_->end_list_item();
}
void pptx_text_context::start_list(const std::wstring & StyleName, bool Continue)
{
return impl_->start_list(StyleName,Continue);
}
void pptx_text_context::end_list()
{
return impl_->end_list();
}
void pptx_text_context::start_base_style(const std::wstring baseStyleName, const odf_types::style_family::type baseStyleType)
{
return impl_->start_base_style(baseStyleName, baseStyleType);
}
void pptx_text_context::end_base_style()
{
return impl_->end_base_style();
}
void pptx_text_context::start_object()
{
return impl_->start_object();
}
void pptx_text_context::start_hyperlink()
{
return impl_->start_hyperlink();
}
void pptx_text_context::set_rel_id(const std::wstring& rId)
{
impl_->set_rel_id(rId);
}
void pptx_text_context::set_action(const std::wstring& action)
{
impl_->set_action(action);
}
void pptx_text_context::end_hyperlink()
{
return impl_->end_hyperlink();
}
std::wstring pptx_text_context::end_object()
{
return impl_->end_object();
}
hyperlink_data pptx_text_context::get_hyperlink()
{
return impl_->get_hyperlink();
}
styles_context & pptx_text_context::get_styles_context()
{
return impl_->get_styles_context() ;
}
void pptx_text_context::start_field(field_type type, const std::wstring & styleName)
{
impl_->start_field(type, styleName);
}
void pptx_text_context::end_field()
{
impl_->end_field();
}
void pptx_text_context::start_comment_content()
{
impl_->start_comment();
}
std::wstring pptx_text_context::end_comment_content()
{
return impl_->end_comment();
}
void pptx_text_context::set_process_layouts(bool val)
{
impl_->process_layouts_ = val;
}
std::wstring pptx_text_context::get_last_paragraph_style_name()
{
return impl_->get_last_paragraph_style_name();
}
}
}