pgadmin3/include/utils/json/jsonreader.h
lsv 4f10ebc477 Support GitLab experimental
Добавлена возможность сохранять SQL представления объектов в GitLab
Описание в Readme.MD
2022-11-24 19:19:37 +05:00

148 lines
4.4 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Name: jsonreader.h
// Purpose: the parser of JSON text
// Author: Luciano Cattani
// Created: 2007/09/15
// RCS-ID: $Id: jsonreader.h,v 1.3 2008/03/03 19:05:45 luccat Exp $
// Copyright: (c) 2007 Luciano Cattani
// Licence: wxWidgets licence
/////////////////////////////////////////////////////////////////////////////
#include "pgAdmin3.h"
#if !defined( _WX_JSONREADER_H )
#define _WX_JSONREADER_H
#ifdef __GNUG__
#pragma interface "jsonreader.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 <wx/stream.h>
#include <wx/string.h>
#include <wx/arrstr.h>
#endif
// The flags of the parser
enum {
wxJSONREADER_STRICT = 0,
wxJSONREADER_ALLOW_COMMENTS = 1,
wxJSONREADER_STORE_COMMENTS = 2,
wxJSONREADER_CASE = 4,
wxJSONREADER_MISSING = 8,
wxJSONREADER_MULTISTRING = 16,
wxJSONREADER_COMMENTS_AFTER = 32,
wxJSONREADER_NOUTF8_STREAM = 64,
wxJSONREADER_MEMORYBUFF = 128,
wxJSONREADER_TOLERANT = wxJSONREADER_ALLOW_COMMENTS | wxJSONREADER_CASE |
wxJSONREADER_MISSING | wxJSONREADER_MULTISTRING,
wxJSONREADER_COMMENTS_BEFORE = wxJSONREADER_ALLOW_COMMENTS | wxJSONREADER_STORE_COMMENTS
};
class WXDLLIMPEXP_JSON wxJSONReader
{
public:
wxJSONReader(int flags = wxJSONREADER_TOLERANT, int maxErrors = 30);
virtual ~wxJSONReader();
int Parse(const wxString& doc, wxJSONValue* val);
int Parse(wxInputStream& doc, wxJSONValue* val);
int GetDepth() const;
int GetErrorCount() const;
int GetWarningCount() const;
const wxArrayString& GetErrors() const;
const wxArrayString& GetWarnings() const;
static int UTF8NumBytes(char ch);
#if defined( wxJSON_64BIT_INT )
static bool Strtoll(const wxString& str, wxInt64* i64);
static bool Strtoull(const wxString& str, wxUint64* ui64);
static bool DoStrto_ll(const wxString& str, wxUint64* ui64, wxChar* sign);
#endif
protected:
int DoRead(wxInputStream& doc, wxJSONValue& val);
void AddError(const wxString& descr);
void AddError(const wxString& fmt, const wxString& str);
void AddError(const wxString& fmt, wxChar ch);
void AddWarning(int type, const wxString& descr);
int GetStart(wxInputStream& is);
int ReadChar(wxInputStream& is);
int PeekChar(wxInputStream& is);
void StoreValue(int ch, const wxString& key, wxJSONValue& value, wxJSONValue& parent);
int SkipWhiteSpace(wxInputStream& is);
int SkipComment(wxInputStream& is);
void StoreComment(const wxJSONValue* parent);
int ReadString(wxInputStream& is, wxJSONValue& val);
int ReadToken(wxInputStream& is, int ch, wxString& s);
int ReadValue(wxInputStream& is, int ch, wxJSONValue& val);
int ReadUES(wxInputStream& is, char* uesBuffer);
int AppendUES(wxMemoryBuffer& utf8Buff, const char* uesBuffer);
int NumBytes(char ch);
int ConvertCharByChar(wxString& s, const wxMemoryBuffer& utf8Buffer);
int ReadMemoryBuff(wxInputStream& is, wxJSONValue& val);
//! Flag that control the parser behaviour,
int m_flags;
//! Maximum number of errors stored in the error's array
int m_maxErrors;
//! The current line number (start at 1).
int m_lineNo;
//! The current column number (start at 1).
int m_colNo;
//! The current level of object/array annidation (start at ZERO).
int m_level;
//! The depth level of the read JSON text
int m_depth;
//! The pointer to the value object that is being read.
wxJSONValue* m_current;
//! The pointer to the value object that was last stored.
wxJSONValue* m_lastStored;
//! The pointer to the value object that will be read.
wxJSONValue* m_next;
//! The comment string read by SkipComment().
wxString m_comment;
//! The starting line of the comment string.
int m_commentLine;
//! The array of error messages.
wxArrayString m_errors;
//! The array of warning messages.
wxArrayString m_warnings;
//! The character read by the PeekChar() function (-1 none)
int m_peekChar;
//! ANSI: do not convert UTF-8 strings
bool m_noUtf8;
};
#endif // not defined _WX_JSONREADER_H