1 // Common/Wildcard.h 2 3 #ifndef __COMMON_WILDCARD_H 4 #define __COMMON_WILDCARD_H 5 6 #include "MyString.h" 7 8 int CompareFileNames(const UString &s1, const UString &s2); 9 10 void SplitPathToParts(const UString &path, UStringVector &pathParts); 11 void SplitPathToParts(const UString &path, UString &dirPrefix, UString &name); 12 UString ExtractDirPrefixFromPath(const UString &path); 13 UString ExtractFileNameFromPath(const UString &path); 14 bool DoesNameContainWildCard(const UString &path); 15 bool CompareWildCardWithName(const UString &mask, const UString &name); 16 17 namespace NWildcard { 18 19 struct 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 28 class 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; 34 public: CCensorNode()35 CCensorNode(): Parent(0) { }; CCensorNode(const UString & name,CCensorNode * parent)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 59 struct CPair 60 { 61 UString Prefix; 62 CCensorNode Head; CPairCPair63 CPair(const UString &prefix): Prefix(prefix) { }; 64 }; 65 66 class CCensor 67 { 68 int FindPrefix(const UString &prefix) const; 69 public: 70 CObjectVector<CPair> Pairs; AllAreRelative()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