From 5a662b35675f3521606991ef01bf85ec65fcacaf Mon Sep 17 00:00:00 2001 From: Kirill Polyakov Date: Tue, 17 Feb 2026 01:51:21 +0300 Subject: [PATCH] Fix bug #80116 --- Common/3dParty/html/css/src/CCssCalculator_Private.cpp | 2 +- Common/3dParty/html/css/src/CNode.cpp | 3 +-- HtmlFile2/HTMLReader.cpp | 9 ++++++--- HtmlFile2/Tags/MDTags.cpp | 2 ++ 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Common/3dParty/html/css/src/CCssCalculator_Private.cpp b/Common/3dParty/html/css/src/CCssCalculator_Private.cpp index 1038a06d5f..49d4d29bf2 100644 --- a/Common/3dParty/html/css/src/CCssCalculator_Private.cpp +++ b/Common/3dParty/html/css/src/CCssCalculator_Private.cpp @@ -563,7 +563,7 @@ namespace NSCSS const std::map, CCompiledStyle>::const_iterator oItem = m_mUsedStyles.find(arSelectors); - if (oItem != m_mUsedStyles.cend()) + if (oItem != m_mUsedStyles.cend() && (arSelectors.back().m_wsId.empty() || !HaveStylesById(arSelectors.back().m_wsId))) { arSelectors.back().SetCompiledStyle(new CCompiledStyle(oItem->second)); return true; diff --git a/Common/3dParty/html/css/src/CNode.cpp b/Common/3dParty/html/css/src/CNode.cpp index 2e017f81b7..6c3a4282dd 100644 --- a/Common/3dParty/html/css/src/CNode.cpp +++ b/Common/3dParty/html/css/src/CNode.cpp @@ -113,8 +113,7 @@ namespace NSCSS bool CNode::operator==(const CNode& oNode) const { - return((m_wsId == oNode.m_wsId) && - (m_wsName == oNode.m_wsName) && + return((m_wsName == oNode.m_wsName) && (m_wsClass == oNode.m_wsClass) && (m_wsStyle == oNode.m_wsStyle) && (m_mAttributes == oNode.m_mAttributes)); diff --git a/HtmlFile2/HTMLReader.cpp b/HtmlFile2/HTMLReader.cpp index d5465bcf36..e8be041ddb 100644 --- a/HtmlFile2/HTMLReader.cpp +++ b/HtmlFile2/HTMLReader.cpp @@ -1100,9 +1100,6 @@ bool CHTMLReader::ReadTable(std::vector& arSelectors) oTable.SetAlign(pStyle->m_oDisplay.GetHAlign().ToWString()); //------ - if (!m_mTags[HTML_TAG(TABLE)]->Open(arSelectors, &oTable)) - return false; - int nDeath = m_oLightReader.GetDepth(); while(m_oLightReader.ReadNextSiblingNode(nDeath)) { @@ -1149,7 +1146,10 @@ bool CHTMLReader::ReadTable(std::vector& arSelectors) m_mTags[HTML_TAG(TD)]->Open(arSelectors, boost::tuple(*arCells[unCol], oTable, unCol, parse_mode, eRowPosition));\ \ if (0 != arCells[unCol]->GetData()->GetCurSize())\ + {\ WriteToStringBuilder(*(arCells[unCol]->GetData()), *(m_pWriter->GetCurrentDocument()));\ + arCells[unCol]->GetData()->Clear();\ + }\ else\ m_pWriter->WriteEmptyParagraph();\ \ @@ -1159,6 +1159,9 @@ bool CHTMLReader::ReadTable(std::vector& arSelectors) m_mTags[HTML_TAG(TR)]->Close(arSelectors);\ }} + if (!m_mTags[HTML_TAG(TABLE)]->Open(arSelectors, &oTable)) + return false; + if (!oTable.HaveHeader()) { if (m_mTags[HTML_TAG(TR)]->Open(arSelectors, boost::tuple(nullptr, oTable, ERowParseMode::Header, ERowPosition::First))) diff --git a/HtmlFile2/Tags/MDTags.cpp b/HtmlFile2/Tags/MDTags.cpp index 1476d91048..bb0c4e16bb 100644 --- a/HtmlFile2/Tags/MDTags.cpp +++ b/HtmlFile2/Tags/MDTags.cpp @@ -354,6 +354,8 @@ bool CTableRow::Open(const std::vector& arSelectors, co if (!ValidWriter() || oExtraData.empty() || typeid(DataForRow) != oExtraData.type()) return false; + m_pWriter->EnteredTable(); + const DataForRow& oDataForRow(boost::any_cast(oExtraData)); const CStorageTable& oStorageTable{boost::get<1>(oDataForRow)};