1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-06-08 23:36:33 +02:00

Unify formatting

This commit is contained in:
Ivan Savenko 2024-02-13 19:16:35 +02:00
parent 2632ab04f5
commit 18bbccd167
7 changed files with 315 additions and 261 deletions

View File

@ -11,9 +11,9 @@
#include "StdInc.h" #include "StdInc.h"
#include "JsonNode.h" #include "JsonNode.h"
#include "filesystem/Filesystem.h"
#include "JsonParser.h" #include "JsonParser.h"
#include "JsonWriter.h" #include "JsonWriter.h"
#include "filesystem/Filesystem.h"
namespace namespace
{ {
@ -56,31 +56,38 @@ static const JsonNode nullNode;
JsonNode::JsonNode(bool boolean) JsonNode::JsonNode(bool boolean)
: data(boolean) : data(boolean)
{} {
}
JsonNode::JsonNode(int32_t number) JsonNode::JsonNode(int32_t number)
: data(static_cast<int64_t>(number)) : data(static_cast<int64_t>(number))
{} {
}
JsonNode::JsonNode(uint32_t number) JsonNode::JsonNode(uint32_t number)
: data(static_cast<int64_t>(number)) : data(static_cast<int64_t>(number))
{} {
}
JsonNode::JsonNode(int64_t number) JsonNode::JsonNode(int64_t number)
: data(number) : data(number)
{} {
}
JsonNode::JsonNode(double number) JsonNode::JsonNode(double number)
: data(number) : data(number)
{} {
}
JsonNode::JsonNode(const std::string & string) JsonNode::JsonNode(const std::string & string)
: data(string) : data(string)
{} {
}
JsonNode::JsonNode(const std::byte * data, size_t datasize) JsonNode::JsonNode(const std::byte * data, size_t datasize)
: JsonNode(data, datasize, JsonParsingSettings()) : JsonNode(data, datasize, JsonParsingSettings())
{} {
}
JsonNode::JsonNode(const std::byte * data, size_t datasize, const JsonParsingSettings & parserSettings) JsonNode::JsonNode(const std::byte * data, size_t datasize, const JsonParsingSettings & parserSettings)
{ {
@ -150,14 +157,16 @@ void JsonNode::setModScope(const std::string & metadata, bool recursive)
{ {
switch(getType()) switch(getType())
{ {
break; case JsonType::DATA_VECTOR: break;
case JsonType::DATA_VECTOR:
{ {
for(auto & node : Vector()) for(auto & node : Vector())
{ {
node.setModScope(metadata); node.setModScope(metadata);
} }
} }
break; case JsonType::DATA_STRUCT: break;
case JsonType::DATA_STRUCT:
{ {
for(auto & node : Struct()) for(auto & node : Struct())
{ {
@ -190,13 +199,27 @@ void JsonNode::setType(JsonType Type)
//Set new node type //Set new node type
switch(Type) switch(Type)
{ {
break; case JsonType::DATA_NULL: data = JsonData(); case JsonType::DATA_NULL:
break; case JsonType::DATA_BOOL: data = JsonData(false); data = JsonData();
break; case JsonType::DATA_FLOAT: data = JsonData(static_cast<double>(0.0)); break;
break; case JsonType::DATA_STRING: data = JsonData(std::string()); case JsonType::DATA_BOOL:
break; case JsonType::DATA_VECTOR: data = JsonData(JsonVector()); data = JsonData(false);
break; case JsonType::DATA_STRUCT: data = JsonData(JsonMap()); break;
break; case JsonType::DATA_INTEGER: data = JsonData(static_cast<si64>(0)); case JsonType::DATA_FLOAT:
data = JsonData(static_cast<double>(0.0));
break;
case JsonType::DATA_STRING:
data = JsonData(std::string());
break;
case JsonType::DATA_VECTOR:
data = JsonData(JsonVector());
break;
case JsonType::DATA_STRUCT:
data = JsonData(JsonMap());
break;
case JsonType::DATA_INTEGER:
data = JsonData(static_cast<si64>(0));
break;
} }
} }

View File

@ -58,6 +58,7 @@ private:
std::string modScope; std::string modScope;
bool overrideFlag = false; bool overrideFlag = false;
public: public:
JsonNode() = default; JsonNode() = default;
@ -145,7 +146,8 @@ public:
std::string toString() const; std::string toString() const;
std::vector<std::byte> toBytes() const; std::vector<std::byte> toBytes() const;
template <typename Handler> void serialize(Handler &h) template<typename Handler>
void serialize(Handler & h)
{ {
h & modScope; h & modScope;

View File

@ -11,18 +11,18 @@
#include "StdInc.h" #include "StdInc.h"
#include "JsonParser.h" #include "JsonParser.h"
#include "JsonFormatException.h"
#include "../TextOperations.h" #include "../TextOperations.h"
#include "JsonFormatException.h"
VCMI_LIB_NAMESPACE_BEGIN VCMI_LIB_NAMESPACE_BEGIN
JsonParser::JsonParser(const char * inputString, size_t stringSize, const JsonParsingSettings & settings): JsonParser::JsonParser(const char * inputString, size_t stringSize, const JsonParsingSettings & settings)
input(inputString, stringSize), : input(inputString, stringSize)
settings(settings), , settings(settings)
currentDepth(0), , currentDepth(0)
lineCount(1), , lineCount(1)
lineStart(0), , lineStart(0)
pos(0) , pos(0)
{ {
} }
@ -79,13 +79,20 @@ bool JsonParser::extractValue(JsonNode &node)
switch(input[pos]) switch(input[pos])
{ {
case '\"': return extractString(node); case '\"':
case 'n' : return extractNull(node); return extractString(node);
case 't' : return extractTrue(node); case 'n':
case 'f' : return extractFalse(node); return extractNull(node);
case '{' : return extractStruct(node); case 't':
case '[' : return extractArray(node); return extractTrue(node);
case '-' : return extractFloat(node); case 'f':
return extractFalse(node);
case '{':
return extractStruct(node);
case '[':
return extractArray(node);
case '-':
return extractFloat(node);
default: default:
{ {
if(input[pos] >= '0' && input[pos] <= '9') if(input[pos] >= '0' && input[pos] <= '9')
@ -142,15 +149,32 @@ bool JsonParser::extractEscaping(std::string &str)
switch(input[pos]) switch(input[pos])
{ {
break; case '\"': str += '\"'; case '\"':
break; case '\\': str += '\\'; str += '\"';
break; case 'b': str += '\b'; break;
break; case 'f': str += '\f'; case '\\':
break; case 'n': str += '\n'; str += '\\';
break; case 'r': str += '\r'; break;
break; case 't': str += '\t'; case 'b':
break; case '/': str += '/'; str += '\b';
break; default: return error("Unknown escape sequence!", true); break;
case 'f':
str += '\f';
break;
case 'n':
str += '\n';
break;
case 'r':
str += '\r';
break;
case 't':
str += '\t';
break;
case '/':
str += '/';
break;
default:
return error("Unknown escape sequence!", true);
} }
return true; return true;
} }
@ -551,8 +575,7 @@ bool JsonParser::error(const std::string &message, bool warning)
std::ostringstream stream; std::ostringstream stream;
std::string type(warning ? " warning: " : " error: "); std::string type(warning ? " warning: " : " error: ");
stream << "At line " << lineCount << ", position "<<pos-lineStart stream << "At line " << lineCount << ", position " << pos - lineStart << type << message << "\n";
<< type << message <<"\n";
errors += stream.str(); errors += stream.str();
return warning; return warning;

View File

@ -9,9 +9,9 @@
*/ */
#pragma once #pragma once
#include "GameCallbackHolder.h"
#include "GameConstants.h" #include "GameConstants.h"
#include "ResourceSet.h" #include "ResourceSet.h"
#include "GameCallbackHolder.h"
VCMI_LIB_NAMESPACE_BEGIN VCMI_LIB_NAMESPACE_BEGIN

View File

@ -68,9 +68,7 @@ void JsonWriter::writeString(const std::string &string)
for(; pos < string.size(); pos++) for(; pos < string.size(); pos++)
{ {
//we need to check if special character was been already escaped //we need to check if special character was been already escaped
if((string[pos] == '\\') if((string[pos] == '\\') && (pos + 1 < string.size()) && (std::find(escaped_code.begin(), escaped_code.end(), string[pos + 1]) != escaped_code.end()))
&& (pos+1 < string.size())
&& (std::find(escaped_code.begin(), escaped_code.end(), string[pos+1]) != escaped_code.end()) )
{ {
pos++; //write unchanged, next simbol also checked pos++; //write unchanged, next simbol also checked
} }
@ -85,7 +83,6 @@ void JsonWriter::writeString(const std::string &string)
start = pos + 1; start = pos + 1;
} }
} }
} }
out.write(string.data() + start, pos - start); out.write(string.data() + start, pos - start);
out << '\"'; out << '\"';
@ -99,40 +96,48 @@ void JsonWriter::writeNode(const JsonNode &node)
switch(node.getType()) switch(node.getType())
{ {
break; case JsonNode::JsonType::DATA_NULL: case JsonNode::JsonType::DATA_NULL:
out << "null"; out << "null";
break;
break; case JsonNode::JsonType::DATA_BOOL: case JsonNode::JsonType::DATA_BOOL:
if(node.Bool()) if(node.Bool())
out << "true"; out << "true";
else else
out << "false"; out << "false";
break;
break; case JsonNode::JsonType::DATA_FLOAT: case JsonNode::JsonType::DATA_FLOAT:
out << node.Float(); out << node.Float();
break;
break; case JsonNode::JsonType::DATA_STRING: case JsonNode::JsonType::DATA_STRING:
writeString(node.String()); writeString(node.String());
break;
break; case JsonNode::JsonType::DATA_VECTOR: case JsonNode::JsonType::DATA_VECTOR:
out << "[" << (compactMode ? " " : "\n"); out << "[" << (compactMode ? " " : "\n");
writeContainer(node.Vector().begin(), node.Vector().end()); writeContainer(node.Vector().begin(), node.Vector().end());
out << (compactMode ? " " : prefix) << "]"; out << (compactMode ? " " : prefix) << "]";
break;
break; case JsonNode::JsonType::DATA_STRUCT: case JsonNode::JsonType::DATA_STRUCT:
out << "{" << (compactMode ? " " : "\n"); out << "{" << (compactMode ? " " : "\n");
writeContainer(node.Struct().begin(), node.Struct().end()); writeContainer(node.Struct().begin(), node.Struct().end());
out << (compactMode ? " " : prefix) << "}"; out << (compactMode ? " " : prefix) << "}";
break;
break; case JsonNode::JsonType::DATA_INTEGER: case JsonNode::JsonType::DATA_INTEGER:
out << node.Integer(); out << node.Integer();
break;
} }
compactMode = originalMode; compactMode = originalMode;
} }
JsonWriter::JsonWriter(std::ostream & output, bool compact) JsonWriter::JsonWriter(std::ostream & output, bool compact)
: out(output), compact(compact) : out(output)
, compact(compact)
{ {
} }

View File

@ -22,6 +22,7 @@ class JsonWriter
bool compact; bool compact;
//tracks whether we are currently using single-line format //tracks whether we are currently using single-line format
bool compactMode = false; bool compactMode = false;
public: public:
template<typename Iterator> template<typename Iterator>
void writeContainer(Iterator begin, Iterator end); void writeContainer(Iterator begin, Iterator end);