X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d75a69e8329cecf6f07c667ffc015186c230a2b5..85284ca4b226d9a1ab6bed26c5eaa480543649d5:/src/richtext/richtextxml.cpp diff --git a/src/richtext/richtextxml.cpp b/src/richtext/richtextxml.cpp index e76f7a0edb..d967ae5d02 100644 --- a/src/richtext/richtextxml.cpp +++ b/src/richtext/richtextxml.cpp @@ -23,6 +23,7 @@ #ifndef WX_PRECOMP #include "wx/intl.h" #include "wx/module.h" + #include "wx/log.h" #endif #include "wx/filename.h" @@ -173,7 +174,7 @@ bool wxRichTextXMLHandler::ImportXML(wxRichTextBuffer* buffer, wxXmlNode* node) else if (childName == wxT("image")) { wxBitmapType imageType = wxBITMAP_TYPE_PNG; - wxString value = node->GetAttribute(wxT("imagetype"), wxEmptyString); + wxString value = child->GetAttribute(wxT("imagetype"), wxEmptyString); if (!value.empty()) { int type = wxAtoi(value); @@ -970,8 +971,8 @@ wxString wxRichTextXMLHandler::CreateStyle(const wxTextAttr& attr, bool isPara) if (attr.HasFontSize()) str << wxT(" fontsize=\"") << attr.GetFontSize() << wxT("\""); - //if (attr.HasFontFamily()) - // str << wxT(" fontfamily=\"") << attr.GetFont().GetFamily() << wxT("\""); + if (attr.HasFontFamily()) + str << wxT(" fontfamily=\"") << attr.GetFont().GetFamily() << wxT("\""); if (attr.HasFontItalic()) str << wxT(" fontstyle=\"") << attr.GetFontStyle() << wxT("\""); @@ -1078,31 +1079,85 @@ wxString wxRichTextXMLHandler::CreateStyle(const wxTextAttr& attr, bool isPara) return str; } +/// Replace face name with current name for platform. +/// TODO: introduce a virtual function or settable table to +/// do this comprehensively. +bool wxRichTextFixFaceName(wxString& facename) +{ + if (facename.IsEmpty()) + return false; + +#ifdef __WXMSW__ + if (facename == wxT("Times")) + { + facename = wxT("Times New Roman"); + return true; + } + else if (facename == wxT("Helvetica")) + { + facename = wxT("Arial"); + return true; + } + else if (facename == wxT("Courier")) + { + facename = wxT("Courier New"); + return true; + } + else + return false; +#else + if (facename == wxT("Times New Roman")) + { + facename = wxT("Times"); + return true; + } + else if (facename == wxT("Arial")) + { + facename = wxT("Helvetica"); + return true; + } + else if (facename == wxT("Courier New")) + { + facename = wxT("Courier"); + return true; + } + else + return false; +#endif +} + /// Get style parameters bool wxRichTextXMLHandler::GetStyle(wxTextAttr& attr, wxXmlNode* node, bool isPara) { wxString fontFacename; int fontSize = 12; - // int fontFamily = wxDEFAULT; - int fontWeight = wxNORMAL; - int fontStyle = wxNORMAL; + wxFontFamily fontFamily = wxFONTFAMILY_DEFAULT; + wxFontWeight fontWeight = wxFONTWEIGHT_NORMAL; + wxFontStyle fontStyle = wxFONTSTYLE_NORMAL; bool fontUnderlined = false; // int fontFlags = 0; fontFacename = node->GetAttribute(wxT("fontface"), wxEmptyString); if (!fontFacename.IsEmpty()) + { attr.SetFontFaceName(fontFacename); + if (GetFlags() & wxRICHTEXT_HANDLER_CONVERT_FACENAMES) + wxRichTextFixFaceName(fontFacename); + } wxString value; - //value = node->GetAttribute(wxT("fontfamily"), wxEmptyString); - //if (!value.empty()) - // fontFamily = wxAtoi(value); + value = node->GetAttribute(wxT("fontfamily"), wxEmptyString); + if (!value.empty()) + { + fontFamily = (wxFontFamily)wxAtoi(value); + attr.SetFontFamily(fontFamily); + } value = node->GetAttribute(wxT("fontstyle"), wxEmptyString); if (!value.empty()) { - fontStyle = wxAtoi(value); + fontStyle = (wxFontStyle)wxAtoi(value); attr.SetFontStyle(fontStyle); } @@ -1116,7 +1171,7 @@ bool wxRichTextXMLHandler::GetStyle(wxTextAttr& attr, wxXmlNode* node, bool isPa value = node->GetAttribute(wxT("fontweight"), wxEmptyString); if (!value.empty()) { - fontWeight = wxAtoi(value); + fontWeight = (wxFontWeight)wxAtoi(value); attr.SetFontWeight(fontWeight); }