From 0bc356ebff84bdac0ce0b86440e37c52304b3562 Mon Sep 17 00:00:00 2001 From: "Elena.Subbotina" Date: Thu, 22 Feb 2024 13:13:37 +0300 Subject: [PATCH] fix bug #66057 --- OOXML/DocxFormat/DocxFlat.cpp | 21 +++++++++++--- OOXML/DocxFormat/DocxFlat.h | 2 ++ OOXML/DocxFormat/Settings/Settings.cpp | 39 ++++++++++++++++++++++++-- OOXML/XlsxFormat/Workbook/Metadata.cpp | 2 +- 4 files changed, 56 insertions(+), 8 deletions(-) diff --git a/OOXML/DocxFormat/DocxFlat.cpp b/OOXML/DocxFormat/DocxFlat.cpp index f83f95cca97..9496e53909a 100644 --- a/OOXML/DocxFormat/DocxFlat.cpp +++ b/OOXML/DocxFormat/DocxFlat.cpp @@ -159,11 +159,24 @@ namespace OOX } else if (L"w:docSuppData" == sName && !oReader.IsEmptyNode()) { - m_oDocSuppData = new OOX::Logic::CDocSuppData(WritingElement::m_pMainDocument); - m_oDocSuppData->fromXML(oReader); - - ParsingSuppData(); + //m_oDocSuppData = new OOX::Logic::CDocSuppData(WritingElement::m_pMainDocument); + //m_oDocSuppData->fromXML(oReader); + // + //ParsingSuppData(); } + //CustomDocumentProperties + } + + if (!m_sCompatibilityMode.IsInit() && m_pCore.IsInit() && (m_pCore->m_sVersion.IsInit())) + { + if (false == m_pSettings.IsInit()) m_pSettings = new CSettings(this); + if (m_pSettings->m_oCompat.IsInit()) m_pSettings->m_oCompat.Init(); + + Settings::CCompatSetting* pSett = new Settings::CCompatSetting(); + pSett->m_sName = L"compatibilityMode"; + pSett->m_sUri = L"http://schemas.microsoft.com/office/word"; + pSett->m_sVal = m_pCore->m_sVersion; + m_pSettings->m_oCompat->m_arrCompatSettings.push_back(pSett); } if ((m_oDocSuppData.IsInit()) && (m_oDocSuppData->m_oBinData.IsInit()) && (m_pDocument.IsInit())) diff --git a/OOXML/DocxFormat/DocxFlat.h b/OOXML/DocxFormat/DocxFlat.h index 410509b289a..2bc52d14cfb 100644 --- a/OOXML/DocxFormat/DocxFlat.h +++ b/OOXML/DocxFormat/DocxFlat.h @@ -98,6 +98,8 @@ namespace OOX nullable m_pApp; nullable m_pCore; //----------------------------------------------------------- + nullable_string m_sCompatibilityMode; + std::map> m_mapImages; std::map> m_mapOleData; diff --git a/OOXML/DocxFormat/Settings/Settings.cpp b/OOXML/DocxFormat/Settings/Settings.cpp index 26f088d2b12..91072ee0d09 100644 --- a/OOXML/DocxFormat/Settings/Settings.cpp +++ b/OOXML/DocxFormat/Settings/Settings.cpp @@ -516,7 +516,6 @@ namespace Settings } void CCompatSetting::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) { - // Читаем атрибуты if ( oReader.GetAttributesCount() <= 0 ) return; @@ -554,6 +553,15 @@ namespace Settings wsName = oReader.GetName(); } oReader.MoveToElement(); + + if (m_sName.IsInit() && (*m_sName == L"compatibilityMode") && m_sVal.IsInit()) + { + CDocxFlat* flat_docx = dynamic_cast(m_pMainDocument); + if (flat_docx) + { + flat_docx->m_sCompatibilityMode = *m_sVal; + } + } } //-------------------------------------------------------------------------------- @@ -669,24 +677,49 @@ namespace Settings m_oLayoutRawTableWidth = oReader; else if ( L"w:layoutTableRowsApart" == sName ) m_oLayoutTableRowsApart = oReader; - else if ( L"w:useWord97LineBreakRules" == sName ) + else if ( L"w:useWord97LineBreakRules" == sName ) m_oUseWord97LineBreakRules = oReader; + else if (L"w:breakWrappedTables" == sName) + { + m_oDoNotBreakWrappedTables = oReader; + m_oDoNotBreakWrappedTables->m_oVal.FromBool(!m_oDoNotBreakWrappedTables->m_oVal.ToBool()); + } else if ( L"w:doNotBreakWrappedTables" == sName ) m_oDoNotBreakWrappedTables = oReader; + else if (L"w:snapToGridInCell" == sName) + { + m_oDoNotSnapToGridInCell = oReader; + m_oDoNotSnapToGridInCell->m_oVal.FromBool(!m_oDoNotSnapToGridInCell->m_oVal.ToBool()); + } else if ( L"w:doNotSnapToGridInCell" == sName ) m_oDoNotSnapToGridInCell = oReader; else if ( L"w:selectFldWithFirstOrLastChar" == sName ) m_oSelectFldWithFirstOrLastChar = oReader; else if ( L"w:applyBreakingRules" == sName ) m_oApplyBreakingRules = oReader; + else if (L"w:wrapTextWithPunct" == sName) + { + m_oDoNotWrapTextWithPunct = oReader; + m_oDoNotWrapTextWithPunct->m_oVal.FromBool(!m_oDoNotWrapTextWithPunct->m_oVal.ToBool()); + } else if ( L"w:doNotWrapTextWithPunct" == sName ) m_oDoNotWrapTextWithPunct = oReader; + else if (L"w:useAsianBreakRules" == sName) + { + m_oDoNotUseEastAsianBreakRules = oReader; + m_oDoNotUseEastAsianBreakRules->m_oVal.FromBool(!m_oDoNotUseEastAsianBreakRules->m_oVal.ToBool()); + } else if ( L"w:doNotUseEastAsianBreakRules" == sName ) m_oDoNotUseEastAsianBreakRules = oReader; else if ( L"w:useWord2002TableStyleRules" == sName ) m_oUseWord2002TableStyleRules = oReader; else if ( L"w:growAutofit" == sName ) m_oGrowAutofit = oReader; + else if (L"w:dontGrowAutofit" == sName) + { + m_oGrowAutofit = oReader; + m_oGrowAutofit->m_oVal.FromBool(!m_oGrowAutofit->m_oVal.ToBool()); + } else if ( L"w:useFELayout" == sName ) m_oUseFELayout = oReader; else if ( L"w:useNormalStyleForList" == sName ) @@ -724,7 +757,7 @@ namespace Settings OOX::Settings::CCompatSetting *oCS = new OOX::Settings::CCompatSetting(); *oCS = oReader; - if (oCS)m_arrCompatSettings.push_back( oCS ); + if (oCS) m_arrCompatSettings.push_back( oCS ); } } } diff --git a/OOXML/XlsxFormat/Workbook/Metadata.cpp b/OOXML/XlsxFormat/Workbook/Metadata.cpp index 6bfa9e37be2..7da7a64c2c0 100644 --- a/OOXML/XlsxFormat/Workbook/Metadata.cpp +++ b/OOXML/XlsxFormat/Workbook/Metadata.cpp @@ -824,7 +824,7 @@ namespace OOX writer.WriteString(L""); + writer.WriteString(L" count=\"" + std::to_wstring(m_arrItems.size())); writer.WriteString(L">"); for (size_t i = 0; i < m_arrItems.size(); ++i)