diff options
| author | maxim nikonov <maxim.nikonov@hqo.co> | 2026-02-05 22:05:41 +0500 |
|---|---|---|
| committer | maxim nikonov <maxim.nikonov@hqo.co> | 2026-02-05 22:05:41 +0500 |
| commit | 57860e277f2298ad6c0830b1492087cfa124c862 (patch) | |
| tree | 50e9a7082c4143483fe01afc83293fb4ecbb4c22 /fluid/tools/filename.cxx | |
| parent | dc39575fb3ef90e5a2689babe7fb335cd88f6727 (diff) | |
wip
Diffstat (limited to 'fluid/tools/filename.cxx')
| -rw-r--r-- | fluid/tools/filename.cxx | 135 |
1 files changed, 135 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()); +} |
