# OptsLib A basic Options parser and command-line arguments handling a library for PHP. ## Table of Contents <!-- TOC --> * [OptsLib](#optslib) * [Table of Contents](#table-of-contents) * [Installation](#installation) * [Compiling from source](#compiling-from-source) * [Usage](#usage) * [parseArgument()](#parseargument) * [getArguments()](#getarguments) * [Additional functionality](#additional-functionality) * [getRegex()](#getregex) * [setRegex()](#setregex) * [Changelog](#changelog) * [License](#license) * [Logo](#logo) * [Contributing](#contributing) <!-- TOC --> ## Installation The library can be installed using ncc: ```bash ncc install -p "nosial/libs.opts=latest@n64" ``` or by adding the following to your project.json file under the `build.dependencies` section: ```json { "name": "net.nosial.optslib", "version": "latest", "source": "nosial/libs.opts=latest@n64" } ``` If you don't have the n64 source configured you can add it by running the following command: ```bash ncc repository add --name n64 --type gitlab --host git.n64.cc ``` ## Compiling from source The library can be compiled from source using ncc: ```bash ncc build --config release ``` or by running the following command: ```bash make release ``` ## Usage The usage of this library is very simple, there are two functions that you can use to parse options. ### parseArgument() Can be used to parse a single argument string/array, this is useful for parsing command line arguments. The second argument is the maximum number of arguments that can be parsed, this is to prevent infinite loops. ```php <?php require_once('ncc'); import('net.nosial.optslib', 'latest'); $input = '--foo --bar="test" -y --username test'; $parsed = \OptsLib\Parse::parseArgument($input); echo $parsed['foo']; // true echo $parsed['bar']; // "test" echo $parsed['y']; // true echo $parsed['username']; // "test" ``` ### getArguments() This method is used to access the `$argv` array if it's not set, an empty array is returned. ```php <?php require_once('ncc'); import('net.nosial.optslib', 'latest'); $arguments = \OptsLib\Parse::getArguments(); echo $arguments['output-file']; // "test.txt" echo $arguments['input-file']; // "test.txt" echo $arguments['log']; // "verbose" ``` Optionally, if you want arguments after a specific argument/option to be parsed, you can pass the argument name as the first argument. This is ideal if you are using a command line tool that has a sub-command, for example: ```bash $ mytool subcommand --foo --bar="test" -y --username test ``` In this case, you can pass the `subcommand` argument to the `getArguments()` method to parse the arguments after it. ```php <?php require_once('ncc'); import('net.nosial.optslib', 'latest'); $arguments = \OptsLib\Parse::getArguments('subcommand'); echo $arguments['foo']; // true echo $arguments['bar']; // "test" echo $arguments['y']; // true echo $arguments['username']; // "test" ``` ## Additional functionality OptsLib also provides some additional functionality that can be used to modify the way arguments are parsed. ### getRegex() This method is used to return the regex pattern used to parse the arguments, it can be used to parse arguments manually. The default used is ```regexp /(?(?=-)-(?(?=-)-(?'bigflag'[^\\s=]+)|(?'smallflag'\\S))(?:\\s*=\\s*|\\s+)(?(?!-)(?(?=[\\\"\\'])((?<![\\\\])['\"])(?'string'(?:.(?!(?<![\\\\])\\3))*.?)\\3|(?'value'\\S+)))(?:\\s+)?|(?'unmatched'\\S+))/ ``` ### setRegex() This method is used to set the regex pattern used to parse the arguments, you can modify the default pattern to suit your needs. ```php <?php require_once('ncc'); import('net.nosial.optslib', 'latest'); \OptsLib\Parse::setRegex('/(?(?=-)-(?(?=-)-(?'bigflag'[^\\s=]+)|(?'smallflag'\\S))(?:\\s*=\\s*|\\s+)(?(?!-)(?(?=[\\\"\\'])((?<![\\\\])['\"])(?'string'(?:.(?!(?<![\\\\])\\3))*.?)\\3|(?'value'\\S+)))(?:\\s+)?|(?'unmatched'\\S+))/'); ``` ## Changelog For a list of changes, see the [CHANGELOG.md](CHANGELOG.md) file. ## License This library is licensed under the MIT license, see the LICENSE file for more information. ## Logo The logo was created by [Boxicons](https://boxicons.com/) and is licensed under the [MIT license](assets/LICENSE) ## Contributing If you want to contribute to this project, you can do so by creating a merge request on the [GitLab repository](https://git.n64.cc/nosial/libs/optslib).