This commit is contained in:
Elena.Subbotina
2022-10-13 16:14:35 +03:00
parent 4b86a6384b
commit fb04ac8a69
9 changed files with 92 additions and 139 deletions

View File

@ -2064,6 +2064,11 @@ void variable_get::docx_convert(oox::docx_conversion_context & Context)
const wchar_t * variable_set::ns = L"text";
const wchar_t * variable_set::name = L"variable-set";
void variable_set::add_text(const std::wstring & Text)
{
office_element_ptr elm = text::create(Text);
content_.push_back(elm);
}
void variable_set::add_attributes( const xml::attributes_wc_ptr & Attributes )
{
CP_APPLY_ATTR(L"style:data-style-name", style_data_style_name_);
@ -2076,7 +2081,31 @@ void variable_set::add_attributes( const xml::attributes_wc_ptr & Attributes )
}
void variable_set::docx_convert(oox::docx_conversion_context & Context)
{
Context.finish_run();
Context.output_stream() << L"<w:sdt>";
Context.output_stream() << L"<w:sdtPr>";
{
Context.output_stream() << L"<w:id w:val=\"" + std::to_wstring(Context.get_drawing_context().get_current_shape_id()) + L"\"/>";
if (name_)
{
Context.output_stream() << L"<w:placeholder>";
Context.output_stream() << L"<w:docPart w:val=\"" + xml::utils::replace_text_to_xml(*name_) + L"\"/>";
}
Context.output_stream() << L"<w:showingPlcHdr/>";
//Context.output_stream() << L"<w:text/>";
}
Context.output_stream() << L"</w:sdtPr>";
Context.output_stream() << L"<w:sdtContent>";
{
for (size_t i = 0; i < content_.size(); i++)
{
content_[i]->docx_convert(Context);
}
}
Context.finish_run();
Context.output_stream() << L"</w:sdtContent>";
Context.output_stream() << L"</w:sdt>";
}
//---------------------------------------------------------------------------------------------------
const wchar_t * variable_decl::ns = L"text";

View File

@ -864,16 +864,18 @@ public:
void docx_convert(oox::docx_conversion_context & Context);
private:
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
virtual void add_text(const std::wstring & Text);
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name){}
odf_types::common_value_and_type_attlist office_value_;
_CP_OPT(std::wstring) office_formula_;
odf_types::common_value_and_type_attlist office_value_;
_CP_OPT(std::wstring) office_formula_;
_CP_OPT(std::wstring) style_data_style_name_;
_CP_OPT(std::wstring) display_;
_CP_OPT(std::wstring) name_;
_CP_OPT(std::wstring) style_data_style_name_;
_CP_OPT(std::wstring) display_;
_CP_OPT(std::wstring) name_;
office_element_ptr_array content_;
};
CP_REGISTER_OFFICE_ELEMENT2(variable_set);
//---------------------------------------------------------------------------------------------------

View File

@ -201,13 +201,13 @@ namespace odf_writer
if (sz < 1)
break;
content_utf8_ += GetUtf8StringFromUnicode(Content.c_str() + pos, sz);
content_utf8_ += NSFile::CUtf8Converter::GetUtf8StringFromUnicode2(Content.c_str() + pos, sz);
pos += sz;
}
}
else
content_utf8_ = GetUtf8StringFromUnicode(Content.c_str(), Content.length());
content_utf8_ = NSFile::CUtf8Converter::GetUtf8StringFromUnicode2(Content.c_str(), Content.length());
}else
content_utf8_ = std::string( Content.begin(), Content.end());
}
@ -226,13 +226,13 @@ namespace odf_writer
if (sz < 1)
break;
content_utf8_ += GetUtf8StringFromUnicode(Content + pos, sz);
content_utf8_ += NSFile::CUtf8Converter::GetUtf8StringFromUnicode2(Content + pos, sz);
pos += sz;
}
}
else
content_utf8_ = GetUtf8StringFromUnicode(Content, Size);
content_utf8_ = NSFile::CUtf8Converter::GetUtf8StringFromUnicode2(Content, Size);
}
else
{

View File

@ -294,10 +294,10 @@ void odf_text_context::start_paragraph(office_element_ptr & elm, bool styled)
}
text_p* p = dynamic_cast<text_p*>(elm.get());
if (p) p->paragraph_.paragraph_attrs_.text_style_name_ = style_name;
if (p) p->paragraph_attrs_.text_style_name_ = style_name;
text_h* h = dynamic_cast<text_h*>(elm.get());
if (h) h->paragraph_.paragraph_attrs_.text_style_name_ = style_name;
if (h) h->paragraph_attrs_.text_style_name_ = style_name;
style *style_ = dynamic_cast<style*>(style_elm.get());
if (style_)
@ -310,10 +310,10 @@ void odf_text_context::start_paragraph(office_element_ptr & elm, bool styled)
else if (false == parent_paragraph_style_.empty())
{
text_p* p = dynamic_cast<text_p*>(elm.get());
if (p)p->paragraph_.paragraph_attrs_.text_style_name_ = parent_paragraph_style_;
if (p)p->paragraph_attrs_.text_style_name_ = parent_paragraph_style_;
text_h* h = dynamic_cast<text_h*>(elm.get());
if (h)p->paragraph_.paragraph_attrs_.text_style_name_ = parent_paragraph_style_;
if (h)p->paragraph_attrs_.text_style_name_ = parent_paragraph_style_;
}
if (paragraph_properties_ && need_break_)
{
@ -643,12 +643,12 @@ void odf_text_context::add_text_style(office_element_ptr & style_elm, std::wstri
if (text_p* p = dynamic_cast<text_p*>(current_level_.back().elm.get()))
{
p->paragraph_.paragraph_attrs_.text_style_name_ = style_name;
p->paragraph_attrs_.text_style_name_ = style_name;
}
if (text_h* h = dynamic_cast<text_h*>(current_level_.back().elm.get()))
{
h->paragraph_.paragraph_attrs_.text_style_name_ = style_name;
h->paragraph_attrs_.text_style_name_ = style_name;
}
}
@ -709,8 +709,8 @@ void odf_text_context::save_property_break()
current_level_[i].style_elm = style_->get_office_element();
current_level_[i].style_name = style_->get_name();
if (p) p->paragraph_.paragraph_attrs_.text_style_name_ = current_level_[i].style_name;
if (h) h->paragraph_.paragraph_attrs_.text_style_name_ = current_level_[i].style_name;
if (p) p->paragraph_attrs_.text_style_name_ = current_level_[i].style_name;
if (h) h->paragraph_attrs_.text_style_name_ = current_level_[i].style_name;
}
break;
}

View File

@ -424,7 +424,7 @@ void ods_table_context::set_data_validation_error(const std::wstring &title, con
text_p *p = dynamic_cast<text_p*>(error_message->content_.back().get());
if (p)
{
p->paragraph_.add_text(content);
p->add_text(content);
}
}
}
@ -452,7 +452,7 @@ void ods_table_context::set_data_validation_promt(const std::wstring &title, con
text_p *p = dynamic_cast<text_p*>(help_message->content_.back().get());
if (p)
{
p->paragraph_.add_text(content);
p->add_text(content);
}
}
}

View File

@ -564,24 +564,6 @@ void table_columns_and_groups::serialize(std::wostream & strm)
content_[i]->serialize(strm);
}
}
// table-table-cell-content
//////////////////////////////////////////////////////////////////////////////////////////////////
void table_table_cell_content::create_child_element( const std::wstring & Ns, const std::wstring & Name, odf_conversion_context * Context)
{
CP_CREATE_ELEMENT_SIMPLE(text_content_);
}
void table_table_cell_content::add_child_element( const office_element_ptr & child_element)
{
text_content_.push_back(child_element);
}
void table_table_cell_content::serialize(std::wostream & strm)
{
for (size_t i = 0; i < text_content_.size(); i++)
{
text_content_[i]->serialize(strm);
}
}
// table:table-cell
// table-table-cell
//////////////////////////////////////////////////////////////////////////////////////////////////
@ -590,12 +572,11 @@ const wchar_t * table_table_cell::name = L"table-cell";
void table_table_cell::create_child_element( const std::wstring & Ns, const std::wstring & Name)
{
content_.create_child_element(Ns, Name, getContext());
CP_CREATE_ELEMENT(content_);
}
void table_table_cell::add_child_element( const office_element_ptr & child_element)
{
content_.add_child_element(child_element);
content_.push_back(child_element);
}
void table_table_cell::serialize(std::wostream & _Wostream)
{
@ -606,7 +587,10 @@ void table_table_cell::serialize(std::wostream & _Wostream)
attlist_.serialize(CP_GET_XML_NODE());
attlist_extra_.serialize(CP_GET_XML_NODE());
content_.serialize(CP_XML_STREAM());
for (size_t i = 0; i < content_.size(); i++)
{
content_[i]->serialize(CP_XML_STREAM());
}
}
}
}
@ -619,12 +603,12 @@ const wchar_t * table_covered_table_cell::name = L"covered-table-cell";
void table_covered_table_cell::create_child_element( const std::wstring & Ns, const std::wstring & Name)
{
empty_ = false;
content_.create_child_element( Ns, Name, getContext());
CP_CREATE_ELEMENT(content_);
}
void table_covered_table_cell::add_child_element( const office_element_ptr & child_element)
{
empty_ = false;
content_.add_child_element(child_element);
content_.push_back(child_element);
}
void table_covered_table_cell::serialize(std::wostream & _Wostream)
{
@ -634,7 +618,10 @@ void table_covered_table_cell::serialize(std::wostream & _Wostream)
{
attlist_.serialize(CP_GET_XML_NODE());
content_.serialize(CP_XML_STREAM());
for (size_t i = 0; i < content_.size(); i++)
{
content_[i]->serialize(CP_XML_STREAM());
}
}
}
}

View File

@ -405,22 +405,6 @@ public:
};
CP_REGISTER_OFFICE_ELEMENT2(table_table_row);
//-----------------------------------------------------------------------------------------------------
class table_table_cell_content
{
public:
virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name, odf_conversion_context * Context);
virtual void add_child_element( const office_element_ptr & child_element);
virtual void serialize(std::wostream & _Wostream);
private:
// TODO table-cell-range-source
// TODO office-annotation
// TODO table-detective
office_element_ptr_array text_content_; // text-content
};
//-----------------------------------------------------------------------------------------------------
class table_table_cell : public office_element_impl<table_table_cell>
{
@ -430,9 +414,7 @@ public:
static const ElementType type = typeTableTableCell;
table_table_cell() { }
table_table_cell() { }
virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name);
virtual void add_child_element( const office_element_ptr & child_element);
@ -441,10 +423,9 @@ public:
table_table_cell_attlist attlist_;
table_table_cell_attlist_extra attlist_extra_;
table_table_cell_content content_;
office_element_ptr_array content_;
};
CP_REGISTER_OFFICE_ELEMENT2(table_table_cell);
//-----------------------------------------------------------------------------------------------------
@ -456,8 +437,6 @@ public:
static const ElementType type = typeTableCoveredTableCell;
table_covered_table_cell() {empty_ = true; }
virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name);
@ -467,7 +446,7 @@ public:
bool empty_;
table_table_cell_attlist attlist_;
table_table_cell_content content_;
office_element_ptr_array content_;
};

View File

@ -58,33 +58,6 @@ using xml::xml_char_wc;
const wchar_t * text_h::ns = L"text";
const wchar_t * text_h::name = L"h";
void paragraph::create_child_element( const std::wstring & Ns, const std::wstring & Name, odf_conversion_context * Context)
{
CP_CREATE_ELEMENT_SIMPLE(paragraph_content_);
}
void paragraph::add_child_element( const office_element_ptr & child_element)
{
paragraph_content_.push_back(child_element);
}
void paragraph::add_text(const std::wstring & Text)
{
office_element_ptr elm = text_text::create(Text) ;
paragraph_content_.push_back( elm );
}
void paragraph::serialize(std::wostream & strm)
{
for (size_t i = 0; i < paragraph_content_.size(); i++)
{
paragraph_content_[i]->serialize(strm);
}
}
void paragraph::serialize_attr(CP_ATTR_NODE)
{
paragraph_attrs_.serialize(CP_GET_XML_NODE());
}
void paragraph_attrs::serialize(CP_ATTR_NODE)
{
CP_XML_ATTR_OPT(L"text:style-name", text_style_name_);
@ -116,24 +89,29 @@ void text_h::serialize(std::wostream & _Wostream)
CP_XML_ATTR_OPT (L"text:start-value", text_start_value_);
CP_XML_ATTR (L"text:is-list-header", text_is_list_header_);
paragraph_.serialize_attr (CP_GET_XML_NODE());
paragraph_.serialize (CP_XML_STREAM());
paragraph_attrs_.serialize(CP_GET_XML_NODE());
for (size_t i = 0; i < paragraph_content_.size(); i++)
{
paragraph_content_[i]->serialize(CP_XML_STREAM());
}
}
}
}
//
void text_h::create_child_element( const std::wstring & Ns, const std::wstring & Name)
{
paragraph_.create_child_element(Ns, Name, getContext());
CP_CREATE_ELEMENT(paragraph_content_);
}
void text_h::add_text(const std::wstring & Text)
{
paragraph_.add_text(Text);
office_element_ptr elm = text_text::create(Text);
paragraph_content_.push_back(elm);
}
void text_h::add_child_element( const office_element_ptr & child_element)
{
paragraph_.add_child_element(child_element);
paragraph_content_.push_back(child_element);
}
// text:p
//--------------------------------------------------------------------------------------------------------
@ -142,15 +120,16 @@ const wchar_t * text_p::name = L"p";
void text_p::create_child_element(const std::wstring & Ns, const std::wstring & Name)
{
paragraph_.create_child_element( Ns, Name, getContext());
CP_CREATE_ELEMENT(paragraph_content_);
}
void text_p::add_child_element( const office_element_ptr & child_element)
{
paragraph_.add_child_element(child_element);
paragraph_content_.push_back(child_element);
}
void text_p::add_text(const std::wstring & Text)
{
paragraph_.add_text(Text);
office_element_ptr elm = text_text::create(Text);
paragraph_content_.push_back(elm);
}
void text_p::serialize(std::wostream & _Wostream)
@ -159,8 +138,12 @@ void text_p::serialize(std::wostream & _Wostream)
{
CP_XML_NODE_SIMPLE()
{
paragraph_.serialize_attr (CP_GET_XML_NODE());
paragraph_.serialize (CP_XML_STREAM());
paragraph_attrs_.serialize(CP_GET_XML_NODE());
for (size_t i = 0; i < paragraph_content_.size(); i++)
{
paragraph_content_[i]->serialize(CP_XML_STREAM());
}
}
}
}

View File

@ -59,29 +59,6 @@ public:
void serialize(CP_ATTR_NODE);
};
class paragraph
{
public:
paragraph() {}
public:
void add_text(const std::wstring & Text);
void create_child_element(const std::wstring & Ns, const std::wstring & Name,odf_conversion_context * context);
void add_child_element( const office_element_ptr & child_element);
void serialize (std::wostream & _Wostream);
void serialize_attr (CP_ATTR_NODE);
paragraph_attrs paragraph_attrs_;
office_element_ptr_array paragraph_content_;
};
//---------------------------------------------------------------------------------------------------
class text_h : public office_element_impl<text_h>
{
@ -101,18 +78,15 @@ public:
virtual void add_text(const std::wstring & Text);
// heading-attrs
unsigned int text_outline_level_;
bool text_restart_numbering_; // default false
_CP_OPT(unsigned int) text_start_value_;
bool text_is_list_header_; // default false
_CP_OPT(std::wstring) text_number_;
paragraph paragraph_;
paragraph_attrs paragraph_attrs_;
office_element_ptr_array paragraph_content_;
};
CP_REGISTER_OFFICE_ELEMENT2(text_h);
//---------------------------------------------------------------------------------------------------
@ -122,8 +96,7 @@ public:
static const wchar_t * ns;
static const wchar_t * name;
static const ElementType type = typeTextP;
static const ElementType type = typeTextP;
virtual void create_child_element(const std::wstring & Ns, const std::wstring & Name);
virtual void add_child_element( const office_element_ptr & child_element);
@ -131,13 +104,13 @@ public:
virtual void serialize(std::wostream & _Wostream);
text_p(){};
paragraph paragraph_;
paragraph_attrs paragraph_attrs_;
office_element_ptr_array paragraph_content_;
virtual void add_text(const std::wstring & Text);
};
CP_REGISTER_OFFICE_ELEMENT2(text_p);
//---------------------------------------------------------------------------------------------------
class text_list : public office_element_impl<text_list>
{