diff options
author | John Wiegley <johnw@newartisans.com> | 2010-03-17 02:40:42 -0400 |
---|---|---|
committer | John Wiegley <johnw@newartisans.com> | 2010-03-17 02:40:42 -0400 |
commit | 8dd362b57cf2b49c5268e72898ae873522d8756f (patch) | |
tree | 4c5741d682e89b1ea4e567c32a78d32ba17737db /src/mask.cc | |
parent | 36b616da5e0e2b31138e05d347b0ff3599467c00 (diff) | |
download | fork-ledger-8dd362b57cf2b49c5268e72898ae873522d8756f.tar.gz fork-ledger-8dd362b57cf2b49c5268e72898ae873522d8756f.tar.bz2 fork-ledger-8dd362b57cf2b49c5268e72898ae873522d8756f.zip |
The include directive now supports file globbing
This only happens at the base filename, not for any of the directory
names for now.
Diffstat (limited to 'src/mask.cc')
-rw-r--r-- | src/mask.cc | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/mask.cc b/src/mask.cc index 601d2a6a..cd516fe2 100644 --- a/src/mask.cc +++ b/src/mask.cc @@ -52,4 +52,38 @@ mask_t& mask_t::operator=(const string& pat) return *this; } +mask_t& mask_t::assign_glob(const string& pat) +{ + string re_pat = ""; + string::size_type len = pat.length(); + for (string::size_type i = 0; i < len; i++) { + switch (pat[i]) { + case '?': + re_pat += '.'; + break; + case '*': + re_pat += ".*"; + break; + case '[': + while (i < len && pat[i] != ']') + re_pat += pat[i++]; + if (i < len) + re_pat += pat[i]; + break; + + case '\\': + if (i + 1 < len) { + re_pat += pat[++i]; + break; + } else { + // fallthrough... + } + default: + re_pat += pat[i]; + break; + } + } + return (*this = re_pat); +} + } // namespace ledger |