mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-04-07 13:55:33 +08:00
read tags
This commit is contained in:
@ -9,7 +9,7 @@
|
|||||||
body { text-align: center; padding:0pt; margin: 0pt; }
|
body { text-align: center; padding:0pt; margin: 0pt; }
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body><input type="radio" id="mothman" name="monster"/><label for="kraken">Kraken</label><input type="radio" id="mothman" name="monster"/><label for="kraken">Kraken</label>надо<hr/>надо<hr/>надо<hr/>надо<h1>Beetles</h1>надо
|
<body><option value="value1">Значение 1</option><option value="value1">Значение 1</option><input type="radio" id="mothman" name="monster"/><label for="kraken">Kraken</label><input type="radio" id="mothman" name="monster"/><label for="kraken">Kraken</label>надо<hr/>надо<hr/>надо<hr/>надо<h1>Beetles</h1>надо
|
||||||
<h2>External morphology</h2>надо
|
<h2>External morphology</h2>надо
|
||||||
<h3>Head</h3>надо
|
<h3>Head</h3>надо
|
||||||
<h4>Mouthparts</h4>надо
|
<h4>Mouthparts</h4>надо
|
||||||
|
|||||||
@ -487,7 +487,7 @@ private:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void readStream(std::vector<std::string>& sSelectors, std::wstring sRStyle, bool bBdo, bool bNeedLi, int nLevelLi)
|
void readStream(std::vector<std::string>& sSelectors, std::wstring sRStyle, bool bBdo, bool bNeedLi, int nLevelLi, bool& bWasP)
|
||||||
{
|
{
|
||||||
if(m_oLightReader.IsEmptyNode())
|
if(m_oLightReader.IsEmptyNode())
|
||||||
return;
|
return;
|
||||||
@ -510,41 +510,58 @@ private:
|
|||||||
m_oDocXml += L"</w:rPr><w:t xml:space=\"preserve\">";
|
m_oDocXml += L"</w:rPr><w:t xml:space=\"preserve\">";
|
||||||
m_oDocXml.WriteEncodeXmlString(sText);
|
m_oDocXml.WriteEncodeXmlString(sText);
|
||||||
m_oDocXml += L"</w:t></w:r>";
|
m_oDocXml += L"</w:t></w:r>";
|
||||||
|
bWasP = false;
|
||||||
}
|
}
|
||||||
// Ссылки
|
// Ссылки
|
||||||
else if(sName == L"a")
|
else if(sName == L"a")
|
||||||
readLink(sSubClass, sRStyle, bBdo, bNeedLi, nLevelLi);
|
readLink(sSubClass, sRStyle, bBdo, bNeedLi, nLevelLi, bWasP);
|
||||||
// Абревиатура, реализована как сноски
|
// Абревиатура, реализована как сноски
|
||||||
else if(sName == L"abbr")
|
else if(sName == L"abbr")
|
||||||
readAbbr(sSubClass, sRStyle, bBdo);
|
readAbbr(sSubClass, sRStyle, bBdo);
|
||||||
// Адрес
|
// Адрес
|
||||||
else if(sName == L"address")
|
else if(sName == L"address")
|
||||||
{
|
{
|
||||||
m_oDocXml += L"</w:p><w:p>";
|
if(!bWasP)
|
||||||
readStream(sSubClass, sRStyle + L"<w:i/>", bBdo, bNeedLi, nLevelLi);
|
{
|
||||||
m_oDocXml += L"</w:p><w:p>";
|
m_oDocXml += L"</w:p><w:p>";
|
||||||
|
bWasP = true;
|
||||||
|
}
|
||||||
|
readStream(sSubClass, sRStyle + L"<w:i/>", bBdo, bNeedLi, nLevelLi, bWasP);
|
||||||
|
if(!bWasP)
|
||||||
|
{
|
||||||
|
m_oDocXml += L"</w:p><w:p>";
|
||||||
|
bWasP = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// Статья
|
// Статья
|
||||||
// Боковой блок
|
// Боковой блок
|
||||||
// Выделенная цитата
|
// Выделенная цитата
|
||||||
// Скрытая информация
|
// Скрытая информация
|
||||||
// Контейнер
|
// Контейнер
|
||||||
else if(sName == L"article" || sName == L"aside" || sName == L"blockquote" ||
|
|
||||||
sName == L"details" || sName == L"div" || sName == L"summary")
|
|
||||||
{
|
|
||||||
m_oDocXml += L"</w:p><w:p>";
|
|
||||||
readStream(sSubClass, sRStyle, bBdo, bNeedLi, nLevelLi);
|
|
||||||
}
|
|
||||||
// Заголовок скрытой информации
|
// Заголовок скрытой информации
|
||||||
else if(sName == L"dl")
|
// ...
|
||||||
|
else if(sName == L"article" || sName == L"aside" || sName == L"blockquote" || sName == L"details" || sName == L"div" ||
|
||||||
|
sName == L"summary" || sName == L"dl" || sName == L"filedset" || sName == L"figure" || sName == L"figcaption" ||
|
||||||
|
sName == L"footer" || sName == L"form" || sName == L"header")
|
||||||
{
|
{
|
||||||
m_oDocXml += L"</w:p><w:p>";
|
if(!bWasP)
|
||||||
readStream(sSubClass, sRStyle, bBdo, bNeedLi, nLevelLi);
|
{
|
||||||
m_oDocXml += L"</w:p><w:p>";
|
m_oDocXml += L"</w:p><w:p>";
|
||||||
|
bWasP = true;
|
||||||
|
}
|
||||||
|
readStream(sSubClass, sRStyle, bBdo, bNeedLi, nLevelLi, bWasP);
|
||||||
|
if(!bWasP)
|
||||||
|
{
|
||||||
|
m_oDocXml += L"</w:p><w:p>";
|
||||||
|
bWasP = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// Полужирный текст
|
// Полужирный текст
|
||||||
else if(sName == L"b")
|
else if(sName == L"b")
|
||||||
|
{
|
||||||
readP(sSubClass, sRStyle + L"<w:b/>", bBdo);
|
readP(sSubClass, sRStyle + L"<w:b/>", bBdo);
|
||||||
|
bWasP = false;
|
||||||
|
}
|
||||||
// Направление текста
|
// Направление текста
|
||||||
else if(sName == L"bdo")
|
else if(sName == L"bdo")
|
||||||
{
|
{
|
||||||
@ -558,65 +575,115 @@ private:
|
|||||||
readP(sSubClass, sRStyle, true);
|
readP(sSubClass, sRStyle, true);
|
||||||
else
|
else
|
||||||
readP(sSubClass, sRStyle, false);
|
readP(sSubClass, sRStyle, false);
|
||||||
|
bWasP = false;
|
||||||
}
|
}
|
||||||
// Отмена направления текста
|
// Отмена направления текста
|
||||||
else if(sName == L"bdi")
|
else if(sName == L"bdi")
|
||||||
|
{
|
||||||
readP(sSubClass, sRStyle, false);
|
readP(sSubClass, sRStyle, false);
|
||||||
|
bWasP = false;
|
||||||
|
}
|
||||||
// Перенос строки
|
// Перенос строки
|
||||||
else if(sName == L"br")
|
else if(sName == L"br")
|
||||||
|
{
|
||||||
m_oDocXml += L"<w:r><w:br/></w:r>";
|
m_oDocXml += L"<w:r><w:br/></w:r>";
|
||||||
|
bWasP = false;
|
||||||
|
}
|
||||||
// Кнопка
|
// Кнопка
|
||||||
// Данные
|
// Данные
|
||||||
// Подпись
|
// Подпись
|
||||||
else if(sName == L"button" || sName == L"data" || sName == L"label")
|
else if(sName == L"button" || sName == L"data" || sName == L"label")
|
||||||
|
{
|
||||||
readP(sSubClass, sRStyle, bBdo);
|
readP(sSubClass, sRStyle, bBdo);
|
||||||
|
bWasP = false;
|
||||||
|
}
|
||||||
// Цитата, обычно выделяется курсивом
|
// Цитата, обычно выделяется курсивом
|
||||||
// Новый термин, обычно выделяется курсивом
|
// Новый термин, обычно выделяется курсивом
|
||||||
else if(sName == L"cite" || sName == L"dfn")
|
else if(sName == L"cite" || sName == L"dfn")
|
||||||
|
{
|
||||||
readP(sSubClass, sRStyle + L"<w:i/>", bBdo);
|
readP(sSubClass, sRStyle + L"<w:i/>", bBdo);
|
||||||
|
bWasP = false;
|
||||||
|
}
|
||||||
// Код
|
// Код
|
||||||
else if(sName == L"code")
|
else if(sName == L"code")
|
||||||
|
{
|
||||||
readP(sSubClass, sRStyle + L"<w:rFonts w:ascii=\"Consolas\" w:hAnsi=\"Consolas\"/>", bBdo);
|
readP(sSubClass, sRStyle + L"<w:rFonts w:ascii=\"Consolas\" w:hAnsi=\"Consolas\"/>", bBdo);
|
||||||
|
bWasP = false;
|
||||||
|
}
|
||||||
// Зачеркнутый текст
|
// Зачеркнутый текст
|
||||||
else if(sName == L"del")
|
else if(sName == L"del")
|
||||||
readP(sSubClass, sRStyle + L"<w:strike/>", bBdo);
|
readStream(sSubClass, sRStyle + L"<w:strike/>", bBdo, bNeedLi, nLevelLi, bWasP);
|
||||||
// Акцентированный текст
|
// Акцентированный текст
|
||||||
else if(sName == L"em")
|
else if(sName == L"em")
|
||||||
readStream(sSubClass, sRStyle + L"<w:i/>", bBdo, bNeedLi, nLevelLi);
|
readStream(sSubClass, sRStyle + L"<w:i/>", bBdo, bNeedLi, nLevelLi, bWasP);
|
||||||
// Абзац текста. Содержит фразовый контент
|
|
||||||
else if(sName == L"p")
|
|
||||||
{
|
|
||||||
m_oDocXml += L"</w:p><w:p>";
|
|
||||||
readP(sSubClass, sRStyle, bBdo);
|
|
||||||
m_oDocXml += L"</w:p><w:p>";
|
|
||||||
}
|
|
||||||
// Заголовок
|
// Заголовок
|
||||||
else if(sName == L"h1" || sName == L"h2" || sName == L"h3" || sName == L"h4" || sName == L"h5" || sName == L"h6")
|
else if(sName == L"h1" || sName == L"h2" || sName == L"h3" || sName == L"h4" || sName == L"h5" || sName == L"h6")
|
||||||
{
|
{
|
||||||
m_oDocXml += L"</w:p><w:p><w:pPr><w:pStyle w:val=\"";
|
if(!bWasP)
|
||||||
|
{
|
||||||
|
m_oDocXml += L"</w:p><w:p>";
|
||||||
|
bWasP = true;
|
||||||
|
}
|
||||||
|
m_oDocXml += L"<w:pPr><w:pStyle w:val=\"";
|
||||||
m_oDocXml += sName;
|
m_oDocXml += sName;
|
||||||
m_oDocXml += L"\"/></w:pPr>";
|
m_oDocXml += L"\"/></w:pPr>";
|
||||||
readStream(sSubClass, sRStyle, bBdo, bNeedLi, nLevelLi);
|
readStream(sSubClass, sRStyle, bBdo, bNeedLi, nLevelLi, bWasP);
|
||||||
m_oDocXml += L"</w:p><w:p>";
|
if(!bWasP)
|
||||||
|
{
|
||||||
|
m_oDocXml += L"</w:p><w:p>";
|
||||||
|
bWasP = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// Горизонтальная линия
|
// Горизонтальная линия
|
||||||
else if(sName == L"hr")
|
else if(sName == L"hr")
|
||||||
m_oDocXml += L"</w:p><w:p><w:pPr><w:pBdr><w:bottom w:val=\"single\" w:color=\"000000\" w:sz=\"8\" w:space=\"0\"/></w:pBdr></w:pPr></w:p><w:p>";
|
{
|
||||||
|
if(!bWasP)
|
||||||
|
{
|
||||||
|
m_oDocXml += L"</w:p><w:p>";
|
||||||
|
bWasP = true;
|
||||||
|
}
|
||||||
|
m_oDocXml += L"<w:pPr><w:pBdr><w:bottom w:val=\"single\" w:color=\"000000\" w:sz=\"8\" w:space=\"0\"/></w:pBdr></w:pPr></w:p><w:p>";
|
||||||
|
bWasP = true;
|
||||||
|
}
|
||||||
// Картинки
|
// Картинки
|
||||||
else if(sName == L"img" || sName == L"image")
|
else if(sName == L"img" || sName == L"image")
|
||||||
|
{
|
||||||
readImage();
|
readImage();
|
||||||
|
bWasP = false;
|
||||||
|
}
|
||||||
|
// Абзац текста. Содержит фразовый контент
|
||||||
|
else if(sName == L"p")
|
||||||
|
{
|
||||||
|
if(!bWasP)
|
||||||
|
{
|
||||||
|
m_oDocXml += L"</w:p><w:p>";
|
||||||
|
bWasP = true;
|
||||||
|
}
|
||||||
|
readP(sSubClass, sRStyle, bBdo);
|
||||||
|
m_oDocXml += L"</w:p><w:p>";
|
||||||
|
bWasP = true;
|
||||||
|
}
|
||||||
// Маркированный список
|
// Маркированный список
|
||||||
else if(sName == L"ul")
|
else if(sName == L"ul")
|
||||||
readUl(sSubClass, sRStyle, bBdo, nLevelLi);
|
readUl(sSubClass, sRStyle, bBdo, nLevelLi, bWasP);
|
||||||
// Игнорируемые, но с отступом
|
// Игнорируемые
|
||||||
else if(sName == L"dd" ||sName == L"dt" ||sName == L"fieldset" || sName == L"legend")
|
else if(sName == L"audio" || sName == L"canvas" || sName == L"command" || sName == L"datalist" || sName == L"embed" ||
|
||||||
{
|
sName == L"input" )
|
||||||
m_oDocXml += L"</w:p><w:p>";
|
readStream(sSubClass, sRStyle, bBdo, bNeedLi, nLevelLi, bWasP);
|
||||||
readStream(sSubClass, sRStyle, bBdo, bNeedLi, nLevelLi);
|
|
||||||
m_oDocXml += L"</w:p><w:p>";
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
readStream(sSubClass, sRStyle, bBdo, bNeedLi, nLevelLi);
|
{
|
||||||
|
if(!bWasP)
|
||||||
|
{
|
||||||
|
m_oDocXml += L"</w:p><w:p>";
|
||||||
|
bWasP = true;
|
||||||
|
}
|
||||||
|
readStream(sSubClass, sRStyle, bBdo, bNeedLi, nLevelLi, bWasP);
|
||||||
|
if(!bWasP)
|
||||||
|
{
|
||||||
|
m_oDocXml += L"</w:p><w:p>";
|
||||||
|
bWasP = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -624,12 +691,13 @@ private:
|
|||||||
{
|
{
|
||||||
// sSelectors = getStyle(sSelectors);
|
// sSelectors = getStyle(sSelectors);
|
||||||
|
|
||||||
|
bool bWasP = true;
|
||||||
m_oDocXml += L"<w:p>";
|
m_oDocXml += L"<w:p>";
|
||||||
readStream(sSelectors, L"", false, false, -1);
|
readStream(sSelectors, L"", false, false, -1, bWasP);
|
||||||
m_oDocXml += L"</w:p>";
|
m_oDocXml += L"</w:p>";
|
||||||
}
|
}
|
||||||
|
|
||||||
void readUl(std::vector<std::string>& sSelectors, std::wstring sRStyle, bool bBdo, int nLevelLi)
|
void readUl(std::vector<std::string>& sSelectors, std::wstring sRStyle, bool bBdo, int nLevelLi, bool& bWasP)
|
||||||
{
|
{
|
||||||
if(m_oLightReader.IsEmptyNode())
|
if(m_oLightReader.IsEmptyNode())
|
||||||
return;
|
return;
|
||||||
@ -639,7 +707,17 @@ private:
|
|||||||
{
|
{
|
||||||
if(m_oLightReader.GetName() != L"li")
|
if(m_oLightReader.GetName() != L"li")
|
||||||
continue;
|
continue;
|
||||||
readStream(sSelectors, sRStyle, bBdo, true, nLevelLi + 1);
|
if(!bWasP)
|
||||||
|
{
|
||||||
|
m_oDocXml += L"</w:p><w:p>";
|
||||||
|
bWasP = true;
|
||||||
|
}
|
||||||
|
readStream(sSelectors, sRStyle, bBdo, true, nLevelLi + 1, bWasP);
|
||||||
|
if(!bWasP)
|
||||||
|
{
|
||||||
|
m_oDocXml += L"</w:p><w:p>";
|
||||||
|
bWasP = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -664,7 +742,7 @@ private:
|
|||||||
m_oNoteXml += L"</w:t></w:r></w:p></w:footnote>";
|
m_oNoteXml += L"</w:t></w:r></w:p></w:footnote>";
|
||||||
}
|
}
|
||||||
|
|
||||||
void readLink(std::vector<std::string>& sSelectors, std::wstring sRStyle, bool bBdo, bool bNeedLi, int nLevelLi)
|
void readLink(std::vector<std::string>& sSelectors, std::wstring sRStyle, bool bBdo, bool bNeedLi, int nLevelLi, bool& bWasP)
|
||||||
{
|
{
|
||||||
std::wstring sRef = L"";
|
std::wstring sRef = L"";
|
||||||
std::wstring sTitle = L"";
|
std::wstring sTitle = L"";
|
||||||
@ -709,7 +787,7 @@ private:
|
|||||||
m_oDocXml += L"\" r:id=\"rHyp";
|
m_oDocXml += L"\" r:id=\"rHyp";
|
||||||
m_oDocXml += std::to_wstring(m_nHyperlinkId++);
|
m_oDocXml += std::to_wstring(m_nHyperlinkId++);
|
||||||
m_oDocXml += L"\">";
|
m_oDocXml += L"\">";
|
||||||
readStream(sSelectors, sRStyle += L"<w:rStyle w:val=\"link\"/>", bBdo, bNeedLi, nLevelLi);
|
readStream(sSelectors, sRStyle += L"<w:rStyle w:val=\"link\"/>", bBdo, bNeedLi, nLevelLi, bWasP);
|
||||||
m_oDocXml += L"</w:hyperlink>";
|
m_oDocXml += L"</w:hyperlink>";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -760,6 +838,8 @@ private:
|
|||||||
size_t nSrcM = sSrcM.rfind(L"/") + 1;
|
size_t nSrcM = sSrcM.rfind(L"/") + 1;
|
||||||
sImageName = sSrcM.substr(nSrcM);
|
sImageName = sSrcM.substr(nSrcM);
|
||||||
bRes = NSFile::CFileBinary::Copy(m_sSrc + L"/" + sSrcM, m_sDst + L"/word/media/" + sImageName);
|
bRes = NSFile::CFileBinary::Copy(m_sSrc + L"/" + sSrcM, m_sDst + L"/word/media/" + sImageName);
|
||||||
|
if(!bRes)
|
||||||
|
bRes = NSFile::CFileBinary::Copy(m_sSrc + L"/" + sImageName, m_sDst + L"/word/media/" + sImageName);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(bRes)
|
if(bRes)
|
||||||
@ -847,7 +927,10 @@ private:
|
|||||||
}
|
}
|
||||||
// Ссылки
|
// Ссылки
|
||||||
else if(sName == L"a")
|
else if(sName == L"a")
|
||||||
readLink(sSubClass, sRStyle, bBdo, false, -1);
|
{
|
||||||
|
bool bWasP = true;
|
||||||
|
readLink(sSubClass, sRStyle, bBdo, false, -1, bWasP);
|
||||||
|
}
|
||||||
// Абревиатура, реализована как сноски
|
// Абревиатура, реализована как сноски
|
||||||
else if(sName == L"abbr")
|
else if(sName == L"abbr")
|
||||||
readAbbr(sSubClass, sRStyle, bBdo);
|
readAbbr(sSubClass, sRStyle, bBdo);
|
||||||
|
|||||||
@ -17,6 +17,7 @@ struct CNode
|
|||||||
std::wstring m_sName; // Имя тэга
|
std::wstring m_sName; // Имя тэга
|
||||||
std::wstring m_sId; // Id тэга
|
std::wstring m_sId; // Id тэга
|
||||||
std::wstring m_sClass; // Класс тэга
|
std::wstring m_sClass; // Класс тэга
|
||||||
|
std::wstring m_sStyle; // Стиль тэга
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CHtmlParams
|
struct CHtmlParams
|
||||||
|
|||||||
Reference in New Issue
Block a user