#include "FootnoteConverter.h" #include "../../../DesktopEditor/common/File.h" #include "../Paragraph/CtrlAutoNumber.h" #include "../Paragraph/ParaText.h" #include "Converter2OOXML.h" namespace HWP { CFootnoteConverter::CFootnoteConverter() : m_ushCountFootnotes(0), m_ushCountEndnotes(0), m_ushHeaderCount(0), m_ushFooterCount(0) {} std::wstring CFootnoteConverter::CreateNote(const CCtrlNote* pNote, CConverter2OOXML& oConverter) { if (nullptr == pNote) return std::wstring(); NSStringUtils::CStringBuilder *pXMLBuilder = &m_oFootnoteXml; std::wstring wsPrefix = L"foot"; if (L" ne" == pNote->GetID()) { wsPrefix = L"end"; pXMLBuilder = &m_oEndnoteXml; } pXMLBuilder->WriteString(L""); TConversionState oState; for (const CHWPPargraph* pParagraph : pNote->GetParagraphs()) oConverter.WriteParagraph(pParagraph, *pXMLBuilder, oState); pXMLBuilder->WriteString(L""); return L""; } std::wstring CFootnoteConverter::CreateHeadOrFoot(const CCtrlHeadFoot* pCtrlHeadFoot, CConverter2OOXML& oConverter) { if (nullptr == pCtrlHeadFoot) return std::wstring(); NSStringUtils::CStringBuilder oNewDocumentBuilder; TConversionState oState; for (const CHWPPargraph* pParagraphs : pCtrlHeadFoot->GetParagraphs()) oConverter.WriteParagraph(pParagraphs, oNewDocumentBuilder, oState); const std::wstring wsFileName{(pCtrlHeadFoot->IsHeader() ? (L"header" + std::to_wstring(++m_ushHeaderCount)) : (L"footer" + std::to_wstring(++m_ushFooterCount))) + L".xml"}; NSFile::CFileBinary oFile; if (!oFile.CreateFileW(oConverter.GetTempDirectory() + L"/word/" + wsFileName)) return std::wstring(); const std::wstring wsNodeName{pCtrlHeadFoot->IsHeader() ? L"hdr" : L"ftr"}; oFile.WriteStringUTF8(L""); oFile.WriteStringUTF8(oNewDocumentBuilder.GetData()); oFile.WriteStringUTF8(L""); return wsFileName; } bool CFootnoteConverter::SaveToFile(const std::wstring& wsDirectory) { if (0 == m_ushCountFootnotes && 0 == m_ushCountEndnotes && 0 == m_ushFooterCount && 0 == m_ushHeaderCount) return false; NSFile::CFileBinary oFootnoteWriter; if (!oFootnoteWriter.CreateFileW(wsDirectory + L"footnotes.xml")) return false; NSFile::CFileBinary oEndNotesWriter; if (!oEndNotesWriter.CreateFile(wsDirectory + L"endnotes.xml")) return false; oFootnoteWriter.WriteStringUTF8(L""); oFootnoteWriter.WriteStringUTF8(L" "); oFootnoteWriter.WriteStringUTF8(L""); oFootnoteWriter.WriteStringUTF8(m_oFootnoteXml.GetData()); oFootnoteWriter.WriteStringUTF8(L""); oFootnoteWriter.CloseFile(); oEndNotesWriter.WriteStringUTF8(L""); oEndNotesWriter.WriteStringUTF8(L""); oEndNotesWriter.WriteStringUTF8(m_oEndnoteXml.GetData()); oEndNotesWriter.WriteStringUTF8(L""); oEndNotesWriter.CloseFile(); return true; } } unsigned short HWP::CFootnoteConverter::GetFootnoteCount() const { return m_ushCountFootnotes; } unsigned short HWP::CFootnoteConverter::GetEndnoteCount() const { return m_ushCountEndnotes; }