2024-02-11 23:09:01 +02:00
|
|
|
/*
|
|
|
|
* JsonParser.h, part of VCMI engine
|
|
|
|
*
|
|
|
|
* Authors: listed in file AUTHORS in main folder
|
|
|
|
*
|
|
|
|
* License: GNU General Public License v2.0 or later
|
|
|
|
* Full text of license available in license.txt file, in main folder
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "JsonNode.h"
|
|
|
|
|
|
|
|
VCMI_LIB_NAMESPACE_BEGIN
|
|
|
|
|
|
|
|
//Internal class for string -> JsonNode conversion
|
|
|
|
class JsonParser
|
|
|
|
{
|
2024-02-13 18:08:35 +02:00
|
|
|
const JsonParsingSettings settings;
|
|
|
|
|
2024-02-13 19:16:35 +02:00
|
|
|
std::string errors; // Contains description of all encountered errors
|
|
|
|
std::string_view input; // Input data
|
2024-02-13 19:07:51 +02:00
|
|
|
uint32_t lineCount; // Currently parsed line, starting from 1
|
|
|
|
uint32_t currentDepth;
|
2024-02-13 19:16:35 +02:00
|
|
|
size_t lineStart; // Position of current line start
|
|
|
|
size_t pos; // Current position of parser
|
2024-02-11 23:09:01 +02:00
|
|
|
|
|
|
|
//Helpers
|
2024-02-13 19:16:35 +02:00
|
|
|
bool extractEscaping(std::string & str);
|
|
|
|
bool extractLiteral(std::string & literal);
|
|
|
|
bool extractAndCompareLiteral(const std::string & expectedLiteral);
|
|
|
|
bool extractString(std::string & string);
|
2024-02-11 23:09:01 +02:00
|
|
|
bool extractWhitespace(bool verbose = true);
|
|
|
|
bool extractSeparator();
|
2024-02-13 19:16:35 +02:00
|
|
|
bool extractElement(JsonNode & node, char terminator);
|
2024-02-11 23:09:01 +02:00
|
|
|
|
|
|
|
//Methods for extracting JSON data
|
2024-02-13 19:16:35 +02:00
|
|
|
bool extractArray(JsonNode & node);
|
|
|
|
bool extractFalse(JsonNode & node);
|
|
|
|
bool extractFloat(JsonNode & node);
|
|
|
|
bool extractNull(JsonNode & node);
|
|
|
|
bool extractString(JsonNode & node);
|
|
|
|
bool extractStruct(JsonNode & node);
|
|
|
|
bool extractTrue(JsonNode & node);
|
|
|
|
bool extractValue(JsonNode & node);
|
2024-02-11 23:09:01 +02:00
|
|
|
|
|
|
|
//Add error\warning message to list
|
2024-02-13 19:16:35 +02:00
|
|
|
bool error(const std::string & message, bool warning = false);
|
2024-02-11 23:09:01 +02:00
|
|
|
|
|
|
|
public:
|
2024-02-13 22:19:24 +02:00
|
|
|
JsonParser(const std::byte * inputString, size_t stringSize, const JsonParsingSettings & settings);
|
2024-02-11 23:09:01 +02:00
|
|
|
|
|
|
|
/// do actual parsing. filename is name of file that will printed to console if any errors were found
|
|
|
|
JsonNode parse(const std::string & fileName);
|
|
|
|
|
|
|
|
/// returns true if parsing was successful
|
|
|
|
bool isValid();
|
|
|
|
};
|
|
|
|
|
|
|
|
VCMI_LIB_NAMESPACE_END
|