annotate scripts/general/inputParser.m @ 21546:f7f97d7e9294

doc: Wrap m-file docstrings to 79 characters + newline (80 total). * isrecording.m, soundsc.m, delaunay3.m, cell2mat.m, cumtrapz.m, del2.m, inputParser.m, interp1.m, interp3.m, narginchk.m, profile.m, validateattributes.m, delaunayn.m, tsearchn.m, voronoin.m, brighten.m, cmunique.m, colorcube.m, imfinfo.m, imshow.m, edit.m, orderfields.m, run.m, warning_ids.m, ode23.m, ode45.m, odeget.m, integrate_adaptive.m, kahan.m, ode_struct_value_check.m, runge_kutta_23.m, fminunc.m, fsolve.m, fzero.m, pkg.m, build.m, specular.m, view.m, bar.m, barh.m, contour3.m, isosurface.m, line.m, pie.m, pie3.m, quiver3.m, scatter.m, scatter3.m, stem3.m, stemleaf.m, surfl.m, tetramesh.m, isfigure.m, mkpp.m, pchip.m, residue.m, splinefit.m, rmpref.m, unique.m, eigs.m, ilu.m, factor.m, factorial.m, gallery.m, hankel.m, histc.m, ols.m, finv.m, fpdf.m, kruskal_wallis_test.m, weekday.m: Wrap m-file docstrings to 79 characters + newline (80 total).
author Rik <rik@octave.org>
date Sun, 27 Mar 2016 15:50:01 -0700
parents 04923b7b0d89
children 3d60ed163b70
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1 ## Copyright (C) 2011-2014 Carnë Draug
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
3 ## This file is part of Octave.
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
4 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19597
diff changeset
5 ## Octave is free software; you can redistribute it and/or modify it
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
6 ## under the terms of the GNU General Public License as published by
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
7 ## the Free Software Foundation; either version 3 of the License, or (at
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
8 ## your option) any later version.
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
9 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
10 ## Octave is distributed in the hope that it will be useful, but
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
13 ## General Public License for more details.
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
14 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
15 ## You should have received a copy of the GNU General Public License
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
16 ## along with Octave; see the file COPYING. If not, see
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
17 ## <http://www.gnu.org/licenses/>.
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
18
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
19 ## -*- texinfo -*-
20852
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20735
diff changeset
20 ## @deftypefn {} {@var{p} =} inputParser ()
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
21 ## Create object @var{p} of the inputParser class.
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
22 ##
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
23 ## This class is designed to allow easy parsing of function arguments. The
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
24 ## class supports four types of arguments:
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
25 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
26 ## @enumerate
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
27 ## @item mandatory (see @command{addRequired});
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
28 ##
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
29 ## @item optional (see @command{addOptional});
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
30 ##
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
31 ## @item named (see @command{addParamValue});
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
32 ##
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
33 ## @item switch (see @command{addSwitch}).
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
34 ## @end enumerate
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
35 ##
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
36 ## After defining the function API with these methods, the supplied arguments
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
37 ## can be parsed with the @command{parse} method and the parsing results
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
38 ## accessed with the @command{Results} accessor.
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
39 ##
19039
f45b60897316 dox: fix inputParser help text for newer Texinfo versions.
Carnë Draug <carandraug@octave.org>
parents: 19037
diff changeset
40 ## @end deftypefn
20852
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20735
diff changeset
41 ## @deftypefn {} {} inputParser.Parameters
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
42 ## Return list of parameter names already defined.
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
43 ##
19039
f45b60897316 dox: fix inputParser help text for newer Texinfo versions.
Carnë Draug <carandraug@octave.org>
parents: 19037
diff changeset
44 ## @end deftypefn
20852
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20735
diff changeset
45 ## @deftypefn {} {} inputParser.Results
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
46 ## Return structure with argument names as fieldnames and corresponding values.
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
47 ##
19039
f45b60897316 dox: fix inputParser help text for newer Texinfo versions.
Carnë Draug <carandraug@octave.org>
parents: 19037
diff changeset
48 ## @end deftypefn
20852
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20735
diff changeset
49 ## @deftypefn {} {} inputParser.Unmatched
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
50 ## Return structure similar to @command{Results}, but for unmatched parameters.
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
51 ## See the @command{KeepUnmatched} property.
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
52 ##
19039
f45b60897316 dox: fix inputParser help text for newer Texinfo versions.
Carnë Draug <carandraug@octave.org>
parents: 19037
diff changeset
53 ## @end deftypefn
20852
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20735
diff changeset
54 ## @deftypefn {} {} inputParser.UsingDefaults
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
55 ## Return cell array with the names of arguments that are using default values.
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
56 ##
19039
f45b60897316 dox: fix inputParser help text for newer Texinfo versions.
Carnë Draug <carandraug@octave.org>
parents: 19037
diff changeset
57 ## @end deftypefn
20852
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20735
diff changeset
58 ## @deftypefn {} {} inputParser.CaseSensitive = @var{boolean}
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
59 ## Set whether matching of argument names should be case sensitive. Defaults
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
60 ## to false.
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
61 ##
19039
f45b60897316 dox: fix inputParser help text for newer Texinfo versions.
Carnë Draug <carandraug@octave.org>
parents: 19037
diff changeset
62 ## @end deftypefn
20852
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20735
diff changeset
63 ## @deftypefn {} {} inputParser.FunctionName = @var{name}
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
64 ## Set function name to be used in error messages; Defaults to empty string.
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
65 ##
19039
f45b60897316 dox: fix inputParser help text for newer Texinfo versions.
Carnë Draug <carandraug@octave.org>
parents: 19037
diff changeset
66 ## @end deftypefn
20852
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20735
diff changeset
67 ## @deftypefn {} {} inputParser.KeepUnmatched = @var{boolean}
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
68 ## Set whether an error should be given for non-defined arguments. Defaults to
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
69 ## false. If set to true, the extra arguments can be accessed through
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
70 ## @code{Unmatched} after the @code{parse} method. Note that since
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
71 ## @command{Switch} and @command{ParamValue} arguments can be mixed, it is
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
72 ## not possible to know the unmatched type. If argument is found unmatched
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
73 ## it is assumed to be of the @command{ParamValue} type and it is expected to
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
74 ## be followed by a value.
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
75 ##
19039
f45b60897316 dox: fix inputParser help text for newer Texinfo versions.
Carnë Draug <carandraug@octave.org>
parents: 19037
diff changeset
76 ## @end deftypefn
20852
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20735
diff changeset
77 ## @deftypefn {} {} inputParser.StructExpand = @var{boolean}
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
78 ## Set whether a structure can be passed to the function instead of
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
79 ## parameter/value pairs. Defaults to true. Not implemented yet.
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
80 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
81 ## The following example shows how to use this class:
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
82 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
83 ## @example
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
84 ## @group
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
85 ## function check (varargin)
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
86 ## @c The next two comments need to be indented by one for alignment
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
87 ## p = inputParser (); # create object
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
88 ## p.FunctionName = "check"; # set function name
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
89 ## p.addRequired ("pack", @@ischar); # mandatory argument
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
90 ## p.addOptional ("path", pwd(), @@ischar); # optional argument
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
91 ##
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
92 ## ## create a function handle to anonymous functions for validators
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
93 ## val_mat = @@(x) isvector (x) && all (x <= 1) && all (x >= 0);
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
94 ## p.addOptional ("mat", [0 0], val_mat);
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
95 ##
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
96 ## ## create two arguments of type "ParamValue"
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
97 ## val_type = @@(x) any (strcmp (x, @{"linear", "quadratic"@}));
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
98 ## p.addParamValue ("type", "linear", val_type);
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
99 ## val_verb = @@(x) any (strcmp (x, @{"low", "medium", "high"@}));
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
100 ## p.addParamValue ("tolerance", "low", val_verb);
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
101 ##
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
102 ## ## create a switch type of argument
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
103 ## p.addSwitch ("verbose");
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
104 ##
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
105 ## p.parse (varargin@{:@}); # Run created parser on inputs
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
106 ##
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
107 ## ## the rest of the function can access inputs by using p.Results.
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
108 ## ## for example, get the tolerance input with p.Results.tolerance
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
109 ## endfunction
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
110 ## @end group
21316
6cc091426e52 doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents: 20937
diff changeset
111 ## @end example
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
112 ##
21316
6cc091426e52 doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents: 20937
diff changeset
113 ## @example
6cc091426e52 doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents: 20937
diff changeset
114 ## @group
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
115 ## check ("mech"); # valid, use defaults for other arguments
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
116 ## check (); # error, one argument is mandatory
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19597
diff changeset
117 ## check (1); # error, since ! ischar
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
118 ## check ("mech", "~/dev"); # valid, use defaults for other arguments
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
119 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
120 ## check ("mech", "~/dev", [0 1 0 0], "type", "linear"); # valid
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
121 ##
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
122 ## ## following is also valid. Note how the Switch argument type can
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
123 ## ## be mixed into or before the ParamValue argument type (but it
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
124 ## ## must still appear after any Optional argument).
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
125 ## check ("mech", "~/dev", [0 1 0 0], "verbose", "tolerance", "high");
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
126 ##
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
127 ## ## following returns an error since not all optional arguments,
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
128 ## ## `path' and `mat', were given before the named argument `type'.
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
129 ## check ("mech", "~/dev", "type", "linear");
21316
6cc091426e52 doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents: 20937
diff changeset
130 ## @end group
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
131 ## @end example
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
132 ##
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
133 ## @emph{Note 1}: A function can have any mixture of the four API types but
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
134 ## they must appear in a specific order. @command{Required} arguments must be
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
135 ## first and can be followed by any @command{Optional} arguments. Only
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
136 ## the @command{ParamValue} and @command{Switch} arguments may be mixed
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
137 ## together and they must appear at the end.
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
138 ##
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
139 ## @emph{Note 2}: If both @command{Optional} and @command{ParamValue} arguments
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
140 ## are mixed in a function API then once a string Optional argument fails to
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
141 ## validate it will be considered the end of the @command{Optional}
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
142 ## arguments. The remaining arguments will be compared against any
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
143 ## @command{ParamValue} or @command{Switch} arguments.
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
144 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
145 ## @seealso{nargin, validateattributes, validatestring, varargin}
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
146 ## @end deftypefn
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
147
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
148 ## -*- texinfo -*-
20852
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20735
diff changeset
149 ## @deftypefn {} {} addOptional (@var{argname}, @var{default})
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20735
diff changeset
150 ## @deftypefnx {} {} addOptional (@var{argname}, @var{default}, @var{validator})
21546
f7f97d7e9294 doc: Wrap m-file docstrings to 79 characters + newline (80 total).
Rik <rik@octave.org>
parents: 21508
diff changeset
151 ## Add new optional argument to the object @var{parser} of the class
f7f97d7e9294 doc: Wrap m-file docstrings to 79 characters + newline (80 total).
Rik <rik@octave.org>
parents: 21508
diff changeset
152 ## inputParser to implement an ordered arguments type of API
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
153 ##
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
154 ## @var{argname} must be a string with the name of the new argument. The order
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
155 ## in which new arguments are added with @command{addOptional}, represents the
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
156 ## expected order of arguments.
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
157 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
158 ## @var{default} will be the value used when the argument is not specified.
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
159 ##
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
160 ## @var{validator} is an optional anonymous function to validate the given
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
161 ## values for the argument with name @var{argname}. Alternatively, a
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
162 ## function name can be used.
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
163 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
164 ## See @command{help inputParser} for examples.
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
165 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
166 ## @emph{Note}: if a string argument does not validate, it will be considered a
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
167 ## ParamValue key. If an optional argument is not given a validator, anything
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
168 ## will be valid, and so any string will be considered will be the value of the
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
169 ## optional argument (in @sc{matlab}, if no validator is given and argument is
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
170 ## a string it will also be considered a ParamValue key).
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
171 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
172 ## @end deftypefn
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
173
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
174 ## -*- texinfo -*-
20852
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20735
diff changeset
175 ## @deftypefn {} {} addParamValue (@var{argname}, @var{default})
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20735
diff changeset
176 ## @deftypefnx {} {} addParamValue (@var{argname}, @var{default}, @var{validator})
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
177 ## Add new parameter to the object @var{parser} of the class inputParser to
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
178 ## implement a name/value pair type of API.
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
179 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
180 ## @var{argname} must be a string with the name of the new parameter.
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
181 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
182 ## @var{default} will be the value used when the parameter is not specified.
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
183 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
184 ## @var{validator} is an optional function handle to validate the given values
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
185 ## for the parameter with name @var{argname}. Alternatively, a function name
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
186 ## can be used.
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
187 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
188 ## See @command{help inputParser} for examples.
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
189 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
190 ## @end deftypefn
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
191
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
192 ## -*- texinfo -*-
20852
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20735
diff changeset
193 ## @deftypefn {} {} addRequired (@var{argname})
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20735
diff changeset
194 ## @deftypefnx {} {} addRequired (@var{argname}, @var{validator})
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
195 ## Add new mandatory argument to the object @var{parser} of inputParser class.
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
196 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
197 ## This method belongs to the inputParser class and implements an ordered
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
198 ## arguments type of API.
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
199 ##
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
200 ## @var{argname} must be a string with the name of the new argument. The order
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
201 ## in which new arguments are added with @command{addrequired}, represents the
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
202 ## expected order of arguments.
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
203 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
204 ## @var{validator} is an optional function handle to validate the given values
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
205 ## for the argument with name @var{argname}. Alternatively, a function name
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
206 ## can be used.
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
207 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
208 ## See @command{help inputParser} for examples.
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
209 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
210 ## @emph{Note}: this can be used together with the other type of arguments but
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
211 ## it must be the first (see @command{@@inputParser}).
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
212 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
213 ## @end deftypefn
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
214
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
215 ## -*- texinfo -*-
20852
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20735
diff changeset
216 ## @deftypefn {} {} addSwitch (@var{argname})
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
217 ## Add new switch type of argument to the object @var{parser} of inputParser
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
218 ## class.
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
219 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
220 ## This method belongs to the inputParser class and implements a switch
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
221 ## arguments type of API.
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
222 ##
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
223 ## @var{argname} must be a string with the name of the new argument. Arguments
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
224 ## of this type can be specified at the end, after @code{Required} and
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
225 ## @code{Optional}, and mixed between the @code{ParamValue}. They default to
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
226 ## false. If one of the arguments supplied is a string like @var{argname},
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
227 ## then after parsing the value of @var{parse}.Results.@var{argname} will be
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
228 ## true.
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
229 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
230 ## See @command{help inputParser} for examples.
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
231 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
232 ## @end deftypefn
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
233
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
234 ## -*- texinfo -*-
20852
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20735
diff changeset
235 ## @deftypefn {} {} parse (@var{varargin})
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
236 ## Parses and validates list of arguments according to object @var{parser} of
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
237 ## the class inputParser.
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
238 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
239 ## After parsing, the results can be accessed with the @command{Results}
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
240 ## accessor. See @command{help inputParser} for a more complete description.
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
241 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
242 ## @end deftypefn
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
243
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
244 ## Author: Carnë Draug <carandraug@octave.org>
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
245
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
246 classdef inputParser < handle
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
247 properties
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
248 ## TODO set input checking for this properties
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19597
diff changeset
249 CaseSensitive = false;
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19597
diff changeset
250 FunctionName = "";
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19597
diff changeset
251 KeepUnmatched = false;
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19597
diff changeset
252 # PartialMatching = true; # TODO unimplemented
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19597
diff changeset
253 # StructExpand = true; # TODO unimplemented
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
254 endproperties
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
255
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
256 properties (SetAccess = protected)
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19597
diff changeset
257 Parameters = cell ();
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19597
diff changeset
258 Results = struct ();
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19597
diff changeset
259 Unmatched = struct ();
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19597
diff changeset
260 UsingDefaults = cell ();
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
261 endproperties
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
262
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
263 properties (Access = protected)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
264 ## Since Required and Optional are ordered, they get a cell array of
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
265 ## structs with the fields "name", "def" (default), and "val" (validator).
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19597
diff changeset
266 Required = cell ();
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19597
diff changeset
267 Optional = cell ();
20470
784ed55fdde8 inputParser.m: Fix typo
Andreas Weber <andy.weber.aw@gmail.com>
parents: 19833
diff changeset
268 ## ParamValue and Switch are unordered so we have a struct whose fieldnames
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
269 ## are the argname, and values are a struct with fields "def" and "val"
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19597
diff changeset
270 ParamValue = struct ();
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19597
diff changeset
271 Switch = struct ();
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
272
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
273 ## List of ParamValues and Switch names to ease searches
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
274 ParamValueNames = cell ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
275 SwitchNames = cell ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
276
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
277 ## When checking for fieldnames in a Case Insensitive way, this variable
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
278 ## holds the correct identifier for the last searched named using the
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
279 ## is_argname method.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19597
diff changeset
280 last_name = "";
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
281 endproperties
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
282
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
283 properties (Access = protected, Constant = true)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
284 ## Default validator, always returns scalar true.
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
285 def_val = @() true;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
286 endproperties
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
287
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
288 methods
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
289 function addRequired (this, name, val = inputParser.def_val)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
290 if (nargin < 2 || nargin > 3)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
291 print_usage ();
20937
3b2cc6ef0624 use numfields (x) instead of numel (fieldnames (x))
John W. Eaton <jwe@octave.org>
parents: 20852
diff changeset
292 elseif (numel (this.Optional) || numfields (this.ParamValue)
3b2cc6ef0624 use numfields (x) instead of numel (fieldnames (x))
John W. Eaton <jwe@octave.org>
parents: 20852
diff changeset
293 || numfields (this.Switch))
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
294 error (["inputParser.addRequired: can't have a Required argument " ...
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
295 "after Optional, ParamValue, or Switch"]);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
296 endif
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
297 this.validate_name ("Required", name);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
298 this.Required{end+1} = struct ("name", name, "val", val);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
299 endfunction
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
300
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
301 function addOptional (this, name, def, val = inputParser.def_val)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
302 if (nargin < 3 || nargin > 4)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
303 print_usage ();
20937
3b2cc6ef0624 use numfields (x) instead of numel (fieldnames (x))
John W. Eaton <jwe@octave.org>
parents: 20852
diff changeset
304 elseif (numfields (this.ParamValue) || numfields (this.Switch))
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
305 error (["inputParser.Optional: can't have Optional arguments " ...
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
306 "after ParamValue or Switch"]);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
307 endif
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
308 this.validate_name ("Optional", name);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
309 this.Optional{end+1} = struct ("name", name, "def", def, "val", val);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
310 endfunction
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
311
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
312 function addParamValue (this, name, def, val = inputParser.def_val)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
313 if (nargin < 3 || nargin > 4)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
314 print_usage ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
315 endif
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
316 this.validate_name ("ParamValue", name);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
317 this.ParamValue.(name).def = def;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
318 this.ParamValue.(name).val = val;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
319 endfunction
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
320
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
321 function addSwitch (this, name)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
322 if (nargin != 2)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
323 print_usage ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
324 endif
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
325 this.validate_name ("Switch", name);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
326 this.Switch.(name).def = false;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
327 endfunction
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
328
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
329 function parse (this, varargin)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
330 if (numel (varargin) < numel (this.Required))
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
331 if (this.FunctionName)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
332 print_usage (this.FunctionName);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
333 else
20726
25d676f9619c Preface error() messages with name of function when possible.
Rik <rik@octave.org>
parents: 20575
diff changeset
334 this.error ("inputParser.parse: not enough input arguments");
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
335 endif
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
336 endif
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
337 pnargin = numel (varargin);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
338
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
339 this.ParamValueNames = fieldnames (this.ParamValue);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
340 this.SwitchNames = fieldnames (this.Switch);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
341
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
342 ## Evaluate the Required arguments first
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
343 nReq = numel (this.Required);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
344 for idx = 1:nReq
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
345 req = this.Required{idx};
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
346 this.validate_arg (req.name, req.val, varargin{idx});
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
347 endfor
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
348
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
349 vidx = nReq; # current index in varargin
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
350
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
351 ## Search for a list of Optional arguments
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
352 idx = 0; # current index on the array of Optional
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
353 nOpt = numel (this.Optional);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
354 while (vidx < pnargin && idx < nOpt)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
355 opt = this.Optional{++idx};
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
356 in = varargin{++vidx};
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
357 if (! opt.val (in))
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
358 ## If it does not match there's two options:
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
359 ## 1) input is actually wrong and we should error;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
360 ## 2) it's a ParamValue or Switch name and we should use the
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
361 ## the default for the rest.
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
362 if (ischar (in))
20735
418ae0cb752f Replace ++,-- with in-place operators for performance.
Rik <rik@octave.org>
parents: 20726
diff changeset
363 idx -= 1;
418ae0cb752f Replace ++,-- with in-place operators for performance.
Rik <rik@octave.org>
parents: 20726
diff changeset
364 vidx -= 1;
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
365 break
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
366 else
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
367 this.error (sprintf ("failed validation of %s",
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
368 toupper (opt.name)));
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
369 endif
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
370 endif
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
371 this.Results.(opt.name) = in;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
372 endwhile
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
373
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
374 ## Fill in with defaults of missing Optional
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
375 while (idx++ < nOpt)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
376 opt = this.Optional{idx};
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
377 this.UsingDefaults{end+1} = opt.name;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
378 this.Results.(opt.name) = opt.def;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
379 endwhile
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
380
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
381 ## Search unordered Options (Switch and ParamValue)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
382 while (vidx++ < pnargin)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
383 name = varargin{vidx};
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
384 if (this.is_argname ("ParamValue", name))
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
385 if (vidx++ > pnargin)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
386 this.error (sprintf ("no matching value for option '%s'",
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
387 toupper (name)));
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
388 endif
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19597
diff changeset
389 this.validate_arg (this.last_name,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19597
diff changeset
390 this.ParamValue.(this.last_name).val,
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
391 varargin{vidx});
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
392 elseif (this.is_argname ("Switch", name))
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
393 this.Results.(this.last_name) = true;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
394 else
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
395 if (vidx++ < pnargin && this.KeepUnmatched)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
396 this.Unmatched.(name) = varargin{vidx};
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
397 else
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
398 this.error (sprintf ("argument '%s' is not a valid parameter",
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
399 toupper (name)));
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
400 endif
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
401 endif
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
402 endwhile
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
403 ## Add them to the UsingDeafults list
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
404 this.add_missing ("ParamValue");
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
405 this.add_missing ("Switch");
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
406
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
407 endfunction
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
408
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
409 function display (this)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
410 if (nargin > 1)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
411 print_usage ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
412 endif
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
413 printf ("inputParser object with properties:\n\n");
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
414 b2s = @(x) ifelse (any (x), "true", "false");
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
415 printf ([" CaseSensitive : %s\n FunctionName : %s\n" ...
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
416 " KeepUnmatched : %s\n PartialMatching : %s\n" ...
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
417 " StructExpand : %s\n\n"],
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
418 b2s (this.CaseSensitive), b2s (this.FunctionName),
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
419 b2s (this.KeepUnmatched), b2s (this.PartialMatching),
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
420 b2s (this.StructExpand));
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
421 printf ("Defined parameters:\n\n {%s}\n",
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
422 strjoin (this.Parameters, ", "));
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
423 endfunction
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
424 endmethods
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
425
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
426 methods (Access = private)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
427 function validate_name (this, type, name)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
428 if (! isvarname (name))
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
429 error ("inputParser.add%s: NAME is an invalid identifier", method);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
430 elseif (any (strcmpi (this.Parameters, name)))
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
431 ## Even if CaseSensitive is "on", we still shouldn't allow
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
432 ## two args with the same name.
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
433 error ("inputParser.add%s: argname '%s' has already been specified",
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
434 type, name);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
435 endif
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
436 this.Parameters{end+1} = name;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
437 endfunction
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
438
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
439 function validate_arg (this, name, val, in)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
440 if (! val (in))
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
441 this.error (sprintf ("failed validation of %s", toupper (name)));
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
442 endif
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
443 this.Results.(name) = in;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
444 endfunction
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
445
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
446 function r = is_argname (this, type, name)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
447 if (this.CaseSensitive)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
448 r = isfield (this.(type), name);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
449 this.last_name = name;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
450 else
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
451 fnames = this.([type "Names"]);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
452 l = strcmpi (name, fnames);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
453 r = any (l(:));
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
454 if (r)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
455 this.last_name = fnames{l};
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
456 endif
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
457 endif
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
458 endfunction
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
459
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
460 function add_missing (this, type)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
461 unmatched = setdiff (fieldnames (this.(type)), fieldnames (this.Results));
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
462 for namec = unmatched(:)'
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
463 name = namec{1};
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
464 this.UsingDefaults{end+1} = name;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
465 this.Results.(name) = this.(type).(name).def;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
466 endfor
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
467 endfunction
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
468
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
469 function error (this, msg)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
470 where = "";
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
471 if (this.FunctionName)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
472 where = [this.FunctionName ": "];
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
473 endif
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
474 error ("%s%s", where, msg);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
475 endfunction
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
476 endmethods
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
477
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
478 endclassdef
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
479
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
480 %!function p = create_p ()
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
481 %! p = inputParser ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
482 %! p.CaseSensitive = true;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
483 %! p.addRequired ("req1", @(x) ischar (x));
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
484 %! p.addOptional ("op1", "val", @(x) any (strcmp (x, {"val", "foo"})));
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
485 %! p.addOptional ("op2", 78, @(x) x > 50);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
486 %! p.addSwitch ("verbose");
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
487 %! p.addParamValue ("line", "tree", @(x) any (strcmp (x, {"tree", "circle"})));
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
488 %!endfunction
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
489
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
490 ## check normal use, only required are given
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
491 %!test
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
492 %! p = create_p ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
493 %! p.parse ("file");
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
494 %! r = p.Results;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
495 %! assert (r.req1, "file");
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
496 %! assert (sort (p.UsingDefaults), sort ({"op1", "op2", "verbose", "line"}));
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
497 %! assert ({r.req1, r.op1, r.op2, r.verbose, r.line},
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
498 %! {"file", "val", 78, false, "tree"});
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
499
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
500 ## check normal use, but give values different than defaults
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
501 %!test
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
502 %! p = create_p ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
503 %! p.parse ("file", "foo", 80, "line", "circle", "verbose");
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
504 %! r = p.Results;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
505 %! assert ({r.req1, r.op1, r.op2, r.verbose, r.line},
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
506 %! {"file", "foo", 80, true, "circle"});
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
507
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
508 ## check optional is skipped and considered ParamValue if unvalidated string
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
509 %!test
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
510 %! p = create_p ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
511 %! p.parse ("file", "line", "circle");
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
512 %! r = p.Results;
19597
db92e7e28e1f strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 19039
diff changeset
513 %! assert ({r.req1, r.op1, r.op2, r.verbose, r.line},
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
514 %! {"file", "val", 78, false, "circle"});
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
515
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
516 ## check case insensitivity
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
517 %!test
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
518 %! p = create_p ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
519 %! p.CaseSensitive = false;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
520 %! p.parse ("file", "foo", 80, "LiNE", "circle", "vERbOSe");
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
521 %! r = p.Results;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
522 %! assert ({r.req1, r.op1, r.op2, r.verbose, r.line},
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
523 %! {"file", "foo", 80, true, "circle"});
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
524
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
525 ## check KeepUnmatched
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
526 %!test
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
527 %! p = create_p ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
528 %! p.KeepUnmatched = true;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
529 %! p.parse ("file", "foo", 80, "line", "circle", "verbose", "extra", 50);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
530 %! assert (p.Unmatched.extra, 50)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
531
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
532 ## check error when missing required
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
533 %!error <not enough input arguments>
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
534 %! p = create_p ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
535 %! p.parse ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
536
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
537 ## check error when given required does not validate
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
538 %!error <failed validation of >
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
539 %! p = create_p ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
540 %! p.parse (50);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
541
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
542 ## check error when given optional does not validate
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
543 %!error <is not a valid parameter>
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
544 %! p = create_p ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
545 %! p.parse ("file", "no-val");
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
546
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
547 ## check error when given ParamValue does not validate
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
548 %!error <failed validation of >
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
549 %! p = create_p ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
550 %! p.parse ("file", "foo", 51, "line", "round");
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
551
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
552 ## check alternative method (obj, ...) API
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
553 %!function p2 = create_p2 ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
554 %! p2 = inputParser;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
555 %! addRequired (p2, "req1", @(x) ischar (x));
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
556 %! addOptional (p2, "op1", "val", @(x) any (strcmp (x, {"val", "foo"})));
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
557 %! addOptional (p2, "op2", 78, @(x) x > 50);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
558 %! addSwitch (p2, "verbose");
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
559 %! addParamValue (p2, "line", "tree", @(x) any (strcmp (x, {"tree", "circle"})));
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
560 %!endfunction
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
561
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
562 ## check normal use, only required are given
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
563 %!test
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
564 %! p2 = create_p2 ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
565 %! parse (p2, "file");
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
566 %! r = p2.Results;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
567 %! assert ({r.req1, r.op1, r.op2, r.verbose, r.line},
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
568 %! {"file", "val", 78, false, "tree"});
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
569 %! assert (sort (p2.UsingDefaults), sort ({"op1", "op2", "verbose", "line"}));
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
570
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
571 ## check normal use, but give values different than defaults
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
572 %!test
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
573 %! p2 = create_p2 ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
574 %! parse (p2, "file", "foo", 80, "line", "circle", "verbose");
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
575 %! r = p2.Results;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
576 %! assert ({r.req1, r.op1, r.op2, r.verbose, r.line},
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
577 %! {"file", "foo", 80, true, "circle"});
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
578
20575
a61f0d6beb71 inputParser: do not perform validation of default values (bug #45837)
Carnë Draug <carandraug@octave.org>
parents: 20470
diff changeset
579 ## We must not perform validation of default values (bug #45837)
a61f0d6beb71 inputParser: do not perform validation of default values (bug #45837)
Carnë Draug <carandraug@octave.org>
parents: 20470
diff changeset
580 %!test
a61f0d6beb71 inputParser: do not perform validation of default values (bug #45837)
Carnë Draug <carandraug@octave.org>
parents: 20470
diff changeset
581 %! p = inputParser;
a61f0d6beb71 inputParser: do not perform validation of default values (bug #45837)
Carnë Draug <carandraug@octave.org>
parents: 20470
diff changeset
582 %! p.addParamValue ("Dir", [], @ischar);
a61f0d6beb71 inputParser: do not perform validation of default values (bug #45837)
Carnë Draug <carandraug@octave.org>
parents: 20470
diff changeset
583 %! p.parse ();
a61f0d6beb71 inputParser: do not perform validation of default values (bug #45837)
Carnë Draug <carandraug@octave.org>
parents: 20470
diff changeset
584 %! assert (p.Results.Dir, [])
a61f0d6beb71 inputParser: do not perform validation of default values (bug #45837)
Carnë Draug <carandraug@octave.org>
parents: 20470
diff changeset
585
a61f0d6beb71 inputParser: do not perform validation of default values (bug #45837)
Carnë Draug <carandraug@octave.org>
parents: 20470
diff changeset
586 %!test
a61f0d6beb71 inputParser: do not perform validation of default values (bug #45837)
Carnë Draug <carandraug@octave.org>
parents: 20470
diff changeset
587 %! p = inputParser;
a61f0d6beb71 inputParser: do not perform validation of default values (bug #45837)
Carnë Draug <carandraug@octave.org>
parents: 20470
diff changeset
588 %! p.addParamValue ("positive", -1, @(x) x > 5);
a61f0d6beb71 inputParser: do not perform validation of default values (bug #45837)
Carnë Draug <carandraug@octave.org>
parents: 20470
diff changeset
589 %! p.parse ();
a61f0d6beb71 inputParser: do not perform validation of default values (bug #45837)
Carnë Draug <carandraug@octave.org>
parents: 20470
diff changeset
590 %! assert (p.Results.positive, -1)
a61f0d6beb71 inputParser: do not perform validation of default values (bug #45837)
Carnë Draug <carandraug@octave.org>
parents: 20470
diff changeset
591
21508
04923b7b0d89 inputParser.m: add failing test due to bug in the parser (bug #44779)
Carnë Draug <carandraug@octave.org>
parents: 21505
diff changeset
592 %!function r = foobar (varargin)
04923b7b0d89 inputParser.m: add failing test due to bug in the parser (bug #44779)
Carnë Draug <carandraug@octave.org>
parents: 21505
diff changeset
593 %! p = inputParser ();
04923b7b0d89 inputParser.m: add failing test due to bug in the parser (bug #44779)
Carnë Draug <carandraug@octave.org>
parents: 21505
diff changeset
594 %! p.addParamValue ("foo", "bar", @ischar);
04923b7b0d89 inputParser.m: add failing test due to bug in the parser (bug #44779)
Carnë Draug <carandraug@octave.org>
parents: 21505
diff changeset
595 %! p.parse (varargin{2:end});
04923b7b0d89 inputParser.m: add failing test due to bug in the parser (bug #44779)
Carnë Draug <carandraug@octave.org>
parents: 21505
diff changeset
596 %! r = p.Results
04923b7b0d89 inputParser.m: add failing test due to bug in the parser (bug #44779)
Carnë Draug <carandraug@octave.org>
parents: 21505
diff changeset
597 %!endfunction
04923b7b0d89 inputParser.m: add failing test due to bug in the parser (bug #44779)
Carnë Draug <carandraug@octave.org>
parents: 21505
diff changeset
598
04923b7b0d89 inputParser.m: add failing test due to bug in the parser (bug #44779)
Carnë Draug <carandraug@octave.org>
parents: 21505
diff changeset
599 %!xtest assert (foobar (), struct ("foo", "bar"))
04923b7b0d89 inputParser.m: add failing test due to bug in the parser (bug #44779)
Carnë Draug <carandraug@octave.org>
parents: 21505
diff changeset
600 %!xtest assert (foobar ([], "foo", "qux"), struct ("foo", "qux"))
04923b7b0d89 inputParser.m: add failing test due to bug in the parser (bug #44779)
Carnë Draug <carandraug@octave.org>
parents: 21505
diff changeset
601
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
602 ## FIXME: This somehow works in Matlab
21505
7f7d7cb73e0d inputParser.m: uncomment failing test and use %!xtest instead.
Carnë Draug <carandraug@octave.org>
parents: 21316
diff changeset
603 %!xtest
7f7d7cb73e0d inputParser.m: uncomment failing test and use %!xtest instead.
Carnë Draug <carandraug@octave.org>
parents: 21316
diff changeset
604 %! p = inputParser;
7f7d7cb73e0d inputParser.m: uncomment failing test and use %!xtest instead.
Carnë Draug <carandraug@octave.org>
parents: 21316
diff changeset
605 %! p.addOptional ("op1", "val");
7f7d7cb73e0d inputParser.m: uncomment failing test and use %!xtest instead.
Carnë Draug <carandraug@octave.org>
parents: 21316
diff changeset
606 %! p.addParamValue ("line", "tree");
7f7d7cb73e0d inputParser.m: uncomment failing test and use %!xtest instead.
Carnë Draug <carandraug@octave.org>
parents: 21316
diff changeset
607 %! p.parse ("line", "circle");
7f7d7cb73e0d inputParser.m: uncomment failing test and use %!xtest instead.
Carnë Draug <carandraug@octave.org>
parents: 21316
diff changeset
608 %! assert (p.Results, struct ("op1", "val", "line", "circle"));