implement quoting for the facename and parsing of quoted facenames in wxNativeFontInfo::To/FromUserString()

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@59840 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Francesco Montorsi 2009-03-25 12:21:56 +00:00
parent ed973feb5a
commit c1ab2be0a0

View File

@ -662,7 +662,20 @@ wxString wxNativeFontInfo::ToUserString() const
wxString face = GetFaceName();
if ( !face.empty() )
{
desc << _T(' ') << face;
if (face.Contains(' ') || face.Contains(';') || face.Contains(','))
{
face.Replace("'", "");
// eventually remove quote characters: most systems do not
// allow them in a facename anyway so this usually does nothing
// make it possible for FromUserString() function to understand
// that the different words which compose this facename are
// not different adjectives or other data but rather all parts
// of the facename
desc << _T(" '") << face << _("'");
}
else
desc << _T(' ') << face;
}
int size = GetPointSize();
@ -687,10 +700,20 @@ bool wxNativeFontInfo::FromUserString(const wxString& s)
// reset to the default state
Init();
// ToUserString() will quote the facename if it contains spaces, commas
// or semicolons: we must be able to understand that quoted text is
// a single token:
wxString toparse(s);
/*
wxString::iterator i = toparse.find("'");
if (i != wxString::npos)
{
for (; *i != '\'' && *i != toparse.end(); i++)
;
}*/
// parse a more or less free form string
//
// TODO: we should handle at least the quoted facenames
wxStringTokenizer tokenizer(s, _T(";, "), wxTOKEN_STRTOK);
wxStringTokenizer tokenizer(toparse, _T(";, "), wxTOKEN_STRTOK);
wxString face;
unsigned long size;
@ -698,6 +721,7 @@ bool wxNativeFontInfo::FromUserString(const wxString& s)
#if wxUSE_FONTMAP
bool encodingfound = false;
#endif
bool insideQuotes = false;
while ( tokenizer.HasMoreTokens() )
{
@ -705,8 +729,36 @@ bool wxNativeFontInfo::FromUserString(const wxString& s)
// normalize it
token.Trim(true).Trim(false).MakeLower();
if (insideQuotes)
{
if (token.StartsWith("'") ||
token.EndsWith("'"))
{
insideQuotes = false;
// add this last token to the facename:
face += " " + token;
// normalize facename:
face = face.Trim(true).Trim(false);
face.Replace("'", "");
continue;
}
}
else
{
if (token.StartsWith("'"))
insideQuotes = true;
}
// look for the known tokens
if ( insideQuotes )
{
// only the facename may be quoted:
face += " " + token;
continue;
}
if ( token == _T("underlined") || token == _("underlined") )
{
SetUnderlined(true);