Feature #917 » 0917_supportregexp.patch
| src/actions.cpp (Arbeitskopie) | ||
|---|---|---|
| 558 | 558 | |
| 559 | 559 |
bool Print::grepTag(const std::string& key) |
| 560 | 560 |
{
|
| 561 |
bool result=Params::instance().keys_.empty(); |
|
| 562 |
if (!result) |
|
| 563 |
for (Params::Keys::const_iterator k = Params::instance().keys_.begin(); |
|
| 564 |
!result && k != Params::instance().keys_.end(); ++k) {
|
|
| 565 |
result = key.find(*k) != std::string::npos; |
|
| 561 |
if( Params::instance().keys_.empty()) |
|
| 562 |
return true; |
|
| 563 |
|
|
| 564 |
for( Params::Keys::const_iterator k = Params::instance().keys_.begin(); |
|
| 565 |
k != Params::instance().keys_.end(); ++k) |
|
| 566 |
{
|
|
| 567 |
if( 0 == regexec( &(*k), key.c_str(), 0, NULL, REG_NOTBOL | REG_NOTEOL)) |
|
| 568 |
return true; |
|
| 569 |
// result = key.find(*k) != std::string::npos; |
|
| 566 | 570 |
} |
| 567 |
return result ;
|
|
| 571 |
return false;
|
|
| 568 | 572 |
} |
| 569 | 573 | |
| 570 | 574 |
void Print::printMetadatum(const Exiv2::Metadatum& md, const Exiv2::Image* pImage) |
| src/exiv2.cpp (Arbeitskopie) | ||
|---|---|---|
| 47 | 47 |
#include <cstring> |
| 48 | 48 |
#include <cassert> |
| 49 | 49 |
#include <cctype> |
| 50 |
#include <regex.h> |
|
| 50 | 51 | |
| 51 | 52 |
#if defined(__MINGW32__) || defined(__MINGW64__) |
| 52 | 53 |
# ifndef __MINGW__ |
| ... | ... | |
| 352 | 353 |
case 'u': unknown_ = false; break; |
| 353 | 354 |
case 'f': force_ = true; fileExistsPolicy_ = overwritePolicy; break; |
| 354 | 355 |
case 'F': force_ = true; fileExistsPolicy_ = renamePolicy; break; |
| 355 |
case 'g': keys_.push_back(optarg); printMode_ = pmList; break;
|
|
| 356 |
case 'g': rc = evalKey(optarg); printMode_ = pmList; break;
|
|
| 356 | 357 |
case 'n': charset_ = optarg; break; |
| 357 | 358 |
case 'r': rc = evalRename(opt, optarg); break; |
| 358 | 359 |
case 't': rc = evalRename(opt, optarg); break; |
| ... | ... | |
| 410 | 411 |
return rc; |
| 411 | 412 |
} // Params::setLogLevel |
| 412 | 413 | |
| 414 |
int Params::evalKey( const std::string& optarg) |
|
| 415 |
{
|
|
| 416 |
// try to compile a reg-exp from the input argument and store it in the vector |
|
| 417 |
const size_t i = keys_.size(); |
|
| 418 |
keys_.resize(i + 1); |
|
| 419 |
regex_t *pRegex = &keys_[i]; |
|
| 420 |
int errcode = regcomp( pRegex, optarg.c_str(), REG_NOSUB); |
|
| 421 |
if( 0 == errcode) |
|
| 422 |
return 0; // no error |
|
| 423 |
|
|
| 424 |
// there was an error compiling the regexp |
|
| 425 |
size_t length = regerror (errcode, pRegex, NULL, 0); |
|
| 426 |
char *buffer = new char[ length]; |
|
| 427 |
regerror (errcode, pRegex, buffer, length); |
|
| 428 |
std::cerr << progname() |
|
| 429 |
<< ": " << _("Option") << " -g: "
|
|
| 430 |
<< _("Invalid regexp") << " \"" << optarg << "\": " << buffer << "\n";
|
|
| 431 | ||
| 432 |
// free the memory and drop the regexp |
|
| 433 |
delete[] buffer; |
|
| 434 |
regfree( pRegex); |
|
| 435 |
keys_.resize(i); |
|
| 436 |
return 1; |
|
| 437 |
} // Params::evalKey |
|
| 438 | ||
| 413 | 439 |
int Params::evalRename(int opt, const std::string& optarg) |
| 414 | 440 |
{
|
| 415 | 441 |
int rc = 0; |
| src/exiv2app.hpp (Arbeitskopie) | ||
|---|---|---|
| 39 | 39 |
#include <vector> |
| 40 | 40 |
#include <set> |
| 41 | 41 |
#include <iostream> |
| 42 |
#include <regex.h> |
|
| 42 | 43 | |
| 43 | 44 |
// ***************************************************************************** |
| 44 | 45 |
// class definitions |
| ... | ... | |
| 125 | 126 |
//! Container for preview image numbers |
| 126 | 127 |
typedef std::set<int> PreviewNumbers; |
| 127 | 128 |
//! Container for keys |
| 128 |
typedef std::vector<std::string> Keys;
|
|
| 129 |
typedef std::vector<regex_t> Keys;
|
|
| 129 | 130 | |
| 130 | 131 |
/*! |
| 131 | 132 |
@brief Controls all access to the global Params instance. |
| ... | ... | |
| 261 | 262 |
//! @name Helpers |
| 262 | 263 |
//@{
|
| 263 | 264 |
int setLogLevel(const std::string& optarg); |
| 265 |
int evalKey( const std::string& optarg); |
|
| 264 | 266 |
int evalRename(int opt, const std::string& optarg); |
| 265 | 267 |
int evalAdjust(const std::string& optarg); |
| 266 | 268 |
int evalYodAdjust(const Yod& yod, const std::string& optarg); |