diff options
Diffstat (limited to 'fluid/tools')
| -rw-r--r-- | fluid/tools/filename.cxx | 135 | ||||
| -rw-r--r-- | fluid/tools/filename.h | 22 |
2 files changed, 157 insertions, 0 deletions
diff --git a/fluid/tools/filename.cxx b/fluid/tools/filename.cxx index a5d6e22b3..72386f78b 100644 --- a/fluid/tools/filename.cxx +++ b/fluid/tools/filename.cxx @@ -32,7 +32,9 @@ #include "tools/filename.h" #include <FL/filename.H> +#include <FL/fl_utf8.h> #include <FL/Fl.H> +#include "../src/flstring.h" //#include <FL/fl_string_functions.h> //#include "../src/flstring.h" // @@ -123,3 +125,136 @@ std::string fld::fix_separators(const std::string &fn) { } return ret; } + +// ---- FLUID-local wrapper functions for filename operations ---- + +/** + Get current working directory as std::string. + \return current working directory path + */ +std::string fl_getcwd_str() { + char buf[FL_PATH_MAX]; + fl_getcwd(buf, FL_PATH_MAX); + return std::string(buf); +} + +/** + Get path component (directory) from a filename. + \param[in] filename the full path + \return directory portion ending with separator + */ +std::string fl_filename_path_str(const char *filename) { + if (!filename || !*filename) return std::string(); + const char *name = fl_filename_name(filename); + if (name == filename) return std::string(); + return std::string(filename, name - filename); +} + +std::string fl_filename_path_str(const std::string &filename) { + return fl_filename_path_str(filename.c_str()); +} + +/** + Make a filename absolute. + \param[in] from relative or absolute filename + \return absolute filename + */ +std::string fl_filename_absolute_str(const char *from) { + char buf[FL_PATH_MAX]; + fl_filename_absolute(buf, FL_PATH_MAX, from); + return std::string(buf); +} + +std::string fl_filename_absolute_str(const std::string &from) { + return fl_filename_absolute_str(from.c_str()); +} + +/** + Make a filename absolute relative to a given directory. + \param[in] from relative filename + \param[in] cwd current working directory to use as base + \return absolute filename + */ +std::string fl_filename_absolute_str(const char *from, const char *cwd) { + char buf[FL_PATH_MAX]; + fl_filename_absolute(buf, FL_PATH_MAX, from, cwd); + return std::string(buf); +} + +std::string fl_filename_absolute_str(const std::string &from, const std::string &cwd) { + return fl_filename_absolute_str(from.c_str(), cwd.c_str()); +} + +/** + Make a filename relative to current directory. + \param[in] from absolute filename + \return relative filename + */ +std::string fl_filename_relative_str(const char *from) { + char buf[FL_PATH_MAX]; + fl_filename_relative(buf, FL_PATH_MAX, from); + return std::string(buf); +} + +std::string fl_filename_relative_str(const std::string &from) { + return fl_filename_relative_str(from.c_str()); +} + +/** + Get filename portion from a path. + \param[in] filename the full path + \return filename without directory + */ +std::string fl_filename_name_str(const char *filename) { + if (!filename) return std::string(); + return std::string(fl_filename_name(filename)); +} + +std::string fl_filename_name_str(const std::string &filename) { + return fl_filename_name_str(filename.c_str()); +} + +/** + Change the extension of a filename. + \param[in] filename original filename + \param[in] ext new extension (including dot) + \return filename with new extension + */ +std::string fl_filename_setext_str(const char *filename, const char *ext) { + char buf[FL_PATH_MAX]; + if (!filename) return std::string(); + strlcpy(buf, filename, FL_PATH_MAX); + fl_filename_setext(buf, FL_PATH_MAX, ext); + return std::string(buf); +} + +std::string fl_filename_setext_str(const std::string &filename, const std::string &ext) { + return fl_filename_setext_str(filename.c_str(), ext.c_str()); +} + +/** + Expand a filename with shell variables like ~ for home directory. + \param[in] from filename with possible shell expansions + \return expanded filename + */ +std::string fl_filename_expand_str(const std::string &from) { + char buf[FL_PATH_MAX]; + fl_filename_expand(buf, FL_PATH_MAX, from.c_str()); + return std::string(buf); +} + +/** + Get the extension of a filename. + \param[in] filename the filename + \return extension including the dot, or empty string if no extension + */ +std::string fl_filename_ext_str(const char *filename) { + if (!filename) return std::string(); + const char *ext = fl_filename_ext(filename); + if (!ext) return std::string(); + return std::string(ext); +} + +std::string fl_filename_ext_str(const std::string &filename) { + return fl_filename_ext_str(filename.c_str()); +} diff --git a/fluid/tools/filename.h b/fluid/tools/filename.h index 3a4359633..85e4a2844 100644 --- a/fluid/tools/filename.h +++ b/fluid/tools/filename.h @@ -21,10 +21,32 @@ #ifndef FLUID_TOOLS_FILENAME_H #define FLUID_TOOLS_FILENAME_H +#include <FL/filename.H> +#include <FL/fl_utf8.h> #include <string> std::string fl_filename_shortened(const std::string &filename, int maxchars); +// Wrapper functions for filename operations returning std::string +// These are FLUID-local implementations of functions that were removed from core FLTK + +std::string fl_getcwd_str(); +std::string fl_filename_path_str(const char *filename); +std::string fl_filename_path_str(const std::string &filename); +std::string fl_filename_absolute_str(const char *from); +std::string fl_filename_absolute_str(const std::string &from); +std::string fl_filename_absolute_str(const char *from, const char *cwd); +std::string fl_filename_absolute_str(const std::string &from, const std::string &cwd); +std::string fl_filename_relative_str(const char *from); +std::string fl_filename_relative_str(const std::string &from); +std::string fl_filename_name_str(const char *filename); +std::string fl_filename_name_str(const std::string &filename); +std::string fl_filename_setext_str(const char *filename, const char *ext); +std::string fl_filename_setext_str(const std::string &filename, const std::string &ext); +std::string fl_filename_expand_str(const std::string &from); +std::string fl_filename_ext_str(const char *filename); +std::string fl_filename_ext_str(const std::string &filename); + namespace fld { extern std::string end_with_slash(const std::string &fn); |
