virtual void Read(CParser& p) { if(p.Id("true")) editor.SetData(1); else { p.Id("false"); editor.SetData(0); } }
NAMESPACE_UPP Value ParseJSON(CParser& p) { p.UnicodeEscape(); if(p.IsDouble()) return p.ReadDouble(); if(p.IsString()) { bool dt = p.IsChar2('\"', '\\'); String s = p.ReadString(); if(dt) { CParser p(s); if(p.Char('/') && p.Id("Date") && p.Char('(') && p.IsInt()) { int64 n = p.ReadInt64(); if(!IsNull(n)) return Time(1970, 1, 1) + n / 1000; } } return s; } if(p.Id("null")) return Null; if(p.Id("true")) return true; if(p.Id("false")) return false; if(p.Char('{')) { ValueMap m; while(!p.Char('}')) { String key = p.ReadString(); p.PassChar(':'); m.Add(key, ParseJSON(p)); if(p.Char('}')) // Stray ',' at the end of list is allowed... break; p.PassChar(','); } return m; } if(p.Char('[')) { ValueArray va; while(!p.Char(']')) { va.Add(ParseJSON(p)); if(p.Char(']')) // Stray ',' at the end of list is allowed... break; p.PassChar(','); } return va; } p.ThrowError("Unrecognized JSON element"); return Null; }
void ColorProperty::Read(CParser& p) { if(p.Id("Null")) { editor.SetData(Null); return; } p.Char(':'); editor.SetData(ReadColor(p)); }
int ReadTemplateType(CParser& p) { static const char *nm[] = { "id", "filename", "option", "select", "text" }; for(int i = 0; i < __countof(nm); i++) if(p.Id(nm[i])) return i; p.ThrowError("Unknown type"); return 0; }
NAMESPACE_UPP Value ParseJSON(CParser& p) { p.UnicodeEscape(); if(p.IsNumber()) return p.ReadDouble(); if(p.IsString()) return p.ReadString(); if(p.Id("null")) return Null; if(p.Id("true")) return true; if(p.Id("false")) return false; if(p.Char('{')) { ValueMap m; if(!p.IsChar('}')) do { String key = p.ReadString(); p.PassChar(':'); m.Add(key, ParseJSON(p)); } while(p.Char(',')); p.PassChar('}'); return m; } if(p.Char('[')) { ValueArray va; if(!p.IsChar(']')) do va.Add(ParseJSON(p)); while(p.Char(',')); p.PassChar(']'); return va; } p.ThrowError("Unrecognized JSON element"); return Null; }
virtual void Read(CParser& p) { if(p.Id("Null")) editor.SetData(Null); else editor.SetData(p.ReadString()); }