4 * This file is part of LyX, the document processor.
5 * Licence details can be found in the file COPYING.
7 * \author Angus Leeming
9 * Full author contact details are available in file CREDITS.
21 /** Given a string such as
22 * "<glob> <glob> ... *.{abc,def} <glob>",
23 * convert the csh-style brace expresions:
24 * "<glob> <glob> ... *.abc *.def <glob>".
25 * Requires no system support, so should work equally on Unix, Mac, Win32.
27 std::string const convert_brace_glob(std::string const & glob);
30 /** A wrapper for the Posix function 'glob'.
31 * \param pattern the glob to be expanded. Eg "*.[Ch]".
32 * \param flags flags to be passed to the system function. See 'man glob'.
33 * \returns a vector of the files found to match \c pattern.
35 std::vector<std::string> const glob(std::string const & pattern, int flags = 0);
38 /** Given a string "<glob> <glob> <glob>", expand each glob in turn.
39 * Any glob that cannot be expanded is ignored silently.
40 * Invokes \c convert_brace_glob and \c glob internally, so use only
41 * on systems supporting the Posix function 'glob'.
42 * \param mask the string "<glob> <glob> <glob>".
43 * \param directory (if not empty) the current working directory from
44 * which \c glob is invoked.
45 * \returns a vector of all matching file names.
47 std::vector<std::string> const
48 expand_globs(std::string const & mask,
49 std::string const & directory = std::string());
52 /** \c FileFilterList parses a Qt-style list of available file filters
53 * to generate the corresponding vector.
54 * For example "TeX documents (*.tex);;LyX Documents (*.lyx)"
55 * will be parsed to fill a vector of size 2, whilst "*.{p[bgp]m} *.pdf"
56 * will result in a vector of size 1 in which the description field is empty.
58 class FileFilterList {
64 Filter(std::string const & d, std::string const & g)
65 : desc_(d), globs_(g) {}
66 std::string const & description() const { return desc_; }
67 std::string const & globs() const { return globs_; }
70 /** \param qt_style_filter a list of available file filters.
71 * Eg. "TeX documents (*.tex);;LyX Documents (*.lyx)".
72 * The "All files (*)" filter is always added to the list.
74 explicit FileFilterList(std::string const & qt_style_filter = std::string());
75 std::vector<Filter> const & filters() const { return filters_; }
77 /** \param expand pass each glob through \c convert_brace_glob.
78 * \returns the equivalent of the string passed to the c-tor.
80 std::string const str(bool expand) const;
83 void parse_filter(std::string const & filter);
84 std::vector<Filter> filters_;
87 } // namespace support
90 #endif // NOT GLOBBING_H