text: /////////////////////////////////////////////////////////////////////////////
  // Name:        jsonwriter.h
  // Purpose:     the generator of JSON text from a JSON value
  // Author:      Luciano Cattani
  // Created:     2007/09/15
  // RCS-ID:      $Id: jsonwriter.h,v 1.4 2008/03/03 19:05:45 luccat Exp $
  // Copyright:   (c) 2007 Luciano Cattani
  // Licence:     wxWidgets licence
  /////////////////////////////////////////////////////////////////////////////
  
  #if !defined( _WX_JSONWRITER_H )
  #define _WX_JSONWRITER_H
  
  #ifdef __GNUG__
      #pragma interface "jsonwriter.h"
  #endif
  
  // For compilers that support precompilation, includes "wx/wx.h".
  #include "wx/wxprec.h"
  
  #ifdef __BORLANDC__
      #pragma hdrstop
  #endif
  
  // for all others, include the necessary headers (this file is usually all you
  // need because it includes almost all "standard" wxWidgets headers)
  #ifndef WX_PRECOMP
      #include <wx/stream.h>
      #include <wx/string.h>
  #endif
  
  #include "json_defs.h"
  #include "jsonval.h"
  
  enum {
      wxJSONWRITER_NONE            = 0,
      wxJSONWRITER_STYLED          = 1,
      wxJSONWRITER_WRITE_COMMENTS  = 2,
      wxJSONWRITER_COMMENTS_BEFORE = 4,
      wxJSONWRITER_COMMENTS_AFTER  = 8,
      wxJSONWRITER_SPLIT_STRING    = 16,
      wxJSONWRITER_NO_LINEFEEDS    = 32,
      wxJSONWRITER_ESCAPE_SOLIDUS     = 64,
      wxJSONWRITER_MULTILINE_STRING   = 128,
      wxJSONWRITER_RECOGNIZE_UNSIGNED = 256,
      wxJSONWRITER_TAB_INDENT         = 512,
      wxJSONWRITER_NO_INDENTATION     = 1024,
      wxJSONWRITER_NOUTF8_STREAM      = 2048,
      wxJSONWRITER_MEMORYBUFF         = 4096
  };
  
  // class declaration
  
  class WXDLLIMPEXP_JSON wxJSONWriter
  {
  public:
      wxJSONWriter( int style = wxJSONWRITER_STYLED, int indent = 0, int step = 3 );
      ~wxJSONWriter();
  
      void Write( const wxJSONValue& value, wxString& str );
      void Write( const wxJSONValue& value, wxOutputStream& os );
      void SetDoubleFmtString( const char* fmt );
  
  protected:
  
      int  DoWrite( wxOutputStream& os, const wxJSONValue& value, const wxString* key, bool comma );
      int  WriteIndent( wxOutputStream& os );
      int  WriteIndent( wxOutputStream& os, int num );
      bool IsSpace( wxChar ch );
      bool IsPunctuation( wxChar ch );
  
      int  WriteString( wxOutputStream& os, const wxString& str );
      int  WriteStringValue( wxOutputStream& os, const wxString& str );
      int  WriteNullValue( wxOutputStream& os );
      int  WriteIntValue( wxOutputStream& os, const wxJSONValue& v );
      int  WriteUIntValue( wxOutputStream& os, const wxJSONValue& v );
      int  WriteBoolValue( wxOutputStream& os, const wxJSONValue& v );
      int  WriteDoubleValue( wxOutputStream& os, const wxJSONValue& v );
      int  WriteMemoryBuff( wxOutputStream& os, const wxMemoryBuffer& buff );
  
      int  WriteInvalid( wxOutputStream& os );
      int  WriteSeparator( wxOutputStream& os );
  
      int  WriteKey( wxOutputStream& os, const wxString& key );
      int  WriteComment( wxOutputStream& os, const wxJSONValue& value, bool indent );
  
      int  WriteError( const wxString& err );
  
  private:
      //! The style flag is a combination of wxJSONWRITER_(something) constants.
      int   m_style;
  
      //! The initial indentation value, in number of spaces.
      int   m_indent;
  
      //! The indentation increment, in number of spaces.
      int   m_step;
  
      //! JSON value objects can be nested; this is the level of annidation (used internally).
      int   m_level;
  
      // The line number when printing JSON text output (not yet used)
      int   m_lineNo;
  
      // The column number when printing JSON text output
      int   m_colNo;
  
      // Flag used in ANSI mode that controls UTF-8 conversion
      bool  m_noUtf8;
  
      // The format string for printing doubles
      char* m_fmt;
  };
  
  
  #endif            // not defined _WX_JSONWRITER_H
  
  
  
  