X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/bb5b214dabf462aabd35094ffbf217cb060c8a59..f06832c1b6caae13c0bddf8f3a8aeb1114f4392b:/src/richtext/richtextxml.cpp diff --git a/src/richtext/richtextxml.cpp b/src/richtext/richtextxml.cpp index c09d334297..71052d2910 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" @@ -172,10 +173,18 @@ bool wxRichTextXMLHandler::ImportXML(wxRichTextBuffer* buffer, wxXmlNode* node) } else if (childName == wxT("image")) { - int imageType = wxBITMAP_TYPE_PNG; - wxString value = node->GetAttribute(wxT("imagetype"), wxEmptyString); + wxBitmapType imageType = wxBITMAP_TYPE_PNG; + wxString value = child->GetAttribute(wxT("imagetype"), wxEmptyString); if (!value.empty()) - imageType = wxAtoi(value); + { + int type = wxAtoi(value); + + // note: 0 == wxBITMAP_TYPE_INVALID + if (type <= 0 || type >= wxBITMAP_TYPE_MAX) + wxLogWarning("Invalid bitmap type specified for tag: %d", type); + else + imageType = (wxBitmapType)type; + } wxString data; @@ -718,7 +727,7 @@ bool wxRichTextXMLHandler::ExportXML(wxOutputStream& stream, wxMBConv* convMem, else for (i = 0; i < len; i++) { int c = (int) text[i]; - if (c < 32 && c != 9 && c != 10 && c != 13) + if ((c < 32 || c == 34) && c != 9 && c != 10 && c != 13) { if (i > 0) { @@ -1070,6 +1079,53 @@ 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) { @@ -1084,7 +1140,12 @@ bool wxRichTextXMLHandler::GetStyle(wxTextAttr& attr, wxXmlNode* node, bool isPa 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);