#ifndef WX_PRECOMP
#include "wx/intl.h"
#include "wx/module.h"
+ #include "wx/log.h"
#endif
#include "wx/filename.h"
}
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 <image> tag: %d", type);
+ }
+ else
+ {
+ imageType = (wxBitmapType)type;
+ }
+ }
wxString data;
OutputString(stream, str.Mid(last, i - last), convMem, convFile);
wxString s(wxT("&#"));
+#if wxUSE_UNICODE
s << (int) c;
+#else
+ s << (int) wxUChar(c);
+#endif
s << wxT(";");
OutputString(stream, s, NULL, NULL);
last = i + 1;
str1 += str.Mid(last, i - last);
wxString s(wxT("&#"));
+#if wxUSE_UNICODE
s << (int) c;
+#else
+ s << (int) wxUChar(c);
+#endif
s << wxT(";");
str1 += s;
last = i + 1;
}
else for (i = 0; i < len; i++)
{
+#if wxUSE_UNICODE
int c = (int) text[i];
- if (c < 32 && c != 9 && c != 10 && c != 13)
+#else
+ int c = (int) wxUChar(text[i]);
+#endif
+ if ((c < 32 || c == 34) && /* c != 9 && */ c != 10 && c != 13)
{
if (i > 0)
{
- OutputIndentation(stream, indent);
- OutputString(stream, wxT("<") + objectName, convMem, convFile);
-
- OutputString(stream, style + wxT(">"), convMem, convFile);
-
wxString fragment(text.Mid(last, i-last));
- if (!fragment.empty() && (fragment[0] == wxT(' ') || fragment[fragment.length()-1] == wxT(' ')))
+ if (!fragment.IsEmpty())
{
- OutputString(stream, wxT("\""), convMem, convFile);
- OutputStringEnt(stream, fragment, convMem, convFile);
- OutputString(stream, wxT("\""), convMem, convFile);
+ OutputIndentation(stream, indent);
+ OutputString(stream, wxT("<") + objectName, convMem, convFile);
+
+ OutputString(stream, style + wxT(">"), convMem, convFile);
+
+ if (!fragment.empty() && (fragment[0] == wxT(' ') || fragment[fragment.length()-1] == wxT(' ')))
+ {
+ OutputString(stream, wxT("\""), convMem, convFile);
+ OutputStringEnt(stream, fragment, convMem, convFile);
+ OutputString(stream, wxT("\""), convMem, convFile);
+ }
+ else
+ OutputStringEnt(stream, fragment, convMem, convFile);
+
+ OutputString(stream, wxT("</text>"), convMem, convFile);
}
- else
- OutputStringEnt(stream, fragment, convMem, convFile);
-
- OutputString(stream, wxT("</text>"), convMem, convFile);
}
// Output this character as a number in a separate tag, because XML can't cope
- // with entities below 32 except for 9, 10 and 13
+ // with entities below 32 except for 10 and 13
last = i + 1;
OutputIndentation(stream, indent);
OutputString(stream, wxT("<symbol"), convMem, convFile);
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("\"");
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);
}
value = node->GetAttribute(wxT("fontweight"), wxEmptyString);
if (!value.empty())
{
- fontWeight = wxAtoi(value);
+ fontWeight = (wxFontWeight)wxAtoi(value);
attr.SetFontWeight(fontWeight);
}