void gen_strings_class(const std::string& inputFn) { cfg::CfgFile cfg; cfg.load(inputFn); std::cout << "// Don't modify, generated file from " << inputFn << "\n" << "\n"; std::string fnUpper = base::string_to_upper(base::get_file_title(inputFn)); std::cout << "#ifndef GENERATED_" << fnUpper << "_H_INCLUDED\n" << "#define GENERATED_" << fnUpper << "_H_INCLUDED\n" << "#pragma once\n" << "\n" << "namespace app {\n" << "namespace gen {\n" << "\n" << " template<typename T>\n" << " class Strings {\n" << " public:\n"; std::vector<std::string> sections; std::vector<std::string> keys; cfg.getAllSections(sections); for (const auto& section : sections) { keys.clear(); cfg.getAllKeys(section.c_str(), keys); std::string textId = section; textId.push_back('.'); for (auto key : keys) { textId.append(key); std::cout << " const std::string& " << to_cpp(textId) << "() const { return static_cast<T*>(this)->translate(\"" << textId << "\"); }\n"; textId.erase(section.size()+1); } } std::cout << " };\n" << "\n" << "} // namespace gen\n" << "} // namespace app\n" << "\n" << "#endif\n"; }
T to_cpp(lua_State* L, by_value<T>, int index) { return to_cpp(L, by_const_reference<T>(), index); }
void RegExpTest::word_segmentation_test() { std::vector<std::string> tokens = { "Other", "CR", "LF", "Newline", "Extend", "Format", "Katakana", "ALetter", "MidLetter", "MidNum", "MidNumLet", "Numeric", "ExtendNumLet" }; // begin regular exp std::string Other_EF = "(Other.(Extend|Format)*)"; std::string ALetter_EF = "(ALetter.(Extend|Format)*)"; std::string Numeric_EF = "(Numeric.(Extend|Format)*)"; std::string Katakana_EF = "(Katakana.(Extend|Format)*)"; std::string ExtendNumLet_EF = "(ExtendNumLet.(Extend|Format)*)"; std::string MidLetter_EF = "(MidLetter.(Extend|Format)*)"; std::string MidNumLet_EF = "(MidNumLet.(Extend|Format)*)"; std::string MidNum_EF = "(MidNum.(Extend|Format)*)"; std::string MidLetter_MidNumLet_EF = "((MidLetter|MidNumLet).(Extend|Format)*)"; std::string MidNum_MidNumLet_EF = "((MidNum|MidNumLet).(Extend|Format)*)"; // std::string ALetter = "(" + ALetter_EF + "+|(" + ALetter_EF + "+." + MidLetter_MidNumLet_EF + "." + ALetter_EF + "+))"; std::string ALetter = "((" + ALetter_EF + "|(" + ALetter_EF + "." + MidLetter_MidNumLet_EF + "." + ALetter_EF + "))+)"; std::string Numeric = "((" + Numeric_EF + "|(" + Numeric_EF + "+." + MidNum_MidNumLet_EF + "." + Numeric_EF + "+))+)"; // std::string Numeric = "(" + Numeric_EF + "+|(" + Numeric_EF + "+." + MidNum_MidNumLet_EF + "." + Numeric_EF + "+))"; std::string ALetter_Numeric = "((" + ALetter + "|" + Numeric + ")+)"; //std::string Katakana = "((" + Katakana_EF + "+|" + ExtendNumLet_EF + "*)*)"; //std::string Katakana = "(" + Katakana_EF + "+)"; std::string Katakana_ExtendNumLet = "((" + Katakana_EF + "+|" + Katakana_EF + "+." + ExtendNumLet_EF + "+|" + ExtendNumLet_EF + "+." + Katakana_EF + "+)+)"; std::string ALetter_Numeric_ExtendNumLet = "((" + ALetter_Numeric + "+|" + ALetter_Numeric + "+." + ExtendNumLet_EF + "+|" + ExtendNumLet_EF + "+." + ALetter_Numeric + "+)+)"; std::string ExtendNumLet = "(" + ExtendNumLet_EF + "+)"; std::string ALetter_Numeric_Katakana_1 = "(" + ALetter_Numeric + "+." + ExtendNumLet_EF + "+." + Katakana_ExtendNumLet + "+)"; std::string ALetter_Numeric_Katakana_2 = "(" + Katakana_ExtendNumLet + "+." + ExtendNumLet_EF + "+." + ALetter_Numeric + "+)"; std::stringstream ss; // ss << "("+ Other_EF + "|CR|LF|Newline|Extend|Format|Katakana|ALetter|" + MidLetter_EF + "|MidNum|" + MidNumLet_EF + "|Numeric|ExtendNumLet)"; ss << "((Other|Extend|Format|Katakana|ALetter|MidLetter|MidNum|MidNumLet|Numeric|ExtendNumLet).(Extend|Format)*)"; ss << "|(CR|LF|Newline)"; ss << "|(CR.LF)"; ss << "|((Extend|Format)*)"; ss << "|" << ALetter_Numeric; ss << "|" << ALetter_Numeric_ExtendNumLet ; ss << "|" << Katakana_ExtendNumLet; ss << "|" << ALetter_Numeric_Katakana_1; ss << "|" << ALetter_Numeric_Katakana_2; ss << "|" << ExtendNumLet; ss << "|" << ALetter; // end regular exp RegExpWithTokens<char> reg_exp(tokens, 'a'); reg_exp.evaluate(ss.str()); to_str(std::cout, reg_exp.dfa(), tokens, 'a'); to_cpp(std::cout, reg_exp.dfa(), "word_states"); std::string s0 = {}; std::string s1 = {(char)PV::ALetter}; std::string s2 = {(char)PV::ALetter, (char)PV::ALetter}; std::string s3 = {(char)PV::ALetter, (char)PV::ALetter, (char)PV::ALetter}; std::string s4 = {(char)PV::ALetter, (char)PV::Extend, (char)PV::ALetter, (char)PV::Numeric}; std::string s5 = {(char)PV::Katakana}; std::string s6 = {(char)PV::Katakana, (char)PV::Katakana}; std::string s7 = {(char)PV::Katakana, (char)PV::Katakana, (char)PV::Katakana}; std::string s8 = {(char)PV::Katakana, (char)PV::ExtendNumLet}; std::string s9 = {(char)PV::Katakana, (char)PV::ExtendNumLet, (char)PV::ExtendNumLet, (char)PV::Katakana}; std::string s10 = {(char)PV::Katakana, (char)PV::ExtendNumLet, (char)PV::Katakana, (char)PV::ExtendNumLet, (char)PV::Katakana}; std::string s11 = {(char)PV::ExtendNumLet, (char)PV::Katakana, (char)PV::ExtendNumLet, (char)PV::Katakana}; std::string s12 = {(char)PV::ALetter, (char)PV::Numeric, (char)PV::ALetter}; std::string s13 = {(char)PV::ExtendNumLet}; std::string s14 = {(char)PV::ExtendNumLet, (char)PV::ExtendNumLet}; std::string s15 = {(char)PV::Katakana, (char)PV::ALetter}; std::string s16 = {(char)PV::ALetter, (char)PV::Katakana}; std::string s17 = {(char)PV::Katakana, (char)PV::Numeric}; std::string s18 = {(char)PV::Numeric, (char)PV::Katakana}; std::string s19 = {(char)PV::Other, (char)PV::Extend}; std::string s20 = {(char)PV::MidNumLet, (char)PV::Format}; std::string s21 = {(char)PV::ALetter, (char)PV::MidLetter, (char)PV::ALetter}; // assert (check_aux(reg_exp.dfa(), s0, 'a')==false); assert (check_aux(reg_exp.dfa(), s1, 'a')==true); assert (check_aux(reg_exp.dfa(), s2, 'a')==true); assert (check_aux(reg_exp.dfa(), s3, 'a')==true); assert (check_aux(reg_exp.dfa(), s4, 'a')==true); assert (check_aux(reg_exp.dfa(), s5, 'a')==true); assert (check_aux(reg_exp.dfa(), s6, 'a')==true); assert (check_aux(reg_exp.dfa(), s7, 'a')==true); assert (check_aux(reg_exp.dfa(), s8, 'a')==true); assert (check_aux(reg_exp.dfa(), s9, 'a')==true); assert (check_aux(reg_exp.dfa(), s10, 'a')==true); assert (check_aux(reg_exp.dfa(), s11, 'a')==true); assert (check_aux(reg_exp.dfa(), s12, 'a')==true); assert (check_aux(reg_exp.dfa(), s13, 'a')==true); assert (check_aux(reg_exp.dfa(), s14, 'a')==true); assert (check_aux(reg_exp.dfa(), s15, 'a')==false); assert (check_aux(reg_exp.dfa(), s16, 'a')==false); assert (check_aux(reg_exp.dfa(), s17, 'a')==false); assert (check_aux(reg_exp.dfa(), s18, 'a')==false); assert (check_aux(reg_exp.dfa(), s19, 'a')==true); assert (check_aux(reg_exp.dfa(), s20, 'a')==true); assert (check_aux(reg_exp.dfa(), s21, 'a')==true); /* check_aux(reg_exp.dfa(), , true}; check_aux(reg_exp.dfa(), , true}, check_aux(reg_exp.dfa(), std::string({(char)PV::ALetter, (char)PV::Extend, (char)PV::ALetter, (char)PV::Numeric}, true} */ // std::string target = {(char)PV::ALetter, (char)PV::Extend, }; std::string target = {(char)PV::ALetter, (char)PV::Extend, (char)PV::ALetter, (char)PV::Numeric}; // std::string target = {(char)PV::ALetter, (char)PV::Numeric}; // CHECK(reg_exp.dfa(), target, true); std::cout << "end test5 " << std::endl; }