mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-21 06:45:39 -06:00
Core: XML optimised charset handling, now supports different charset thatn UTF-8
git-svn-id: svn://ultimatepp.org/upp/trunk@11539 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
6f18938d42
commit
f786cae08a
2 changed files with 22 additions and 5 deletions
|
|
@ -172,9 +172,9 @@ XmlTag& XmlTag::operator()(const char *attr, double q)
|
||||||
force_inline
|
force_inline
|
||||||
String XmlParser::Convert(StringBuffer& b)
|
String XmlParser::Convert(StringBuffer& b)
|
||||||
{
|
{
|
||||||
if(charset == CHARSET_UTF8)
|
if(acharset == scharset)
|
||||||
return b;
|
return b;
|
||||||
return FromUtf8(String(b)).ToString();
|
return ToCharset(acharset, b, scharset);
|
||||||
}
|
}
|
||||||
|
|
||||||
void XmlParser::Ent(StringBuffer& out)
|
void XmlParser::Ent(StringBuffer& out)
|
||||||
|
|
@ -385,6 +385,22 @@ void XmlParser::Next()
|
||||||
LoadMore();
|
LoadMore();
|
||||||
if(term[0] == '?' && term[1] == '>') {
|
if(term[0] == '?' && term[1] == '>') {
|
||||||
term += 2;
|
term += 2;
|
||||||
|
LLOG("XML_PI " << tagtext);
|
||||||
|
if(!tagtext.StartsWith("xml "))
|
||||||
|
return;
|
||||||
|
int q = tagtext.Find("encoding");
|
||||||
|
if(q < 0)
|
||||||
|
return;
|
||||||
|
q = tagtext.Find('\"', q);
|
||||||
|
if(q < 0)
|
||||||
|
return;
|
||||||
|
q++;
|
||||||
|
int w = tagtext.Find('\"', q);
|
||||||
|
if(w < 0)
|
||||||
|
return;
|
||||||
|
q = CharsetByName(tagtext.Mid(q, w));
|
||||||
|
if(q)
|
||||||
|
scharset = q;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(!HasMore())
|
if(!HasMore())
|
||||||
|
|
@ -393,7 +409,6 @@ void XmlParser::Next()
|
||||||
line++;
|
line++;
|
||||||
tagtext.Cat(*term++);
|
tagtext.Cat(*term++);
|
||||||
}
|
}
|
||||||
LLOG("XML_PI " << tagtext);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if(*term == '/') {
|
if(*term == '/') {
|
||||||
|
|
@ -792,7 +807,8 @@ void XmlParser::Init()
|
||||||
in = NULL;
|
in = NULL;
|
||||||
len = 0;
|
len = 0;
|
||||||
raw = false;
|
raw = false;
|
||||||
charset = GetDefaultCharset();
|
acharset = GetDefaultCharset();
|
||||||
|
scharset = CHARSET_UTF8;
|
||||||
}
|
}
|
||||||
|
|
||||||
XmlParser::XmlParser(const char *s)
|
XmlParser::XmlParser(const char *s)
|
||||||
|
|
|
||||||
|
|
@ -84,7 +84,8 @@ class XmlParser {
|
||||||
|
|
||||||
int line;
|
int line;
|
||||||
|
|
||||||
byte charset;
|
byte acharset;
|
||||||
|
byte scharset;
|
||||||
|
|
||||||
void Init();
|
void Init();
|
||||||
void LoadMore0();
|
void LoadMore0();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue