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;