mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-04-07 13:55:33 +08:00
Refactoring
This commit is contained in:
@ -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<NSCSS::CNode>& arSelectors) = 0;
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -2,17 +2,12 @@
|
||||
#define MDWRITER_H
|
||||
|
||||
#include "IWriter.h"
|
||||
#include "../MarkdownParameters.h"
|
||||
|
||||
#include <stack>
|
||||
|
||||
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<TState> 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<NSCSS::CNode>& 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;
|
||||
|
||||
|
||||
@ -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"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><cp:coreProperties xmlns:cp=\"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:dcterms=\"http://purl.org/dc/terms/\" xmlns:dcmitype=\"http://purl.org/dc/dcmitype/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">";
|
||||
if(pParams)
|
||||
if(nullptr != m_pHTMLParameters)
|
||||
{
|
||||
if(!pParams->m_sBookTitle.empty())
|
||||
if(!m_pHTMLParameters->m_sBookTitle.empty())
|
||||
{
|
||||
sCore += L"<dc:title>";
|
||||
sCore += EncodeXmlString(pParams->m_sBookTitle);
|
||||
sCore += EncodeXmlString(m_pHTMLParameters->m_sBookTitle);
|
||||
sCore += L"</dc:title>";
|
||||
}
|
||||
if(!pParams->m_sAuthors.empty())
|
||||
if(!m_pHTMLParameters->m_sAuthors.empty())
|
||||
{
|
||||
sCore += L"<dc:creator>";
|
||||
sCore += EncodeXmlString(pParams->m_sAuthors);
|
||||
sCore += EncodeXmlString(m_pHTMLParameters->m_sAuthors);
|
||||
sCore += L"</dc:creator>";
|
||||
}
|
||||
if(!pParams->m_sGenres.empty())
|
||||
if(!m_pHTMLParameters->m_sGenres.empty())
|
||||
{
|
||||
sCore += L"<dc:subject>";
|
||||
sCore += EncodeXmlString(pParams->m_sGenres);
|
||||
sCore += EncodeXmlString(m_pHTMLParameters->m_sGenres);
|
||||
sCore += L"</dc:subject>";
|
||||
}
|
||||
if(!pParams->m_sDate.empty())
|
||||
if(!m_pHTMLParameters->m_sDate.empty())
|
||||
{
|
||||
sCore += L"<dcterms:created xsi:type=\"dcterms:W3CDTF\">";
|
||||
sCore += EncodeXmlString(pParams->m_sDate);
|
||||
sCore += EncodeXmlString(m_pHTMLParameters->m_sDate);
|
||||
sCore += L"</dcterms:created>";
|
||||
}
|
||||
if(!pParams->m_sDescription.empty())
|
||||
if(!m_pHTMLParameters->m_sDescription.empty())
|
||||
{
|
||||
sCore += L"<dc:description>";
|
||||
sCore += EncodeXmlString(pParams->m_sDescription);
|
||||
sCore += EncodeXmlString(m_pHTMLParameters->m_sDescription);
|
||||
sCore += L"</dc:description>";
|
||||
}
|
||||
if (!pParams->m_sLanguage.empty())
|
||||
if (!m_pHTMLParameters->m_sLanguage.empty())
|
||||
{
|
||||
wsCurrentLanguage = IndentifyLanguage(pParams->m_sLanguage);
|
||||
wsCurrentLanguage = IndentifyLanguage(m_pHTMLParameters->m_sLanguage);
|
||||
|
||||
sCore += L"<dc:language>";
|
||||
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"<w:rPrDefault><w:rPr>";
|
||||
@ -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"<w:style w:type=\"paragraph\" w:styleId=\"normal\" w:default=\"1\"><w:name w:val=\"Normal\"/><w:qFormat/><w:rPr><w:rFonts w:eastAsiaTheme=\"minorEastAsia\"/>";
|
||||
@ -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<NSCSS::CNode>& arSelectors)
|
||||
|
||||
@ -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 <stack>
|
||||
|
||||
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();
|
||||
|
||||
Reference in New Issue
Block a user