bool DictionaryRewriter::open(const char *filename, Iconv *iconv) { std::ifstream ifs(filename); CHECK_DIE(ifs) << "no such file or directory: " << filename; int append_to = 0; std::string line; while (std::getline(ifs, line)) { if (iconv) iconv->convert(&line); if (line.empty() || line[0] == '#') continue; if (line == "[unigram rewrite]") { append_to = 1; } else if (line == "[left rewrite]") { append_to = 2; } else if (line == "[right rewrite]") { append_to = 3; } else { CHECK_DIE(append_to != 0) << "no sections found"; char *str = const_cast<char *>(line.c_str()); switch (append_to) { case 1: append_rewrite_rule(&unigram_rewrite_, str); break; case 2: append_rewrite_rule(&left_rewrite_, str); break; case 3: append_rewrite_rule(&right_rewrite_, str); break; } } } return true; }
bool DictionaryRewriter::open(const char *filename, Iconv *iconv) { scoped_ptr<std::istream> p_ist; const jma::DictUnit* dict = jma::JMA_Dictionary::instance()->getDict(filename); if(dict) p_ist.reset(new std::istrstream(dict->text_, dict->length_)); else p_ist.reset(new std::ifstream(filename)); CHECK_DIE(*p_ist) << "no such file or directory: " << filename; int append_to = 0; std::string line; while (std::getline(*p_ist, line)) { if (iconv) iconv->convert(&line); if (line.empty() || line[0] == '#') continue; if (line == "[unigram rewrite]") { append_to = 1; } else if (line == "[left rewrite]") { append_to = 2; } else if (line == "[right rewrite]") { append_to = 3; } else { CHECK_DIE(append_to != 0) << "no sections found"; char *str = const_cast<char *>(line.c_str()); switch (append_to) { case 1: append_rewrite_rule(&unigram_rewrite_, str); break; case 2: append_rewrite_rule(&left_rewrite_, str); break; case 3: append_rewrite_rule(&right_rewrite_, str); break; } } } return true; }