diff --git a/HtmlFile2/Tags/MDTags.cpp b/HtmlFile2/Tags/MDTags.cpp
index 2528f476e1..b9e4446ea0 100644
--- a/HtmlFile2/Tags/MDTags.cpp
+++ b/HtmlFile2/Tags/MDTags.cpp
@@ -17,7 +17,6 @@
namespace HTML
{
-template<>
bool CAnchorTag::Open(const std::vector& arSelectors)
{
if (!Valid())
@@ -27,7 +26,6 @@ bool CAnchorTag::Open(const std::vector& arSelectors)
return true;
}
-template<>
void CAnchorTag::Close(const NSCSS::CNode& oTagNode)
{
if (!Valid())
@@ -48,7 +46,6 @@ void CAnchorTag::Close(const NSCSS::CNode& oTagNode)
m_pWriter->WriteString(L")");
}
-template<>
bool CBreakTag::Read(const NSCSS::CNode& oTagNode)
{
if (!Valid())
@@ -59,7 +56,6 @@ bool CBreakTag::Read(const NSCSS::CNode& oTagNode)
return true;
}
-template<>
bool CPreformattedTag::Open()
{
if (!Valid())
@@ -71,7 +67,6 @@ bool CPreformattedTag::Open()
return true;
}
-template<>
void CPreformattedTag::Close(const std::vector& arSelectors)
{
if (!Valid())
@@ -98,7 +93,6 @@ void CPreformattedTag::Close(const std::vector& arSelec
m_pWriter->WriteBreakLine(false);
}
-template<>
bool CHeaderTag::Open(const NSCSS::CNode& oTagNode)
{
if (!Valid())
@@ -119,7 +113,6 @@ bool CHeaderTag::Open(const NSCSS::CNode& oTagNode)
return true;
}
-template<>
void CHeaderTag::Close()
{
if (Valid())
@@ -383,7 +376,6 @@ bool ConvertFileToBase64(const std::wstring& wsFilePath, UINT unWidth, UINT unHe
return bResult;
}
-template<>
bool CImageTag::Read(const std::vector& arSelectors)
{
if (!Valid())
@@ -492,7 +484,6 @@ bool CImageTag::Read(const std::vector& arSelectors)
return true;
}
-template<>
bool CImageTag::ReadSVG(const std::vector& arSelectors, const std::wstring& wsSVG)
{
if (!Valid())
@@ -508,7 +499,6 @@ bool CImageTag::ReadSVG(const std::vector& arSelectors,
return true;
}
-template<>
bool CHorizontalRuleTag::Write(const std::vector& arSelectors)
{
if (!Valid())
@@ -521,7 +511,6 @@ bool CHorizontalRuleTag::Write(const std::vector& arSel
return true;
}
-template<>
bool CBlockquoteTag::Open(const std::vector& arSelectors)
{
if (!Valid())
@@ -533,7 +522,6 @@ bool CBlockquoteTag::Open(const std::vector& arSelector
return true;
}
-template<>
void CBlockquoteTag::Close()
{
if (!Valid())
@@ -544,7 +532,6 @@ void CBlockquoteTag::Close()
m_pWriter->WriteBreakLine(false);
}
-template<>
bool CListTag::Open(const NSCSS::CNode& oTagNode)
{
if (!Valid())
@@ -566,7 +553,6 @@ bool CListTag::Open(const NSCSS::CNode& oTagNode)
return true;
}
-template<>
void CListTag::Close()
{
if (!Valid())
@@ -575,7 +561,6 @@ void CListTag::Close()
m_pWriter->OutList();
}
-template<>
bool CListElementTag::Open()
{
if (!Valid())
@@ -598,11 +583,9 @@ bool CListElementTag::Open()
return true;
}
-template<>
void CListElementTag::Close()
{}
-template<>
bool CCodeTag::Open(const NSCSS::CNode& oTagNode)
{
if (!Valid())
@@ -623,7 +606,6 @@ bool CCodeTag::Open(const NSCSS::CNode& oTagNode)
return true;
}
-template<>
void CCodeTag::Close()
{
if (!Valid())
diff --git a/HtmlFile2/Tags/MDTags.h b/HtmlFile2/Tags/MDTags.h
index bb9eb31189..63cbfa71cd 100644
--- a/HtmlFile2/Tags/MDTags.h
+++ b/HtmlFile2/Tags/MDTags.h
@@ -7,51 +7,87 @@
namespace HTML
{
-template<>
-bool CAnchorTag::Open(const std::vector& arSelectors);
-template<>
-void CAnchorTag::Close(const NSCSS::CNode& oTagNode);
+#define CLASS_TAG_LIGHT_MD(class_name)\
+template<>\
+class C ## class_name ## Tag : public INTERFACE_TAGS::I ## class_name ## Tag, public INTERFACE_TAGS::ITag
-template<>
-bool CBreakTag::Read(const NSCSS::CNode& oTagNode);
+CLASS_TAG_LIGHT_MD(Anchor)
+{
+public:
+ CAnchorTag(CMDWriter* pWriter) : INTERFACE_TAGS::ITag(pWriter) {}
+ bool Open(const std::vector& arSelectors) override;
+ void Close(const NSCSS::CNode& oTagNode) override;
+};
-template<>
-bool CPreformattedTag::Open();
-template<>
-void CPreformattedTag::Close(const std::vector& arSelectors);
+CLASS_TAG_LIGHT_MD(Break)
+{
+public:
+ CBreakTag(CMDWriter* pWriter) : INTERFACE_TAGS::ITag(pWriter) {}
+ bool Read(const NSCSS::CNode& oTagNode) override;
+};
-template<>
-bool CHeaderTag::Open(const NSCSS::CNode& oTagNode);
-template<>
-void CHeaderTag::Close();
+CLASS_TAG_LIGHT_MD(Preformatted)
+{
+public:
+ CPreformattedTag(CMDWriter* pWriter) : INTERFACE_TAGS::ITag(pWriter) {}
+ bool Open() override;
+ void Close(const std::vector& arSelectors) override;
+};
-template<>
-bool CImageTag::Read(const std::vector& arSelectors);
-template<>
-bool CImageTag::ReadSVG(const std::vector& arSelectors, const std::wstring& wsSVG);
+CLASS_TAG_LIGHT_MD(Header)
+{
+public:
+ CHeaderTag(CMDWriter* pWriter) : INTERFACE_TAGS::ITag(pWriter) {}
+ bool Open(const NSCSS::CNode& oTagNode) override;
+ void Close() override;
+};
-template<>
-bool CBlockquoteTag::Open(const std::vector& arSelectors);
-template<>
-void CBlockquoteTag::Close();
+CLASS_TAG_LIGHT_MD(Image)
+{
+public:
+ CImageTag(CMDWriter* pWriter) : INTERFACE_TAGS::ITag(pWriter) {}
+ bool Read(const std::vector& arSelectors) override;
+ bool ReadSVG(const std::vector& arSelectors, const std::wstring& wsSVG) override;
+};
-template<>
-bool CListTag::Open(const NSCSS::CNode& oTagNode);
-template<>
-void CListTag::Close();
+CLASS_TAG_LIGHT_MD(Blockquote)
+{
+public:
+ CBlockquoteTag(CMDWriter* pWriter) : INTERFACE_TAGS::ITag(pWriter) {}
+ bool Open(const std::vector& arSelectors) override;
+ void Close() override;
+};
-template<>
-bool CHorizontalRuleTag::Write(const std::vector& arSelectors);
+CLASS_TAG_LIGHT_MD(List)
+{
+public:
+ CListTag(CMDWriter* pWriter) : INTERFACE_TAGS::ITag(pWriter) {}
+ bool Open(const NSCSS::CNode& oTagNode) override;
+ void Close() override;
+};
-template<>
-bool CListElementTag::Open();
-template<>
-void CListElementTag::Close();
+CLASS_TAG_LIGHT_MD(HorizontalRule)
+{
+public:
+ CHorizontalRuleTag(CMDWriter* pWriter) : INTERFACE_TAGS::ITag(pWriter) {}
+ bool Write(const std::vector& arSelectors) override;
+};
-template<>
-bool CCodeTag::Open(const NSCSS::CNode& oTagNode);
-template<>
-void CCodeTag::Close();
+CLASS_TAG_LIGHT_MD(ListElement)
+{
+public:
+ CListElementTag(CMDWriter* pWriter) : INTERFACE_TAGS::ITag(pWriter) {}
+ bool Open() override;
+ void Close() override;
+};
+
+CLASS_TAG_LIGHT_MD(Code)
+{
+public:
+ CCodeTag(CMDWriter* pWriter) : INTERFACE_TAGS::ITag(pWriter) {}
+ bool Open(const NSCSS::CNode& oTagNode) override;
+ void Close() override;
+};
struct TElementInfo
{
diff --git a/HtmlFile2/Tags/OOXMLTags.cpp b/HtmlFile2/Tags/OOXMLTags.cpp
index 6d53b0ca30..ba13b7f399 100644
--- a/HtmlFile2/Tags/OOXMLTags.cpp
+++ b/HtmlFile2/Tags/OOXMLTags.cpp
@@ -37,7 +37,6 @@ bool UpdateImageData(const std::wstring& wsImagePath, TImageData& oImageData);
const static double HTML_FONTS[7] = {7.5, 10, 12, 13.5, 18, 24, 36};
-template<>
bool CAnchorTag::Open(const std::vector& arSelectors)
{
if(!Valid())
@@ -84,7 +83,6 @@ bool CAnchorTag::Open(const std::vector& arSelectors
return true;
}
-template<>
void CAnchorTag::Close(const NSCSS::CNode& oTagNode)
{
if (!Valid())
@@ -93,7 +91,6 @@ void CAnchorTag::Close(const NSCSS::CNode& oTagNode)
m_pWriter->ClearHyperlinkData();
}
-template<>
bool CAbbrTag::Open(const std::vector& arSelectors)
{
if(!Valid())
@@ -116,7 +113,6 @@ bool CAbbrTag::Open(const std::vector& arSelectors)
return true;
}
-template<>
void CAbbrTag::Close()
{
if (!Valid())
@@ -125,7 +121,6 @@ void CAbbrTag::Close()
m_pWriter->GetCurrentDocument()->WriteString(L"");
}
-template<>
bool CBreakTag::Read(const NSCSS::CNode& oTagNode)
{
if (!Valid())
@@ -437,7 +432,6 @@ bool CImageTag::ReadSVG(const std::vector& arSelecto
return true;
}
-template<>
bool CFontTag::Apply(const NSCSS::CNode& oTagNode, size_t unLevel)
{
if (!Valid())
@@ -473,7 +467,6 @@ bool CFontTag::Apply(const NSCSS::CNode& oTagNode, size_t unLevel)
return true;
}
-template<>
bool CInputTag::Read(const std::vector& arSelectors)
{
if (!Valid())
@@ -503,7 +496,6 @@ bool CInputTag::Read(const std::vector& arSelectors)
return true;
}
-template<>
bool CBaseFontTag::Apply(const NSCSS::CNode& oTagNode)
{
if (!Valid())
@@ -728,7 +720,6 @@ bool CHorizontalRuleTag::Write(const std::vector& ar
}
-template<>
bool CListTag::Open(const NSCSS::CNode& oTagNode)
{
if (!Valid())
@@ -772,7 +763,6 @@ bool CListTag::Open(const NSCSS::CNode& oTagNode)
return true;
}
-template<>
void CListTag::Close()
{
if (!Valid())
@@ -781,13 +771,11 @@ void CListTag::Close()
m_pWriter->CloseP();
}
-template<>
bool CListElementTag::Open()
{
return Valid();
}
-template<>
void CListElementTag::Close()
{
if (!Valid())
@@ -1145,7 +1133,6 @@ std::wstring CalculateSidesToClean(UINT unColumnNumber, const std::vector
bool CHTMLTag::Apply(const NSCSS::CNode& oTagNode)
{
if (!Valid())
diff --git a/HtmlFile2/Tags/OOXMLTags.h b/HtmlFile2/Tags/OOXMLTags.h
index 99d769319f..ef0e60514d 100644
--- a/HtmlFile2/Tags/OOXMLTags.h
+++ b/HtmlFile2/Tags/OOXMLTags.h
@@ -9,45 +9,77 @@
namespace HTML
{
-template<>
-bool CAnchorTag::Open(const std::vector& arSelectors);
-template<>
-void CAnchorTag::Close(const NSCSS::CNode& oTagNode);
-
-template<>
-bool CAbbrTag::Open(const std::vector& arSelectors);
-template<>
-void CAbbrTag::Close();
-
-template<>
-bool CBreakTag::Read(const NSCSS::CNode& oTagNode);
-
-template<>
-bool CFontTag::Apply(const NSCSS::CNode& oTagNode, size_t unLevel);
-
-template<>
-bool CInputTag::Read(const std::vector& arSelectors);
-
-template<>
-bool CBaseFontTag::Apply(const NSCSS::CNode& oTagNode);
-
-template<>
-bool CListTag::Open(const NSCSS::CNode& oTagNode);
-template<>
-void CListTag::Close();
-
-template<>
-bool CListElementTag::Open();
-template<>
-void CListElementTag::Close();
-
-template<>
-bool CHTMLTag::Apply(const NSCSS::CNode& oTagNode);
-
#define CLASS_TAG_LIGHT(class_name)\
template<>\
class C ## class_name ## Tag : public INTERFACE_TAGS::I ## class_name ## Tag, public INTERFACE_TAGS::ITag
+CLASS_TAG_LIGHT(Anchor)
+{
+public:
+ CAnchorTag(COOXMLWriter* pWriter) : INTERFACE_TAGS::ITag(pWriter) {}
+ bool Open(const std::vector& arSelectors) override;
+ void Close(const NSCSS::CNode& oTagNode) override;
+};
+
+CLASS_TAG_LIGHT(Abbr)
+{
+public:
+ CAbbrTag(COOXMLWriter* pWriter) : INTERFACE_TAGS::ITag(pWriter) {}
+ bool Open(const std::vector& arSelectors) override;
+ void Close() override;
+};
+
+CLASS_TAG_LIGHT(Break)
+{
+public:
+ CBreakTag(COOXMLWriter* pWriter) : INTERFACE_TAGS::ITag(pWriter) {}
+ bool Read(const NSCSS::CNode& oTagNode) override;
+};
+
+CLASS_TAG_LIGHT(Font)
+{
+public:
+ CFontTag(COOXMLWriter* pWriter) : INTERFACE_TAGS::ITag(pWriter) {}
+ bool Apply(const NSCSS::CNode& oTagNode, size_t unLevel) override;
+};
+
+CLASS_TAG_LIGHT(Input)
+{
+public:
+ CInputTag(COOXMLWriter* pWriter) : INTERFACE_TAGS::ITag(pWriter) {}
+ bool Read(const std::vector& arSelectors) override;
+};
+
+CLASS_TAG_LIGHT(BaseFont)
+{
+public:
+ CBaseFontTag(COOXMLWriter* pWriter) : INTERFACE_TAGS::ITag(pWriter) {}
+ bool Apply(const NSCSS::CNode& oTagNode) override;
+};
+
+CLASS_TAG_LIGHT(List)
+{
+public:
+ CListTag(COOXMLWriter* pWriter) : INTERFACE_TAGS::ITag(pWriter) {}
+ bool Open(const NSCSS::CNode& oTagNode) override;
+ void Close() override;
+};
+
+CLASS_TAG_LIGHT(ListElement)
+{
+public:
+ CListElementTag(COOXMLWriter* pWriter) : INTERFACE_TAGS::ITag(pWriter) {}
+ bool Open() override;
+ void Close() override;
+};
+
+CLASS_TAG_LIGHT(HTML)
+{
+public:
+ CHTMLTag(COOXMLWriter* pWriter) : INTERFACE_TAGS::ITag(pWriter) {}
+ bool Apply(const NSCSS::CNode& oTagNode) override;
+};
+
CLASS_TAG_LIGHT(Division)
{
std::stack m_arFootnoteIDs;