FileMasks.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. //---------------------------------------------------------------------------
  2. #ifndef FileMasksH
  3. #define FileMasksH
  4. //---------------------------------------------------------------------------
  5. class TFileMasks
  6. {
  7. public:
  8. struct TParams
  9. {
  10. TParams();
  11. __int64 Size;
  12. };
  13. static bool __fastcall IsMask(const AnsiString Mask);
  14. static bool __fastcall SingleMaskMatch(const AnsiString Mask, const AnsiString FileName);
  15. __fastcall TFileMasks();
  16. __fastcall TFileMasks(const TFileMasks & Source);
  17. __fastcall TFileMasks(const AnsiString AMasks);
  18. TFileMasks & __fastcall operator =(const TFileMasks & rhm);
  19. TFileMasks & __fastcall operator =(const char * rhs);
  20. TFileMasks & __fastcall operator =(const AnsiString rhs);
  21. bool __fastcall operator ==(const TFileMasks & rhm) const;
  22. bool __fastcall operator ==(const AnsiString rhs) const;
  23. bool __fastcall Matches(AnsiString FileName, bool Directory,
  24. AnsiString Path = "", const TParams * Params = NULL) const;
  25. bool __fastcall Matches(AnsiString FileName, bool Local, bool Directory,
  26. const TParams * Params = NULL) const;
  27. bool __fastcall IsValid();
  28. bool __fastcall IsValid(int & Start, int & Length);
  29. __property AnsiString Masks = { read = FMasks, write = FMasks };
  30. private:
  31. AnsiString FMasks;
  32. static bool __fastcall MatchesMask(AnsiString FileName, bool Directory,
  33. AnsiString Path, const TParams * Params, AnsiString M);
  34. static inline bool __fastcall MatchesFileMask(const AnsiString & Filename, const AnsiString & Mask);
  35. };
  36. //---------------------------------------------------------------------------
  37. AnsiString __fastcall MaskFileName(AnsiString FileName, const AnsiString Mask);
  38. bool __fastcall IsFileNameMask(const AnsiString Mask);
  39. AnsiString __fastcall DelimitFileNameMask(AnsiString Mask);
  40. //---------------------------------------------------------------------------
  41. typedef void __fastcall (__closure * TCustomCommandPatternEvent)
  42. (int Index, const AnsiString Pattern, void * Arg, AnsiString & Replacement,
  43. bool & LastPass);
  44. //---------------------------------------------------------------------------
  45. class TCustomCommand
  46. {
  47. friend class TInteractiveCustomCommand;
  48. public:
  49. TCustomCommand();
  50. AnsiString __fastcall Complete(const AnsiString & Command, bool LastPass);
  51. virtual void __fastcall Validate(const AnsiString & Command);
  52. protected:
  53. static const char NoQuote;
  54. static const AnsiString Quotes;
  55. void __fastcall GetToken(const AnsiString & Command,
  56. int Index, int & Len, char & PatternCmd);
  57. void __fastcall CustomValidate(const AnsiString & Command, void * Arg);
  58. bool __fastcall FindPattern(const AnsiString & Command, char PatternCmd);
  59. virtual void __fastcall ValidatePattern(const AnsiString & Command,
  60. int Index, int Len, char PatternCmd, void * Arg);
  61. virtual int __fastcall PatternLen(int Index, char PatternCmd) = 0;
  62. virtual bool __fastcall PatternReplacement(int Index, const AnsiString & Pattern,
  63. AnsiString & Replacement, bool & Delimit) = 0;
  64. virtual void __fastcall DelimitReplacement(AnsiString & Replacement, char Quote);
  65. };
  66. //---------------------------------------------------------------------------
  67. class TInteractiveCustomCommand : public TCustomCommand
  68. {
  69. public:
  70. TInteractiveCustomCommand(TCustomCommand * ChildCustomCommand);
  71. protected:
  72. virtual void __fastcall Prompt(int Index, const AnsiString & Prompt,
  73. AnsiString & Value);
  74. virtual int __fastcall PatternLen(int Index, char PatternCmd);
  75. virtual bool __fastcall PatternReplacement(int Index, const AnsiString & Pattern,
  76. AnsiString & Replacement, bool & Delimit);
  77. private:
  78. TCustomCommand * FChildCustomCommand;
  79. };
  80. //---------------------------------------------------------------------------
  81. class TFileCustomCommand : public TCustomCommand
  82. {
  83. public:
  84. TFileCustomCommand();
  85. TFileCustomCommand(const AnsiString & FileName, const AnsiString & FileList);
  86. virtual void __fastcall Validate(const AnsiString & Command);
  87. virtual void __fastcall ValidatePattern(const AnsiString & Command,
  88. int Index, int Len, char PatternCmd, void * Arg);
  89. bool __fastcall IsFileListCommand(const AnsiString & Command);
  90. virtual bool __fastcall IsFileCommand(const AnsiString & Command);
  91. protected:
  92. virtual int __fastcall PatternLen(int Index, char PatternCmd);
  93. virtual bool __fastcall PatternReplacement(int Index, const AnsiString & Pattern,
  94. AnsiString & Replacement, bool & Delimit);
  95. private:
  96. AnsiString FFileName;
  97. AnsiString FFileList;
  98. };
  99. //---------------------------------------------------------------------------
  100. typedef TFileCustomCommand TRemoteCustomCommand;
  101. //---------------------------------------------------------------------------
  102. #endif