From 58cd40912f15c4c66d157eab4ed708755803c753 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Mon, 11 Apr 2022 10:36:34 -0400 Subject: [PATCH] Add language code support when reading EXD files --- include/exdparser.h | 2 +- include/exhparser.h | 20 ++------------------ include/language.h | 40 ++++++++++++++++++++++++++++++++++++++++ src/exdparser.cpp | 10 ++++++---- 4 files changed, 49 insertions(+), 23 deletions(-) create mode 100644 include/language.h diff --git a/include/exdparser.h b/include/exdparser.h index 8b63f71..105485a 100644 --- a/include/exdparser.h +++ b/include/exdparser.h @@ -19,6 +19,6 @@ struct EXD { std::vector rows; }; -std::string getEXDFilename(EXH& exh, std::string_view name, ExcelDataPagination& page); +std::string getEXDFilename(EXH& exh, std::string_view name, std::string_view lang, ExcelDataPagination& page); EXD readEXD(EXH& exh, std::string_view path, ExcelDataPagination& page); \ No newline at end of file diff --git a/include/exhparser.h b/include/exhparser.h index 157ff19..fbed322 100644 --- a/include/exhparser.h +++ b/include/exhparser.h @@ -3,6 +3,8 @@ #include #include +#include "language.h" + // taken from https://xiv.dev/game-data/file-formats/excel struct ExhHeader { char magic[0x4]; @@ -53,24 +55,6 @@ struct ExcelDataPagination { uint32_t rowCount; }; -enum Language : uint16_t { - None, - // ja - Japanese, - // en - English, - // de - German, - // fr - French, - // chs - ChineseSimplified, - // cht - ChineseTraditional, - // ko - Korean -}; - struct EXH { ExhHeader header; diff --git a/include/language.h b/include/language.h new file mode 100644 index 0000000..cd6db4e --- /dev/null +++ b/include/language.h @@ -0,0 +1,40 @@ +#pragma once + +enum Language : uint16_t { + None, + // ja + Japanese, + // en + English, + // de + German, + // fr + French, + // chs + ChineseSimplified, + // cht + ChineseTraditional, + // ko + Korean +}; + +inline std::string_view getLanguageCode(const Language lang) { + switch(lang) { + case Language::Japanese: + return "ja"; + case Language::English: + return "en"; + case Language::German: + return "de"; + case Language::French: + return "fr"; + case Language::ChineseSimplified: + return "chs"; + case Language::ChineseTraditional: + return "cht"; + case Language::Korean: + return "ko"; + } + + return ""; +} \ No newline at end of file diff --git a/src/exdparser.cpp b/src/exdparser.cpp index 7813e31..4d03a2b 100644 --- a/src/exdparser.cpp +++ b/src/exdparser.cpp @@ -36,10 +36,12 @@ std::string readData(FILE* file, int offset) { return std::to_string(value); } -std::string getEXDFilename(EXH& exh, std::string_view name, ExcelDataPagination& page) { - auto path = fmt::format("{}_{}.exd", name, page.startId); - - return path; +std::string getEXDFilename(EXH& exh, std::string_view name, std::string_view lang, ExcelDataPagination& page) { + if(lang.empty()) { + return fmt::format("{}_{}.exd", name, page.startId); + } else { + return fmt::format("{}_{}_{}.exd", name, page.startId, lang); + } } EXD readEXD(EXH& exh, std::string_view path, ExcelDataPagination& page) {