diff --git a/Common/3dParty/html/css/src/CCssCalculator_Private.cpp b/Common/3dParty/html/css/src/CCssCalculator_Private.cpp
index 6dd82b5e1e..1deffe5bfb 100644
--- a/Common/3dParty/html/css/src/CCssCalculator_Private.cpp
+++ b/Common/3dParty/html/css/src/CCssCalculator_Private.cpp
@@ -514,6 +514,9 @@ namespace NSCSS
return true;
}
+ if (!arSelectors.back().m_pCompiledStyle->Empty())
+ return true;
+
arSelectors.back().m_pCompiledStyle->SetDpi(m_nDpi);
unsigned int unStart = 0;
@@ -522,7 +525,7 @@ namespace NSCSS
if (itFound != arSelectors.crend())
unStart = itFound.base() - arSelectors.cbegin();
- std::vector arNodes = CalculateAllNodes(arSelectors, unStart);
+ std::vector arNodes = CalculateAllNodes(arSelectors, unStart, arSelectors.size());
std::vector arPrevNodes = CalculateAllNodes(arSelectors, 0, unStart);
bool bInTable = false;
@@ -548,6 +551,7 @@ namespace NSCSS
{
arSelectors[i].m_pCompiledStyle->m_oBackground.Clear();
arSelectors[i].m_pCompiledStyle->m_oBorder.Clear();
+ arSelectors[i].m_pCompiledStyle->m_oDisplay.Clear();
}
arSelectors[i].m_pCompiledStyle->AddStyle(arSelectors[i].m_mAttributes, i + 1);
@@ -594,7 +598,7 @@ namespace NSCSS
std::vector CCssCalculator_Private::CalculateAllNodes(const std::vector &arSelectors, unsigned int unStart, unsigned int unEnd)
{
- if (0 != unEnd && (unEnd < unStart || unEnd > arSelectors.size()))
+ if ((0 != unEnd && (unEnd < unStart || unEnd > arSelectors.size())) || (unStart == unEnd))
return std::vector();
std::vector arNodes;
@@ -630,7 +634,7 @@ namespace NSCSS
if (arNextNodes.empty())
return;
- const std::vector arTempPrev = pElement->GetPrevElements(arNextNodes.crbegin() + 1, arNextNodes.crend());
+ const std::vector arTempPrev = pElement->GetPrevElements(arNextNodes.cbegin(), arNextNodes.cend());
const std::vector arTempKins = pElement->GetNextOfKin(wsName, arClasses);
if (!arTempPrev.empty())
@@ -647,20 +651,19 @@ namespace NSCSS
std::vector arFindedElements;
- std::wstring wsName, wsId;
+ std::wstring wsName, wsClasses, wsId;
std::vector arClasses;
if (!arNodes.empty() && arNodes.back()[0] == L'#')
{
wsId = arNodes.back();
arNodes.pop_back();
- arNextNodes.push_back(wsId);
}
if (!arNodes.empty() && arNodes.back()[0] == L'.')
{
- arClasses = NS_STATIC_FUNCTIONS::GetWordsW(arNodes.back(), false, L" ");
- arNextNodes.push_back(arNodes.back());
+ wsClasses = arNodes.back();
+ arClasses = NS_STATIC_FUNCTIONS::GetWordsW(wsClasses, false, L" ");
arNodes.pop_back();
}
@@ -668,7 +671,6 @@ namespace NSCSS
{
wsName = arNodes.back();
arNodes.pop_back();
- arNextNodes.push_back(wsName);
}
if (!wsId.empty())
@@ -727,6 +729,14 @@ namespace NSCSS
{ return oFirstElement->GetWeight() > oSecondElement->GetWeight(); });
}
+ if (!wsId.empty())
+ arNextNodes.push_back(wsId);
+
+ if (!wsClasses.empty())
+ arNextNodes.push_back(wsClasses);
+
+ arNextNodes.push_back(wsName);
+
return arFindedElements;
}
@@ -741,7 +751,7 @@ namespace NSCSS
if (arSelectors.empty())
return false;
- std::vector arNodes = CalculateAllNodes(arSelectors);
+ std::vector arNodes = CalculateAllNodes(arSelectors, 0, arSelectors.size());
std::vector arNextNodes;
for (size_t i = 0; i < arSelectors.size(); ++i)
diff --git a/Common/3dParty/html/css/src/CCssCalculator_Private.h b/Common/3dParty/html/css/src/CCssCalculator_Private.h
index 5d433a9b29..2f6543a4a4 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, unsigned int unEnd = 0);
+ std::vector CalculateAllNodes(const std::vector& arSelectors, unsigned int unStart, unsigned int unEnd);
std::vector FindElements(std::vector& arNodes, std::vector& arNextNodes);
void AddStyles(const std::string& sStyle);
diff --git a/Common/3dParty/html/css/src/CElement.cpp b/Common/3dParty/html/css/src/CElement.cpp
index 1ceda93ff4..22a06291f5 100644
--- a/Common/3dParty/html/css/src/CElement.cpp
+++ b/Common/3dParty/html/css/src/CElement.cpp
@@ -176,14 +176,14 @@ namespace NSCSS
return arElements;
}
- std::vector CElement::GetPrevElements(const std::vector::const_reverse_iterator& oNodesRBegin, const std::vector::const_reverse_iterator& oNodesREnd) const
+ std::vector CElement::GetPrevElements(const std::vector::const_iterator& oNodesBegin, const std::vector::const_iterator& oNodesEnd) const
{
- if (oNodesRBegin >= oNodesREnd || m_arPrevElements.empty())
+ if (oNodesBegin >= oNodesEnd || m_arPrevElements.empty())
return std::vector();
std::vector arElements;
- for (std::vector::const_reverse_iterator iWord = oNodesRBegin; iWord != oNodesREnd; ++iWord)
+ for (std::vector::const_iterator iWord = oNodesBegin; iWord != oNodesEnd; ++iWord)
{
if ((*iWord)[0] == L'.' && ((*iWord).find(L" ") != std::wstring::npos))
{
@@ -195,7 +195,7 @@ namespace NSCSS
if (oPrevElement->m_sSelector == wsClass)
{
arElements.push_back(oPrevElement);
- std::vector arTempElements = oPrevElement->GetPrevElements(iWord + 1, oNodesREnd);
+ std::vector arTempElements = oPrevElement->GetPrevElements(iWord + 1, oNodesEnd);
arElements.insert(arElements.end(), arTempElements.begin(), arTempElements.end());
}
}
@@ -208,9 +208,8 @@ namespace NSCSS
if (oPrevElement->m_sSelector == *iWord)
{
arElements.push_back(oPrevElement);
- std::vector arTempElements = oPrevElement->GetPrevElements(iWord + 1, oNodesREnd);
+ std::vector arTempElements = oPrevElement->GetPrevElements(iWord + 1, oNodesEnd);
arElements.insert(arElements.end(), arTempElements.begin(), arTempElements.end());
- // return arElements;
}
}
}
diff --git a/Common/3dParty/html/css/src/CElement.h b/Common/3dParty/html/css/src/CElement.h
index 9844b27cc6..c606ac1983 100644
--- a/Common/3dParty/html/css/src/CElement.h
+++ b/Common/3dParty/html/css/src/CElement.h
@@ -39,7 +39,7 @@ namespace NSCSS
std::map GetFullStyle(const std::vector& arSelectors) const;
std::map GetFullStyle(const std::vector& arNodes) const;
std::vector GetNextOfKin(const std::wstring& sName, const std::vector& arClasses = {}) const;
- std::vector GetPrevElements(const std::vector::const_reverse_iterator& oNodesRBegin, const std::vector::const_reverse_iterator& oNodesREnd) const;
+ std::vector GetPrevElements(const std::vector::const_iterator& oNodesBegin, const std::vector::const_iterator& oNodesEnd) const;
std::map GetConvertStyle(const std::vector& arNodes) const;
CElement *FindPrevElement(const std::wstring& sSelector) const;
diff --git a/Common/3dParty/html/css/src/ConstValues.h b/Common/3dParty/html/css/src/ConstValues.h
index de5a434faa..9bd2a1eb66 100644
--- a/Common/3dParty/html/css/src/ConstValues.h
+++ b/Common/3dParty/html/css/src/ConstValues.h
@@ -69,7 +69,8 @@ namespace NSCSS
R_Highlight,
R_Shd,
R_SmallCaps,
- R_Kern
+ R_Kern,
+ R_Vanish
} RunnerProperties;
typedef enum
diff --git a/Common/3dParty/html/css/src/StyleProperties.cpp b/Common/3dParty/html/css/src/StyleProperties.cpp
index c1594b9ff0..94ac55edea 100644
--- a/Common/3dParty/html/css/src/StyleProperties.cpp
+++ b/Common/3dParty/html/css/src/StyleProperties.cpp
@@ -1483,6 +1483,21 @@ namespace NSCSS
(m_eWhiteSpace.Empty() || m_eWhiteSpace == EWhiteSpace::Normal);
}
+ void CDisplay::Clear()
+ {
+ m_oX.Clear();
+ m_oY.Clear();
+ m_oWidth.Clear();
+ m_oHeight.Clear();
+
+ m_oHAlign.Clear();
+ m_oVAlign.Clear();
+
+ m_oDisplay.Clear();
+
+ m_eWhiteSpace.Clear();
+ }
+
CDisplay &CDisplay::operator+=(const CDisplay &oDisplay)
{
m_oX += oDisplay.m_oX;
diff --git a/Common/3dParty/html/css/src/StyleProperties.h b/Common/3dParty/html/css/src/StyleProperties.h
index 1af5b04755..7198ef4aa8 100644
--- a/Common/3dParty/html/css/src/StyleProperties.h
+++ b/Common/3dParty/html/css/src/StyleProperties.h
@@ -373,6 +373,7 @@ namespace NSCSS
const CEnum& GetWhiteSpace() const;
bool Empty() const;
+ void Clear();
CDisplay& operator+=(const CDisplay& oDisplay);
bool operator==(const CDisplay& oDisplay) const;
diff --git a/Common/3dParty/html/css/src/xhtml/CDocumentStyle.cpp b/Common/3dParty/html/css/src/xhtml/CDocumentStyle.cpp
index 68622eec01..60084871a5 100644
--- a/Common/3dParty/html/css/src/xhtml/CDocumentStyle.cpp
+++ b/Common/3dParty/html/css/src/xhtml/CDocumentStyle.cpp
@@ -509,6 +509,9 @@ namespace NSCSS
else if (L"serif" == wsFontFamily)
wsFontFamily = L"Times New Roman";
+ if (oStyle.m_oDisplay.GetDisplay() == L"none")
+ oXmlElement.AddPropertiesInR(RProperties::R_Vanish, L"true");
+
oXmlElement.AddPropertiesInR(RProperties::R_RFonts, oStyle.m_oFont.GetFamily().ToWString());
oXmlElement.AddPropertiesInR(RProperties::R_I, oStyle.m_oFont.GetStyle().ToWString());
oXmlElement.AddPropertiesInR(RProperties::R_B, oStyle.m_oFont.GetWeight().ToWString());
diff --git a/Common/3dParty/html/css/src/xhtml/CXmlElement.cpp b/Common/3dParty/html/css/src/xhtml/CXmlElement.cpp
index 6eb112e02a..0fe9a1b273 100644
--- a/Common/3dParty/html/css/src/xhtml/CXmlElement.cpp
+++ b/Common/3dParty/html/css/src/xhtml/CXmlElement.cpp
@@ -473,6 +473,12 @@ std::wstring CXmlElement::ConvertRStyle(bool bIsLite) const
sRStyle += L"";
break;
}
+ case CSSProperties::RunnerProperties::R_Vanish:
+ {
+ if (oItem.second == L"true")
+ sRStyle += L"";
+ break;
+ }
default:
break;
}
diff --git a/Common/3dParty/md/md2html.cpp b/Common/3dParty/md/md2html.cpp
index 2c23ae17aa..2257d13b61 100644
--- a/Common/3dParty/md/md2html.cpp
+++ b/Common/3dParty/md/md2html.cpp
@@ -5,6 +5,9 @@
namespace Md
{
+#define MD_PARSER_FLAGS MD_DIALECT_GITHUB | MD_FLAG_NOINDENTEDCODEBLOCKS | MD_HTML_FLAG_SKIP_UTF8_BOM | MD_FLAG_HARD_SOFT_BREAKS | MD_HTML_FLAG_XHTML
+#define MD_RENDERER_FLAGS MD_HTML_FLAG_XHTML
+
void ToHtml(const MD_CHAR* pValue, MD_SIZE uSize, void* pData)
{
if (NULL != pData)
@@ -14,7 +17,7 @@ void ToHtml(const MD_CHAR* pValue, MD_SIZE uSize, void* pData)
std::string ConvertMdStringToHtml(const std::string& sMdString)
{
std::string sData;
- md_html(sMdString.c_str(), sMdString.length(), ToHtml, &sData, 0, 0);
+ md_html(sMdString.c_str(), sMdString.length(), ToHtml, &sData, MD_PARSER_FLAGS, MD_RENDERER_FLAGS);
return sData;
}
@@ -36,14 +39,13 @@ void WriteBaseHtmlStyles(NSFile::CFileBinary& oFile)
oFile.WriteStringUTF8(L"img { vertical-align: middle; }");
// Styles for tables
- oFile.WriteStringUTF8(L"table { margin-bottom: 20px; width: 100%; max-width: 100%; border-spacing:0; border-collapse: collapse; border-color: gray;}");
- oFile.WriteStringUTF8(L"thead { display: table-header-group; vertical-align: middle; }");
+ oFile.WriteStringUTF8(L"table { margin-bottom: 20px; width: 100%; max-width: 100%; border-spacing:0; border-collapse: collapse; border-color: gray; vertical-align:middle;}");
+ oFile.WriteStringUTF8(L"thead { display: table-header-group;}");
oFile.WriteStringUTF8(L"tr { display: table-row; }");
- oFile.WriteStringUTF8(L"th { text-align: left; display: table-cell; font-weight: bold; }");
+ oFile.WriteStringUTF8(L"th { text-align: center; display: table-cell; font-weight: bold; }");
- oFile.WriteStringUTF8(L"table thead tr th { vertical-align: bottom; border-bottom: 2px solid #ddd; }");
- oFile.WriteStringUTF8(L"table thead tr th, table tbody tr th, table thead tr td, table tbody tr td { padding 8px; line-height: 1.4; vertical-align: top; border-top: 1px solid #ddd; }");
- oFile.WriteStringUTF8(L"table > caption + thead > tr > th, table > colgroup + thead > tr > th, table > thead > tr > th, table > caption + thead > tr > td, table > colgroup + thead > tr > td, table > thead > tr > td { border-top: 0; }");
+ oFile.WriteStringUTF8(L"table thead tr th, table thead tr td { border-bottom: 2px solid #ddd; border-top: none; }");
+ oFile.WriteStringUTF8(L"table tbody tr th, table tbody tr td { padding 8px; line-height: 1.4; border-top: 1px solid #ddd; }");
// Styles for blockquote
oFile.WriteStringUTF8(L"blockquote { border-left: 3px solid #e9e9e9; margin: 1.5em 0; padding: 0.5em 10px 0.5em 24px; font-size: 1.25rem; display: block; margin-top: 8pt; font-style: italic; color: #404040; }");
@@ -87,9 +89,7 @@ bool ConvertMdFileToHtml(const std::wstring& wsPathToMdFile, const std::wstring&
bool bResult = true;
- if (0 != md_html(sMdData.c_str(), sMdData.length(), ToHtmlFile, &oFile,
- MD_DIALECT_GITHUB | MD_FLAG_NOINDENTEDCODEBLOCKS | MD_HTML_FLAG_SKIP_UTF8_BOM,
- 0))
+ if (0 != md_html(sMdData.c_str(), sMdData.length(), ToHtmlFile, &oFile, MD_PARSER_FLAGS, MD_RENDERER_FLAGS))
bResult = false;
oFile.WriteStringUTF8(L"