///////////////////////////////////////////////////////////////////////////// // 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 ///////////////////////////////////////////////////////////////////////////// #include "pgAdmin3.h" #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". #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 #include #endif #include "utils/json/json_defs.h" #include "utils/json/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