// // aegis - project change supervisor // Copyright (C) 2007, 2008 Peter Miller // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, see // . // #include #include #include #include static target * new_target_automake() { return new target_automake(); } static target * new_target_makefile() { return new target_makefile(); } struct table_t { const char *name; target *(*func)(); }; static const table_t table[] = { { "makefile", new_target_makefile }, { "automake", new_target_automake }, }; target * target::create(const nstring &name) { if (name.empty()) return new target_makefile(); const table_t *best = 0; double best_weight = 0.6; for (const table_t *tp = table; tp < ENDOF(table); ++tp) { if (name == tp->name) return tp->func(); double w = fstrcmp(name.c_str(), tp->name); if (best_weight < w) { best_weight = w; best = tp; } } if (best) { sub_context_ty sc; sc.var_set_string("name", name); sc.var_set_string("guess", best->name); sc.fatal_intl(i18n("no \"$name\", guessing \"$guess\"")); } else { sub_context_ty sc; sc.var_set_string("Name", name); sc.fatal_intl(i18n("the name \"$name\" is undefined")); } return 0; }