// // aegis - project change supervisor // Copyright (C) 2005-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 #include #include #include #include #include #include #include #include #include #include #include #include #include #include static validation * new_validation_copyright() { return new validation_files_copyright(); } static validation * new_validation_files_crlf() { return new validation_files_crlf(); } static validation * new_validation_description() { return new validation_description(); } static validation * new_validation_files_fsf_address() { return new validation_files_fsf_address(); } static validation * new_validation_files_gpl_version() { return new validation_files_gpl_version(); } static validation * new_validation_files_line_length() { return new validation_files_line_length(); } static validation * new_validation_files_merge_fhist() { return new validation_files_merge_fhist(); } static validation * new_validation_files_merge_rcs() { return new validation_files_merge_rcs(); } static validation * new_validation_files_no_manifest() { return new validation_files_no_manifest(); } static validation * new_validation_files_no_tabs() { return new validation_files_no_tabs(); } static validation * new_validation_files_printable() { return new validation_files_printable(); } static validation * new_validation_files_text() { return new validation_files_text(); } static validation * new_validation_files_white_space() { return new validation_files_white_space(); } struct table_t { const char *name; validation *(*func)(void); bool all; }; static table_t table[] = { { "copyright", new_validation_copyright, true }, { "crlf", new_validation_files_crlf, true }, { "description", new_validation_description, true }, { "fsf-address", new_validation_files_fsf_address, true }, { "gpl-version", new_validation_files_gpl_version, false }, { "line-length", new_validation_files_line_length, false }, { "merge-fhist", new_validation_files_merge_fhist, false }, { "merge-rcs", new_validation_files_merge_rcs, false }, { "no-manifest", new_validation_files_no_manifest, false }, { "no-tabs", new_validation_files_no_tabs, false }, { "printable", new_validation_files_printable, true }, { "text", new_validation_files_text, false }, { "white-space", new_validation_files_white_space, false }, }; static symtab_ty *stp; validation * validation::factory(const char *cname) { nstring name = nstring(cname).downcase(); // // We don't put "all" in the table, otherwise we get an infinite // constructor loop. // if (name == nstring("all")) return new validation_all(); if (name.starts_with("line-length=")) return new validation_files_line_length(atoi(name.c_str() + 12)); if (name.starts_with("gpl-version=")) return new validation_files_gpl_version(atoi(name.c_str() + 12)); if (!stp) { stp = new symtab_ty(SIZEOF(table)); for (table_t *tp = table; tp < ENDOF(table); ++tp) stp->assign(str_from_c(tp->name), tp); } string_ty *sname = str_from_c(cname); table_t *tp = (table_t *)stp->query(sname); if (!tp) { string_ty *other = stp->query_fuzzy(sname); if (other) { sub_context_ty sc; sc.var_set_string("Name", name); sc.var_set_string("Guess", other); sc.fatal_intl(i18n("no \"$name\", guessing \"$guess\"")); // NOTREACHED } sub_context_ty sc; sc.var_set_string("Name", name); sc.fatal_intl(i18n("no $name list")); // NOTREACHED } str_free(sname); return tp->func(); } void validation::list() { for (table_t *tp = table; tp < ENDOF(table); ++tp) printf("%s\n", tp->name); } void validation::all(validation_list &where) { for (table_t *tp = table; tp < ENDOF(table); ++tp) { if (tp->all) where.push_back(tp->func()); } }