Compare commits

..

24 Commits

Author SHA1 Message Date
7d06219664 Merge branch hotfix/v9.2.1 into master 2025-12-26 16:24:51 +00:00
d8dc82ea35 Strip binaries on macos 2025-12-26 01:18:06 +03:00
0ef0518f1a Remove old linker flag on macos 2025-12-25 23:11:46 +03:00
f2da15defa Fix previous commit 2025-12-25 23:01:52 +03:00
e3272a5e91 Add strip binaries 2025-12-25 21:50:17 +03:00
e936b0e4e7 Merge branch hotfix/v9.2.1 into master 2025-12-25 10:57:58 +00:00
d908cb668e Refactoring sysroots 2025-12-22 05:55:07 +03:00
d595d3ea86 Refactoring sysroots 2025-12-20 23:42:01 +03:00
a22f0bfb60 Merge branch hotfix/v9.2.1 into master 2025-12-17 11:33:19 +00:00
77c9bd8c6d Merge pull request 'fix rotWithShape' (#572) from fix/fix-bugs into hotfix/v9.2.1 2025-12-16 13:09:35 +00:00
8144f98bb8 fix rotWithShape 2025-12-16 16:08:23 +03:00
c52cfd0886 Merge pull request 'fix bug #78986' (#570) from fix/bug78986 into hotfix/v9.2.1
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/570
2025-12-15 18:09:15 +00:00
4c9a24bf71 fix bug #78986 2025-12-15 21:07:19 +03:00
b369c32e9e fix value array xlsx 2025-12-11 17:03:42 +03:00
3209c8e42e Merge pull request 'fix/fix-bugs-9.2.1' (#566) from fix/fix-bugs-9.2.1 into hotfix/v9.2.1
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/566
2025-12-11 08:16:12 +00:00
037057ea7a fix bug #78960
(cherry picked from commit bebb39a619)
2025-12-11 11:13:01 +03:00
d373a8cc4c fix bug #78953
(cherry picked from commit 84847f1e74)
2025-12-11 11:09:34 +03:00
13e2efe724 fix bug #78955
(cherry picked from commit 6ea64599bd)
2025-12-11 11:08:56 +03:00
b09d441987 fix bug #78958
(cherry picked from commit e15391ea35)
2025-12-11 11:06:44 +03:00
b1b3e1fb7c Merge branch release/v9.2.0 into master 2025-12-01 07:25:12 +00:00
31433e20de Fix year detection on windows 2025-11-28 19:55:26 +03:00
29a29cc818 Fix bug 78786 2025-11-27 13:37:05 +03:00
9f94166f82 Fix bug 78773 2025-11-27 10:37:43 +03:00
7777048790 Merge branch release/v9.1.0 into master 2025-10-28 11:58:09 +00:00
21 changed files with 110 additions and 184 deletions

View File

@ -1,6 +1,6 @@
.cipd
.gclient
.gclient_entries
.gclient*
.gcs*
v8
depot_tools
v8.data

View File

@ -33,8 +33,7 @@ OO_BUILD_BRANDING = $$(OO_BRANDING)
OO_DESTDIR_BUILD_OVERRIDE = $$(DESTDIR_BUILD_OVERRIDE)
win32 {
CURRENT_YEAR = $$system(wmic PATH Win32_LocalTime GET ^Year /FORMAT:VALUE | find \"=\")
CURRENT_YEAR = $$replace(CURRENT_YEAR, "Year=", "")
CURRENT_YEAR = $$system(powershell -NoLogo -NoProfile -Command "(Get-Date).Year")
CURRENT_YEAR = $$replace(CURRENT_YEAR, "\r", "")
CURRENT_YEAR = $$replace(CURRENT_YEAR, "\n", "")
CURRENT_YEAR = $$replace(CURRENT_YEAR, "\t", "")
@ -204,23 +203,42 @@ core_linux {
DEFINES += LINUX _LINUX
QMAKE_CUSTOM_SYSROOT = $$(QMAKE_CUSTOM_SYSROOT)
QMAKE_CUSTOM_SYSROOT_BIN = $$(QMAKE_CUSTOM_SYSROOT)/usr/bin/
!isEmpty(QMAKE_CUSTOM_SYSROOT) {
CONFIG += core_linix_use_sysroot
message("using custom sysroot $$QMAKE_CUSTOM_SYSROOT")
core_linux_64 {
!linux_arm64 { # x86_64
QMAKE_CUSTOM_SYSROOT_LIB = $$(QMAKE_CUSTOM_SYSROOT)/usr/lib/x86_64-linux-gnu
!isEmpty(QMAKE_CUSTOM_SYSROOT) {
message("using custom sysroot $$QMAKE_CUSTOM_SYSROOT")
QMAKE_CC = $$join(QMAKE_CUSTOM_SYSROOT_BIN, , , "gcc")
QMAKE_CXX = $$join(QMAKE_CUSTOM_SYSROOT_BIN, , , "g++")
QMAKE_LINK = $$join(QMAKE_CUSTOM_SYSROOT_BIN, , , "g++")
QMAKE_LINK_SHLIB = $$join(QMAKE_CUSTOM_SYSROOT_BIN, , , "g++")
QMAKE_CFLAGS += --sysroot $$QMAKE_CUSTOM_SYSROOT
QMAKE_CXXFLAGS += --sysroot $$QMAKE_CUSTOM_SYSROOT -std=gnu++1y
QMAKE_LFLAGS += --sysroot $$QMAKE_CUSTOM_SYSROOT
}
QMAKE_CUSTOM_SYSROOT_BIN = $$(QMAKE_CUSTOM_SYSROOT_BIN)
isEmpty(QMAKE_CUSTOM_SYSROOT_BIN) {
QMAKE_CUSTOM_SYSROOT_BIN = $$QMAKE_CUSTOM_SYSROOT/usr/bin
}
QMAKE_CUSTOM_SYSROOT_BIN = $$join(QMAKE_CUSTOM_SYSROOT_BIN, , , /)
contains(QMAKE_CUSTOM_SYSROOT_BIN, $$QMAKE_CUSTOM_SYSROOT) {
message("Using compilers from same sysroot")
QMAKE_CC = $$join(QMAKE_CUSTOM_SYSROOT_BIN, , , "gcc")
QMAKE_CXX = $$join(QMAKE_CUSTOM_SYSROOT_BIN, , , "g++")
QMAKE_LINK = $$join(QMAKE_CUSTOM_SYSROOT_BIN, , , "g++")
QMAKE_LINK_SHLIB = $$join(QMAKE_CUSTOM_SYSROOT_BIN, , , "g++")
QMAKE_AR = $$join(QMAKE_CUSTOM_SYSROOT_BIN, , , "ar") cqs
QMAKE_RANLIB = $$join(QMAKE_CUSTOM_SYSROOT_BIN, , , "ranlib")
QMAKE_STRIP = $$join(QMAKE_CUSTOM_SYSROOT_BIN, , , "strip")
} else {
message("Using cross-compilers from host sysroot")
QMAKE_CC = $$join(QMAKE_CUSTOM_SYSROOT_BIN, , , "aarch64-linux-gnu-gcc")
QMAKE_CXX = $$join(QMAKE_CUSTOM_SYSROOT_BIN, , , "aarch64-linux-gnu-g++")
QMAKE_LINK = $$join(QMAKE_CUSTOM_SYSROOT_BIN, , , "aarch64-linux-gnu-g++")
QMAKE_LINK_SHLIB = $$join(QMAKE_CUSTOM_SYSROOT_BIN, , , "aarch64-linux-gnu-g++")
QMAKE_AR = $$join(QMAKE_CUSTOM_SYSROOT_BIN, , , "aarch64-linux-gnu-ar") cqs
QMAKE_RANLIB = $$join(QMAKE_CUSTOM_SYSROOT_BIN, , , "aarch64-linux-gnu-ranlib")
QMAKE_STRIP = $$join(QMAKE_CUSTOM_SYSROOT_BIN, , , "aarch64-linux-gnu-strip")
QMAKE_OBJCOPY = $$join(QMAKE_CUSTOM_SYSROOT_BIN, , , "aarch64-linux-gnu-objcopy")
}
QMAKE_CFLAGS += --sysroot=$$QMAKE_CUSTOM_SYSROOT
QMAKE_CXXFLAGS += --sysroot=$$QMAKE_CUSTOM_SYSROOT -std=gnu++1y
QMAKE_LFLAGS += --sysroot=$$QMAKE_CUSTOM_SYSROOT
QMAKE_INCDIR += $$QMAKE_CUSTOM_SYSROOT/usr/include
}
}
@ -255,6 +273,11 @@ core_mac {
QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.12
!apple_silicon:QMAKE_APPLE_DEVICE_ARCHS = x86_64
}
!core_debug {
equals(TEMPLATE, app):QMAKE_POST_LINK += strip $(TARGET)
# TODO: plugin!
}
}
core_linux_clang {
@ -313,6 +336,10 @@ core_linux {
core_linux {
equals(TEMPLATE, app):CONFIG += core_static_link_libstd
plugin:CONFIG += core_static_link_libstd
equals(TEMPLATE, app):QMAKE_LFLAGS_RELEASE += -Wl,-s
plugin:QMAKE_LFLAGS_RELEASE += -Wl,-s
}
core_win_32 {
@ -344,27 +371,6 @@ core_linux_arm {
linux_arm64 {
CORE_BUILDS_PLATFORM_PREFIX = linux_arm64
DEFINES += _ARM_ALIGN_
ARM64_TOOLCHAIN_BIN = $$(ARM64_TOOLCHAIN_BIN)
ARM64_TOOLCHAIN_BIN_PREFIX = $$(ARM64_TOOLCHAIN_BIN_PREFIX)
!isEmpty(ARM64_TOOLCHAIN_BIN){
!isEmpty(ARM64_TOOLCHAIN_BIN_PREFIX){
ARM64_TOOLCHAIN_BIN_FULL = $$ARM64_TOOLCHAIN_BIN/$$ARM64_TOOLCHAIN_BIN_PREFIX
message("using arm64 toolchain $$ARM64_TOOLCHAIN_BIN")
QMAKE_CC = $$join(ARM64_TOOLCHAIN_BIN_FULL, , , "gcc")
QMAKE_CXX = $$join(ARM64_TOOLCHAIN_BIN_FULL, , , "g++")
QMAKE_LINK = $$join(ARM64_TOOLCHAIN_BIN_FULL, , , "g++")
QMAKE_LINK_SHLIB = $$join(ARM64_TOOLCHAIN_BIN_FULL, , , "g++")
QMAKE_AR = $$join(ARM64_TOOLCHAIN_BIN_FULL, , , "ar cqs")
QMAKE_OBJCOPY = $$join(ARM64_TOOLCHAIN_BIN_FULL, , , "objcopy")
QMAKE_NM = $$join(ARM64_TOOLCHAIN_BIN_FULL, , , "nm -P")
QMAKE_STRIP = $$join(ARM64_TOOLCHAIN_BIN_FULL, , , "strip")
}
}
}
core_ios {
CORE_BUILDS_PLATFORM_PREFIX = ios

View File

@ -194,6 +194,9 @@ JSSmart<CJSValue> CNativeControlEmbed::ZipOpenBase64(JSSmart<CJSValue> name)
JSSmart<CJSValue> CNativeControlEmbed::ZipFileAsString(JSSmart<CJSValue> name)
{
if (m_pInternal->m_oZipWorker.m_sTmpFolder.empty())
return CJSContext::createUndefined();
BYTE* pData = NULL;
DWORD len = 0;
m_pInternal->m_oZipWorker.GetFileData(name->toStringW(), pData, len);
@ -202,6 +205,9 @@ JSSmart<CJSValue> CNativeControlEmbed::ZipFileAsString(JSSmart<CJSValue> name)
JSSmart<CJSValue> CNativeControlEmbed::ZipFileAsBinary(JSSmart<CJSValue> name)
{
if (m_pInternal->m_oZipWorker.m_sTmpFolder.empty())
return CJSContext::createUndefined();
return CJSContext::createUint8Array(m_pInternal->m_oZipWorker.m_sTmpFolder + L"/" + name->toStringW());
}

View File

@ -30,6 +30,8 @@
-(JSValue*) SplitPages : (JSValue*)arrPageIndexes : (JSValue*)data;
-(JSValue*) MergePages : (JSValue*)data : (JSValue*)nMaxID : (JSValue*)sPrefixForm;
-(JSValue*) UnmergePages;
-(JSValue*) RedactPage : (JSValue*)nPageIndex : (JSValue*)arrRedactBox : (JSValue*)dataFiller;
-(JSValue*) UndoRedact;
@end
@interface CJSCDrawingFileEmbed : NSObject<IJSCDrawingFileEmbed, JSEmbedObjectProtocol>
@ -67,6 +69,8 @@ FUNCTION_WRAPPER_JS_1(FreeWasmData, FreeWasmData)
FUNCTION_WRAPPER_JS_2(SplitPages, SplitPages)
FUNCTION_WRAPPER_JS_3(MergePages, MergePages)
FUNCTION_WRAPPER_JS_0(UnmergePages, UnmergePages)
FUNCTION_WRAPPER_JS_3(RedactPage, RedactPage)
FUNCTION_WRAPPER_JS_0(UndoRedact, UndoRedact)
@end
class CDrawingFileEmbedAdapter : public CJSEmbedObjectAdapterJSC

View File

@ -67,7 +67,7 @@ namespace NSDrawingFileEmbed
NSV8Objects::Template_Set(result, "SplitPages", _SplitPages);
NSV8Objects::Template_Set(result, "MergePages", _MergePages);
NSV8Objects::Template_Set(result, "UnmergePages", _UnmergePages);
NSV8Objects::Template_Set(result, "RedactPage", _RedactPage);
NSV8Objects::Template_Set(result, "RedactPage", _RedactPage);
NSV8Objects::Template_Set(result, "UndoRedact", _UndoRedact);
return handle_scope.Escape(result);

View File

@ -730,6 +730,7 @@ namespace ODRAW
Gdiplus::RectF Rect;
double LinearAngle;
int Focus;
std::vector<std::pair<CColor, double>> ColorsPosition;
@ -815,6 +816,7 @@ namespace ODRAW
TextureMode = c_BrushTextureModeStretch;
LinearAngle = 0;
Focus = 0;
TexturePath = L"";

View File

@ -349,17 +349,18 @@ std::wstring PPT::CShapeWriter::ConvertBrush(CBrush & brush)
brush_writer.WriteString(L"</a:gsLst>");
brush_writer.WriteString(L"<a:lin ang=\"");
{
if (brush.LinearAngle < -180) brush.LinearAngle += 180;
if (brush.LinearAngle > 180) brush.LinearAngle -= 180;
double val = 360 - brush.LinearAngle;
val += 90;
double val = (90 - brush.LinearAngle) ;
if (val < 0) val = 0;
if (val > 360) val -= 360;
if (val < 0) val += 360;
if (val >= 360) val -= 360;
std::wstring str = std::to_wstring((int)(val * 60000));
brush_writer.WriteString(str);
}
brush_writer.WriteString(L"\" scaled=\"1\"/>");
brush_writer.WriteString(L"\"");
//brush_writer.WriteString(L" scaled = \"1\"");
brush_writer.WriteString(L"/>");
brush_writer.WriteString(L"</a:gradFill>");
}
else if(brush.Type == c_BrushTypePattern)

View File

@ -513,6 +513,7 @@ void CPPTElement::SetUpProperty(CElementPtr pElement, CTheme* pTheme, CSlideInfo
}break;
case fillFocus://relative position of the last color in the shaded fill
{
pElement->m_oBrush.Focus = pProperty->m_lValue;
}break;
case fillShadePreset:
{//value (int) from 0x00000088 through 0x0000009F or complex

View File

@ -72,7 +72,14 @@ void AutoFilter::readFields(CFRecord& record)
{
size_t pos_record = record.getRdPtr();
if (size == 0xffffffff) size = record.getDataSize() - pos_record;
if (size == 0xffffffff)
size = record.getDataSize() - pos_record;
else if(record.getDataSize() < pos_record + size)
{
//size error
return;
}
if (size > 0)
{

View File

@ -55,6 +55,8 @@ void DataFormat::readFields(CFRecord& record)
unsigned short flags;
record >> xi >> yi >> iss >> flags;
fUnknown = GETBIT(flags, 0);
if(iss > 1000)
iss = 0;
}
void DataFormat::writeFields(CFRecord& record)

View File

@ -148,7 +148,7 @@ int MarkerFormat::serialize(std::wostream & _stream, int index, BaseObjectPtr _G
{
CP_XML_NODE(L"a:srgbClr")
{
CP_XML_ATTR(L"val", (false == fAuto || index < 0) ? rgbBack.strRGB : default_marker_color[index]);
CP_XML_ATTR(L"val", (false == fAuto || index < 0 || index > default_marker_color->size()) ? rgbBack.strRGB : default_marker_color[index]);
}
}
}
@ -158,7 +158,7 @@ int MarkerFormat::serialize(std::wostream & _stream, int index, BaseObjectPtr _G
{
CP_XML_NODE(L"a:srgbClr")
{
CP_XML_ATTR(L"val", (false == fAuto || index < 0) ? rgbFore.strRGB : default_marker_color[index]);
CP_XML_ATTR(L"val", (false == fAuto || index < 0 || index > default_marker_color->size()) ? rgbFore.strRGB : default_marker_color[index]);
}
}
CP_XML_NODE(L"a:prstDash") { CP_XML_ATTR(L"val", L"solid"); }

View File

@ -53,7 +53,7 @@ void Feat11FdaAutoFilter::load(CFRecord& record)
}
record.skipNunBytes(2);
if (cbAutoFilter > 0 && cbAutoFilter < 2080)
if (cbAutoFilter > 0 && cbAutoFilter < 2080 && (record.getDataSize() - record.getRdPtr()) >= cbAutoFilter)
{
recAutoFilter.size = cbAutoFilter;
recAutoFilter.readFields(record);

View File

@ -153,7 +153,8 @@ const bool ATTACHEDLABEL::loadContent(BinProcessor& proc)
proc.optional<CRTMLFRT>();
proc.mandatory<End>(); elements_.pop_back();
if(proc.mandatory<End>())
elements_.pop_back();
return true;
}

View File

@ -80,10 +80,11 @@ const bool LD::loadContent(BinProcessor& proc)
elements_.pop_back();
}
proc.mandatory<ATTACHEDLABEL>();
m_ATTACHEDLABEL = elements_.back();
elements_.pop_back();
if(proc.mandatory<ATTACHEDLABEL>())
{
m_ATTACHEDLABEL = elements_.back();
elements_.pop_back();
}
if (proc.optional<FRAME>())
{
@ -102,7 +103,8 @@ const bool LD::loadContent(BinProcessor& proc)
elements_.pop_back();
}
proc.optional<CRTMLFRT>();
proc.mandatory<End>(); elements_.pop_back();
if(proc.mandatory<End>())
elements_.pop_back();
return true;
}

View File

@ -305,7 +305,7 @@ int SS::serialize_default(std::wostream & _stream, int series_type, int ind )
if ((line) && (line->lns == (_UINT16)5)) ind = -1;
}
if (ind >= 0 && m_isAutoLine)
if (ind >= 0 && default_series_line_color->size() > ind && m_isAutoLine)
{
CP_XML_NODE(L"a:ln")
{
@ -444,7 +444,8 @@ int SS::serialize(std::wostream & _stream, int series_type, int indPt)
{
CP_XML_NODE(L"a:srgbClr")
{
CP_XML_ATTR(L"val", default_series_line_color[ind]);
if(default_series_line_color->size() > ind)
CP_XML_ATTR(L"val", default_series_line_color[ind]);
}
}
CP_XML_NODE(L"a:prstDash")

View File

@ -213,10 +213,10 @@ namespace PPTX
switch (_at)
{
case 0:
pReader->Skip(4); // dpi
pFill->dpi = pReader->GetLong();
break;
case 1:
pReader->Skip(1); // rotWithShape
pFill->rotWithShape = pReader->GetBool();
break;
default:
break;
@ -448,9 +448,8 @@ namespace PPTX
}
m_type = blipFill;
Fill = pFill;
break;
}
Fill = pFill;
}break;
case FILL_TYPE_GRAD:
{
pReader->Skip(1);
@ -535,9 +534,8 @@ namespace PPTX
}
m_type = gradFill;
Fill = pFill;
break;
}
Fill = pFill;
}break;
case FILL_TYPE_PATT:
{
pReader->Skip(1);
@ -587,8 +585,8 @@ namespace PPTX
m_type = pattFill;
Fill = pFill;
break;
}
}break;
case FILL_TYPE_SOLID:
{
pReader->Skip(1); // type + len
@ -599,24 +597,20 @@ namespace PPTX
pFill->Color.fromPPTY(pReader);
m_type = solidFill;
Fill = pFill;
break;
}
Fill = pFill;
}break;
case FILL_TYPE_NOFILL:
{
m_type = noFill;
Fill = new PPTX::Logic::NoFill();
break;
}
Fill = new PPTX::Logic::NoFill();
}break;
case FILL_TYPE_GRP:
{
m_type = grpFill;
Fill = new PPTX::Logic::GrpFill();
break;
}
Fill = new PPTX::Logic::GrpFill();
}break;
}
}
pReader->Seek(read_end);
}
std::wstring UniFill::toXML() const

View File

@ -577,6 +577,7 @@ namespace OOX
m_oType.SetValue(SimpleTypes::Spreadsheet::celltypeNumber);
m_oShowPhonetic.FromBool(false);
m_oValueMetadata.reset();
m_oCellMetadata.reset();
m_oValue.Clean();
m_oFormula.Clean();

View File

@ -785,44 +785,7 @@ void odf_document::Impl::parse_styles(office_element *element)
_CP_LOG << L"[warning] empty styles\n";
break;
}
if(document)
{
office_master_styles * master_style = dynamic_cast<office_master_styles *>( document->office_master_styles_.get() );
if (!master_style)
break;
unsigned int elements_master_page = master_style->style_master_page_.size();
if(master_style->style_master_page_.size() > 1)
{
for (size_t i = 1; i < master_style->style_master_page_.size(); i++)
{
office_element_ptr & elm = master_style->style_master_page_[i];
style_master_page * master_page = dynamic_cast<style_master_page *>(elm.get());
if (!master_page)
continue;
std::wstring ws_style_name = master_page->attlist_.style_name_.get_value_or(L"");
for(unsigned int t = 0; t < i;t++)
{
office_element_ptr& elm_prev = master_style->style_master_page_[t];
style_master_page* master_page_prev = dynamic_cast<style_master_page*>(elm_prev.get());
if(!master_page_prev)
continue;
if(ws_style_name == master_page_prev->attlist_.style_name_.get_value_or(L""))
{
master_page->attlist_.style_name_ = ws_style_name + L"_" + std::to_wstring(elements_master_page++);
context_->styleContainer().set_new_name_master_page(L"",master_page->attlist_.style_name_.get_value_or(L""));
break;
}
}
}
}
}
// parse automatic styles - эти стили используют объекты которые в оазис находятся в этом же документе
//переопределяем имя - иначе при поиске может возникнуть коллизия.
do
@ -913,6 +876,7 @@ void odf_document::Impl::parse_styles(office_element *element)
_CP_LOG << L"[warning] error reading master page\n";
continue;
}
const std::wstring styleName = masterPage->attlist_.style_name_.get_value_or(L"");
const std::wstring pageLayoutName = masterPage->attlist_.style_page_layout_name_.get_value_or(L"");

View File

@ -350,16 +350,6 @@ namespace cpdoccore {
master_page = res->second;
return master_page;
}
void styles_container::set_new_name_master_page(std::wstring ws_name_layout, std::wstring ws_new_name)
{
vec_new_name_master_page.push_back({ws_name_layout,ws_new_name});
}
std::vector<std::pair<std::wstring, std::wstring> >& styles_container::get_vec_new_name()
{
return vec_new_name_master_page;
}
style_instance* styles_container::style_default_by_type(style_family::type Type) const
{

View File

@ -190,9 +190,6 @@ public:
presentation_layouts_instance & presentation_layouts() { return presentation_layouts_; }
presentation_masters_instance & presentation_masters() { return presentation_masters_; }
void set_new_name_master_page(std::wstring ws_name_layout, std::wstring ws_new_name);
std::vector<std::pair<std::wstring,std::wstring>>& get_vec_new_name();
private:
presentation_layouts_instance presentation_layouts_;
@ -212,8 +209,6 @@ private:
map_style_family_int default_map_;
int hyperlink_style_pos_;
std::vector<std::pair<std::wstring,std::wstring>> vec_new_name_master_page;
};
class page_layout_instance;

View File

@ -128,22 +128,6 @@ void office_presentation::xlsx_convert(oox::xlsx_conversion_context & Context)
Context.end_office_spreadsheet();
}
bool CheckPageLayout(std::vector<std::pair<std::wstring,std::wstring>>* vec_name_layout, draw_page* page, bool new_name)
{
if(vec_name_layout->empty() || !page)
return true;
for(size_t i = 0; i < vec_name_layout->size();i++)
{
if((*vec_name_layout)[i].first == page->attlist_.page_layout_name_.get_value_or(L""))
{
if(new_name)
page->attlist_.master_page_name_ = (*vec_name_layout)[i].second;
return true;
}
}
return false;
}
void office_presentation::pptx_convert(oox::pptx_conversion_context & Context)
{
Context.start_office_presentation();
@ -181,43 +165,8 @@ void office_presentation::pptx_convert(oox::pptx_conversion_context & Context)
collect_page_names(Context);
std::vector<std::pair<std::wstring,std::wstring>>* vec_name_master_page = &(Context.root()->odf_context().styleContainer().get_vec_new_name());
unsigned int pos_in_vec = 0;
if(!vec_name_master_page->empty())
{
for (size_t i = 0; i < pages_.size(); i++)
{
if(i >= 1)
{
office_element_ptr & elm = pages_[i];
draw_page* page = dynamic_cast<draw_page*>(elm.get());
if(CheckPageLayout(vec_name_master_page,page,true))
continue;
for(size_t t = 0 ; t < i ; t++)
{
office_element_ptr & elm_prev_page = pages_[t];
draw_page* prev_page = dynamic_cast<draw_page*>(elm_prev_page.get());
if(!prev_page)
break;
if(page->attlist_.master_page_name_.get_value_or(L"") == prev_page->attlist_.master_page_name_.get_value_or(L"") && page->attlist_.page_layout_name_.get_value_or(L"") != prev_page->attlist_.page_layout_name_.get_value_or(L""))
{
page->attlist_.master_page_name_ = (*vec_name_master_page)[pos_in_vec].second;
(*vec_name_master_page)[pos_in_vec].first = page->attlist_.page_layout_name_.get_value_or(L"");
pos_in_vec++;
break;
}
}
}
if(pos_in_vec == vec_name_master_page->size())
break;
}
}
for (size_t i = 0; i < pages_.size(); i++)
{
office_element_ptr & elm = pages_[i];
draw_page* page = dynamic_cast<draw_page*>(elm.get());
CheckPageLayout(vec_name_master_page,page,true);
{
pages_[i]->pptx_convert(Context);
}
Context.end_office_presentation();