1// Common/Wildcard.h 2 3#ifndef __COMMON_WILDCARD_H 4#define __COMMON_WILDCARD_H 5 6#include "MyString.h" 7 8int CompareFileNames(const UString &s1, const UString &s2); 9 10void SplitPathToParts(const UString &path, UStringVector &pathParts); 11void SplitPathToParts(const UString &path, UString &dirPrefix, UString &name); 12UString ExtractDirPrefixFromPath(const UString &path); 13UString ExtractFileNameFromPath(const UString &path); 14bool DoesNameContainWildCard(const UString &path); 15bool CompareWildCardWithName(const UString &mask, const UString &name); 16 17namespace NWildcard { 18 19struct CItem 20{ 21 UStringVector PathParts; 22 bool Recursive; 23 bool ForFile; 24 bool ForDir; 25 bool CheckPath(const UStringVector &pathParts, bool isFile) const; 26}; 27 28class CCensorNode 29{ 30 CCensorNode *Parent; 31 bool CheckPathCurrent(bool include, const UStringVector &pathParts, bool isFile) const; 32 void AddItemSimple(bool include, CItem &item); 33 bool CheckPath(UStringVector &pathParts, bool isFile, bool &include) const; 34public: 35 CCensorNode(): Parent(0) { }; 36 CCensorNode(const UString &name, CCensorNode *parent): Name(name), Parent(parent) { }; 37 UString Name; 38 CObjectVector<CCensorNode> SubNodes; 39 CObjectVector<CItem> IncludeItems; 40 CObjectVector<CItem> ExcludeItems; 41 42 int FindSubNode(const UString &path) const; 43 44 void AddItem(bool include, CItem &item); 45 void AddItem(bool include, const UString &path, bool recursive, bool forFile, bool forDir); 46 void AddItem2(bool include, const UString &path, bool recursive); 47 48 bool NeedCheckSubDirs() const; 49 bool AreThereIncludeItems() const; 50 51 bool CheckPath(const UString &path, bool isFile, bool &include) const; 52 bool CheckPath(const UString &path, bool isFile) const; 53 54 bool CheckPathToRoot(bool include, UStringVector &pathParts, bool isFile) const; 55 // bool CheckPathToRoot(const UString &path, bool isFile, bool include) const; 56 void ExtendExclude(const CCensorNode &fromNodes); 57}; 58 59struct CPair 60{ 61 UString Prefix; 62 CCensorNode Head; 63 CPair(const UString &prefix): Prefix(prefix) { }; 64}; 65 66class CCensor 67{ 68 int FindPrefix(const UString &prefix) const; 69public: 70 CObjectVector<CPair> Pairs; 71 bool AllAreRelative() const 72 { return (Pairs.Size() == 1 && Pairs.Front().Prefix.IsEmpty()); } 73 void AddItem(bool include, const UString &path, bool recursive); 74 bool CheckPath(const UString &path, bool isFile) const; 75 void ExtendExclude(); 76}; 77 78} 79 80#endif 81