/* * JsonWriter.cpp, 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 * */ #include "StdInc.h" #include "JsonWriter.h" VCMI_LIB_NAMESPACE_BEGIN template void JsonWriter::writeContainer(Iterator begin, Iterator end) { if (begin == end) return; prefix += '\t'; writeEntry(begin++); while (begin != end) { out << (compactMode ? ", " : ",\n"); writeEntry(begin++); } out << (compactMode ? "" : "\n"); prefix.resize(prefix.size()-1); } void JsonWriter::writeEntry(JsonMap::const_iterator entry) { if(!compactMode) { if (!entry->second.meta.empty()) out << prefix << " // " << entry->second.meta << "\n"; if(!entry->second.flags.empty()) out << prefix << " // flags: " << boost::algorithm::join(entry->second.flags, ", ") << "\n"; out << prefix; } writeString(entry->first); out << " : "; writeNode(entry->second); } void JsonWriter::writeEntry(JsonVector::const_iterator entry) { if(!compactMode) { if (!entry->meta.empty()) out << prefix << " // " << entry->meta << "\n"; if(!entry->flags.empty()) out << prefix << " // flags: " << boost::algorithm::join(entry->flags, ", ") << "\n"; out << prefix; } writeNode(*entry); } void JsonWriter::writeString(const std::string &string) { static const std::string escaped = "\"\\\b\f\n\r\t/"; static const std::array escaped_code = {'\"', '\\', 'b', 'f', 'n', 'r', 't', '/'}; out <<'\"'; size_t pos = 0; size_t start = 0; for (; pos