X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2FLRegex.C;h=a82b6642301e3e666388108a78d20247b5a851d7;hb=5296e9e9952cf6e2f306077c62a1caeaf8479eed;hp=aaec005645506a4e287287ab61d159637c00ecbf;hpb=db47e6bc7773b26f0f74c37a02df496c17eff444;p=lyx.git diff --git a/src/support/LRegex.C b/src/support/LRegex.C index aaec005645..a82b664230 100644 --- a/src/support/LRegex.C +++ b/src/support/LRegex.C @@ -20,63 +20,63 @@ using std::make_pair; struct LRegex::Impl { /// regex_t * preg; - + /// int error_code; - + /// mutable LRegex::SubMatches matches; - + /// - Impl(string const & regex) + Impl(string const & regex) : preg(new regex_t), error_code(0) { error_code = regcomp(preg, regex.c_str(), REG_EXTENDED); } - + /// ~Impl() { regfree(preg); delete preg; } - + /// bool exact_match(string const & str) const { regmatch_t tmp; if (!regexec(preg, str.c_str(), 1, &tmp, 0)) { - if (tmp.rm_so == 0 && + if (tmp.rm_so == 0 && tmp.rm_eo == static_cast(str.length())) return true; } // no match return false; } - + /// LRegex::MatchPair const first_match(string const & str) const { regmatch_t tmp; regexec(preg, str.c_str(), 1, &tmp, 0); - unsigned int first = tmp.rm_so != -1 ? - static_cast(tmp.rm_so) : string::npos; - unsigned int second = tmp.rm_eo != -1 ? - static_cast(tmp.rm_eo) : string::npos; + string::size_type const first = tmp.rm_so != -1 ? + tmp.rm_so : string::npos; + string::size_type const second = tmp.rm_eo != -1 ? + tmp.rm_eo : string::npos; return make_pair(first, second - first); } - + /// string const getError() const { size_t nr = regerror(error_code, preg, 0, 0); char * tmp = new char[nr]; regerror(error_code, preg, tmp, nr); - string ret(tmp); + string const ret(tmp); delete [] tmp; return ret; } - + /// LRegex::SubMatches const & exec(string const & str) const { @@ -88,20 +88,19 @@ struct LRegex::Impl { // func much faster, but client code will be simpler, // because then it will only be needed to scan through // all the entries in matches. - size_t subs = (preg->re_nsub != 0 ? (preg->re_nsub + 1) : 1); + size_t const subs = + (preg->re_nsub != 0 ? (preg->re_nsub + 1) : 1); regmatch_t * mat = new regmatch_t[subs]; - unsigned int first = 0; - unsigned int second = 0; + string::size_type first = 0; + string::size_type second = 0; matches.erase(matches.begin(), matches.end()); if (!regexec(preg, str.c_str(), subs, mat, 0)) { // some match matches.reserve(subs); for (size_t i = 0; i < subs; ++i) { first = mat[i].rm_so != -1 ? - static_cast - (mat[i].rm_so) : string::npos; + mat[i].rm_so : string::npos; second = mat[i].rm_eo != -1 ? - static_cast - (mat[i].rm_eo) : string::npos; + mat[i].rm_eo : string::npos; matches.push_back(make_pair(first, second - first)); }