From 4490ff1d617714cd10798a01f4ab68815071f872 Mon Sep 17 00:00:00 2001 From: Svetlana Kulikova Date: Wed, 22 Jul 2020 11:44:33 +0300 Subject: [PATCH] pageBreakBefore and batchmode --- Fb2File/Fb2File.cpp | 31 ++++++++++++++++++------------- Fb2File/test/main.cpp | 13 +++++++++---- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/Fb2File/Fb2File.cpp b/Fb2File/Fb2File.cpp index b319da0db0..b84b9a95f1 100644 --- a/Fb2File/Fb2File.cpp +++ b/Fb2File/Fb2File.cpp @@ -251,8 +251,8 @@ public: while(m_oLightReader.MoveToNextAttribute()) { std::wstring sName = m_oLightReader.GetName(); - size_t nLen = sName.length() - 4; - if(sName.substr(nLen > 0 ? nLen : 0) == L"href") + size_t nLen = (sName.length() > 4 ? sName.length() - 4 : 0); + if(sName.substr(nLen) == L"href") sImageName = m_oLightReader.GetText().substr(1); } m_oLightReader.MoveToElement(); @@ -300,6 +300,7 @@ public: // имеет право писать p void readTitle(std::wstring sLevel, NSStringUtils::CStringBuilder& oBuilder) { + bool bFirstP = true; int nDeath = m_oLightReader.GetDepth(); while(m_oLightReader.ReadNextSiblingNode(nDeath)) { @@ -309,7 +310,14 @@ public: // Пишем title + sLevel oBuilder += L""; + oBuilder += L"\"/>"; + // Заголовок книги с новой страницы + if(sLevel == L"title" && bFirstP) + { + oBuilder += L""; + bFirstP = false; + } + oBuilder += L""; // Пишем ссылку от оглавления std::wstring sContentsId; if(sLevel == L"title1") @@ -407,8 +415,8 @@ public: while(m_oLightReader.MoveToNextAttribute()) { std::wstring sTName = m_oLightReader.GetName(); - size_t nLen = sTName.length() - 4; - if(sTName.substr(nLen > 0 ? nLen : 0) == L"href") + size_t nLen = (sTName.length() > 4 ? sTName.length() - 4 : 0); + if(sTName.substr(nLen) == L"href") { sFootnoteName = m_oLightReader.GetText().substr(1); break; @@ -789,9 +797,6 @@ public: } } oContents += L""; - // Разрыв страницы - oContents += L""; - return true; } @@ -813,14 +818,16 @@ public: if(m_oLightReader.GetName() == L"title") { std::wstring sContentsId = std::to_wstring(nContentsId++); - oContents += L""; - + oContents += L""; + // Абзац с новой страницы + if(bFirstP) + oContents += L""; + oContents += L""; if(bFirstP) { oContents += L"TOC \\n \\h "; bFirstP = false; } - oContents += L""; @@ -1192,8 +1199,6 @@ public: oBuilder += L""; } } - // Разрыв страницы - oBuilder += L""; } // Читаем genre (один или более) else if(sName == L"genre") diff --git a/Fb2File/test/main.cpp b/Fb2File/test/main.cpp index 7b7a49ab20..a4e2020e5c 100644 --- a/Fb2File/test/main.cpp +++ b/Fb2File/test/main.cpp @@ -41,11 +41,12 @@ int main() NSDirectory::DeleteDirectory(sOutputDirectory); NSDirectory::CreateDirectory(sOutputDirectory); + // Выставляем временную директорию + std::wstring sTmp = NSFile::GetProcessDirectory() + L"/tmp"; + for(std::wstring sFile : arrFiles) { CFb2File oFile; - // Выставляем временную директорию - oFile.SetTmpDirectory(NSFile::GetProcessDirectory() + L"/tmp"); std::wstring sFileName = NSFile::GetFileName(sFile); std::wcout << sFileName << std::endl; if(!oFile.IsFb2File(sFile)) @@ -55,9 +56,14 @@ int main() std::cout << "This isn't a fb2 file" << std::endl; continue; } - HRESULT nResConvert = oFile.Open(sFile, sOutputDirectory, &oParams); + NSDirectory::DeleteDirectory(sTmp); + NSDirectory::CreateDirectory(sTmp); + HRESULT nResConvert = oFile.Open(sFile, sTmp, &oParams); if(nResConvert == S_OK) + { std::cout << "Success" << std::endl; + NSFile::CFileBinary::Copy(sTmp + L"/" + sFileName + L".docx", sOutputDirectory + L"/" + sFileName + L".docx"); + } else { nErrorCol++; @@ -74,7 +80,6 @@ int main() else { CFb2File oFile; - oFile.SetTmpDirectory(NSFile::GetProcessDirectory() + L"/tmp"); // Файл, который открываем std::wstring sFile = NSFile::GetProcessDirectory() + L"/../../../examples/test2.fb2";