mirror of
https://github.com/loot/libloot.git
synced 2026-07-27 14:16:01 -07:00
Moved plugin version regexes out of helpers.cpp.
They're now in plugin.cpp.
This commit is contained in:
@@ -32,7 +32,6 @@
|
||||
#include <boost/log/trivial.hpp>
|
||||
#include <boost/format.hpp>
|
||||
#include <boost/locale.hpp>
|
||||
#include <boost/regex.hpp>
|
||||
|
||||
#include <cstring>
|
||||
#include <iostream>
|
||||
@@ -57,66 +56,10 @@ namespace loot {
|
||||
using namespace std;
|
||||
using boost::algorithm::replace_all;
|
||||
using boost::algorithm::replace_first;
|
||||
using boost::regex;
|
||||
using boost::regex_match;
|
||||
using boost::regex_search;
|
||||
namespace karma = boost::spirit::karma;
|
||||
namespace fs = boost::filesystem;
|
||||
namespace lc = boost::locale;
|
||||
|
||||
/// 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: <date>" 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]+([-._]*(?!esp|esm)[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.
|
||||
const std::vector<boost::regex> version_checks({
|
||||
regex(regex1, regex::ECMAScript | regex::icase),
|
||||
regex(regex2, regex::ECMAScript | regex::icase),
|
||||
regex(regex3, regex::ECMAScript | regex::icase),
|
||||
regex(regex4, regex::ECMAScript | regex::icase),
|
||||
regex(regex5, regex::ECMAScript | regex::icase), //This incorrectly identifies "OBSE v19" where 19 is any integer.
|
||||
//regex(regex6, regex::ECMAScript | regex::icase), //This is responsible for metallicow's false positive.
|
||||
regex(regex7, regex::ECMAScript | regex::icase)
|
||||
});
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Helper functions
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -41,6 +41,59 @@ using boost::regex_search;
|
||||
using boost::smatch;
|
||||
|
||||
namespace loot {
|
||||
/// 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: <date>" 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]+([-._]*(?!esp|esm)[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.
|
||||
const std::vector<boost::regex> version_checks({
|
||||
regex(regex1, regex::ECMAScript | regex::icase),
|
||||
regex(regex2, regex::ECMAScript | regex::icase),
|
||||
regex(regex3, regex::ECMAScript | regex::icase),
|
||||
regex(regex4, regex::ECMAScript | regex::icase),
|
||||
regex(regex5, regex::ECMAScript | regex::icase), //This incorrectly identifies "OBSE v19" where 19 is any integer.
|
||||
//regex(regex6, regex::ECMAScript | regex::icase), //This is responsible for metallicow's false positive.
|
||||
regex(regex7, regex::ECMAScript | regex::icase)
|
||||
});
|
||||
|
||||
Plugin::Plugin() : PluginMetadata(), _isEmpty(true), isMaster(false), crc(0), numOverrideRecords(0) {}
|
||||
|
||||
Plugin::Plugin(const std::string& n) : PluginMetadata(n), _isEmpty(true), isMaster(false), crc(0), numOverrideRecords(0) {}
|
||||
|
||||
Reference in New Issue
Block a user