MCPcopy Create free account
hub / github.com/Apache553/SubtitleFontHelper / FontDatabaseToDocument

Function FontDatabaseToDocument

PersistantDataLib/PersistantData.cpp:666–706  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

664 }
665
666 wil::com_ptr<IXMLDOMDocument> FontDatabaseToDocument(const FontDatabase& db)
667 {
668 auto document = wil::CoCreateInstance<IXMLDOMDocument>(CLSID_DOMDocument30);
669
670 wil::com_ptr<IXMLDOMElement> rootElement;
671 THROW_IF_FAILED(document->createElement(wil::make_bstr(L"FontDatabase").get(), rootElement.put()));
672
673 for (auto& font : db.m_fonts)
674 {
675 wil::com_ptr<IXMLDOMElement> fontfaceElement;
676 THROW_IF_FAILED(document->createElement(wil::make_bstr(L"FontFace").get(), fontfaceElement.put()));
677
678 wil::unique_variant value;
679
680 InitVariantFromString(font.m_path.c_str(), value.reset_and_addressof());
681 THROW_IF_FAILED(fontfaceElement->setAttribute(wil::make_bstr(L"path").get(), value));
682 InitVariantFromString(std::to_wstring(font.m_index).c_str(), value.reset_and_addressof());
683 THROW_IF_FAILED(fontfaceElement->setAttribute(wil::make_bstr(L"index").get(), value));
684 InitVariantFromString(std::to_wstring(font.m_weight).c_str(), value.reset_and_addressof());
685 THROW_IF_FAILED(fontfaceElement->setAttribute(wil::make_bstr(L"weight").get(), value));
686 InitVariantFromString(std::to_wstring(font.m_oblique).c_str(), value.reset_and_addressof());
687 THROW_IF_FAILED(fontfaceElement->setAttribute(wil::make_bstr(L"oblique").get(), value));
688 InitVariantFromString(std::to_wstring(font.m_psOutline).c_str(), value.reset_and_addressof());
689 THROW_IF_FAILED(fontfaceElement->setAttribute(wil::make_bstr(L"psOutline").get(), value));
690
691 for (auto& name : font.m_names)
692 {
693 wil::com_ptr<IXMLDOMElement> nameElement;
694 assert(name.m_type < std::extent_v<decltype(FontDatabase::FontFaceElement::NameElement::TYPEMAP)>);
695 THROW_IF_FAILED(
696 document->createElement(wil::make_bstr(FontDatabase::FontFaceElement::NameElement::TYPEMAP[name
697 .m_type]).get(), nameElement.put()));
698 THROW_IF_FAILED(nameElement->put_text(wil::make_bstr(name.m_name.c_str()).get()));
699 THROW_IF_FAILED(fontfaceElement->appendChild(nameElement.get(), nullptr));
700 }
701 THROW_IF_FAILED(rootElement->appendChild(fontfaceElement.get(), nullptr));
702 }
703 THROW_IF_FAILED(document->putref_documentElement(rootElement.get()));
704
705 return document;
706 }
707}
708
709void sfh::ConfigFile::WriteToFile(const std::wstring& path, const ConfigFile& config)

Callers 1

WriteToFileMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected