diff --git a/include/json/reader.h b/include/json/reader.h
index 8b388b0..805200a 100644
--- a/include/json/reader.h
+++ b/include/json/reader.h
@@ -37,209 +37,214 @@ namespace Json {
* \deprecated Use CharReader and CharReaderBuilder.
*/
class [[deprecated(
- "deprecated Use CharReader and CharReaderBuilder.")]] JSON_API Reader {
-public:
- typedef char Char;
- typedef const Char* Location;
-
- /** \brief An error tagged with where in the JSON text it was encountered.
- *
- * The offsets give the [start, limit) range of bytes within the text. Note
- * that this is bytes, not codepoints.
- */
- struct StructuredError {
- ptrdiff_t offset_start;
- ptrdiff_t offset_limit;
- String message;
- };
-
- /** \brief Constructs a Reader allowing all features for parsing.
- */
- Reader();
-
- /** \brief Constructs a Reader allowing the specified feature set for parsing.
- */
- Reader(const Features& features);
-
- /** \brief Read a Value from a JSON
- * document.
- *
- * \param document UTF-8 encoded string containing the document
- * to read.
- * \param[out] root Contains the root value of the document if it
- * was successfully parsed.
- * \param collectComments \c true to collect comment and allow writing
- * them back during serialization, \c false to
- * discard comments. This parameter is ignored
- * if Features::allowComments_ is \c false.
- * \return \c true if the document was successfully parsed, \c false if an
- * error occurred.
- */
- bool parse(const std::string& document, Value& root,
- bool collectComments = true);
-
- /** \brief Read a Value from a JSON
- * document.
- *
- * \param beginDoc Pointer on the beginning of the UTF-8 encoded
- * string of the document to read.
- * \param endDoc Pointer on the end of the UTF-8 encoded string
- * of the document to read. Must be >= beginDoc.
- * \param[out] root Contains the root value of the document if it
- * was successfully parsed.
- * \param collectComments \c true to collect comment and allow writing
- * them back during serialization, \c false to
- * discard comments. This parameter is ignored
- * if Features::allowComments_ is \c false.
- * \return \c true if the document was successfully parsed, \c false if an
- * error occurred.
- */
- bool parse(const char* beginDoc, const char* endDoc, Value& root,
- bool collectComments = true);
-
- /// \brief Parse from input stream.
- /// \see Json::operator>>(std::istream&, Json::Value&).
- bool parse(IStream & is, Value & root, bool collectComments = true);
-
- /** \brief Returns a user friendly string that list errors in the parsed
- * document.
- *
- * \return Formatted error message with the list of errors with their
- * location in the parsed document. An empty string is returned if no error
- * occurred during parsing.
- * \deprecated Use getFormattedErrorMessages() instead (typo fix).
- */
- [[deprecated("Use getFormattedErrorMessages() instead.")]] String
- getFormatedErrorMessages() const;
-
- /** \brief Returns a user friendly string that list errors in the parsed
- * document.
- *
- * \return Formatted error message with the list of errors with their
- * location in the parsed document. An empty string is returned if no error
- * occurred during parsing.
- */
- String getFormattedErrorMessages() const;
-
- /** \brief Returns a vector of structured errors encountered while parsing.
- *
- * \return A (possibly empty) vector of StructuredError objects. Currently
- * only one error can be returned, but the caller should tolerate multiple
- * errors. This can occur if the parser recovers from a non-fatal parse
- * error and then encounters additional errors.
- */
- std::vector getStructuredErrors() const;
-
- /** \brief Add a semantic error message.
- *
- * \param value JSON Value location associated with the error
- * \param message The error message.
- * \return \c true if the error was successfully added, \c false if the Value
- * offset exceeds the document size.
- */
- bool pushError(const Value& value, const String& message);
-
- /** \brief Add a semantic error message with extra context.
- *
- * \param value JSON Value location associated with the error
- * \param message The error message.
- * \param extra Additional JSON Value location to contextualize the error
- * \return \c true if the error was successfully added, \c false if either
- * Value offset exceeds the document size.
- */
- bool pushError(const Value& value, const String& message, const Value& extra);
-
- /** \brief Return whether there are any errors.
- *
- * \return \c true if there are no errors to report \c false if errors have
- * occurred.
- */
- bool good() const;
-
-private:
- enum TokenType {
- tokenEndOfStream = 0,
- tokenObjectBegin,
- tokenObjectEnd,
- tokenArrayBegin,
- tokenArrayEnd,
- tokenString,
- tokenNumber,
- tokenTrue,
- tokenFalse,
- tokenNull,
- tokenArraySeparator,
- tokenMemberSeparator,
- tokenComment,
- tokenError
- };
-
- class Token {
- public:
- TokenType type_;
- Location start_;
- Location end_;
- };
-
- class ErrorInfo {
- public:
- Token token_;
- String message_;
- Location extra_;
- };
-
- typedef std::deque Errors;
-
- bool readToken(Token & token);
- void skipSpaces();
- bool match(const Char* pattern, int patternLength);
- bool readComment();
- bool readCStyleComment();
- bool readCppStyleComment();
- bool readString();
- void readNumber();
- bool readValue();
- bool readObject(Token & token);
- bool readArray(Token & token);
- bool decodeNumber(Token & token);
- bool decodeNumber(Token & token, Value & decoded);
- bool decodeString(Token & token);
- bool decodeString(Token & token, String & decoded);
- bool decodeDouble(Token & token);
- bool decodeDouble(Token & token, Value & decoded);
- bool decodeUnicodeCodePoint(Token & token, Location & current, Location end,
- unsigned int& unicode);
- bool decodeUnicodeEscapeSequence(Token & token, Location & current,
- Location end, unsigned int& unicode);
- bool addError(const String& message, Token& token, Location extra = nullptr);
- bool recoverFromError(TokenType skipUntilToken);
- bool addErrorAndRecover(const String& message, Token& token,
- TokenType skipUntilToken);
- void skipUntilSpace();
- Value& currentValue();
- Char getNextChar();
- void getLocationLineAndColumn(Location location, int& line, int& column)
- const;
- String getLocationLineAndColumn(Location location) const;
- void addComment(Location begin, Location end, CommentPlacement placement);
- void skipCommentTokens(Token & token);
-
- static bool containsNewLine(Location begin, Location end);
- static String normalizeEOL(Location begin, Location end);
-
- typedef std::stack Nodes;
- Nodes nodes_;
- Errors errors_;
- String document_;
- Location begin_{};
- Location end_{};
- Location current_{};
- Location lastValueEnd_{};
- Value* lastValue_{};
- String commentsBefore_;
- Features features_;
- bool collectComments_{};
-}; // Reader
+ "deprecated Use CharReader and CharReaderBuilder.")]] JSON_API
+ Reader {
+ public:
+ typedef char Char;
+ typedef const Char* Location;
+
+ /** \brief An error tagged with where in the JSON text it was
+ * encountered.
+ *
+ * The offsets give the [start, limit) range of bytes within the
+ * text. Note that this is bytes, not codepoints.
+ */
+ struct StructuredError {
+ ptrdiff_t offset_start;
+ ptrdiff_t offset_limit;
+ String message;
+ };
+
+ /** \brief Constructs a Reader allowing all features for parsing.
+ */
+ Reader();
+
+ /** \brief Constructs a Reader allowing the specified feature set
+ * for parsing.
+ */
+ Reader(const Features& features);
+
+ /** \brief Read a Value from a JSON document.
+ *
+ * \param document UTF-8 encoded string containing the
+ * document to read. \param[out] root Contains the root
+ * value of the document if it was successfully parsed. \param
+ * collectComments \c true to collect comment and allow writing them
+ * back during serialization, \c false to discard comments. This
+ * parameter is ignored if Features::allowComments_ is \c false.
+ * \return \c true if the document was successfully parsed, \c false
+ * if an error occurred.
+ */
+ bool parse(const std::string& document, Value& root,
+ bool collectComments = true);
+
+ /** \brief Read a Value from a JSON document.
+ *
+ * \param beginDoc Pointer on the beginning of the UTF-8
+ * encoded string of the document to read. \param endDoc
+ * Pointer on the end of the UTF-8 encoded string of the document to
+ * read. Must be >= beginDoc. \param[out] root Contains
+ * the root value of the document if it was successfully parsed.
+ * \param collectComments \c true to collect comment and allow
+ * writing them back during serialization, \c false to discard
+ * comments. This parameter is ignored if Features::allowComments_
+ * is \c false. \return \c true if the document was successfully
+ * parsed, \c false if an error occurred.
+ */
+ bool parse(const char* beginDoc, const char* endDoc, Value& root,
+ bool collectComments = true);
+
+ /// \brief Parse from input stream.
+ /// \see Json::operator>>(std::istream&, Json::Value&).
+ bool parse(IStream & is, Value & root, bool collectComments = true);
+
+ /** \brief Returns a user friendly string that list errors in the
+ * parsed document.
+ *
+ * \return Formatted error message with the list of errors with
+ * their location in the parsed document. An empty string is
+ * returned if no error occurred during parsing. \deprecated Use
+ * getFormattedErrorMessages() instead (typo fix).
+ */
+ [[deprecated("Use getFormattedErrorMessages() instead.")]] String
+ getFormatedErrorMessages() const;
+
+ /** \brief Returns a user friendly string that list errors in the
+ * parsed document.
+ *
+ * \return Formatted error message with the list of errors with
+ * their location in the parsed document. An empty string is
+ * returned if no error occurred during parsing.
+ */
+ String getFormattedErrorMessages() const;
+
+ /** \brief Returns a vector of structured errors encountered while
+ * parsing.
+ *
+ * \return A (possibly empty) vector of StructuredError objects.
+ * Currently only one error can be returned, but the caller should
+ * tolerate multiple errors. This can occur if the parser recovers
+ * from a non-fatal parse error and then encounters additional
+ * errors.
+ */
+ std::vector getStructuredErrors() const;
+
+ /** \brief Add a semantic error message.
+ *
+ * \param value JSON Value location associated with the error
+ * \param message The error message.
+ * \return \c true if the error was successfully added, \c false if
+ * the Value offset exceeds the document size.
+ */
+ bool pushError(const Value& value, const String& message);
+
+ /** \brief Add a semantic error message with extra context.
+ *
+ * \param value JSON Value location associated with the error
+ * \param message The error message.
+ * \param extra Additional JSON Value location to contextualize
+ * the error \return \c true if the error was successfully added, \c
+ * false if either Value offset exceeds the document size.
+ */
+ bool pushError(const Value& value, const String& message,
+ const Value& extra);
+
+ /** \brief Return whether there are any errors.
+ *
+ * \return \c true if there are no errors to report \c false if
+ * errors have occurred.
+ */
+ bool good() const;
+
+ private:
+ enum TokenType {
+ tokenEndOfStream = 0,
+ tokenObjectBegin,
+ tokenObjectEnd,
+ tokenArrayBegin,
+ tokenArrayEnd,
+ tokenString,
+ tokenNumber,
+ tokenTrue,
+ tokenFalse,
+ tokenNull,
+ tokenArraySeparator,
+ tokenMemberSeparator,
+ tokenComment,
+ tokenError
+ };
+
+ class Token {
+ public:
+ TokenType type_;
+ Location start_;
+ Location end_;
+ };
+
+ class ErrorInfo {
+ public:
+ Token token_;
+ String message_;
+ Location extra_;
+ };
+
+ typedef std::deque Errors;
+
+ bool readToken(Token & token);
+ void skipSpaces();
+ bool match(const Char* pattern, int patternLength);
+ bool readComment();
+ bool readCStyleComment();
+ bool readCppStyleComment();
+ bool readString();
+ void readNumber();
+ bool readValue();
+ bool readObject(Token & token);
+ bool readArray(Token & token);
+ bool decodeNumber(Token & token);
+ bool decodeNumber(Token & token, Value & decoded);
+ bool decodeString(Token & token);
+ bool decodeString(Token & token, String & decoded);
+ bool decodeDouble(Token & token);
+ bool decodeDouble(Token & token, Value & decoded);
+ bool decodeUnicodeCodePoint(Token & token, Location & current,
+ Location end, unsigned int& unicode);
+ bool decodeUnicodeEscapeSequence(Token & token, Location & current,
+ Location end,
+ unsigned int& unicode);
+ bool addError(const String& message, Token& token,
+ Location extra = nullptr);
+ bool recoverFromError(TokenType skipUntilToken);
+ bool addErrorAndRecover(const String& message, Token& token,
+ TokenType skipUntilToken);
+ void skipUntilSpace();
+ Value& currentValue();
+ Char getNextChar();
+ void getLocationLineAndColumn(Location location, int& line,
+ int& column) const;
+ String getLocationLineAndColumn(Location location) const;
+ void addComment(Location begin, Location end,
+ CommentPlacement placement);
+ void skipCommentTokens(Token & token);
+
+ static bool containsNewLine(Location begin, Location end);
+ static String normalizeEOL(Location begin, Location end);
+
+ typedef std::stack Nodes;
+ Nodes nodes_;
+ Errors errors_;
+ String document_;
+ Location begin_{};
+ Location end_{};
+ Location current_{};
+ Location lastValueEnd_{};
+ Value* lastValue_{};
+ String commentsBefore_;
+ Features features_;
+ bool collectComments_{};
+ }; // Reader
/** Interface for reading JSON from a char array.
*/
diff --git a/include/json/writer.h b/include/json/writer.h
index 9799a3b..63d31a0 100644
--- a/include/json/writer.h
+++ b/include/json/writer.h
@@ -165,7 +165,7 @@ public:
#pragma warning(push)
#pragma warning(disable : 4996) // Deriving from deprecated class
#endif
-class [[deprecated("Use StreamWriterBuilder instead")]] JSON_API FastWriter
+class[[deprecated("Use StreamWriterBuilder instead")]] JSON_API FastWriter
: public Writer {
public:
FastWriter();
@@ -225,7 +225,7 @@ private:
#pragma warning(push)
#pragma warning(disable : 4996) // Deriving from deprecated class
#endif
-class [[deprecated("Use StreamWriterBuilder instead")]] JSON_API StyledWriter
+class[[deprecated("Use StreamWriterBuilder instead")]] JSON_API StyledWriter
: public Writer {
public:
StyledWriter();
@@ -295,7 +295,7 @@ private:
#pragma warning(disable : 4996) // Deriving from deprecated class
#endif
class [[deprecated(
- "Use StreamWriterBuilder instead")]] JSON_API StyledStreamWriter {
+ "Use StreamWriterBuilder instead")]] JSON_API StyledStreamWriter {
public:
/**
* \param indentation Each level will be indented by this amount extra.
diff --git a/src/lib_json/json_value.cpp b/src/lib_json/json_value.cpp
index 4f71e77..10767eb 100644
--- a/src/lib_json/json_value.cpp
+++ b/src/lib_json/json_value.cpp
@@ -212,14 +212,17 @@ Exception::Exception(String msg) : msg_(std::move(msg)) {}
Exception::~Exception() JSONCPP_NOEXCEPT {}
char const* Exception::what() const JSONCPP_NOEXCEPT { return msg_.c_str(); }
RuntimeError::RuntimeError(String const& msg) : Exception(msg) {}
-LogicError::LogicError(String const& msg) : Exception(msg) {}
-[[noreturn]] void throwRuntimeError(String const& msg) {
+LogicError::LogicError(String const& msg)
+ : Exception(msg){}[[noreturn]] void throwRuntimeError(String const& msg) {
throw RuntimeError(msg);
}
[[noreturn]] void throwLogicError(String const& msg) { throw LogicError(msg); }
#else // !JSON_USE_EXCEPTION
-[[noreturn]] void throwRuntimeError(String const& msg) { abort(); }
-[[noreturn]] void throwLogicError(String const& msg) { abort(); }
+[[noreturn]] void throwRuntimeError(String const& msg) {
+ abort();
+}[[noreturn]] void throwLogicError(String const& msg) {
+ abort();
+}
#endif
// //////////////////////////////////////////////////////////////////
@@ -233,7 +236,9 @@ LogicError::LogicError(String const& msg) : Exception(msg) {}
// Notes: policy_ indicates if the string was allocated when
// a string is stored.
-Value::CZString::CZString(ArrayIndex index) : cstr_(nullptr), index_(index) {}
+Value::CZString::CZString(ArrayIndex index)
+ : cstr_(nullptr), index_(index) {
+}
Value::CZString::CZString(char const* str,
unsigned length,