enableYAMLCompatibility and dropNullPlaceholders for StreamWriterBuilder

This commit is contained in:
Christopher Dunn 2015-02-10 21:15:43 -06:00
parent 07f0e9308d
commit 5a744708fc
2 changed files with 20 additions and 2 deletions

View File

@ -90,8 +90,15 @@ public:
// without a major version bump. // without a major version bump.
/** Configuration of this builder. /** Configuration of this builder.
Available settings (case-sensitive): Available settings (case-sensitive):
- "commentStyle": "None", "Some", or "All" - "commentStyle": "None" or "All"
- "indentation": "<anything>" - "indentation": "<anything>"
- "enableYAMLCompatibility": False or True
- slightly change the whitespace around colons
- "dropNullPlaceholders": False or True
- Drop the "null" string from the writer's output for nullValues.
Strictly speaking, this is not valid JSON. But when the output is being
fed to a browser's Javascript, it makes for smaller output and the
browser can handle the output just fine.
You can examine 'settings_` yourself You can examine 'settings_` yourself
to see the defaults. You can also write and read them just like any to see the defaults. You can also write and read them just like any

View File

@ -973,6 +973,8 @@ StreamWriter* StreamWriterBuilder::newStreamWriter() const
std::string indentation = settings_["indentation"].asString(); std::string indentation = settings_["indentation"].asString();
std::string cs_str = settings_["commentStyle"].asString(); std::string cs_str = settings_["commentStyle"].asString();
bool eyc = settings_["enableYAMLCompatibility"].asBool();
bool dnp = settings_["dropNullPlaceholders"].asBool();
CommentStyle::Enum cs = CommentStyle::All; CommentStyle::Enum cs = CommentStyle::All;
if (cs_str == "All") { if (cs_str == "All") {
cs = CommentStyle::All; cs = CommentStyle::All;
@ -982,10 +984,15 @@ StreamWriter* StreamWriterBuilder::newStreamWriter() const
return NULL; return NULL;
} }
std::string colonSymbol = " : "; std::string colonSymbol = " : ";
if (indentation.empty()) { if (eyc) {
colonSymbol = ": ";
} else if (indentation.empty()) {
colonSymbol = ":"; colonSymbol = ":";
} }
std::string nullSymbol = "null"; std::string nullSymbol = "null";
if (dnp) {
nullSymbol = "";
}
std::string endingLineFeedSymbol = ""; std::string endingLineFeedSymbol = "";
return new BuiltStyledStreamWriter( return new BuiltStyledStreamWriter(
indentation, cs, indentation, cs,
@ -996,6 +1003,8 @@ static void getValidWriterKeys(std::set<std::string>* valid_keys)
valid_keys->clear(); valid_keys->clear();
valid_keys->insert("indentation"); valid_keys->insert("indentation");
valid_keys->insert("commentStyle"); valid_keys->insert("commentStyle");
valid_keys->insert("enableYAMLCompatibility");
valid_keys->insert("dropNullPlaceholders");
} }
bool StreamWriterBuilder::validate(Json::Value* invalid) const bool StreamWriterBuilder::validate(Json::Value* invalid) const
{ {
@ -1021,6 +1030,8 @@ void StreamWriterBuilder::setDefaults(Json::Value* settings)
//! [StreamWriterBuilderDefaults] //! [StreamWriterBuilderDefaults]
(*settings)["commentStyle"] = "All"; (*settings)["commentStyle"] = "All";
(*settings)["indentation"] = "\t"; (*settings)["indentation"] = "\t";
(*settings)["enableYAMLCompatibility"] = false;
(*settings)["dropNullPlaceholders"] = false;
//! [StreamWriterBuilderDefaults] //! [StreamWriterBuilderDefaults]
} }