PIJSON::toJSON with optionally unicode masking
PIVariantTypes::Color::toName()
This commit is contained in:
@@ -349,9 +349,9 @@ PIJSON & PIJSON::operator[](const PIString & key) {
|
||||
}
|
||||
|
||||
|
||||
PIString PIJSON::toJSON(PrintType print_type) const {
|
||||
PIString PIJSON::toJSON(PrintType print_type, bool mask_unicode) const {
|
||||
PIString ret;
|
||||
print(ret, *this, "", print_type == Tree, true);
|
||||
print(ret, *this, "", print_type == Tree, true, false, mask_unicode);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -457,11 +457,14 @@ PIJSON PIJSON::parseArray(PIString s) {
|
||||
}
|
||||
|
||||
|
||||
PIString PIJSON::stringMask(const PIString & s) {
|
||||
PIString PIJSON::stringMask(const PIString & s, bool mask_unicode) {
|
||||
PIString ret;
|
||||
for (auto c: s) {
|
||||
if (!c.isAscii()) {
|
||||
if (mask_unicode)
|
||||
ret += "\\u" + PIString::fromNumber(c.unicode16Code(), 16).expandLeftTo(4, '0');
|
||||
else
|
||||
ret += c;
|
||||
} else {
|
||||
char ca = c.toAscii();
|
||||
switch (ca) {
|
||||
@@ -512,7 +515,7 @@ PIString PIJSON::stringUnmask(const PIString & s) {
|
||||
}
|
||||
|
||||
|
||||
void PIJSON::print(PIString & s, const PIJSON & v, PIString tab, bool spaces, bool transform, bool comma) {
|
||||
void PIJSON::print(PIString & s, const PIJSON & v, PIString tab, bool spaces, bool transform, bool comma, bool mask_unicode) {
|
||||
if (spaces) s += tab;
|
||||
/*
|
||||
switch (v.c_type) {
|
||||
@@ -526,7 +529,7 @@ void PIJSON::print(PIString & s, const PIJSON & v, PIString tab, bool spaces, bo
|
||||
}
|
||||
*/
|
||||
if (v.name().isNotEmpty()) {
|
||||
s += '"' + (transform ? stringMask(v.name()) : v.name()) + "\":";
|
||||
s += '"' + (transform ? stringMask(v.name(), mask_unicode) : v.name()) + "\":";
|
||||
if (spaces) s += ' ';
|
||||
}
|
||||
switch (v.c_type) {
|
||||
@@ -534,7 +537,7 @@ void PIJSON::print(PIString & s, const PIJSON & v, PIString tab, bool spaces, bo
|
||||
case PIJSON::Null: s += "null"; break;
|
||||
case PIJSON::Boolean: s += PIString::fromBool(v.c_value.toBool()); break;
|
||||
case PIJSON::Number: s += v.c_value.toString(); break;
|
||||
case PIJSON::String: s += '"' + (transform ? stringMask(v.c_value.toString()) : v.c_value.toString()) + '"'; break;
|
||||
case PIJSON::String: s += '"' + (transform ? stringMask(v.c_value.toString(), mask_unicode) : v.c_value.toString()) + '"'; break;
|
||||
case PIJSON::Object:
|
||||
s += "{";
|
||||
if (spaces) s += '\n';
|
||||
@@ -543,7 +546,7 @@ void PIJSON::print(PIString & s, const PIJSON & v, PIString tab, bool spaces, bo
|
||||
auto it = v.c_object.makeIterator();
|
||||
int cnt = 0;
|
||||
while (it.next()) {
|
||||
print(s, it.value(), ntab, spaces, transform, ++cnt < v.c_object.size_s());
|
||||
print(s, it.value(), ntab, spaces, transform, ++cnt < v.c_object.size_s(), mask_unicode);
|
||||
}
|
||||
}
|
||||
if (spaces) s += tab;
|
||||
@@ -555,7 +558,7 @@ void PIJSON::print(PIString & s, const PIJSON & v, PIString tab, bool spaces, bo
|
||||
{
|
||||
PIString ntab = tab + " ";
|
||||
for (int i = 0; i < v.c_array.size_s(); ++i) {
|
||||
print(s, v.c_array[i], ntab, spaces, transform, i < v.c_array.size_s() - 1);
|
||||
print(s, v.c_array[i], ntab, spaces, transform, i < v.c_array.size_s() - 1, mask_unicode);
|
||||
}
|
||||
}
|
||||
if (spaces) s += tab;
|
||||
|
||||
@@ -169,7 +169,7 @@ public:
|
||||
|
||||
//! \~english Returns text representation of JSON tree.
|
||||
//! \~russian Возвращает текстовое представление дерева JSON.
|
||||
PIString toJSON(PrintType print_type = Compact) const;
|
||||
PIString toJSON(PrintType print_type = Compact, bool mask_unicode = true) const;
|
||||
|
||||
//! \~english Parse text representation of JSON "str" and returns it root element.
|
||||
//! \~russian Разбирает текстовое представление JSON "str" и возвращает его корневой элемент.
|
||||
@@ -185,9 +185,9 @@ private:
|
||||
static PIJSON parseValue(PIString & s);
|
||||
static PIJSON parseObject(PIString s);
|
||||
static PIJSON parseArray(PIString s);
|
||||
static PIString stringMask(const PIString & s);
|
||||
static PIString stringMask(const PIString & s, bool mask_unicode);
|
||||
static PIString stringUnmask(const PIString & s);
|
||||
static void print(PIString & s, const PIJSON & v, PIString tab, bool spaces, bool transform = false, bool comma = false);
|
||||
static void print(PIString & s, const PIJSON & v, PIString tab, bool spaces, bool transform = false, bool comma = false, bool mask_unicode = true);
|
||||
|
||||
PIString c_name;
|
||||
PIVariant c_value;
|
||||
|
||||
@@ -822,7 +822,7 @@ PIString PIVariant::toString() const {
|
||||
case PIVariant::pivEnum: {PIVariantTypes::Enum r; ba >> r; return r.selectedName();}
|
||||
case PIVariant::pivFile: {PIVariantTypes::File r; ba >> r; return r.file;}
|
||||
case PIVariant::pivDir: {PIVariantTypes::Dir r; ba >> r; return r.dir;}
|
||||
case PIVariant::pivColor: {PIVariantTypes::Color r; ba >> r; return r.toString(true);}
|
||||
case PIVariant::pivColor: {PIVariantTypes::Color r; ba >> r; return r.toName();}
|
||||
case PIVariant::pivIODevice: {PIVariantTypes::IODevice r; ba >> r; return "IODevice";} // TODO
|
||||
case PIVariant::pivPoint: {PIPointd r; ba >> r; return PIString::fromNumber(r.x) + ";" + PIString::fromNumber(r.y);} break;
|
||||
case PIVariant::pivRect: {PIRectd r; ba >> r; return PIString::fromNumber(r.left()) + ";" + PIString::fromNumber(r.bottom()) + ";" + PIString::fromNumber(r.width()) + ";" + PIString::fromNumber(r.height());} break;
|
||||
|
||||
@@ -169,10 +169,13 @@ PIVariantTypes::Color PIVariantTypes::Color::fromString(const PIString & str) {
|
||||
}
|
||||
|
||||
|
||||
PIString PIVariantTypes::Color::toString(bool find_name) const {
|
||||
if (find_name) {
|
||||
PIString ret = PIColorCollection::instance().getCSSName(*this);
|
||||
if (ret.isNotEmpty()) return ret;
|
||||
}
|
||||
PIString PIVariantTypes::Color::toString() const {
|
||||
return "#" + PIString::fromNumber(rgba, 16);
|
||||
}
|
||||
|
||||
|
||||
PIString PIVariantTypes::Color::toName() const {
|
||||
PIString ret = PIColorCollection::instance().getCSSName(*this);
|
||||
if (ret.isNotEmpty()) return ret;
|
||||
return toString();
|
||||
}
|
||||
|
||||
@@ -237,9 +237,13 @@ struct PIP_EXPORT Color {
|
||||
//! \~russian Возвращает цвет от #HEX, 0xHEX или имени.
|
||||
static Color fromString(const PIString & str);
|
||||
|
||||
//! \~english Returns color as #HEX, or as name if "find_name".
|
||||
//! \~russian Возвращает цвет как #HEX, либо как имя если "find_name".
|
||||
PIString toString(bool find_name = false) const;
|
||||
//! \~english Returns color as #HEX.
|
||||
//! \~russian Возвращает цвет как #HEX.
|
||||
PIString toString() const;
|
||||
|
||||
//! \~english Returns name or #HEX if no suitable name.
|
||||
//! \~russian Возвращает имя, либо #HEX, если нет подходящего имени.
|
||||
PIString toName() const;
|
||||
|
||||
//! \~english Integer color.
|
||||
//! \~russian Целочисленный цвет.
|
||||
|
||||
12
main.cpp
12
main.cpp
@@ -59,10 +59,14 @@ int main(int argc, char * argv[]) {
|
||||
v.setValueFromString("0xFF00FFff");
|
||||
piCout << v;*/
|
||||
|
||||
PIString ms = "1239";
|
||||
|
||||
piCout << PIString("12\\\\3456789").masked(ms);
|
||||
piCout << PIString("12\\\\3456789").masked(ms).unmasked(ms);
|
||||
PIJSON j;
|
||||
j["123"] = "str";
|
||||
j[PIString::fromUTF8("ключ")] = PIString::fromUTF8("str_значение");
|
||||
piCout << j;
|
||||
piCout << PIJSON::fromJSON(j.toJSON(PIJSON::Compact, true));
|
||||
piCout << PIJSON::fromJSON(j.toJSON(PIJSON::Compact, false));
|
||||
piCout << PIJSON::fromJSON(j.toJSON(PIJSON::Tree, true));
|
||||
piCout << PIJSON::fromJSON(j.toJSON(PIJSON::Tree, false));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user