diff --git a/include/json/writer.h b/include/json/writer.h
index 3abf2ea..94582d9 100644
--- a/include/json/writer.h
+++ b/include/json/writer.h
@@ -9,21 +9,37 @@ namespace Json {
class Value;
+ /** \brief Abstract class for writers.
+ */
+ class JSON_API Writer
+ {
+ public:
+ virtual ~Writer();
+
+ virtual std::string write( const Value &root ) = 0;
+ };
+
/** \brief Outputs a Value in JSON format without formatting (not human friendly).
*
* The JSON document is written in a single line. It is not intended for 'human' consumption,
* but may be usefull to support feature such as RPC where bandwith is limited.
* \sa Reader, Value
*/
- class JSON_API FastWriter
+ class JSON_API FastWriter : public Writer
{
public:
- std::string write( const Value &root );
+ FastWriter();
+
+ void enableYAMLCompatibility();
+
+ public: // overridden from Writer
+ virtual std::string write( const Value &root );
private:
void writeValue( const Value &value );
std::string document_;
+ bool yamlCompatiblityEnabled_;
};
/** \brief Writes a Value in JSON format in a human friendly way.
@@ -49,11 +65,12 @@ namespace Json {
public:
StyledWriter();
+ public: // overridden from Writer
/** \brief Serialize a Value in JSON format.
* \param root Value to serialize.
* \return String containing the JSON document that represent the root value.
*/
- std::string write( const Value &root );
+ virtual std::string write( const Value &root );
private:
void writeValue( const Value &value );
diff --git a/src/jsontestrunner/main.cpp b/src/jsontestrunner/main.cpp
index 1d43720..a576564 100644
--- a/src/jsontestrunner/main.cpp
+++ b/src/jsontestrunner/main.cpp
@@ -115,7 +115,8 @@ rewriteValueTree( const std::string &rewritePath,
const Json::Value &root,
std::string &rewrite )
{
-// Json::FastWriter writer;
+ //Json::FastWriter writer;
+ //writer.enableYAMLCompatibility();
Json::StyledWriter writer;
rewrite = writer.write( root );
FILE *fout = fopen( rewritePath.c_str(), "wt" );
diff --git a/src/lib_json/json_writer.cpp b/src/lib_json/json_writer.cpp
index f1d8168..47577fa 100644
--- a/src/lib_json/json_writer.cpp
+++ b/src/lib_json/json_writer.cpp
@@ -67,10 +67,29 @@ std::string valueToQuotedString( const char *value )
return std::string("\"") + value + "\"";
}
+// Class Writer
+// //////////////////////////////////////////////////////////////////
+Writer::~Writer()
+{
+}
+
// Class FastWriter
// //////////////////////////////////////////////////////////////////
+FastWriter::FastWriter()
+ : yamlCompatiblityEnabled_( false )
+{
+}
+
+
+void
+FastWriter::enableYAMLCompatibility()
+{
+ yamlCompatiblityEnabled_ = true;
+}
+
+
std::string
FastWriter::write( const Value &root )
{
@@ -106,33 +125,34 @@ FastWriter::writeValue( const Value &value )
break;
case arrayValue:
{
- document_ += "[ ";
+ document_ += "[";
int size = value.size();
for ( int index =0; index < size; ++index )
{
if ( index > 0 )
- document_ += ", ";
+ document_ += ",";
writeValue( value[index] );
}
- document_ += " ]";
+ document_ += "]";
}
break;
case objectValue:
{
Value::Members members( value.getMemberNames() );
- document_ += "{ ";
+ document_ += "{";
for ( Value::Members::iterator it = members.begin();
it != members.end();
++it )
{
const std::string &name = *it;
if ( it != members.begin() )
- document_ += ", ";
+ document_ += ",";
document_ += valueToQuotedString( name.c_str() );
- document_ += " : ";
+ document_ += yamlCompatiblityEnabled_ ? ": "
+ : ":";
writeValue( value[name] );
}
- document_ += " }";
+ document_ += "}";
}
break;
}
diff --git a/test/runjsontests.py b/test/runjsontests.py
index a5284fb..de7bd9d 100644
--- a/test/runjsontests.py
+++ b/test/runjsontests.py
@@ -83,7 +83,7 @@ if __name__ == '__main__':
sys.exit( 1 )
jsontest_executable_path = os.path.normpath( os.path.abspath( sys.argv[1] ) )
- if len(sys.argv) > 1:
+ if len(sys.argv) > 2:
input_path = os.path.normpath( os.path.abspath( sys.argv[2] ) )
else:
input_path = None