summaryrefslogtreecommitdiff
path: root/src/mask.cc
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2010-03-17 02:40:42 -0400
committerJohn Wiegley <johnw@newartisans.com>2010-03-17 02:40:42 -0400
commit8dd362b57cf2b49c5268e72898ae873522d8756f (patch)
tree4c5741d682e89b1ea4e567c32a78d32ba17737db /src/mask.cc
parent36b616da5e0e2b31138e05d347b0ff3599467c00 (diff)
downloadfork-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.cc34
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