B0_std.FpathSourceFile paths.
A file system path specifies a file or a directory in a file system hierarchy. It is made of three parts:
dir_sep whose presence distinguishes absolute paths ("/a") from relative ones ("a")dir_sep separated segments. Segments are non empty strings except for maybe the last one. The latter syntactically distinguishes directory paths ("a/b/") from file paths ("a/b").The paths segments "." and ".." are relative path segments that respectively denote the current and parent directory. The basename of a path is its last non-empty segment if it is not a relative path segment or the empty string otherwise (e.g. on "/" or "..").
dir_sep_char is the platform dependent natural directory separator. This is / on POSIX and \ on Windows.
dir_sep is dir_sep_char as a string.
has_dir_sep s is true iff s contains dir_sep_char (on Windows also if it contains '/').
is_seg s is true iff s does not contain a dir_sep_char (on Windows also that it does not contain '/') or a null byte.
is_rel_seg s is true iff s is a relative segment in other words either "." or "..".
The type for paths
v s is the string s as a path.
Warning. In code only use "/" as the directory separator even on Windows platforms (don't be upset, the module gives them back to you with backslashes).
add_seg p seg if p's last segment is non-empty this is p with seg added. If p's last segment is empty, this is p with the empty segment replaced by seg.
null represents a file on the OS that discards all writes and returns end of file on reads.
dash is "-". This value is used in cli interface to respectively denote standard input and output.
Note. The following functions use syntactic semantic properties of paths. Given a path, these properties can be different from the ones your file system attributes to it.
is_dir_path p is true iff p syntactically represents a directory. This means that p is ., .. or ends with /, /. or /...
strip_dir_sep p is p without an existing last empty segment when p is not a root path, ensuring the result has no trailing dir_sep when converted to a string.
Note. The following functions use syntactic semantic properties of paths. Given a path, these properties can be different from the ones your file system attributes to it.
basename p is the last non-empty segment of p or the empty string otherwise. The latter occurs only on root paths and on paths whose last non-empty segment is a relative segment. If no_ext is true (default to false) the basename's multiple extension, if any, is removed from the result.
parent p is a directory path that contains p. If p is a root path this is p itself. If p is in the current directory this is ./.
is_prefix prefix p is true iff prefix is a strict prefix of p that respects path segments. More formally iff the following two conditions hold:
not Fpath.(equal (to_dir_path prefix) (to_dir_path p))Fpath.(String.is_prefix (to_string (to_dir_path prefix) (to_string p))) is trueWarning. By definition is_prefix p p is false. Note also that the prefix relation does not entail directory containement; for example is_prefix (v "..") (v "../..") holds.
strip_prefix prefix p is:
None if is_prefix prefix p is false.Some q otherwise where q is p without the string prefix Fpath.to_dir_path prefix. This means that q is always relative, that it preserves p's directoryness and that Fpath.(equal (prefix // q) p) holds.Warning. By definition strip_prefix p p is None.
drop_prefixed ps is ps without elements that have a strict prefixes in ps. The list order is preserved. Duplicates are not removed use uniquify for this.
reroot ~root ~dst p assumes root prefixes p removes the prefix and prepends dst to the result.
relative ~to_dir p is q such that to_dir // q represents the same path as p. Note that q is not necessarily relative: if to_dir is relative and p is absolute p is returned.
Warning. This function is mostly broken at the moment.
is_rel p is true iff p is a relative path, i.e. the root directory separator is missing in p.
is_abs p is true iff p is an absolute path, i.e. the root directory separator is present in p.
is_root p is true iff p is a root directory, i.e. p has the root directory separator and a single, empty, segment.
equal_basename p0 p1 is String.equal (basename p0) (basename p1).
The file extension (resp. multiple file extension) of a path segment is the suffix that starts at the last (resp. first) occurence of a '.' that is preceeded by at least one non '.' character. If there is no such occurence in the segment, the extension is empty. With these definitions, ".", "..", "..." and dot files like ".ocamlinit" or "..ocamlinit" have no extension, but ".emacs.d" and "..emacs.d" do have one.
The type for file extensions, '.' separator included.
get_ext p is p's basename file extension or the empty string if there is no extension. If multi is true (defaults to false), returns the multiple file extension.
has_ext ext p is true iff String.equal (get_ext p) e || String.equal (get_ext ~multi:true p) e.
strip_ext ?multi p is p with the extension of p's basename removed. If multi is true (defaults to false), the multiple file extension is removed.
set_ext ?multi p is add_ext ext (strip_ext ?multi p).
cut_ext ?multi p is (strip_ext ?multi p, get_ext ?multi p).
of_string s is the string s as a path. The following transformations are performed on the string:
0x2F) occurence is converted to \ (0x5C)An error returned if s is "" or if it contains a null byte. The error string mentions s.
to_string p is the path p as a string. The result can be safely converted back with v.
to_uri_path p is the path p as an URI path. This is p with the system specific dir_sep_char directory separator replaced by '/' and with the following characters percent encoded: '%', '?', '#', ' ' (unless escape_space is false, defaults to true), and the US-ASCII control characters.
Note. In 2019, the standard definition of URIs is in a sorry state. Assuming p is UTF-8 encoded. It is believed the above function should lead to an URI path component that can be parsed by HTML5's definition of URI parsing.
pp ppf p prints path p on ppf. The path is quoted with Filename.quote if needed. For now this means if it contains spaces (U+0020).
pp_quoted ppf p prints path p on ppf using Filename.quote.
distinct ps is ps without duplicates, the list order is preserved.
sort_by_parent ps maps elements of ps by their Fpath.parent.
sort_by_ext ~multi ps maps elements of ps by their extension as determined by Fpath.get_ext ~multi.
A search path is a list of paths separated by a designated separator. A well known search path is PATH in which executable binaries are looked up.
search_path_sep is the default platform specific separator for search paths, this is ";" if Sys.win32 is true and ":" otherwise.
list_of_search_path ~sep s parses sep separated file paths from s. sep is not allowed to appear in the file paths, it defaults to search_path_sep. The order in the list matches the order from left to right in s.