76 lines
2.0 KiB
C++

#include "StringFileDumper.h"
#include <regex>
#include "Utils/StringUtils.h"
StringFileDumper::StringFileDumper(Zone* zone, std::ostream& stream)
: AbstractTextDumper(stream),
m_zone(zone),
m_language_caps("ENGLISH"),
m_wrote_header(false)
{
}
void StringFileDumper::SetLanguageName(std::string language)
{
m_language_caps = std::move(language);
for (auto& c : m_language_caps) c = toupper(c);
}
void StringFileDumper::SetConfigFile(std::string configFile)
{
m_config_file = std::move(configFile);
}
void StringFileDumper::SetNotes(std::string notes)
{
m_notes = std::move(notes);
}
void StringFileDumper::WriteHeader()
{
m_stream << "// Dumped from fastfile \"" << m_zone->m_name << "\".\n";
m_stream << "// In their original format the strings might have been separated in multiple files.\n";
m_stream << "VERSION \"1\"\n";
m_stream << "CONFIG \"" << m_config_file << "\"\n";
m_stream << "FILENOTES \"" << m_notes << "\"\n";
m_wrote_header = true;
}
void StringFileDumper::WriteReference(const std::string& reference) const
{
if (reference.find_first_not_of(utils::LETTERS_AL_NUM_UNDERSCORE) != std::string::npos)
{
m_stream << "REFERENCE \"";
utils::EscapeStringForQuotationMarks(m_stream, reference);
m_stream << "\"\n";
}
else
m_stream << "REFERENCE " << reference << "\n";
}
void StringFileDumper::WriteLocalizeEntry(const std::string& reference, const std::string& value)
{
if (!m_wrote_header)
WriteHeader();
m_stream << "\n";
WriteReference(reference);
const auto valueSpacing = std::string(15 - m_language_caps.length(), ' ');
m_stream << "LANG_" << m_language_caps << valueSpacing << "\"";
utils::EscapeStringForQuotationMarks(m_stream, value);
m_stream << "\"\n";
}
void StringFileDumper::Finalize()
{
if (!m_wrote_header)
WriteHeader();
m_stream << "\nENDMARKER";
}