summaryrefslogtreecommitdiff
path: root/fluid/tools
diff options
context:
space:
mode:
Diffstat (limited to 'fluid/tools')
-rw-r--r--fluid/tools/filename.cxx135
-rw-r--r--fluid/tools/filename.h22
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);