ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/ermyth/modules/rpc/include/json/reader.h
Revision: 1.3
Committed: Wed Sep 5 11:23:15 2007 UTC (19 years, 1 month ago) by pippijn
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.2: +2 -2 lines
Log Message:
removed GPLed code and put license back to BSD

File Contents

# User Rev Content
1 pippijn 1.2 /*
2     * Copyright © 2007 Pippijn van Steenhoven / The Ermyth Team
3 pippijn 1.3 * Rights to this code are as documented in doc/pod/license.pod.
4 pippijn 1.2 *
5     * JSON-RPC for Ermyth
6     *
7 pippijn 1.3 * $Id: reader.h,v 1.2 2007-08-28 17:08:12 pippijn Exp $
8 pippijn 1.2 */
9    
10 pippijn 1.1 //>>>>>>>>>>> reader.h <<<<<<<<<<<//
11     #ifndef READER_H
12     #define READER_H
13    
14     #include <deque>
15     #include <stack>
16     #include <string>
17     #include <iostream>
18    
19     #include "json/value.h"
20    
21     namespace json
22     {
23     class Value;
24    
25     class Reader
26     {
27     public:
28     typedef char const *Location;
29    
30     Reader ();
31    
32     bool parse (const std::string &document, Value &root, bool collectComments = true);
33     bool parse (char const *beginDoc, char const *endDOc, Value &root, bool collectComments = true);
34     bool parse (std::istream &, Value &root, bool collectComments = true);
35    
36     std::string error_msgs () const;
37    
38     private:
39     enum TokenType
40     {
41     tokenEndOfStream = 0,
42     tokenObjectBegin,
43     tokenObjectEnd,
44     tokenArrayBegin,
45     tokenArrayEnd,
46     tokenString,
47     tokenNumber,
48     tokenTrue,
49     tokenFalse,
50     tokenNull,
51     tokenArraySeparator,
52     tokenMemberSeparator,
53     tokenComment,
54     tokenError
55     };
56    
57     class Token
58     {
59     public:
60     TokenType type_;
61     Location start_;
62     Location end_;
63     };
64    
65     class ErrorInfo
66     {
67     public:
68     Token token_;
69     std::string message_;
70     Location extra_;
71     };
72    
73     typedef std::deque<ErrorInfo> Errors;
74    
75     bool expectToken (TokenType type, Token &token, char const *message);
76     bool readToken (Token &token);
77     void skipSpaces ();
78     bool match (Location pattern,
79     int patternLength);
80     bool readComment ();
81     bool readCStyleComment ();
82     bool readCppStyleComment ();
83     bool readString ();
84     void readNumber ();
85     bool readValue ();
86     bool readObject ();
87     bool readArray ();
88     bool decodeNumber (Token &token);
89     bool decodeString (Token &token);
90     bool decodeString (Token &token, std::string &decoded);
91     bool decodeDouble (Token &token);
92     bool decodeUnicodeEscapeSequence (Token &token,
93     Location &current,
94     Location end,
95     unsigned &unicode);
96     bool addError (const std::string &message,
97     Token &token,
98     Location extra = 0);
99     bool recoverFromError (TokenType skipUntilToken);
100     bool addErrorAndRecover (const std::string &message,
101     Token &token,
102     TokenType skipUntilToken);
103     void skipUntilSpace ();
104     Value &currentValue ();
105     char getNextChar ();
106     void getLocationLineAndColumn (Location location,
107     int &line,
108     int &column) const;
109     std::string getLocationLineAndColumn (Location location) const;
110     void addComment (Location begin,
111     Location end,
112     CommentPlacement placement);
113     void skipCommentTokens (Token &token);
114    
115     typedef std::stack<Value *> Nodes;
116     Nodes nodes_;
117     Errors errors_;
118     std::string document_;
119     Location begin_;
120     Location end_;
121     Location current_;
122     Location lastValueEnd_;
123     Value *lastValue_;
124     std::string commentsBefore_;
125     bool collectComments_;
126     };
127    
128     std::istream& operator >> (std::istream&, Value&);
129    
130     } // namespace json
131    
132     #endif // READER_H