- reorganized repository to match standard layout
diff --git a/include/json/writer.h b/include/json/writer.h
new file mode 100644
index 0000000..3abf2ea
--- /dev/null
+++ b/include/json/writer.h
@@ -0,0 +1,92 @@
+#ifndef JSON_WRITER_H_INCLUDED

+# define JSON_WRITER_H_INCLUDED

+

+# include "value.h"

+# include <vector>

+# include <string>

+

+namespace Json {

+

+   class Value;

+

+   /** \brief Outputs a Value in <a HREF="http://www.json.org">JSON</a> 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

+   {

+   public:

+      std::string write( const Value &root );

+

+   private:

+      void writeValue( const Value &value );

+

+      std::string document_;

+   };

+

+   /** \brief Writes a Value in <a HREF="http://www.json.org">JSON</a> format in a human friendly way.

+    *

+    * The rules for line break and indent are as follow:

+    * - Object value:

+    *     - if empty then print {} without indent and line break

+    *     - if not empty the print '{', line break & indent, print one value per line

+    *       and then unindent and line break and print '}'.

+    * - Array value:

+    *     - if empty then print [] without indent and line break

+    *     - if the array contains no object value, empty array or some other value types,

+    *       and all the values fit on one lines, then print the array on a single line.

+    *     - otherwise, it the values do not fit on one line, or the array contains

+    *       object or non empty array, then print one value per line.

+    *

+    * If the Value have comments then they are outputed according to their #CommentPlacement.

+    *

+    * \sa Reader, Value, Value::setComment()

+    */

+   class JSON_API StyledWriter

+   {

+   public:

+      StyledWriter();

+

+      /** \brief Serialize a Value in <a HREF="http://www.json.org">JSON</a> format.

+       * \param root Value to serialize.

+       * \return String containing the JSON document that represent the root value.

+       */

+      std::string write( const Value &root );

+

+   private:

+      void writeValue( const Value &value );

+      void writeArrayValue( const Value &value );

+      bool isMultineArray( const Value &value );

+      void pushValue( const std::string &value );

+      void writeIndent();

+      void writeWithIndent( const std::string &value );

+      void indent();

+      void unindent();

+      void writeCommentBeforeValue( const Value &root );

+      void writeCommentAfterValueOnSameLine( const Value &root );

+      bool hasCommentForValue( const Value &value );

+      static std::string normalizeEOL( const std::string &text );

+

+      typedef std::vector<std::string> ChildValues;

+

+      ChildValues childValues_;

+      std::string document_;

+      std::string indentString_;

+      int rightMargin_;

+      int indentSize_;

+      bool addChildValues_;

+   };

+

+   std::string JSON_API valueToString( Value::Int value );

+   std::string JSON_API valueToString( Value::UInt value );

+   std::string JSON_API valueToString( double value );

+   std::string JSON_API valueToString( bool value );

+   std::string JSON_API valueToQuotedString( const char *value );

+

+} // namespace Json

+

+

+

+#endif // JSON_WRITER_H_INCLUDED