////////////////////////////////////////////////////////////////////////////////
// This source file is part of the ZipArchive library source distribution and
// is Copyrighted 2000 - 2011 by Artpol Software - Tadeusz Dracz
//
// 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 2
// of the License, or (at your option) any later version.
//
// For the licensing details refer to the License.txt file.
//
// Web Site: http://www.artpol-software.com
////////////////////////////////////////////////////////////////////////////////
/*
This class is based on code by J. Kercheval, created 01/05/1991
and available as a public domain at http://www.snippets.org.
*/
/**
* \file Wildcard.h
* Includes the ZipArchiveLib::CWildcard class.
*
*/
#if !defined(ZIPARCHIVE_WILDCARD_DOT_H)
#define ZIPARCHIVE_WILDCARD_DOT_H
#if _MSC_VER > 1000
#pragma once
#if (_MSC_VER > 1000) && (defined ZIP_HAS_DLL)
#pragma warning( push )
#pragma warning( disable : 4251 ) // needs to have dll-interface to be used by clients of class
#endif
#endif
#include "ZipString.h"
namespace ZipArchiveLib
{
/**
A class used in the wildcard pattern matching.
\see
0610242025|wildcards
*/
class ZIP_API CWildcard
{
public:
enum Match
{
matchNone, ///< For internal use.
matchValid, ///< A valid match.
matchEnd, ///< Premature end of the pattern string.
matchAbort, ///< Premature end of the text string.
matchRange, ///< Match failure on the \c [..] construct.
matchLiteral, ///< Match failure on a literal match
matchPattern ///< A bad pattern.
};
enum Pattern
{
patternEmpty = -4, ///< The \c [..] construct is empty
patternClose, ///< There is no end bracket in the \c [..] construct.
patternRange, ///< Malformed range in the \c [..] construct.
patternEsc, ///< There is a literal escape at the end of the pattern.
patternValid, ///< A valid pattern.
};
/**
Matches \a lpszText against the pattern.
A match means the entire \a lpszText is used in matching.
Set the pattern with the #SetPattern method or in the constructor.
\param lpszText
The string to match against the pattern.
\param iRetCode
If not \c NULL, receives one of the #Match values indicating a return code.
\return
\c true, if \a lpszText matches the pattern.
\see
SetPattern
*/
bool IsMatch(LPCTSTR lpszText, int* iRetCode = NULL);
/**
Returns the value indicating whether \a lpszPattern has any special wildcard characters.
\param lpszPattern
The pattern to test.
\return
\c true, if the pattern has wildcard characters; \c false otherwise.
*/
static bool IsPattern(LPCTSTR lpszPattern);
/**
Tests \a lpszPattern for validity.
\param lpszPattern
The pattern to test.
\param iErrorType
If not \c NULL, receives one of the #Pattern values indicating a return code.
\return
\c true, if \a lpszPattern is a well formed regular expression according
to the CWildcard class syntax (see #SetPattern); \c false otherwise.
*/
static bool IsPatternValid(LPCTSTR lpszPattern, int* iErrorType = NULL);
/**
Matches \a lpszText against \a lpszPattern.
A match means the entire \a lpszText is used in matching.
\param lpszPattern
The pattern to match.
\param lpszText
The string to match against the pattern.
\return
One of the #Match values.
\see
SetPattern
*/
static int Match(LPCTSTR lpszPattern, LPCTSTR lpszText);
/**
Initializes a new instance of the CWildcard class.
*/
CWildcard(){}
/**
Initializes a new instance of the CWildcard class.
\param lpszPattern
The pattern to use in matching.
\param bCaseSensitive
The case-sensitivity of matching.
\see
0610242025|wildcards
*/
CWildcard(LPCTSTR lpszPattern, bool bCaseSensitive)
{
SetPattern(lpszPattern, bCaseSensitive);
}
virtual ~CWildcard(){}
/**
Sets the current pattern
\param lpszPattern
The pattern used in matching.
\param bCaseSensitive
The case-sensitivity of matching.
\see
0610242025|wildcards
*/
void SetPattern(LPCTSTR lpszPattern, bool bCaseSensitive)
{
m_szPattern = lpszPattern;
m_bCaseSensitive=bCaseSensitive;
if (!bCaseSensitive)
m_szPattern.MakeLower();
}
operator LPCTSTR()
{
return (LPCTSTR)m_szPattern;
}
private:
bool m_bCaseSensitive;
static int MatchAfterStar(LPCTSTR p , LPCTSTR t);
CZipString m_szPattern;
};
}
#if (_MSC_VER > 1000) && (defined ZIP_HAS_DLL)
#pragma warning (pop)
#endif
#endif