+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
-<head>
-<!-- 2023-10-12 Thu 23:05 -->
-<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
-<meta name="viewport" content="width=device-width, initial-scale=1" />
-<title>Commandline interface arguments processing</title>
-<meta name="author" content="Svjatoslav Agejenko" />
-<meta name="generator" content="Org Mode" />
-<style>
- #content { max-width: 60em; margin: auto; }
- .title { text-align: center;
- margin-bottom: .2em; }
- .subtitle { text-align: center;
- font-size: medium;
- font-weight: bold;
- margin-top:0; }
- .todo { font-family: monospace; color: red; }
- .done { font-family: monospace; color: green; }
- .priority { font-family: monospace; color: orange; }
- .tag { background-color: #eee; font-family: monospace;
- padding: 2px; font-size: 80%; font-weight: normal; }
- .timestamp { color: #bebebe; }
- .timestamp-kwd { color: #5f9ea0; }
- .org-right { margin-left: auto; margin-right: 0px; text-align: right; }
- .org-left { margin-left: 0px; margin-right: auto; text-align: left; }
- .org-center { margin-left: auto; margin-right: auto; text-align: center; }
- .underline { text-decoration: underline; }
- #postamble p, #preamble p { font-size: 90%; margin: .2em; }
- p.verse { margin-left: 3%; }
- pre {
- border: 1px solid #e6e6e6;
- border-radius: 3px;
- background-color: #f2f2f2;
- padding: 8pt;
- font-family: monospace;
- overflow: auto;
- margin: 1.2em;
- }
- pre.src {
- position: relative;
- overflow: auto;
- }
- pre.src:before {
- display: none;
- position: absolute;
- top: -8px;
- right: 12px;
- padding: 3px;
- color: #555;
- background-color: #f2f2f299;
- }
- pre.src:hover:before { display: inline; margin-top: 14px;}
- /* Languages per Org manual */
- pre.src-asymptote:before { content: 'Asymptote'; }
- pre.src-awk:before { content: 'Awk'; }
- pre.src-authinfo::before { content: 'Authinfo'; }
- pre.src-C:before { content: 'C'; }
- /* pre.src-C++ doesn't work in CSS */
- pre.src-clojure:before { content: 'Clojure'; }
- pre.src-css:before { content: 'CSS'; }
- pre.src-D:before { content: 'D'; }
- pre.src-ditaa:before { content: 'ditaa'; }
- pre.src-dot:before { content: 'Graphviz'; }
- pre.src-calc:before { content: 'Emacs Calc'; }
- pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
- pre.src-fortran:before { content: 'Fortran'; }
- pre.src-gnuplot:before { content: 'gnuplot'; }
- pre.src-haskell:before { content: 'Haskell'; }
- pre.src-hledger:before { content: 'hledger'; }
- pre.src-java:before { content: 'Java'; }
- pre.src-js:before { content: 'Javascript'; }
- pre.src-latex:before { content: 'LaTeX'; }
- pre.src-ledger:before { content: 'Ledger'; }
- pre.src-lisp:before { content: 'Lisp'; }
- pre.src-lilypond:before { content: 'Lilypond'; }
- pre.src-lua:before { content: 'Lua'; }
- pre.src-matlab:before { content: 'MATLAB'; }
- pre.src-mscgen:before { content: 'Mscgen'; }
- pre.src-ocaml:before { content: 'Objective Caml'; }
- pre.src-octave:before { content: 'Octave'; }
- pre.src-org:before { content: 'Org mode'; }
- pre.src-oz:before { content: 'OZ'; }
- pre.src-plantuml:before { content: 'Plantuml'; }
- pre.src-processing:before { content: 'Processing.js'; }
- pre.src-python:before { content: 'Python'; }
- pre.src-R:before { content: 'R'; }
- pre.src-ruby:before { content: 'Ruby'; }
- pre.src-sass:before { content: 'Sass'; }
- pre.src-scheme:before { content: 'Scheme'; }
- pre.src-screen:before { content: 'Gnu Screen'; }
- pre.src-sed:before { content: 'Sed'; }
- pre.src-sh:before { content: 'shell'; }
- pre.src-sql:before { content: 'SQL'; }
- pre.src-sqlite:before { content: 'SQLite'; }
- /* additional languages in org.el's org-babel-load-languages alist */
- pre.src-forth:before { content: 'Forth'; }
- pre.src-io:before { content: 'IO'; }
- pre.src-J:before { content: 'J'; }
- pre.src-makefile:before { content: 'Makefile'; }
- pre.src-maxima:before { content: 'Maxima'; }
- pre.src-perl:before { content: 'Perl'; }
- pre.src-picolisp:before { content: 'Pico Lisp'; }
- pre.src-scala:before { content: 'Scala'; }
- pre.src-shell:before { content: 'Shell Script'; }
- pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
- /* additional language identifiers per "defun org-babel-execute"
- in ob-*.el */
- pre.src-cpp:before { content: 'C++'; }
- pre.src-abc:before { content: 'ABC'; }
- pre.src-coq:before { content: 'Coq'; }
- pre.src-groovy:before { content: 'Groovy'; }
- /* additional language identifiers from org-babel-shell-names in
- ob-shell.el: ob-shell is the only babel language using a lambda to put
- the execution function name together. */
- pre.src-bash:before { content: 'bash'; }
- pre.src-csh:before { content: 'csh'; }
- pre.src-ash:before { content: 'ash'; }
- pre.src-dash:before { content: 'dash'; }
- pre.src-ksh:before { content: 'ksh'; }
- pre.src-mksh:before { content: 'mksh'; }
- pre.src-posh:before { content: 'posh'; }
- /* Additional Emacs modes also supported by the LaTeX listings package */
- pre.src-ada:before { content: 'Ada'; }
- pre.src-asm:before { content: 'Assembler'; }
- pre.src-caml:before { content: 'Caml'; }
- pre.src-delphi:before { content: 'Delphi'; }
- pre.src-html:before { content: 'HTML'; }
- pre.src-idl:before { content: 'IDL'; }
- pre.src-mercury:before { content: 'Mercury'; }
- pre.src-metapost:before { content: 'MetaPost'; }
- pre.src-modula-2:before { content: 'Modula-2'; }
- pre.src-pascal:before { content: 'Pascal'; }
- pre.src-ps:before { content: 'PostScript'; }
- pre.src-prolog:before { content: 'Prolog'; }
- pre.src-simula:before { content: 'Simula'; }
- pre.src-tcl:before { content: 'tcl'; }
- pre.src-tex:before { content: 'TeX'; }
- pre.src-plain-tex:before { content: 'Plain TeX'; }
- pre.src-verilog:before { content: 'Verilog'; }
- pre.src-vhdl:before { content: 'VHDL'; }
- pre.src-xml:before { content: 'XML'; }
- pre.src-nxml:before { content: 'XML'; }
- /* add a generic configuration mode; LaTeX export needs an additional
- (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
- pre.src-conf:before { content: 'Configuration File'; }
-
- table { border-collapse:collapse; }
- caption.t-above { caption-side: top; }
- caption.t-bottom { caption-side: bottom; }
- td, th { vertical-align:top; }
- th.org-right { text-align: center; }
- th.org-left { text-align: center; }
- th.org-center { text-align: center; }
- td.org-right { text-align: right; }
- td.org-left { text-align: left; }
- td.org-center { text-align: center; }
- dt { font-weight: bold; }
- .footpara { display: inline; }
- .footdef { margin-bottom: 1em; }
- .figure { padding: 1em; }
- .figure p { text-align: center; }
- .equation-container {
- display: table;
- text-align: center;
- width: 100%;
- }
- .equation {
- vertical-align: middle;
- }
- .equation-label {
- display: table-cell;
- text-align: right;
- vertical-align: middle;
- }
- .inlinetask {
- padding: 10px;
- border: 2px solid gray;
- margin: 10px;
- background: #ffffcc;
- }
- #org-div-home-and-up
- { text-align: right; font-size: 70%; white-space: nowrap; }
- textarea { overflow-x: auto; }
- .linenr { font-size: smaller }
- .code-highlighted { background-color: #ffff00; }
- .org-info-js_info-navigation { border-style: none; }
- #org-info-js_console-label
- { font-size: 10px; font-weight: bold; white-space: nowrap; }
- .org-info-js_search-highlight
- { background-color: #ffff00; color: #000000; font-weight: bold; }
- .org-svg { }
-</style>
-<link rel="stylesheet" type="text/css" href="https://thomasf.github.io/solarized-css/solarized-dark.min.css" />
-</head>
-<body>
-<div id="content" class="content">
-<h1 class="title">Commandline interface arguments processing</h1>
-<div id="table-of-contents" role="doc-toc">
-<h2>Table of Contents</h2>
-<div id="text-table-of-contents" role="doc-toc">
-<ul>
-<li><a href="#orga388043">1. Terminology</a>
-<ul>
-<li><a href="#orgc364e3e">1.1. Command and argument</a></li>
-<li><a href="#org607ea14">1.2. Subcommand</a></li>
-<li><a href="#org3f1a445">1.3. Option</a></li>
-<li><a href="#orgf5c6947">1.4. Parameter</a></li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<ul class="org-ul">
-<li><a href="index.html#ID-bb4f96cd-458c-495b-a605-313b2e3e28d2">Back to CLI Helper - library main page</a></li>
-</ul>
-
-<div id="outline-container-orga388043" class="outline-2">
-<h2 id="orga388043"><span class="section-number-2">1.</span> Terminology</h2>
-<div class="outline-text-2" id="text-1">
-</div>
-<div id="outline-container-orgc364e3e" class="outline-3">
-<h3 id="orgc364e3e"><span class="section-number-3">1.1.</span> Command and argument</h3>
-<div class="outline-text-3" id="text-1-1">
-<p>
-Every command-line application has a way of receiving input from
-users, usually in the form of command-line arguments. A command-line
-argument is a piece of information provided to the command-line
-application when it's invoked. These arguments are provided as an
-array of strings. The first element of the array (argument 0) is
-typically the name of the command itself.
-</p>
-
-<p>
-In the example below, 'my-video-coder' is our command, and the rest
-are arguments:
-</p>
-
-<div class="org-src-container">
-<pre class="src src-shell">my-video-coder encode --input vid1.mp4 vid2.mp4 vid3.mp4 --quality 5
-</pre>
-</div>
-
-<p>
-To better understand how these concepts work together, let's break
-down our example command:
-</p>
-
-<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
-
-
-<colgroup>
-<col class="org-right" />
-
-<col class="org-left" />
-
-<col class="org-left" />
-</colgroup>
-<thead>
-<tr>
-<th scope="col" class="org-right">argument #</th>
-<th scope="col" class="org-left">value(s)</th>
-<th scope="col" class="org-left">type</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="org-right">0</td>
-<td class="org-left">my-video-coder</td>
-<td class="org-left">command</td>
-</tr>
-
-<tr>
-<td class="org-right">1</td>
-<td class="org-left">encode</td>
-<td class="org-left"><a href="#org607ea14">subcommand</a></td>
-</tr>
-
-<tr>
-<td class="org-right">2</td>
-<td class="org-left">–input</td>
-<td class="org-left"><a href="#org3f1a445">option1</a></td>
-</tr>
-
-<tr>
-<td class="org-right">3, 4, 5</td>
-<td class="org-left">vid1.mp4 vid2.mp4 vid3.mp4</td>
-<td class="org-left"><a href="#orgf5c6947">parameters for –input option</a></td>
-</tr>
-
-<tr>
-<td class="org-right">6</td>
-<td class="org-left">–quality</td>
-<td class="org-left"><a href="#org3f1a445">option2</a></td>
-</tr>
-
-<tr>
-<td class="org-right">7</td>
-<td class="org-left">5</td>
-<td class="org-left"><a href="#orgf5c6947">parameter for –quaily option</a></td>
-</tr>
-</tbody>
-</table>
-</div>
-</div>
-
-<div id="outline-container-org607ea14" class="outline-3">
-<h3 id="org607ea14"><span class="section-number-3">1.2.</span> Subcommand</h3>
-<div class="outline-text-3" id="text-1-2">
-<p>
-Subcommands are arguments that invoke more specific action that a
-command can perform. They are often used with commands that have
-multiple functions. In our example, <b>encode</b> is a subcommand of
-<b>my-video-coder</b>.
-</p>
-</div>
-</div>
-
-<div id="outline-container-org3f1a445" class="outline-3">
-<h3 id="org3f1a445"><span class="section-number-3">1.3.</span> Option</h3>
-<div class="outline-text-3" id="text-1-3">
-<p>
-Options are arguments that change the behavior of a command or
-subcommand. They usually start with a dash (-) or double dash
-(–). For instance, <b>–input</b> and <b>–quality</b> are options in our
-example command.
-</p>
-</div>
-</div>
-
-<div id="outline-container-orgf5c6947" class="outline-3">
-<h3 id="orgf5c6947"><span class="section-number-3">1.4.</span> Parameter</h3>
-<div class="outline-text-3" id="text-1-4">
-<p>
-Parameter provides additional information to a command, subcommand or
-option.
-</p>
-
-<p>
-For instance, in our example:
-</p>
-<ul class="org-ul">
-<li>'vid1.mp4 vid2.mp4 vid3.mp4' are parameters for the <b>–input</b> option.</li>
-<li>'5' is a parameter for the <b>–quality</b> option.</li>
-</ul>
-</div>
-</div>
-</div>
-</div>
-<div id="postamble" class="status">
-<p class="author">Author: Svjatoslav Agejenko</p>
-<p class="date">Created: 2023-10-12 Thu 23:05</p>
-<p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
-</div>
-</body>
-</html>
Library provides following general functionalities:
- [[id:4fca35e4-fdf1-4675-a36f-6206d6fb72cb][Asking for user input]]
-- [[id:46115263-ed3d-4acc-9ec5-523d7acf87b8][Commandline arguments processing]]
+- [[id:eb7d5632-6152-4d37-8e55-1cf4da21c204][Commandline arguments processing]]
-See also: [[https://clig.dev/][Command Line Interface Guidelines]].
-** Ask for user input
+* User input helper
:PROPERTIES:
:ID: 4fca35e4-fdf1-4675-a36f-6206d6fb72cb
:END:
See [[https://www3.svjatoslav.eu/projects/cli-helper/apidocs/eu/svjatoslav/commons/cli_helper/CLIHelper.html][Javadoc]] for complete API reference.
+* CLI argument helper
+:PROPERTIES:
+:ID: eb7d5632-6152-4d37-8e55-1cf4da21c204
+:END:
+
+See also: [[https://clig.dev/][Command Line Interface Guidelines]].
+
+** Command and argument
+
+Every command-line application has a way of receiving input from
+users, usually in the form of command-line arguments. A command-line
+argument is a piece of information provided to the command-line
+application when it's invoked. These arguments are provided as an
+array of strings. The first element of the array (argument 0) is
+typically the name of the command itself.
+
+In the example below, 'my-video-coder' is our command, and the rest
+are arguments:
+
+#+BEGIN_SRC shell
+my-video-coder encode --input vid1.mp4 vid2.mp4 vid3.mp4 --quality 5
+#+END_SRC
+
+To better understand how these concepts work together, let's break
+down our example command:
+
+| argument # | value(s) | type |
+|------------+----------------------------+-------------------------------|
+| 0 | my-video-coder | command |
+| 1 | encode | [[id:94242e8a-c59b-42fd-8cc7-ba3df1938119][subcommand]] |
+| 2 | --input | [[id:ffedf388-4d23-41eb-98d0-83fd3940b24d][option1]] |
+| 3, 4, 5 | vid1.mp4 vid2.mp4 vid3.mp4 | [[id:8a39d20c-421f-4bc7-94e4-8e561e58bea0][parameters for --input option]] |
+| 6 | --quality | [[id:ffedf388-4d23-41eb-98d0-83fd3940b24d][option2]] |
+| 7 | 5 | [[id:8a39d20c-421f-4bc7-94e4-8e561e58bea0][parameter for --quaily option]] |
+
+** Subcommand
+:PROPERTIES:
+:ID: 94242e8a-c59b-42fd-8cc7-ba3df1938119
+:END:
+
+Subcommands are arguments that invoke more specific action that a
+command can perform. They are often used with commands that have
+multiple functions. In our example, *encode* is a subcommand of
+*my-video-coder*.
+
+** Option
+:PROPERTIES:
+:ID: ffedf388-4d23-41eb-98d0-83fd3940b24d
+:END:
+
+Options are arguments that change the behavior of a command or
+subcommand. They usually start with a dash (-) or double dash
+(--). For instance, *--input* and *--quality* are options in our
+example command.
+
+** Parameter
+:PROPERTIES:
+:ID: 8a39d20c-421f-4bc7-94e4-8e561e58bea0
+:END:
+
+Parameter provides additional information to a command, subcommand or
+option.
+
+For instance, in our example:
+- 'vid1.mp4 vid2.mp4 vid3.mp4' are parameters for the *--input* option.
+- '5' is a parameter for the *--quality* option.
* Getting the library
Follow instructions to embed *cli-helper* library in your project.