# hslua-module-path
[![GitHub CI][CI badge]](https://github.com/hslua/hslua-module-paths/actions)
[![Hackage][Hackage badge]](https://hackage.haskell.org/package/hslua-module-path)
[![Stackage Lts][Stackage Lts badge]](http://stackage.org/lts/package/hslua-module-path)
[![Stackage Nightly][Stackage Nightly badge]](http://stackage.org/nightly/package/hslua-module-path)
[![MIT license][License badge]](LICENSE)
[CI badge]: https://github.com/hslua/hslua-module-path/workflows/CI/badge.svg
[Hackage badge]: https://img.shields.io/hackage/v/hslua-module-path.svg?logo=haskell
[Stackage Lts badge]: http://stackage.org/package/hslua-module-path/badge/lts
[Stackage Nightly badge]: http://stackage.org/package/hslua-module-path/badge/nightly
[License badge]: https://img.shields.io/badge/license-MIT-blue.svg
Lua module to work with file paths.
## path
Module for file path manipulations.
#### separator
The character that separates directories.
#### search\_path\_separator
The character that is used to separate the entries in the `PATH`
environment variable.
### Functions
#### directory (filepath)
Get the directory name; move up one level.
Parameters:
filepath
path (string)
Returns:
- The filepath up to the last directory separator. (string)
#### filename (filepath)
Get the file name.
Parameters:
filepath
path (string)
Returns:
- File name part of the input path. (string)
#### is\_absolute (filepath)
Checks whether a path is absolute, i.e. not fixed to a root.
Parameters:
filepath
path (string)
Returns:
- `true` iff `filepath` is an absolute path, `false` otherwise.
(boolean)
#### is\_relative (filepath)
Checks whether a path is relative or fixed to a root.
Parameters:
filepath
path (string)
Returns:
- `true` iff `filepath` is a relative path, `false` otherwise.
(boolean)
#### join (filepaths)
Join path elements back together by the directory separator.
Parameters:
filepaths
path components (list of strings)
Returns:
- The joined path. (string)
#### make\_relative (path, root, unsafe)
Contract a filename, based on a relative path. Note that the resulting
path will never introduce `..` paths, as the presence of symlinks means
`../b` may not reach `a/b` if it starts from `a/c`. For a worked example
see [this blog
post](http://neilmitchell.blogspot.co.uk/2015/10/filepaths-are-subtle-symlinks-are-hard.html).
Parameters:
path
path to be made relative (string)
root
root path (string)
unsafe
whether to allow `..` in the result. (boolean)
Returns:
- contracted filename (string)
#### normalize (filepath)
Normalizes a path.
- `//` outside of the drive can be made blank
- `/` becomes the `path.separator`
- `./` -> ’’
- an empty path becomes `.`
Parameters:
filepath
path (string)
Returns:
- The normalized path. (string)
#### split (filepath)
Splits a path by the directory separator.
Parameters:
filepath
path (string)
Returns:
- List of all path components. (list of strings)
#### split\_extension (filepath)
Splits the last extension from a file path and returns the parts. The
extension, if present, includes the leading separator; if the path has
no extension, then the empty string is returned as the extension.
Parameters:
filepath
path (string)
Returns:
- filepath without extension (string)
- extension or empty string (string)
#### split\_search\_path (search\_path)
Takes a string and splits it on the `search_path_separator` character.
Blank items are ignored on Windows, and converted to `.` on Posix. On
Windows path elements are stripped of quotes.
Parameters:
search\_path
platform-specific search path (string)
Returns:
- list of directories in search path (list of strings)