6 #ifndef CPPTL_JSON_READER_H_INCLUDED
7 #define CPPTL_JSON_READER_H_INCLUDED
9 #if !defined(JSON_IS_AMALGAMATION)
12 #endif // if !defined(JSON_IS_AMALGAMATION)
21 #if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
23 #pragma warning(disable : 4251)
24 #endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
40 typedef const Char* Location;
47 struct StructuredError {
48 ptrdiff_t offset_start;
49 ptrdiff_t offset_limit;
77 bool parse(
const std::string& document,
Value& root,
78 bool collectComments =
true);
96 bool parse(
const char* beginDoc,
const char* endDoc,
Value& root,
97 bool collectComments =
true);
101 bool parse(
IStream& is,
Value& root,
bool collectComments =
true);
112 String getFormatedErrorMessages()
const;
121 String getFormattedErrorMessages()
const;
130 std::vector<StructuredError> getStructuredErrors()
const;
139 bool pushError(
const Value& value,
const String& message);
149 bool pushError(
const Value& value,
const String& message,
const Value& extra);
160 tokenEndOfStream = 0,
171 tokenMemberSeparator,
190 typedef std::deque<ErrorInfo> Errors;
192 bool readToken(Token& token);
194 bool match(
const Char* pattern,
int patternLength);
196 bool readCStyleComment();
197 bool readCppStyleComment();
201 bool readObject(Token& token);
202 bool readArray(Token& token);
203 bool decodeNumber(Token& token);
204 bool decodeNumber(Token& token,
Value& decoded);
205 bool decodeString(Token& token);
206 bool decodeString(Token& token,
String& decoded);
207 bool decodeDouble(Token& token);
208 bool decodeDouble(Token& token,
Value& decoded);
209 bool decodeUnicodeCodePoint(Token& token, Location& current, Location end,
210 unsigned int& unicode);
211 bool decodeUnicodeEscapeSequence(Token& token, Location& current,
212 Location end,
unsigned int& unicode);
213 bool addError(
const String& message, Token& token, Location extra =
nullptr);
214 bool recoverFromError(TokenType skipUntilToken);
215 bool addErrorAndRecover(
const String& message, Token& token,
216 TokenType skipUntilToken);
217 void skipUntilSpace();
218 Value& currentValue();
220 void getLocationLineAndColumn(Location location,
int& line,
222 String getLocationLineAndColumn(Location location)
const;
224 void skipCommentTokens(Token& token);
226 static bool containsNewLine(Location begin, Location end);
227 static String normalizeEOL(Location begin, Location end);
229 typedef std::stack<Value*> Nodes;
236 Location lastValueEnd_{};
240 bool collectComments_{};
264 virtual bool parse(
char const* beginDoc,
char const* endDoc,
Value* root,
273 virtual CharReader* newCharReader()
const = 0;
397 #if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
399 #endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
401 #endif // CPPTL_JSON_READER_H_INCLUDED