diff --git a/HtmlFile2/HTMLReader.cpp b/HtmlFile2/HTMLReader.cpp
index e8be041ddb..d732b45121 100644
--- a/HtmlFile2/HTMLReader.cpp
+++ b/HtmlFile2/HTMLReader.cpp
@@ -1009,6 +1009,19 @@ bool CHTMLReader::ReadTable(std::vector& arSelectors)
if(m_oLightReader.IsEmptyNode())
return false;
+ if (nullptr != m_pWriter && !m_pWriter->SupportNestedTables())
+ {
+ //Временно разруливаем это тут, так как по текущей логике мы сначала
+ //читаем всю таблицу и её вложенные элементы, а потом приступаем к конвертации,
+ //поэтому конвертору уже приходят вложенные таблицы, что в MD запрещено
+ for (std::vector::const_reverse_iterator itElement{arSelectors.crbegin() + 1}; itElement < arSelectors.crend(); ++itElement)
+ if (L"table" == itElement->m_wsName)
+ return false;
+
+ if (nullptr != dynamic_cast(m_pWriter))
+ ((CMDWriter*)m_pWriter)->EnteredTable();
+ }
+
CStorageTable oTable;
NSCSS::CCompiledStyle *pStyle = arSelectors.back().m_pCompiledStyle;
@@ -1100,6 +1113,9 @@ bool CHTMLReader::ReadTable(std::vector& arSelectors)
oTable.SetAlign(pStyle->m_oDisplay.GetHAlign().ToWString());
//------
+ //TODO:: переписать работу с таблицами без предварительной конвертации ячеек и хранения их внутренних данных
+ //Читаем содержимое таблицы -> считаем ячейки -> нормализуем таблицу -> конвертим таблицу
+
int nDeath = m_oLightReader.GetDepth();
while(m_oLightReader.ReadNextSiblingNode(nDeath))
{
diff --git a/HtmlFile2/Tags/MDTags.cpp b/HtmlFile2/Tags/MDTags.cpp
index bb0c4e16bb..f47aa2ed22 100644
--- a/HtmlFile2/Tags/MDTags.cpp
+++ b/HtmlFile2/Tags/MDTags.cpp
@@ -53,7 +53,7 @@ bool CBold::Open(const std::vector& arSelectors, const
return true;
m_pWriter->WriteOpenSpecialString(L"**");
- m_pWriter->EneteredBold();
+ m_pWriter->EnteredBold();
return true;
}
@@ -97,7 +97,7 @@ bool CItalic::Open(const std::vector& arSelectors, cons
return true;
m_pWriter->WriteOpenSpecialString(L"*");
- m_pWriter->EneteredItalic();
+ m_pWriter->EnteredItalic();
return true;
}
@@ -124,7 +124,7 @@ bool CStrike::Open(const std::vector& arSelectors, cons
return true;
m_pWriter->WriteOpenSpecialString(L"~~");
- m_pWriter->EneteredStrike();
+ m_pWriter->EnteredStrike();
return true;
}
@@ -309,7 +309,7 @@ CTable::CTable(CMDWriter* pWriter)
bool CTable::Open(const std::vector& arSelectors, const boost::any& oExtraData)
{
- if (!ValidWriter() || m_pWriter->InTable()) //В MD не поддерживаются вложенные таблицы
+ if (!ValidWriter() /*|| m_pWriter->InTable()*/) //В MD не поддерживаются вложенные таблицы (пока разруливаем в парсере)
return false;
m_pWriter->WriteBreakLine();
diff --git a/HtmlFile2/Writers/IWriter.h b/HtmlFile2/Writers/IWriter.h
index 5b7fca25d7..efd46f749c 100644
--- a/HtmlFile2/Writers/IWriter.h
+++ b/HtmlFile2/Writers/IWriter.h
@@ -28,6 +28,9 @@ public:
virtual void RevertDataOutput() = 0; // Возвращаем место вывода к исходному
virtual XmlString* GetCurrentDocument() const = 0;
+
+ //TODO:: перенести разруливание вложенных таблиц в конвертацию после изменения принципа работы с таблицами
+ virtual bool SupportNestedTables() const = 0;
};
}
diff --git a/HtmlFile2/Writers/MDWriter.cpp b/HtmlFile2/Writers/MDWriter.cpp
index fdd0fccf45..99e95b4529 100644
--- a/HtmlFile2/Writers/MDWriter.cpp
+++ b/HtmlFile2/Writers/MDWriter.cpp
@@ -202,6 +202,11 @@ XmlString* CMDWriter::GetCurrentDocument() const
return m_arStates.top().m_pCurrentDocument;
}
+bool CMDWriter::SupportNestedTables() const
+{
+ return false;
+}
+
void CMDWriter::WriteBreakLine(bool bNeedChecked)
{
if (bNeedChecked && !m_arStates.top().m_bNeedBreakLine)
@@ -229,7 +234,7 @@ void CMDWriter::WriteBreakLine(bool bNeedChecked)
m_arStates.top().m_wsLastSpecialString.clear();
}
-void CMDWriter::EneteredBold()
+void CMDWriter::EnteredBold()
{
m_arStates.top().m_bBold = true;
}
@@ -244,7 +249,7 @@ bool CMDWriter::IsBold()
return m_arStates.top().m_bBold;
}
-void CMDWriter::EneteredItalic()
+void CMDWriter::EnteredItalic()
{
m_arStates.top().m_bItalic = true;
}
@@ -259,7 +264,7 @@ bool CMDWriter::IsItalic()
return m_arStates.top().m_bItalic;
}
-void CMDWriter::EneteredStrike()
+void CMDWriter::EnteredStrike()
{
m_arStates.top().m_bStrike = true;
}
diff --git a/HtmlFile2/Writers/MDWriter.h b/HtmlFile2/Writers/MDWriter.h
index 6ce4c62da9..413fb77029 100644
--- a/HtmlFile2/Writers/MDWriter.h
+++ b/HtmlFile2/Writers/MDWriter.h
@@ -65,17 +65,19 @@ public:
XmlString* GetCurrentDocument() const override;
+ bool SupportNestedTables() const override;
+
void WriteBreakLine(bool bNeedChecked = true);
- void EneteredBold();
+ void EnteredBold();
void OutBold();
bool IsBold();
- void EneteredItalic();
+ void EnteredItalic();
void OutItalic();
bool IsItalic();
- void EneteredStrike();
+ void EnteredStrike();
void OutStrike();
bool IsStrike();
diff --git a/HtmlFile2/Writers/OOXMLWriter.cpp b/HtmlFile2/Writers/OOXMLWriter.cpp
index ba5ebead7f..5c1ec4379e 100644
--- a/HtmlFile2/Writers/OOXMLWriter.cpp
+++ b/HtmlFile2/Writers/OOXMLWriter.cpp
@@ -1261,6 +1261,11 @@ XmlString* COOXMLWriter::GetCurrentDocument() const
return m_arStates.top().m_pCurrentDocument;
}
+bool COOXMLWriter::SupportNestedTables() const
+{
+ return true;
+}
+
const NSCSS::NSProperties::CPage* COOXMLWriter::GetPageData() const
{
return &m_oPageData;
diff --git a/HtmlFile2/Writers/OOXMLWriter.h b/HtmlFile2/Writers/OOXMLWriter.h
index 0d092896ad..1f9bd20fa0 100644
--- a/HtmlFile2/Writers/OOXMLWriter.h
+++ b/HtmlFile2/Writers/OOXMLWriter.h
@@ -200,6 +200,8 @@ public:
XmlString& GetWebSettingsXml();
XmlString* GetCurrentDocument() const override;
+ bool SupportNestedTables() const override;
+
const NSCSS::NSProperties::CPage* GetPageData() const;
NSFonts::IApplicationFonts* GetFonts();