#include "DictConverter.hpp"
#include "Exception.hpp"
#include "Lexicon.hpp"
#include "MarisaDict.hpp"
#include "TextDict.hpp"
#include "UTF8Util.hpp"
#ifdef ENABLE_DARTS
#include "DartsDict.hpp"
#endif
using namespace opencc;
DictPtr LoadDictionary(const std::string& format,
const std::string& inputFileName) {
if (format == "text") {
FILE* fp =
#ifdef _MSC_VER
_wfopen(UTF8Util::GetPlatformString(inputFileName).c_str(), L"r")
#else
fopen(UTF8Util::GetPlatformString(inputFileName).c_str(), "r")
#endif
;
if (!fp) {
throw FileNotFound(inputFileName);
}
DictPtr dict = TextDict::NewFromFile(fp);
fclose(fp);
return dict;
} else if (format == "ocd") {
#ifdef ENABLE_DARTS
return SerializableDict::NewFromFile<DartsDict>(inputFileName);
#endif
} 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") {
#ifdef ENABLE_DARTS
return DartsDict::NewFromDict(*dict.get());
#endif
} 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);
}
}