]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/xforms/FormFiledialog.C
Tiny clean-ups.
[lyx.git] / src / frontends / xforms / FormFiledialog.C
index 1234f636f1f9d6a18d7f1b7802d3a0a98f5593a6..3d9d5b05c4c0d608a058e826fb99f0790237c248 100644 (file)
@@ -28,6 +28,7 @@
 #include "lyx_forms.h"
 
 #include <boost/bind.hpp>
+#include <boost/regex.hpp>
 
 #include <algorithm>
 #include <map>
@@ -62,14 +63,14 @@ using lyx::support::GetEnvPath;
 using lyx::support::LyXReadLink;
 using lyx::support::MakeAbsPath;
 using lyx::support::OnlyFilename;
-using lyx::support::regexMatch;
 using lyx::support::split;
+using lyx::support::subst;
 using lyx::support::suffixIs;
 using lyx::support::trim;
 
 using std::max;
 using std::sort;
-
+using std::string;
 using std::map;
 
 
@@ -197,6 +198,31 @@ int FileDialog::Private::minw_ = 0;
 int FileDialog::Private::minh_ = 0;
 
 
+namespace {
+
+boost::regex getRegex(string const & pat)
+{
+       // We massage the pattern a bit so that the usual
+       // shell pattern we all are used to will work.
+       // One nice thing about using a real regex is that
+       // things like "*.*[^~]" will work also.
+       // build the regex string.
+       string pattern = subst(pat, ".", "\\.");
+       pattern = subst(pattern, "*", ".*");
+
+       boost::regex reg(pattern);
+       return reg;
+}
+
+
+bool globMatch(string const & a, boost::regex const & reg)
+{
+       return boost::regex_match(a, reg);
+}
+
+} // namespace anon
+
+
 // Reread: updates dialog list to match class directory
 void FileDialog::Private::Reread()
 {
@@ -237,6 +263,8 @@ void FileDialog::Private::Reread()
        }
 
        // Parses all entries of the given subdirectory
+       boost::regex reg = getRegex(mask_);
+
        time_t curTime = time(0);
        rewinddir(dir);
        while (dirent * entry = readdir(dir)) {
@@ -320,7 +348,7 @@ void FileDialog::Private::Reread()
                    || fileInfo.isChar()
                    || fileInfo.isBlock()
                    || fileInfo.isFifo()) {
-                       if (!regexMatch(fname, mask_))
+                       if (!globMatch(fname, reg))
                                continue;
                } else if (!(isDir = fileInfo.isDir()))
                        continue;