Update CLI Helper library version in documentation
[cli-helper.git] / doc / index.html
1 <?xml version="1.0" encoding="utf-8"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5 <head>
6 <!-- 2024-04-25 Thu 17:30 -->
7 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8 <meta name="viewport" content="width=device-width, initial-scale=1" />
9 <title>CLI Helper - library to help implementing commandline interfaces</title>
10 <meta name="author" content="Svjatoslav Agejenko" />
11 <meta name="generator" content="Org Mode" />
12 <style>
13   #content { max-width: 60em; margin: auto; }
14   .title  { text-align: center;
15              margin-bottom: .2em; }
16   .subtitle { text-align: center;
17               font-size: medium;
18               font-weight: bold;
19               margin-top:0; }
20   .todo   { font-family: monospace; color: red; }
21   .done   { font-family: monospace; color: green; }
22   .priority { font-family: monospace; color: orange; }
23   .tag    { background-color: #eee; font-family: monospace;
24             padding: 2px; font-size: 80%; font-weight: normal; }
25   .timestamp { color: #bebebe; }
26   .timestamp-kwd { color: #5f9ea0; }
27   .org-right  { margin-left: auto; margin-right: 0px;  text-align: right; }
28   .org-left   { margin-left: 0px;  margin-right: auto; text-align: left; }
29   .org-center { margin-left: auto; margin-right: auto; text-align: center; }
30   .underline { text-decoration: underline; }
31   #postamble p, #preamble p { font-size: 90%; margin: .2em; }
32   p.verse { margin-left: 3%; }
33   pre {
34     border: 1px solid #e6e6e6;
35     border-radius: 3px;
36     background-color: #f2f2f2;
37     padding: 8pt;
38     font-family: monospace;
39     overflow: auto;
40     margin: 1.2em;
41   }
42   pre.src {
43     position: relative;
44     overflow: auto;
45   }
46   pre.src:before {
47     display: none;
48     position: absolute;
49     top: -8px;
50     right: 12px;
51     padding: 3px;
52     color: #555;
53     background-color: #f2f2f299;
54   }
55   pre.src:hover:before { display: inline; margin-top: 14px;}
56   /* Languages per Org manual */
57   pre.src-asymptote:before { content: 'Asymptote'; }
58   pre.src-awk:before { content: 'Awk'; }
59   pre.src-authinfo::before { content: 'Authinfo'; }
60   pre.src-C:before { content: 'C'; }
61   /* pre.src-C++ doesn't work in CSS */
62   pre.src-clojure:before { content: 'Clojure'; }
63   pre.src-css:before { content: 'CSS'; }
64   pre.src-D:before { content: 'D'; }
65   pre.src-ditaa:before { content: 'ditaa'; }
66   pre.src-dot:before { content: 'Graphviz'; }
67   pre.src-calc:before { content: 'Emacs Calc'; }
68   pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
69   pre.src-fortran:before { content: 'Fortran'; }
70   pre.src-gnuplot:before { content: 'gnuplot'; }
71   pre.src-haskell:before { content: 'Haskell'; }
72   pre.src-hledger:before { content: 'hledger'; }
73   pre.src-java:before { content: 'Java'; }
74   pre.src-js:before { content: 'Javascript'; }
75   pre.src-latex:before { content: 'LaTeX'; }
76   pre.src-ledger:before { content: 'Ledger'; }
77   pre.src-lisp:before { content: 'Lisp'; }
78   pre.src-lilypond:before { content: 'Lilypond'; }
79   pre.src-lua:before { content: 'Lua'; }
80   pre.src-matlab:before { content: 'MATLAB'; }
81   pre.src-mscgen:before { content: 'Mscgen'; }
82   pre.src-ocaml:before { content: 'Objective Caml'; }
83   pre.src-octave:before { content: 'Octave'; }
84   pre.src-org:before { content: 'Org mode'; }
85   pre.src-oz:before { content: 'OZ'; }
86   pre.src-plantuml:before { content: 'Plantuml'; }
87   pre.src-processing:before { content: 'Processing.js'; }
88   pre.src-python:before { content: 'Python'; }
89   pre.src-R:before { content: 'R'; }
90   pre.src-ruby:before { content: 'Ruby'; }
91   pre.src-sass:before { content: 'Sass'; }
92   pre.src-scheme:before { content: 'Scheme'; }
93   pre.src-screen:before { content: 'Gnu Screen'; }
94   pre.src-sed:before { content: 'Sed'; }
95   pre.src-sh:before { content: 'shell'; }
96   pre.src-sql:before { content: 'SQL'; }
97   pre.src-sqlite:before { content: 'SQLite'; }
98   /* additional languages in org.el's org-babel-load-languages alist */
99   pre.src-forth:before { content: 'Forth'; }
100   pre.src-io:before { content: 'IO'; }
101   pre.src-J:before { content: 'J'; }
102   pre.src-makefile:before { content: 'Makefile'; }
103   pre.src-maxima:before { content: 'Maxima'; }
104   pre.src-perl:before { content: 'Perl'; }
105   pre.src-picolisp:before { content: 'Pico Lisp'; }
106   pre.src-scala:before { content: 'Scala'; }
107   pre.src-shell:before { content: 'Shell Script'; }
108   pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
109   /* additional language identifiers per "defun org-babel-execute"
110        in ob-*.el */
111   pre.src-cpp:before  { content: 'C++'; }
112   pre.src-abc:before  { content: 'ABC'; }
113   pre.src-coq:before  { content: 'Coq'; }
114   pre.src-groovy:before  { content: 'Groovy'; }
115   /* additional language identifiers from org-babel-shell-names in
116      ob-shell.el: ob-shell is the only babel language using a lambda to put
117      the execution function name together. */
118   pre.src-bash:before  { content: 'bash'; }
119   pre.src-csh:before  { content: 'csh'; }
120   pre.src-ash:before  { content: 'ash'; }
121   pre.src-dash:before  { content: 'dash'; }
122   pre.src-ksh:before  { content: 'ksh'; }
123   pre.src-mksh:before  { content: 'mksh'; }
124   pre.src-posh:before  { content: 'posh'; }
125   /* Additional Emacs modes also supported by the LaTeX listings package */
126   pre.src-ada:before { content: 'Ada'; }
127   pre.src-asm:before { content: 'Assembler'; }
128   pre.src-caml:before { content: 'Caml'; }
129   pre.src-delphi:before { content: 'Delphi'; }
130   pre.src-html:before { content: 'HTML'; }
131   pre.src-idl:before { content: 'IDL'; }
132   pre.src-mercury:before { content: 'Mercury'; }
133   pre.src-metapost:before { content: 'MetaPost'; }
134   pre.src-modula-2:before { content: 'Modula-2'; }
135   pre.src-pascal:before { content: 'Pascal'; }
136   pre.src-ps:before { content: 'PostScript'; }
137   pre.src-prolog:before { content: 'Prolog'; }
138   pre.src-simula:before { content: 'Simula'; }
139   pre.src-tcl:before { content: 'tcl'; }
140   pre.src-tex:before { content: 'TeX'; }
141   pre.src-plain-tex:before { content: 'Plain TeX'; }
142   pre.src-verilog:before { content: 'Verilog'; }
143   pre.src-vhdl:before { content: 'VHDL'; }
144   pre.src-xml:before { content: 'XML'; }
145   pre.src-nxml:before { content: 'XML'; }
146   /* add a generic configuration mode; LaTeX export needs an additional
147      (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
148   pre.src-conf:before { content: 'Configuration File'; }
149
150   table { border-collapse:collapse; }
151   caption.t-above { caption-side: top; }
152   caption.t-bottom { caption-side: bottom; }
153   td, th { vertical-align:top;  }
154   th.org-right  { text-align: center;  }
155   th.org-left   { text-align: center;   }
156   th.org-center { text-align: center; }
157   td.org-right  { text-align: right;  }
158   td.org-left   { text-align: left;   }
159   td.org-center { text-align: center; }
160   dt { font-weight: bold; }
161   .footpara { display: inline; }
162   .footdef  { margin-bottom: 1em; }
163   .figure { padding: 1em; }
164   .figure p { text-align: center; }
165   .equation-container {
166     display: table;
167     text-align: center;
168     width: 100%;
169   }
170   .equation {
171     vertical-align: middle;
172   }
173   .equation-label {
174     display: table-cell;
175     text-align: right;
176     vertical-align: middle;
177   }
178   .inlinetask {
179     padding: 10px;
180     border: 2px solid gray;
181     margin: 10px;
182     background: #ffffcc;
183   }
184   #org-div-home-and-up
185    { text-align: right; font-size: 70%; white-space: nowrap; }
186   textarea { overflow-x: auto; }
187   .linenr { font-size: smaller }
188   .code-highlighted { background-color: #ffff00; }
189   .org-info-js_info-navigation { border-style: none; }
190   #org-info-js_console-label
191     { font-size: 10px; font-weight: bold; white-space: nowrap; }
192   .org-info-js_search-highlight
193     { background-color: #ffff00; color: #000000; font-weight: bold; }
194   .org-svg { }
195 </style>
196 <link rel="stylesheet" type="text/css" href="https://thomasf.github.io/solarized-css/solarized-dark.min.css" />
197 </head>
198 <body>
199 <div id="content" class="content">
200 <h1 class="title">CLI Helper - library to help implementing commandline interfaces</h1>
201 <div id="table-of-contents" role="doc-toc">
202 <h2>Table of Contents</h2>
203 <div id="text-table-of-contents" role="doc-toc">
204 <ul>
205 <li><a href="#org9212145">1. General</a>
206 <ul>
207 <li><a href="#orgef4524a">1.1. Source code</a></li>
208 </ul>
209 </li>
210 <li><a href="#org5a03d93">2. Overview</a>
211 <ul>
212 <li><a href="#orgbe808ef">2.1. Ask for user input</a></li>
213 </ul>
214 </li>
215 <li><a href="#org20035ac">3. Alternatives and further reading</a></li>
216 <li><a href="#org2e7a568">4. Getting the library</a></li>
217 <li><a href="#orgcc45c0c">5. TODO:</a></li>
218 </ul>
219 </div>
220 </div>
221
222 <div id="outline-container-org9212145" class="outline-2">
223 <h2 id="org9212145"><span class="section-number-2">1.</span> General</h2>
224 <div class="outline-text-2" id="text-1">
225 <ul class="org-ul">
226 <li>This program is free software: released under Creative Commons Zero
227 (CC0) license</li>
228
229 <li>Program author:
230 <ul class="org-ul">
231 <li>Svjatoslav Agejenko</li>
232 <li>Homepage: <a href="https://svjatoslav.eu">https://svjatoslav.eu</a></li>
233 <li>Email: <a href="mailto://svjatoslav@svjatoslav.eu">mailto://svjatoslav@svjatoslav.eu</a></li>
234 </ul></li>
235
236 <li><a href="https://www.svjatoslav.eu/projects/">Other software projects hosted at svjatoslav.eu</a></li>
237 </ul>
238 </div>
239
240 <div id="outline-container-orgef4524a" class="outline-3">
241 <h3 id="orgef4524a"><span class="section-number-3">1.1.</span> Source code</h3>
242 <div class="outline-text-3" id="text-1-1">
243 <ul class="org-ul">
244 <li><a href="https://www2.svjatoslav.eu/gitweb/?p=cli-helper.git;a=snapshot;h=HEAD;sf=tgz">Download latest snapshot in TAR GZ format</a></li>
245
246 <li><a href="https://www2.svjatoslav.eu/gitweb/?p=cli-helper.git;a=summary">Browse Git repository online</a></li>
247
248 <li><p>
249 Clone Git repository using command:
250 </p>
251 <pre class="example">
252 git clone https://www3.svjatoslav.eu/git/cli-helper.git
253 </pre></li>
254
255 <li>See <a href="https://www3.svjatoslav.eu/projects/cli-helper/apidocs/">JavaDoc</a></li>
256 </ul>
257 </div>
258 </div>
259 </div>
260
261 <div id="outline-container-org5a03d93" class="outline-2">
262 <h2 id="org5a03d93"><span class="section-number-2">2.</span> Overview</h2>
263 <div class="outline-text-2" id="text-2">
264 <ul class="org-ul">
265 <li>See also: <a href="https://www3.svjatoslav.eu/projects/cli-helper/apidocs/">CLI Helper JavaDoc</a></li>
266 </ul>
267
268 <p>
269 This is library intended to facilitate creation of commandline
270 applications in Java programming language. Library is packaged as an
271 artifact to Maven repository. This makes it simple to add library as
272 dependency to your project.
273 </p>
274
275 <p>
276 Library provides following general functionalities:
277 </p>
278 <ul class="org-ul">
279 <li><a href="#orgbe808ef">Asking for user input</a></li>
280 <li><a href="CLI arguments processing.html#ID-46115263-ed3d-4acc-9ec5-523d7acf87b8">Commandline arguments processing</a></li>
281 </ul>
282 </div>
283
284 <div id="outline-container-orgbe808ef" class="outline-3">
285 <h3 id="orgbe808ef"><span class="section-number-3">2.1.</span> Ask for user input</h3>
286 <div class="outline-text-3" id="text-2-1">
287 <dl class="org-dl">
288 <dt>askBoolean()</dt><dd>Asks the user to enter a boolean value (yes/no).</dd>
289 <dt>askLong()</dt><dd>Asks the user to enter an integer.</dd>
290 <dt>askString()</dt><dd>Asks the user to enter a string.</dd>
291 </dl>
292 </div>
293 </div>
294 </div>
295
296 <div id="outline-container-org20035ac" class="outline-2">
297 <h2 id="org20035ac"><span class="section-number-2">3.</span> Alternatives and further reading</h2>
298 <div class="outline-text-2" id="text-3">
299 <ul class="org-ul">
300 <li><a href="https://clig.dev/">Command Line Interface Guidelines</a></li>
301 </ul>
302 </div>
303 </div>
304
305 <div id="outline-container-org2e7a568" class="outline-2">
306 <h2 id="org2e7a568"><span class="section-number-2">4.</span> Getting the library</h2>
307 <div class="outline-text-2" id="text-4">
308 <p>
309 Instructions to embed svjatoslav-commons library in your project:
310 </p>
311
312 <p>
313 Maven pom.xml file snippet:
314 </p>
315
316 <div class="org-src-container">
317 <pre class="src src-xml">&lt;<span style="color: #89b4fa;">dependencies</span>&gt;
318     ...
319     &lt;<span style="color: #89b4fa;">dependency</span>&gt;
320         &lt;<span style="color: #89b4fa;">groupId</span>&gt;eu.svjatoslav&lt;/<span style="color: #89b4fa;">groupId</span>&gt;
321         &lt;<span style="color: #89b4fa;">artifactId</span>&gt;cli-helper&lt;/<span style="color: #89b4fa;">artifactId</span>&gt;
322         &lt;<span style="color: #89b4fa;">version</span>&gt;1.2&lt;/<span style="color: #89b4fa;">version</span>&gt;
323     &lt;/<span style="color: #89b4fa;">dependency</span>&gt;
324     ...
325 &lt;/<span style="color: #89b4fa;">dependencies</span>&gt;
326
327
328 &lt;<span style="color: #89b4fa;">repositories</span>&gt;
329     ...
330     &lt;<span style="color: #89b4fa;">repository</span>&gt;
331         &lt;<span style="color: #89b4fa;">id</span>&gt;svjatoslav.eu&lt;/<span style="color: #89b4fa;">id</span>&gt;
332         &lt;<span style="color: #89b4fa;">name</span>&gt;Svjatoslav repository&lt;/<span style="color: #89b4fa;">name</span>&gt;
333         &lt;<span style="color: #89b4fa;">url</span>&gt;http://www3.svjatoslav.eu/maven/&lt;/<span style="color: #89b4fa;">url</span>&gt;
334     &lt;/<span style="color: #89b4fa;">repository</span>&gt;
335     ...
336 &lt;/<span style="color: #89b4fa;">repositories</span>&gt;
337 </pre>
338 </div>
339 </div>
340 </div>
341 <div id="outline-container-orgcc45c0c" class="outline-2">
342 <h2 id="orgcc45c0c"><span class="section-number-2">5.</span> TODO:</h2>
343 <div class="outline-text-2" id="text-5">
344 <p>
345 List of improvement suggestions:
346 </p>
347
348 <ul class="org-ul">
349 <li>Add more concrete examples of how to use the library in JavaDoc
350 comments. This will help developers quickly get started and learn
351 the API.</li>
352
353 <li>Provide more comprehensive unit tests for CliHelper,
354 ParameterParser, Options and subclasses. This will ensure robustness
355 and stability.</li>
356
357 <li>Add JavaDoc comments to all classes and methods where
358 applicable. This will provide better visibility into the library's
359 functionality for developers.</li>
360
361 <li>Add more option types like date/time, regular expression etc.</li>
362
363 <li>Document best practices for using the library in a larger project.</li>
364
365 <li>Implement support for more complex CLI applications like option
366 dependencies and conflicts resolution.</li>
367 </ul>
368 </div>
369 </div>
370 </div>
371 <div id="postamble" class="status">
372 <p class="author">Author: Svjatoslav Agejenko</p>
373 <p class="date">Created: 2024-04-25 Thu 17:30</p>
374 <p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
375 </div>
376 </body>
377 </html>