#include "DictConverter.hpp"
#include "Exception.hpp"
#include "Lexicon.hpp"
#include "MarisaDict.hpp"
#include "TextDict.hpp"
#if defined(_WIN32) || defined(_WIN64)
#include "WinUtil.hpp"
#endif
#include "DartsDict.hpp"
using namespace opencc;
DictPtr LoadDictionary(const std::string& format,
const std::string& inputFileName) {
if (format == "text") {
FILE* fp = nullptr;
#if defined(_WIN32) || defined(_WIN64)
fp = _wfopen(internal::WideFromUtf8(inputFileName).c_str(), L"r");
#else
fp = fopen(inputFileName.c_str(), "r");
#endif
if (!fp) {
throw FileNotFound(inputFileName);
}
DictPtr dict = TextDict::NewFromFile(fp);
fclose(fp);
return dict;
} else if (format == "ocd") {
return SerializableDict::NewFromFile<DartsDict>(inputFileName);
} else if (format == "ocd2") {
return SerializableDict::NewFromFile<MarisaDict>(inputFileName);
}
fprintf(stderr, "Unknown dictionary format: %s\n", format.c_str());
exit(2);
return nullptr;
}
SerializableDictPtr ConvertDict(const std::string& format, const DictPtr dict) {
if (format == "text") {
return TextDict::NewFromDict(*dict.get());
} else if (format == "ocd") {
return DartsDict::NewFromDict(*dict.get());
} else if (format == "ocd2") {
return MarisaDict::NewFromDict(*dict.get());
}
fprintf(stderr, "Unknown dictionary format: %s\n", format.c_str());
exit(2);
return nullptr;
}
namespace opencc {
void ConvertDictionary(const std::string& inputFileName,
const std::string& outputFileName,
const std::string& formatFrom,
const std::string& formatTo) {
DictPtr dictFrom = LoadDictionary(formatFrom, inputFileName);
SerializableDictPtr dictTo = ConvertDict(formatTo, dictFrom);
dictTo->SerializeToFile(outputFileName);
}
}