diff --git a/Common/3dParty/html/css/src/CCssCalculator_Private.cpp b/Common/3dParty/html/css/src/CCssCalculator_Private.cpp
index 3223e8f34f..6dd82b5e1e 100644
--- a/Common/3dParty/html/css/src/CCssCalculator_Private.cpp
+++ b/Common/3dParty/html/css/src/CCssCalculator_Private.cpp
@@ -523,7 +523,7 @@ namespace NSCSS
unStart = itFound.base() - arSelectors.cbegin();
std::vector arNodes = CalculateAllNodes(arSelectors, unStart);
- std::vector arPrevNodes;
+ std::vector arPrevNodes = CalculateAllNodes(arSelectors, 0, unStart);
bool bInTable = false;
for (size_t i = 0; i < unStart; ++i)
@@ -592,11 +592,14 @@ namespace NSCSS
}
#endif
- std::vector CCssCalculator_Private::CalculateAllNodes(const std::vector &arSelectors, unsigned int unStart)
+ std::vector CCssCalculator_Private::CalculateAllNodes(const std::vector &arSelectors, unsigned int unStart, unsigned int unEnd)
{
+ if (0 != unEnd && (unEnd < unStart || unEnd > arSelectors.size()))
+ return std::vector();
+
std::vector arNodes;
-
- for (std::vector::const_reverse_iterator oNode = arSelectors.rbegin(); oNode != arSelectors.rend() - unStart; ++oNode)
+
+ for (std::vector::const_reverse_iterator oNode = arSelectors.rbegin() + ((0 != unEnd) ? (arSelectors.size() - unEnd) : 0); oNode != arSelectors.rend() - unStart; ++oNode)
{
if (!oNode->m_wsName.empty())
arNodes.push_back(oNode->m_wsName);
diff --git a/Common/3dParty/html/css/src/CCssCalculator_Private.h b/Common/3dParty/html/css/src/CCssCalculator_Private.h
index f57c97a189..5d433a9b29 100644
--- a/Common/3dParty/html/css/src/CCssCalculator_Private.h
+++ b/Common/3dParty/html/css/src/CCssCalculator_Private.h
@@ -110,7 +110,7 @@ namespace NSCSS
void ClearPageData();
#endif
- std::vector CalculateAllNodes(const std::vector& arSelectors, unsigned int unStart = 0);
+ std::vector CalculateAllNodes(const std::vector& arSelectors, unsigned int unStart = 0, unsigned int unEnd = 0);
std::vector FindElements(std::vector& arNodes, std::vector& arNextNodes);
void AddStyles(const std::string& sStyle);
diff --git a/HtmlFile2/htmlfile2.cpp b/HtmlFile2/htmlfile2.cpp
index 1777816147..d3d80f0610 100644
--- a/HtmlFile2/htmlfile2.cpp
+++ b/HtmlFile2/htmlfile2.cpp
@@ -2231,7 +2231,6 @@ private:
if (m_mDivs.empty())
pXml->WriteString(L"");
- m_oStylesCalculator.CalculateCompiledStyle(sSelectors);
NSCSS::CCompiledStyle *pStyle = sSelectors.back().m_pCompiledStyle;
const bool bInTable = ElementInTable(sSelectors);
@@ -2308,6 +2307,8 @@ private:
}
m_oLightReader.MoveToElement();
sSelectors.push_back(oNode);
+
+ m_oStylesCalculator.CalculateCompiledStyle(sSelectors);
return sNote;
}
@@ -2391,8 +2392,6 @@ private:
if (sText.empty())
return false;
- m_oStylesCalculator.CalculateCompiledStyle(arSelectors);
-
bool bPre = oTS.bPre;
if (!bPre && nullptr != arSelectors.back().m_pCompiledStyle)
@@ -2585,7 +2584,6 @@ private:
if (m_oState.m_bInP)
{
OpenR(pXml);
- m_oStylesCalculator.CalculateCompiledStyle(arSelectors);
if(arSelectors.back().m_pCompiledStyle->m_oText.GetAlign() == L"both")
pXml->WriteString(L"");
pXml->WriteString(L"");
@@ -3056,8 +3054,6 @@ private:
std::wstring sNote = GetSubClass(oXml, sSelectors);
bool bResult = true;
- // Ссылка
- // Область ссылки
const HtmlTag eHtmlTag{GetHtmlTag(sName)};
@@ -3406,8 +3402,6 @@ private:
if (NULL == pCellStyle)
return;
- m_oStylesCalculator.CalculateCompiledStyle(arSelectors);
-
pCellStyle->m_wsVAlign = arSelectors.back().m_pCompiledStyle->m_oDisplay.GetVAlign().ToWString();
pCellStyle->m_wsHAlign = arSelectors.back().m_pCompiledStyle->m_oDisplay.GetHAlign().ToWString();
pCellStyle->m_oBackground = arSelectors.back().m_pCompiledStyle->m_oBackground.GetColor();
@@ -3658,8 +3652,6 @@ private:
CTextSettings oNewSettings{oTS};
- m_oStylesCalculator.CalculateCompiledStyle(sSelectors);
-
const std::wstring wsHighlight{sSelectors.back().m_pCompiledStyle->m_oBackground.GetColor()
.EquateToColor({{{0, 0, 0}, L"black"}, {{0, 0, 255}, L"blue"}, {{0, 255, 255}, L"cyan"},
{{0, 255, 0}, L"green"}, {{255, 0, 255}, L"magenta"}, {{255, 0, 0}, L"red"},
@@ -3698,7 +3690,6 @@ private:
if (0 != oRT.GetSize())
{
- m_oStylesCalculator.CalculateCompiledStyle(sSelectors);
NSCSS::CCompiledStyle *pStyle = sSelectors.back().m_pCompiledStyle;
int nFontSize = 24;
@@ -3746,7 +3737,6 @@ private:
CTextSettings oTextSettings{oTS};
oTextSettings.sPStyle.clear();
- m_oStylesCalculator.CalculateCompiledStyle(sSelectors);
NSCSS::CCompiledStyle *pStyle = sSelectors.back().m_pCompiledStyle;
//Table styles
@@ -4377,8 +4367,6 @@ private:
if (NULL != sSelectors.back().m_pCompiledStyle)
{
- m_oStylesCalculator.CalculateCompiledStyle(sSelectors);
-
const NSCSS::NSProperties::CDigit& oWidth {sSelectors.back().m_pCompiledStyle->m_oDisplay.GetWidth() };
const NSCSS::NSProperties::CDigit& oHeight{sSelectors.back().m_pCompiledStyle->m_oDisplay.GetHeight()};
@@ -4496,8 +4484,6 @@ private:
if (m_oState.m_bWasPStyle)
return L"";
- m_oStylesCalculator.CalculateCompiledStyle(sSelectors);
-
std::wstring sPStyle = GetStyle(*sSelectors.back().m_pCompiledStyle, true);
if (sPStyle.empty() && !ElementInTable(sSelectors))
@@ -4545,8 +4531,6 @@ private:
if (!m_oState.m_bInP)
return L"";
- m_oStylesCalculator.CalculateCompiledStyle(sSelectors);
-
std::wstring sRStyle = GetStyle(*sSelectors.back().m_pCompiledStyle, false);
m_oXmlStyle.WriteLiteRStyle(oTS.oAdditionalStyle);