diff --git a/src/VersionRegex.cpp b/src/VersionRegex.cpp new file mode 100644 index 00000000..c5842431 --- /dev/null +++ b/src/VersionRegex.cpp @@ -0,0 +1,92 @@ +/* BOSS + + A "one-click" program for users that quickly optimises and avoids + detrimental conflicts in their TES IV: Oblivion, Nehrim - At Fate's Edge, + TES V: Skyrim, Fallout 3 and Fallout: New Vegas mod load orders. + + Copyright (C) 2009-2012 BOSS Development Team. + + This file is part of BOSS. + + BOSS 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. + + BOSS 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 BOSS. If not, see + . + + $Revision: 1681 $, $Date: 2010-10-17 21:01:25 +0100 (Sun, 17 Oct 2010) $ +*/ + + +#include +#include + + +namespace boss { + + using namespace std; + using namespace boost; + + /// REGEX expression definition + /// Each expression is composed of three parts: + /// 1. The marker string "version", "ver", "rev", "v" or "r" + /// 2. The version string itself. + + const char* regex1 = + "^(?:\\bversion\\b[ ]*(?:[:.\\-]?)|\\brevision\\b(?:[:.\\-]?))[ ]*" + "((?:alpha|beta|test|debug)?\\s*[-0-9a-zA-Z._+]+\\s*(?:alpha|beta|test|debug)?\\s*(?:[0-9]*))$" + ; + + const char* regex2 = + "(?:\\bversion\\b(?:[ :]?)|\\brevision\\b(?:[:.\\-]?))[ ]*" + "([0-9][-0-9a-zA-Z._]+\\+?)" + ; + + const char* regex3 = + "(?:\\bver(?:[:.]?)|\\brev(?:[:.]?))\\s*" + "([0-9][-0-9a-zA-Z._]*\\+?)" + ; + + // Matches "Updated: " for the Bashed patch + const char* regex4 = + "(?:Updated:)\\s*" + "([-0-9aAmMpP/ :]+)$" + ; + + // Matches isolated versions as last resort + const char* regex5 = + "(?:(?:\\bv|\\br)(?:\\s?)(?:[-.:])?(?:\\s*))" + "((?:(?:\\balpha\\b)?|(?:\\bbeta\\b)?)\\s*[0-9][-0-9a-zA-Z._]*\\+?)" + ; + + // Matches isolated versions as last resort + const char* regex6 = + "((?:(?:\\balpha\\b)?|(?:\\bbeta\\b)?)\\s*\\b[0-9][-0-9a-zA-Z._]*\\+?)$" + ; + + const char* regex7 = + "(^\\bmark\\b\\s*\\b[IVX0-9][-0-9a-zA-Z._+]*\\s*(?:alpha|beta|test|debug)?\\s*(?:[0-9]*)?)$" + ; + + /// Array used to try each of the expressions defined above using + /// an iteration for each of them. + regex* version_checks[] = { + new regex(regex1, regex::icase), + new regex(regex2, regex::icase), + new regex(regex3, regex::icase), + new regex(regex4, regex::icase), + new regex(regex5, regex::icase), //This incorrectly identifies "OBSE v19" where 19 is any integer. + new regex(regex6, regex::icase), //This is responsible for metallicow's false positive. + new regex(regex7, regex::icase), + 0 + }; + +} \ No newline at end of file diff --git a/src/VersionRegex.h b/src/VersionRegex.h new file mode 100644 index 00000000..c4a2a661 --- /dev/null +++ b/src/VersionRegex.h @@ -0,0 +1,45 @@ +/* BOSS + + A "one-click" program for users that quickly optimises and avoids + detrimental conflicts in their TES IV: Oblivion, Nehrim - At Fate's Edge, + TES V: Skyrim, Fallout 3 and Fallout: New Vegas mod load orders. + + Copyright (C) 2009-2012 BOSS Development Team. + + This file is part of BOSS. + + BOSS 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. + + BOSS 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 BOSS. If not, see + . + + $Revision: 1681 $, $Date: 2010-10-17 21:01:25 +0100 (Sun, 17 Oct 2010) $ +*/ + +#ifndef __SUPPORT_VERSIONREGEX__HPP__ +#define __SUPPORT_VERSIONREGEX__HPP__ + + +#include + + +namespace boss { + + using namespace boost; + + /// Array used to try each of the expressions defined above using + /// an iteration for each of them. + extern regex* version_checks[]; + +} + +#endif