diff --git a/HtmlFile2/HTMLParams.h b/HtmlFile2/HTMLParameters.h
similarity index 88%
rename from HtmlFile2/HTMLParams.h
rename to HtmlFile2/HTMLParameters.h
index 623a628417..22c7a8fc25 100644
--- a/HtmlFile2/HTMLParams.h
+++ b/HtmlFile2/HTMLParameters.h
@@ -1,11 +1,11 @@
-#ifndef HTMLPARAMS_H
-#define HTMLPARAMS_H
+#ifndef HTMLPARAMETERS_H
+#define HTMLPARAMETERS_H
#include
namespace HTML
{
-struct THtmlParams
+struct THTMLParameters
{
std::wstring m_sGenres; // Жанры
std::wstring m_sAuthors; // Авторы
@@ -17,7 +17,7 @@ struct THtmlParams
std::wstring m_sdocDefaults; // Стиль docDefaults
std::wstring m_sNormal; // Стиль normal
- THtmlParams() : m_bNeedPageBreakBefore(false) {}
+ THTMLParameters() : m_bNeedPageBreakBefore(false) {}
void SetNormal(const std::wstring& sStyle)
{
@@ -66,4 +66,4 @@ struct THtmlParams
};
}
-#endif // HTMLPARAMS_H
+#endif // HTMLPARAMETERS_H
diff --git a/HtmlFile2/HTMLReader.cpp b/HtmlFile2/HTMLReader.cpp
index 944251f150..97463ef988 100644
--- a/HtmlFile2/HTMLReader.cpp
+++ b/HtmlFile2/HTMLReader.cpp
@@ -170,10 +170,7 @@ inline bool TagIsUnprocessed(const std::wstring& wsTagName);
CHTMLReader::CHTMLReader()
: m_pWriter(nullptr)
-{
- // InitOOXMLTags();
- InitMDTags();
-}
+{}
CHTMLReader::~CHTMLReader()
{
@@ -181,41 +178,63 @@ CHTMLReader::~CHTMLReader()
delete m_pWriter;
}
-HRESULT CHTMLReader::ConvertFromTo(const std::wstring& wsFrom, const std::wstring& wsTo)
+void CHTMLReader::SetTempDirectory(const std::wstring& wsPath)
{
- if (nullptr == m_pWriter || !HTML2XHTML(wsFrom) || !m_oLightReader.IsValid() || !IsHTML())
- return S_FALSE;
-
- m_pWriter->Begin(wsTo, nullptr);
-
- m_sSrc = NSSystemPath::GetDirectoryName(wsFrom);
- // m_sDst = sDst;
-
- m_oLightReader.MoveToStart();
- m_oLightReader.ReadNextNode();
- ReadStyle();
-
- // Переходим в начало
- if(!m_oLightReader.MoveToStart())
- return S_FALSE;
-
- // if(oParams && oParams->m_bNeedPageBreakBefore)
- // m_internal->PageBreakBefore();
-
- ReadDocument();
-
- m_pWriter->End(wsTo);
- return S_OK;
+ m_wsTempDirectory = wsPath;
}
-void CHTMLReader::InitOOXMLTags()
+void CHTMLReader::SetCoreDirectory(const std::wstring& wsPath)
{
+ m_wsCoreDirectory = wsPath;
+}
+
+HRESULT CHTMLReader::ConvertHTML2OOXML(const std::wstring& wsPath, const std::wstring& wsDirectory, THTMLParameters* pParameters)
+{
+ InitOOXMLTags(pParameters);
+
+ m_wsDstDirectory = wsDirectory;
+
+ return ConvertHTML(wsPath, wsDirectory);
+}
+
+HRESULT CHTMLReader::ConvertHTML2Markdown(const std::wstring& wsPath, const std::wstring& wsFinalFile, TMarkdownParameters* pParameters)
+{
+ InitMDTags();
+ return ConvertHTML(wsPath, wsFinalFile);
+}
+
+void CHTMLReader::Clear()
+{
+ if (nullptr != m_pWriter)
+ delete m_pWriter;
+
+ m_mTags.clear();
+
+ m_wsTempDirectory.clear();
+ m_wsSrcDirectory .clear();
+ m_wsDstDirectory .clear();
+ m_wsBaseDirectory.clear();
+ m_wsCoreDirectory.clear();
+}
+
+void CHTMLReader::InitOOXMLTags(THTMLParameters* pParametrs)
+{
+ Clear();
+
COOXMLWriter *pWriter = new COOXMLWriter();
if (nullptr == pWriter)
return;
pWriter->SetCSSCalculator(&m_oCSSCalculator);
+ pWriter->SetHTMLParameters(pParametrs);
+
+ pWriter->SetSrcDirectory (m_wsSrcDirectory);
+ pWriter->SetDstDirectory (m_wsDstDirectory);
+ pWriter->SetTempDirectory(m_wsTempDirectory);
+ pWriter->SetBaseDirectory(m_wsBaseDirectory);
+ pWriter->SetCoreDirectory(m_wsCoreDirectory);
+
m_pWriter = pWriter;
m_mTags[HTML_TAG(A)] = std::make_shared>(pWriter);
@@ -228,7 +247,7 @@ void CHTMLReader::InitOOXMLTags()
m_mTags[HTML_TAG(BASEFONT)] = std::make_shared>(pWriter);
m_mTags[HTML_TAG(BLOCKQUOTE)] = std::make_shared>(pWriter);
m_mTags[HTML_TAG(HR)] = std::make_shared>(pWriter);
- m_mTags[HTML_TAG(UL)] = std::make_shared>(pWriter);
+ m_mTags[HTML_TAG(OL)] = std::make_shared>(pWriter);
m_mTags[HTML_TAG(LI)] = std::make_shared>(pWriter);
m_mTags[HTML_TAG(CAPTION)] = std::make_shared>(pWriter);
m_mTags[HTML_TAG(TABLE)] = std::make_shared>(pWriter);
@@ -251,6 +270,7 @@ void CHTMLReader::InitOOXMLTags()
m_mTags[HTML_TAG(BDO)] = oIgnoredTag;
m_mTags[HTML_TAG(SPAN)] = oIgnoredTag;
m_mTags[HTML_TAG(H1)] = oIgnoredTag;
+ m_mTags[HTML_TAG(CODE)] = oIgnoredTag;
}
void CHTMLReader::InitMDTags()
@@ -356,6 +376,33 @@ bool CHTMLReader::HTML2XHTML(const std::wstring& wsFileName)
return m_oLightReader.FromString(sRes);
}
+HRESULT CHTMLReader::ConvertHTML(const std::wstring& wsPath, const std::wstring& wsDirectory)
+{
+ if (nullptr == m_pWriter || !HTML2XHTML(wsPath) || !m_oLightReader.IsValid() || !IsHTML())
+ return S_FALSE;
+
+ m_pWriter->Begin(wsDirectory);
+
+ m_wsSrcDirectory = NSSystemPath::GetDirectoryName(wsPath);
+ // m_sDst = sDst;
+
+ m_oLightReader.MoveToStart();
+ m_oLightReader.ReadNextNode();
+ ReadStyle();
+
+ // Переходим в начало
+ if(!m_oLightReader.MoveToStart())
+ return S_FALSE;
+
+ // if(oParams && oParams->m_bNeedPageBreakBefore)
+ // m_internal->PageBreakBefore();
+
+ ReadDocument();
+
+ m_pWriter->End(wsDirectory);
+ return S_OK;
+}
+
void CHTMLReader::ReadStyle()
{
if(m_oLightReader.IsEmptyNode())
@@ -422,7 +469,7 @@ void CHTMLReader::ReadStyleFromNetwork()
// Стиль в сети
if(sRef.substr(0, 4) == L"http")
{
- sFName = m_sTmp + L'/' + sFName;
+ sFName = m_wsTempDirectory + L'/' + sFName;
NSNetwork::NSFileTransport::CFileDownloader oDownloadStyle(sRef, false);
oDownloadStyle.SetFilePath(sFName);
if(oDownloadStyle.DownloadSync())
@@ -433,8 +480,8 @@ void CHTMLReader::ReadStyleFromNetwork()
}
else
{
- m_oCSSCalculator.AddStylesFromFile(m_sSrc + L'/' + sFName);
- m_oCSSCalculator.AddStylesFromFile(m_sSrc + L'/' + sRef);
+ m_oCSSCalculator.AddStylesFromFile(m_wsSrcDirectory + L'/' + sFName);
+ m_oCSSCalculator.AddStylesFromFile(m_wsSrcDirectory + L'/' + sRef);
}
}
@@ -463,7 +510,7 @@ void CHTMLReader::ReadHead()
const std::wstring wsName = m_oLightReader.GetName();
// Базовый адрес
if (L"base" == wsName)
- m_sBase = GetArgumentValue(m_oLightReader, L"href");
+ m_wsBaseDirectory = GetArgumentValue(m_oLightReader, L"href");
}
m_oLightReader.MoveToElement();
diff --git a/HtmlFile2/HTMLReader.h b/HtmlFile2/HTMLReader.h
index 7947360a2f..84c6d6f34e 100644
--- a/HtmlFile2/HTMLReader.h
+++ b/HtmlFile2/HTMLReader.h
@@ -4,6 +4,9 @@
#include "../Common/3dParty/html/css/src/CCssCalculator.h"
#include "../DesktopEditor/xml/include/xmlutils.h"
+#include "HTMLParameters.h"
+#include "MarkdownParameters.h"
+
#include "Writers/IWriter.h"
#include "Tags/HTMLTags.h"
#include "Table.h"
@@ -15,11 +18,11 @@ class CHTMLReader
XmlUtils::CXmlLiteReader m_oLightReader; // SAX Reader
NSCSS::CCssCalculator m_oCSSCalculator; // Css калькулятор
- std::wstring m_sTmp; // Temp папка
- std::wstring m_sSrc; // Директория источника
- std::wstring m_sDst; // Директория назначения
- std::wstring m_sBase; // Полный базовый адрес
- std::wstring m_sCore; // Путь до корневого файла (используется для работы с Epub)
+ std::wstring m_wsTempDirectory; // Temp папка
+ std::wstring m_wsSrcDirectory; // Директория источника
+ std::wstring m_wsDstDirectory; // Директория назначения
+ std::wstring m_wsBaseDirectory; // Полный базовый адрес
+ std::wstring m_wsCoreDirectory; // Путь до корневого файла (используется для работы с Epub)
IWriter *m_pWriter;
@@ -28,17 +31,27 @@ public:
CHTMLReader();
~CHTMLReader();
- HRESULT ConvertFromTo(const std::wstring& wsFrom, const std::wstring& wsTo);
+ void SetTempDirectory(const std::wstring& wsPath);
+ void SetCoreDirectory(const std::wstring& wsPath);
+
+ HRESULT ConvertHTML2OOXML (const std::wstring& wsPath, const std::wstring& wsDirectory, THTMLParameters* pParameters = nullptr);
+ HRESULT ConvertHTML2Markdown(const std::wstring& wsPath, const std::wstring& wsFinalFile, TMarkdownParameters* pParameters = nullptr);
+
+ HRESULT ConvertMHT2OOXML (const std::wstring& sPath, const std::wstring& sDirectory, THTMLParameters* pParameters = nullptr);
+ HRESULT ConvertMHT2Markdown (const std::wstring& sPath, const std::wstring& sDirectory, TMarkdownParameters* pParameters = nullptr);
NSCSS::CCssCalculator* GetCSSCalculator();
private:
- void InitOOXMLTags();
+ void Clear();
+ void InitOOXMLTags(THTMLParameters* pParametrs = nullptr);
void InitMDTags();
bool IsHTML();
bool HTML2XHTML(const std::wstring& wsFileName);
+ HRESULT ConvertHTML(const std::wstring& wsPath, const std::wstring& wsDirectory);
+
void ReadStyle();
void ReadStyle2();
void ReadStyleFromNetwork();
diff --git a/HtmlFile2/HtmlFile2.pro b/HtmlFile2/HtmlFile2.pro
index 0c5f42e605..1e20ffe52a 100644
--- a/HtmlFile2/HtmlFile2.pro
+++ b/HtmlFile2/HtmlFile2.pro
@@ -46,9 +46,10 @@ HEADERS += htmlfile2.h \
Common.h \
./Writers/OOXMLWriter.h \
./Writers/IWriter.h \
- HTMLParams.h \
+ HTMLParameters.h \
HTMLReader.h \
./Tags/HTMLTags.h \
+ MarkdownParameters.h \
Tags/MDTags.h \
Writers/MDWriter.h \
Table.h \
diff --git a/HtmlFile2/MarkdownParameters.h b/HtmlFile2/MarkdownParameters.h
new file mode 100644
index 0000000000..9398ea983f
--- /dev/null
+++ b/HtmlFile2/MarkdownParameters.h
@@ -0,0 +1,14 @@
+#ifndef MARKDOWNPARAMETERS_H
+#define MARKDOWNPARAMETERS_H
+
+namespace HTML
+{
+struct TMarkdownParameters
+{
+ bool m_bUseAlternativeHTMLTags = false; //Использовать html теги там, где нет стандартной реализации в md(например для подчеркиваний)
+ wchar_t m_wchUnorderedList = L'-'; // Возможные варианты в md: -, +, *
+ wchar_t m_wchOrderedList = L'.'; // Возможные варианты в md: ., )
+};
+}
+
+#endif // MARKDOWNPARAMETERS_H
diff --git a/HtmlFile2/Writers/IWriter.h b/HtmlFile2/Writers/IWriter.h
index 4b1ffcda76..ec36289d41 100644
--- a/HtmlFile2/Writers/IWriter.h
+++ b/HtmlFile2/Writers/IWriter.h
@@ -2,7 +2,6 @@
#define IWRITER_H
#include "../../Common/3dParty/html/css/src/CNode.h"
-#include "HTMLParams.h"
#include "../Common.h"
namespace HTML
@@ -13,7 +12,7 @@ public:
IWriter() = default;
virtual ~IWriter() = default;
- virtual void Begin(const std::wstring& wsDst, const THtmlParams* pParams) = 0;
+ virtual void Begin(const std::wstring& wsDst) = 0;
virtual void End(const std::wstring& wsDst) = 0;
virtual bool WriteText(std::wstring wsText, const std::vector& arSelectors) = 0;
diff --git a/HtmlFile2/Writers/MDWriter.cpp b/HtmlFile2/Writers/MDWriter.cpp
index d6ad897783..a46e3c5efb 100644
--- a/HtmlFile2/Writers/MDWriter.cpp
+++ b/HtmlFile2/Writers/MDWriter.cpp
@@ -7,14 +7,14 @@
namespace HTML
{
-CMDWriter::CMDWriter(const TMDParametrs& oMDParametrs)
+CMDWriter::CMDWriter(const TMarkdownParameters& oMDParametrs)
: m_oMDParametrs(oMDParametrs)
{
m_arStates.push(TState{});
m_arStates.top().m_pCurrentDocument = &m_oDocument;
}
-void CMDWriter::Begin(const std::wstring& wsDst, const THtmlParams* pParams)
+void CMDWriter::Begin(const std::wstring& wsDst)
{
}
@@ -117,7 +117,7 @@ void CMDWriter::RevertDataOutput()
RollBackState();
}
-TMDParametrs CMDWriter::GetParametrs() const
+TMarkdownParameters CMDWriter::GetParametrs() const
{
return m_oMDParametrs;
}
diff --git a/HtmlFile2/Writers/MDWriter.h b/HtmlFile2/Writers/MDWriter.h
index 2f577842e7..7f97b08fe9 100644
--- a/HtmlFile2/Writers/MDWriter.h
+++ b/HtmlFile2/Writers/MDWriter.h
@@ -2,17 +2,12 @@
#define MDWRITER_H
#include "IWriter.h"
+#include "../MarkdownParameters.h"
+
#include
namespace HTML
{
-struct TMDParametrs
-{
- bool m_bUseAlternativeHTMLTags = false; //Использовать html теги там, где нет стандартной реализации в md(например для подчеркиваний)
- WCHAR m_wchUnorderedList = L'-'; // Возможные варианты в md: -, +, *
- WCHAR m_wchOrderedList = L'.'; // Возможные варианты в md: ., )
-};
-
class CMDWriter : public IWriter
{
XmlString m_oDocument;
@@ -37,11 +32,11 @@ class CMDWriter : public IWriter
};
std::stack m_arStates;
- TMDParametrs m_oMDParametrs;
+ TMarkdownParameters m_oMDParametrs;
public:
- CMDWriter(const TMDParametrs& oMDParametrs);
+ CMDWriter(const TMarkdownParameters& oMDParametrs);
- void Begin(const std::wstring& wsDst, const THtmlParams* pParams) override;
+ void Begin(const std::wstring& wsDst) override;
void End(const std::wstring& wsDst) override;
bool WriteText(std::wstring wsText, const std::vector& arSelectors) override;
@@ -54,7 +49,7 @@ public:
void SetDataOutput(XmlString* pOutputData) override;
void RevertDataOutput() override;
- TMDParametrs GetParametrs() const;
+ TMarkdownParameters GetParametrs() const;
void WriteString(const std::wstring& wsString, bool bSpecialString = false);
XmlString* GetCurrentDocument() const override;
diff --git a/HtmlFile2/Writers/OOXMLWriter.cpp b/HtmlFile2/Writers/OOXMLWriter.cpp
index d524981bc2..7309538d11 100644
--- a/HtmlFile2/Writers/OOXMLWriter.cpp
+++ b/HtmlFile2/Writers/OOXMLWriter.cpp
@@ -41,7 +41,10 @@ inline UINT GetFontSizeByLevel(UINT unLevel);
inline void ReplaceSpaces(std::wstring& wsValue);
COOXMLWriter::COOXMLWriter()
- : m_nFootnoteId(1), m_nHyperlinkId(1), m_nNumberingId(1), m_nId(1), m_nShapeId(1), m_bWasDivs(false), m_pFonts(nullptr)
+ : m_pDstPath(nullptr), m_pTempDir(nullptr), m_pSrcPath(nullptr),
+ m_pBasePath(nullptr), m_pCorePath(nullptr), m_pHTMLParameters(nullptr),
+ m_nFootnoteId(1), m_nHyperlinkId(1), m_nNumberingId(1), m_nId(1),
+ m_nShapeId(1), m_bWasDivs(false), m_pFonts(nullptr)
{
m_oPageData.SetWidth (DEFAULT_PAGE_WIDTH, NSCSS::UnitMeasure::Twips, 0, true);
m_oPageData.SetHeight(DEFAULT_PAGE_HEIGHT, NSCSS::UnitMeasure::Twips, 0, true);
@@ -58,7 +61,37 @@ void COOXMLWriter::SetCSSCalculator(NSCSS::CCssCalculator* pCSSCalculator)
m_pStylesCalculator = pCSSCalculator;
}
-void COOXMLWriter::Begin(const std::wstring& wsDst, const THtmlParams* pParams)
+void COOXMLWriter::SetHTMLParameters(THTMLParameters* pHTMLParameters)
+{
+ m_pHTMLParameters = pHTMLParameters;
+}
+
+void COOXMLWriter::SetSrcDirectory(const std::wstring& wsPath)
+{
+ m_pSrcPath = &wsPath;
+}
+
+void COOXMLWriter::SetDstDirectory(const std::wstring& wsPath)
+{
+ m_pDstPath = &wsPath;
+}
+
+void COOXMLWriter::SetTempDirectory(const std::wstring& wsPath)
+{
+ m_pTempDir = &wsPath;
+}
+
+void COOXMLWriter::SetBaseDirectory(const std::wstring& wsPath)
+{
+ m_pBasePath = &wsPath;
+}
+
+void COOXMLWriter::SetCoreDirectory(const std::wstring& wsPath)
+{
+ m_pCorePath = &wsPath;
+}
+
+void COOXMLWriter::Begin(const std::wstring& wsDst)
{
// Создаем пустые папки
NSDirectory::CreateDirectory(wsDst + L"/_rels");
@@ -152,41 +185,41 @@ void COOXMLWriter::Begin(const std::wstring& wsDst, const THtmlParams* pParams)
// core.xml
std::wstring sCore = L"";
- if(pParams)
+ if(nullptr != m_pHTMLParameters)
{
- if(!pParams->m_sBookTitle.empty())
+ if(!m_pHTMLParameters->m_sBookTitle.empty())
{
sCore += L"";
- sCore += EncodeXmlString(pParams->m_sBookTitle);
+ sCore += EncodeXmlString(m_pHTMLParameters->m_sBookTitle);
sCore += L"";
}
- if(!pParams->m_sAuthors.empty())
+ if(!m_pHTMLParameters->m_sAuthors.empty())
{
sCore += L"";
- sCore += EncodeXmlString(pParams->m_sAuthors);
+ sCore += EncodeXmlString(m_pHTMLParameters->m_sAuthors);
sCore += L"";
}
- if(!pParams->m_sGenres.empty())
+ if(!m_pHTMLParameters->m_sGenres.empty())
{
sCore += L"";
- sCore += EncodeXmlString(pParams->m_sGenres);
+ sCore += EncodeXmlString(m_pHTMLParameters->m_sGenres);
sCore += L"";
}
- if(!pParams->m_sDate.empty())
+ if(!m_pHTMLParameters->m_sDate.empty())
{
sCore += L"";
- sCore += EncodeXmlString(pParams->m_sDate);
+ sCore += EncodeXmlString(m_pHTMLParameters->m_sDate);
sCore += L"";
}
- if(!pParams->m_sDescription.empty())
+ if(!m_pHTMLParameters->m_sDescription.empty())
{
sCore += L"";
- sCore += EncodeXmlString(pParams->m_sDescription);
+ sCore += EncodeXmlString(m_pHTMLParameters->m_sDescription);
sCore += L"";
}
- if (!pParams->m_sLanguage.empty())
+ if (!m_pHTMLParameters->m_sLanguage.empty())
{
- wsCurrentLanguage = IndentifyLanguage(pParams->m_sLanguage);
+ wsCurrentLanguage = IndentifyLanguage(m_pHTMLParameters->m_sLanguage);
sCore += L"";
sCore += wsCurrentLanguage;
@@ -220,8 +253,8 @@ void COOXMLWriter::Begin(const std::wstring& wsDst, const THtmlParams* pParams)
m_nId += 7;
// docDefaults по умолчанию
- if(pParams && !pParams->m_sdocDefaults.empty())
- m_oStylesXml += pParams->m_sdocDefaults;
+ if(m_pHTMLParameters && !m_pHTMLParameters->m_sdocDefaults.empty())
+ m_oStylesXml += m_pHTMLParameters->m_sdocDefaults;
else
{
m_oStylesXml += L"";
@@ -234,8 +267,8 @@ void COOXMLWriter::Begin(const std::wstring& wsDst, const THtmlParams* pParams)
}
// normal по умолчанию
- if(pParams && !pParams->m_sNormal.empty())
- m_oStylesXml += pParams->m_sNormal;
+ if(m_pHTMLParameters && !m_pHTMLParameters->m_sNormal.empty())
+ m_oStylesXml += m_pHTMLParameters->m_sNormal;
else
{
m_oStylesXml += L"";
@@ -1136,27 +1169,27 @@ NSFonts::IApplicationFonts* COOXMLWriter::GetFonts()
std::wstring COOXMLWriter::GetMediaDir() const
{
- return m_wsDstPath + L"/word/media/";
+ return ((nullptr != m_pDstPath) ? *m_pDstPath : std::wstring()) + L"/word/media/";
}
std::wstring COOXMLWriter::GetTempDir() const
{
- return m_wsTempDir;
+ return (nullptr != m_pTempDir) ? *m_pTempDir : std::wstring();
}
std::wstring COOXMLWriter::GetSrcPath() const
{
- return m_wsSrcPath;
+ return (nullptr != m_pSrcPath) ? *m_pSrcPath : std::wstring();
}
std::wstring COOXMLWriter::GetBasePath() const
{
- return m_wsBasePath;
+ return (nullptr != m_pBasePath) ? *m_pBasePath : std::wstring();
}
std::wstring COOXMLWriter::GetCorePath() const
{
- return m_wsCorePath;
+ return (nullptr != m_pCorePath) ? *m_pCorePath : std::wstring();
}
inline bool ElementInTable(const std::vector& arSelectors)
diff --git a/HtmlFile2/Writers/OOXMLWriter.h b/HtmlFile2/Writers/OOXMLWriter.h
index d90b3b406c..0f0177c361 100644
--- a/HtmlFile2/Writers/OOXMLWriter.h
+++ b/HtmlFile2/Writers/OOXMLWriter.h
@@ -1,11 +1,11 @@
#ifndef OOXMLWRITER_H
#define OOXMLWRITER_H
-// #include "HTMLInterpretator.h"
-
#include "../../Common/3dParty/html/css/src/xhtml/CDocumentStyle.h"
#include "../../Common/3dParty/html/css/src/CCssCalculator.h"
+#include "../HTMLParameters.h"
#include "IWriter.h"
+
#include
namespace NSFonts { class IApplicationFonts; }
@@ -39,11 +39,11 @@ struct TImageData
class COOXMLWriter : public IWriter
{
- std::wstring m_wsDstPath; // Директория назначения
- std::wstring m_wsTempDir; // Temp папка
- std::wstring m_wsSrcPath; // Директория источника
- std::wstring m_wsBasePath; // Полный базовый адрес
- std::wstring m_wsCorePath; // Путь до корневого файла (используется для работы с Epub)
+ const std::wstring *m_pDstPath; // Директория назначения
+ const std::wstring *m_pTempDir; // Temp папка
+ const std::wstring *m_pSrcPath; // Директория источника
+ const std::wstring *m_pBasePath; // Полный базовый адрес
+ const std::wstring *m_pCorePath; // Путь до корневого файла (используется для работы с Epub)
XmlString m_oStylesXml; // styles.xml
XmlString m_oDocXmlRels; // document.xml.rels
@@ -57,6 +57,7 @@ class COOXMLWriter : public IWriter
NSCSS::NSProperties::CPage m_oPageData; // Стили страницы
NSCSS::CCssCalculator *m_pStylesCalculator;
+ THTMLParameters *m_pHTMLParameters;
struct TState
{
@@ -72,15 +73,11 @@ class COOXMLWriter : public IWriter
XmlString *m_pCurrentDocument; //Текущее место записи
bool m_bRemoveCurrentDocument;
- // std::wstring m_wsNote;
-
- // HtmlTag m_eLastElement;
-
TState()
: m_bInP(false), m_bInR(false), m_bInT(false),
m_bWasPStyle(false), m_bWasSpace(true), m_bInHyperlink(false),
m_bBanUpdatePageData(false), m_pCurrentDocument(nullptr),
- m_bRemoveCurrentDocument(false)/*, m_eLastElement(HTML_TAG(UNKNOWN))*/
+ m_bRemoveCurrentDocument(false)
{}
~TState()
@@ -117,8 +114,15 @@ public:
COOXMLWriter();
void SetCSSCalculator(NSCSS::CCssCalculator* pCSSCalculator);
+ void SetHTMLParameters(THTMLParameters* pHTMLParameters);
- void Begin(const std::wstring& wsDst, const THtmlParams* pParams) override;
+ void SetSrcDirectory (const std::wstring& wsPath);
+ void SetDstDirectory (const std::wstring& wsPath);
+ void SetTempDirectory(const std::wstring& wsPath);
+ void SetBaseDirectory(const std::wstring& wsPath);
+ void SetCoreDirectory(const std::wstring& wsPath);
+
+ void Begin(const std::wstring& wsDst) override;
void End(const std::wstring& wsDst) override;
bool OpenP();
diff --git a/HtmlFile2/htmlfile2.cpp b/HtmlFile2/htmlfile2.cpp
index 5e5939731a..73d286c874 100644
--- a/HtmlFile2/htmlfile2.cpp
+++ b/HtmlFile2/htmlfile2.cpp
@@ -5012,6 +5012,8 @@ CHtmlFile2::CHtmlFile2()
{
#ifdef USE_OLD_HTML_CONVERTER
m_internal = new CHtmlFile2_Private();
+ #else
+ m_pReader = new HTML::CHTMLReader();
#endif
}
@@ -5019,37 +5021,37 @@ CHtmlFile2::~CHtmlFile2()
{
#ifdef USE_OLD_HTML_CONVERTER
RELEASEOBJECT(m_internal);
+ #else
+ RELEASEOBJECT(m_pReader);
#endif
}
+#ifdef USE_OLD_HTML_CONVERTER
bool CHtmlFile2::IsHtmlFile(const std::wstring& sFile)
{
- #ifdef USE_OLD_HTML_CONVERTER
// Конвертируем в xhtml
if(!m_internal->htmlXhtml(sFile))
return false;
// Читаем html
return m_internal->isHtml();
- #endif
- return true;
}
bool CHtmlFile2::IsMhtFile(const std::wstring& sFile)
{
- #ifdef USE_OLD_HTML_CONVERTER
// Конвертируем в xhtml
if(!m_internal->mhtXhtml(sFile))
return false;
// Читаем html
return m_internal->isHtml();
- #endif
- return true;
}
+#endif
-void CHtmlFile2::SetTmpDirectory(const std::wstring& sFolder)
+void CHtmlFile2::SetTempDirectory(const std::wstring& wsFolder)
{
#ifdef USE_OLD_HTML_CONVERTER
- m_internal->m_sTmp = NSSystemPath::NormalizePath(sFolder);
+ m_internal->m_sTmp = NSSystemPath::NormalizePath(wsFolder);
+ #else
+ m_pReader->SetTempDirectory(wsFolder);
#endif
}
@@ -5057,37 +5059,54 @@ void CHtmlFile2::SetCoreDirectory(const std::wstring& wsFolder)
{
#ifdef USE_OLD_HTML_CONVERTER
m_internal->m_sCore = NSSystemPath::NormalizePath(wsFolder);
+ #else
+ m_pReader->SetCoreDirectory(wsFolder);
#endif
}
-HRESULT CHtmlFile2::OpenHtml(const std::wstring& sSrc, const std::wstring& sDst, CHtmlParams* oParams)
+HRESULT CHtmlFile2::ConvertHTML2OOXML(const std::wstring& wsPath, const std::wstring& wsDirectory, HTML::THTMLParameters* pParametrs)
{
- #ifdef USE_OLD_HTML_CONVERTER
+ #ifndef USE_OLD_HTML_CONVERTER
+ if (nullptr == m_pReader)
+ return S_FALSE;
+
+ return m_pReader->ConvertHTML2OOXML(wsPath, wsDirectory, pParametrs);
+ #else
if(!m_internal->m_oLightReader.IsValid())
if(!IsHtmlFile(sSrc))
return S_FALSE;
m_internal->m_sSrc = NSSystemPath::GetDirectoryName(sSrc);
m_internal->m_sDst = sDst;
- m_internal->CreateDocxEmpty(oParams);
+ m_internal->CreateDocxEmpty(pParametrs);
m_internal->readStyle();
// Переходим в начало
if(!m_internal->m_oLightReader.MoveToStart())
return S_FALSE;
- if(oParams && oParams->m_bNeedPageBreakBefore)
+ if(pParametrs && pParametrs->m_bNeedPageBreakBefore)
m_internal->PageBreakBefore();
+
m_internal->readSrc();
m_internal->write();
return S_OK;
- #else
- HTML::CHTMLReader oHTMLReader;
- return oHTMLReader.ConvertFromTo(sSrc, sDst);
#endif
}
-HRESULT CHtmlFile2::OpenMht(const std::wstring& sSrc, const std::wstring& sDst, CHtmlParams* oParams)
+HRESULT CHtmlFile2::ConvertHTML2Markdown(const std::wstring& wsPath, const std::wstring& wsFinalFile, HTML::TMarkdownParameters* pParametrs)
+{
+ #ifdef USE_OLD_HTML_CONVERTER
+ return S_FALSE;
+ #else
+ if (nullptr == m_pReader)
+ return S_FALSE;
+
+ return m_pReader->ConvertHTML2Markdown(wsPath, wsFinalFile, pParametrs);
+ #endif
+}
+
+HRESULT CHtmlFile2::OpenMht(const std::wstring& sSrc, const std::wstring& sDst)
{
#ifdef USE_OLD_HTML_CONVERTER
if(!m_internal->m_oLightReader.IsValid())
@@ -5113,7 +5132,7 @@ HRESULT CHtmlFile2::OpenMht(const std::wstring& sSrc, const std::wstring& sDst,
#endif
}
-HRESULT CHtmlFile2::OpenBatchHtml(const std::vector& sSrc, const std::wstring& sDst, CHtmlParams* oParams)
+HRESULT CHtmlFile2::OpenBatchHtml(const std::vector& sSrc, const std::wstring& sDst)
{
#ifdef USE_OLD_HTML_CONVERTER
m_internal->m_sDst = sDst;
diff --git a/HtmlFile2/htmlfile2.h b/HtmlFile2/htmlfile2.h
index 4b9c5fa179..85a4c21aa4 100644
--- a/HtmlFile2/htmlfile2.h
+++ b/HtmlFile2/htmlfile2.h
@@ -5,6 +5,9 @@
#include
#include "../DesktopEditor/common/Types.h"
+#include "HTMLParameters.h"
+#include "MarkdownParameters.h"
+
#ifndef HTMLFILE2_USE_DYNAMIC_LIBRARY
#define HTMLFILE2_DECL_EXPORT
#else
@@ -12,84 +15,46 @@
#define HTMLFILE2_DECL_EXPORT Q_DECL_EXPORT
#endif
-struct CHtmlParams
-{
- std::wstring m_sGenres; // Жанры
- std::wstring m_sAuthors; // Авторы
- std::wstring m_sBookTitle; // Название
- std::wstring m_sDate; // Дата
- std::wstring m_sDescription; // описание
- std::wstring m_sLanguage; // Язык
- bool m_bNeedPageBreakBefore; // Новый html с новой страницы
- std::wstring m_sdocDefaults; // Стиль docDefaults
- std::wstring m_sNormal; // Стиль normal
-
- CHtmlParams() : m_bNeedPageBreakBefore(false) {}
-
- void SetNormal(const std::wstring& sStyle)
- {
- m_sNormal = sStyle;
- }
-
- void SetDocDefaults(const std::wstring& sStyle)
- {
- m_sdocDefaults = sStyle;
- }
-
- void SetPageBreakBefore(bool bNeed)
- {
- m_bNeedPageBreakBefore = bNeed;
- }
-
- void SetDate(const std::wstring& sDate)
- {
- m_sDate = sDate;
- }
-
- void SetDescription(const std::wstring& sDescription)
- {
- m_sDescription = sDescription;
- }
-
- void SetGenres(const std::wstring& sGenres)
- {
- m_sGenres = sGenres;
- }
-
- void SetAuthors(const std::wstring& sAuthors)
- {
- m_sAuthors = sAuthors;
- }
-
- void SetTitle(const std::wstring& sTitle)
- {
- m_sBookTitle = sTitle;
- }
-
- void SetLanguage(const std::wstring& sLanguage)
- {
- m_sLanguage = sLanguage;
- }
-};
-
+#ifdef USE_OLD_HTML_CONVERTER
class CHtmlFile2_Private;
+#else
+namespace HTML { class CHTMLReader; }
+#endif
+
class HTMLFILE2_DECL_EXPORT CHtmlFile2
{
private:
#ifdef USE_OLD_HTML_CONVERTER
CHtmlFile2_Private* m_internal;
+ #else
+ HTML::CHTMLReader* m_pReader;
#endif
public:
CHtmlFile2();
~CHtmlFile2();
- bool IsHtmlFile(const std::wstring& sFile);
- bool IsMhtFile (const std::wstring& sFile);
- void SetTmpDirectory(const std::wstring& sFolder);
+ #ifdef USE_OLD_HTML_CONVERTER
+ bool IsHtmlFile(const std::wstring& wsFile);
+ bool IsMhtFile (const std::wstring& wsFile);
+ #endif
+
+ void SetTempDirectory(const std::wstring& wsFolder);
void SetCoreDirectory(const std::wstring& wsFolder);
- HRESULT OpenHtml(const std::wstring& sPath, const std::wstring& sDirectory, CHtmlParams* oParams = NULL);
- HRESULT OpenMht (const std::wstring& sPath, const std::wstring& sDirectory, CHtmlParams* oParams = NULL);
- HRESULT OpenBatchHtml(const std::vector& sPath, const std::wstring& sDirectory, CHtmlParams* oParams = NULL);
+
+ HRESULT ConvertHTML2OOXML (const std::wstring& wsPath, const std::wstring& wsDirectory, HTML::THTMLParameters* pParametrs = nullptr);
+ HRESULT ConvertHTML2Markdown(const std::wstring& wsPath, const std::wstring& wsFinalFile, HTML::TMarkdownParameters* pParametrs = nullptr);
+
+ HRESULT ConvertMHT2OOXML (const std::wstring& sPath, const std::wstring& sDirectory, HTML::THTMLParameters* pParametrs = nullptr);
+ HRESULT ConvertMHT2Markdown (const std::wstring& sPath, const std::wstring& sDirectory, HTML::TMarkdownParameters* pParametrs = nullptr);
+
+ HRESULT ConvertHTML2OOXML (const std::vector& arPaths, const std::wstring& wsDirectory, HTML::THTMLParameters* pParametrs = nullptr);
+ HRESULT ConvertHTML2Markdown(const std::vector& arPaths, const std::wstring& wsDirectory, HTML::TMarkdownParameters* pParametrs = nullptr);
+
+ HRESULT ConvertMHT2OOXML (const std::vector& arPaths, const std::wstring& wsDirectory, HTML::THTMLParameters* pParametrs = nullptr);
+ HRESULT ConvertMHT2Markdown (const std::vector& arPaths, const std::wstring& wsDirectory, HTML::TMarkdownParameters* pParametrs = nullptr);
+
+ HRESULT OpenMht (const std::wstring& sPath, const std::wstring& sDirectory);
+ HRESULT OpenBatchHtml(const std::vector& sPath, const std::wstring& sDirectory);
};
#endif // _HTMLFILE2_HTMLFILE2_H