1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-12 10:03:53 +02:00
vcmi/lib/json/JsonParser.h

61 lines
1.8 KiB
C++
Raw Normal View History

/*
* 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
//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);
bool extractWhitespace(bool verbose = true);
bool extractSeparator();
2024-02-13 19:16:35 +02:00
bool extractElement(JsonNode & node, char terminator);
//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);
//Add error\warning message to list
2024-02-13 19:16:35 +02:00
bool error(const std::string & message, bool warning = false);
public:
2024-02-13 22:19:24 +02:00
JsonParser(const std::byte * inputString, size_t stringSize, const JsonParsingSettings & settings);
/// 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