annotate scripts/miscellaneous/inputParser.m @ 28187:3faa700d64d4 stable

inputParser.m: Fix error with cell array Optional argument (bug #58112) * inputParser.m (is_argname): Validate input parameter "name" is a string before continuing. Add BIST test for bug #58112.
author Rik <rik@octave.org>
date Sun, 05 Apr 2020 14:55:49 -0700
parents a4268efb7334
children 8dbe4eec1741
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
1 ########################################################################
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
2 ##
27919
1891570abac8 update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents: 27918
diff changeset
3 ## Copyright (C) 2011-2020 The Octave Project Developers
27918
b442ec6dda5c use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents: 27216
diff changeset
4 ##
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
5 ## See the file COPYRIGHT.md in the top-level directory of this
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
6 ## distribution or <https://octave.org/copyright/>.
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
7 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
8 ## 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
9 ##
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24491
diff changeset
10 ## 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
11 ## under the terms of the GNU General Public License as published by
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24491
diff changeset
12 ## the Free Software Foundation, either version 3 of the License, or
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22559
diff changeset
13 ## (at your option) any later version.
19035
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 ## 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
16 ## WITHOUT ANY WARRANTY; without even the implied warranty of
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22559
diff changeset
17 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22559
diff changeset
18 ## GNU General Public License for more details.
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
19 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
20 ## 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
21 ## along with Octave; see the file COPYING. If not, see
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24491
diff changeset
22 ## <https://www.gnu.org/licenses/>.
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
23 ##
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
24 ########################################################################
19035
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 ## -*- texinfo -*-
20852
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20735
diff changeset
27 ## @deftypefn {} {@var{p} =} inputParser ()
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
28 ## 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
29 ##
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
30 ## 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
31 ## 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
32 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
33 ## @enumerate
26293
095eb3a04f43 doc: grammarcheck m-file scripts ahead of 5.0 release.
Rik <rik@octave.org>
parents: 25628
diff changeset
34 ## @item mandatory (see @code{addRequired});
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
35 ##
26293
095eb3a04f43 doc: grammarcheck m-file scripts ahead of 5.0 release.
Rik <rik@octave.org>
parents: 25628
diff changeset
36 ## @item optional (see @code{addOptional});
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
37 ##
26293
095eb3a04f43 doc: grammarcheck m-file scripts ahead of 5.0 release.
Rik <rik@octave.org>
parents: 25628
diff changeset
38 ## @item named (see @code{addParameter});
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
39 ##
26293
095eb3a04f43 doc: grammarcheck m-file scripts ahead of 5.0 release.
Rik <rik@octave.org>
parents: 25628
diff changeset
40 ## @item switch (see @code{addSwitch}).
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
41 ## @end enumerate
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
42 ##
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
43 ## After defining the function API with these methods, the supplied arguments
26293
095eb3a04f43 doc: grammarcheck m-file scripts ahead of 5.0 release.
Rik <rik@octave.org>
parents: 25628
diff changeset
44 ## can be parsed with the @code{parse} method and the parsing results
095eb3a04f43 doc: grammarcheck m-file scripts ahead of 5.0 release.
Rik <rik@octave.org>
parents: 25628
diff changeset
45 ## accessed with the @code{Results} accessor.
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
46 ##
19039
f45b60897316 dox: fix inputParser help text for newer Texinfo versions.
Carnë Draug <carandraug@octave.org>
parents: 19037
diff changeset
47 ## @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
48 ## @deftypefn {} {} inputParser.Parameters
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
49 ## 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
50 ##
19039
f45b60897316 dox: fix inputParser help text for newer Texinfo versions.
Carnë Draug <carandraug@octave.org>
parents: 19037
diff changeset
51 ## @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
52 ## @deftypefn {} {} inputParser.Results
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
53 ## 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
54 ##
19039
f45b60897316 dox: fix inputParser help text for newer Texinfo versions.
Carnë Draug <carandraug@octave.org>
parents: 19037
diff changeset
55 ## @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
56 ## @deftypefn {} {} inputParser.Unmatched
26293
095eb3a04f43 doc: grammarcheck m-file scripts ahead of 5.0 release.
Rik <rik@octave.org>
parents: 25628
diff changeset
57 ## Return structure similar to @code{Results}, but for unmatched parameters.
095eb3a04f43 doc: grammarcheck m-file scripts ahead of 5.0 release.
Rik <rik@octave.org>
parents: 25628
diff changeset
58 ## See the @code{KeepUnmatched} property.
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
59 ##
19039
f45b60897316 dox: fix inputParser help text for newer Texinfo versions.
Carnë Draug <carandraug@octave.org>
parents: 19037
diff changeset
60 ## @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
61 ## @deftypefn {} {} inputParser.UsingDefaults
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
62 ## 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
63 ##
19039
f45b60897316 dox: fix inputParser help text for newer Texinfo versions.
Carnë Draug <carandraug@octave.org>
parents: 19037
diff changeset
64 ## @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
65 ## @deftypefn {} {} inputParser.CaseSensitive = @var{boolean}
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
66 ## 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
67 ## to false.
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
68 ##
19039
f45b60897316 dox: fix inputParser help text for newer Texinfo versions.
Carnë Draug <carandraug@octave.org>
parents: 19037
diff changeset
69 ## @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
70 ## @deftypefn {} {} inputParser.FunctionName = @var{name}
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
71 ## 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
72 ##
19039
f45b60897316 dox: fix inputParser help text for newer Texinfo versions.
Carnë Draug <carandraug@octave.org>
parents: 19037
diff changeset
73 ## @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
74 ## @deftypefn {} {} inputParser.KeepUnmatched = @var{boolean}
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
75 ## 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
76 ## 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
77 ## @code{Unmatched} after the @code{parse} method. Note that since
26293
095eb3a04f43 doc: grammarcheck m-file scripts ahead of 5.0 release.
Rik <rik@octave.org>
parents: 25628
diff changeset
78 ## @code{Switch} and @code{Parameter} arguments can be mixed, it is
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
79 ## not possible to know the unmatched type. If argument is found unmatched
26293
095eb3a04f43 doc: grammarcheck m-file scripts ahead of 5.0 release.
Rik <rik@octave.org>
parents: 25628
diff changeset
80 ## it is assumed to be of the @code{Parameter} type and it is expected to
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
81 ## 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
82 ##
19039
f45b60897316 dox: fix inputParser help text for newer Texinfo versions.
Carnë Draug <carandraug@octave.org>
parents: 19037
diff changeset
83 ## @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
84 ## @deftypefn {} {} inputParser.StructExpand = @var{boolean}
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
85 ## Set whether a structure can be passed to the function instead of
21667
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
86 ## parameter/value pairs. Defaults to true.
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
87 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
88 ## 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
89 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
90 ## @example
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
91 ## function check (varargin)
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
92 ## @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
93 ## p = inputParser (); # create object
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
94 ## p.FunctionName = "check"; # set function name
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
95 ## p.addRequired ("pack", @@ischar); # mandatory argument
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
96 ## 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
97 ##
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
98 ## ## 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
99 ## 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
100 ## 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
101 ##
21677
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
102 ## ## create two arguments of type "Parameter"
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
103 ## val_type = @@(x) any (strcmp (x, @{"linear", "quadratic"@}));
21677
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
104 ## p.addParameter ("type", "linear", val_type);
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
105 ## val_verb = @@(x) any (strcmp (x, @{"low", "medium", "high"@}));
21677
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
106 ## p.addParameter ("tolerance", "low", val_verb);
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
107 ##
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
108 ## ## create a switch type of argument
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
109 ## p.addSwitch ("verbose");
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
110 ##
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
111 ## 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
112 ##
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
113 ## ## 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
114 ## ## 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
115 ## endfunction
21316
6cc091426e52 doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents: 20937
diff changeset
116 ## @end example
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
117 ##
21316
6cc091426e52 doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents: 20937
diff changeset
118 ## @example
6cc091426e52 doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents: 20937
diff changeset
119 ## @group
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
120 ## check ("mech"); # valid, use defaults for other arguments
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
121 ## 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
122 ## check (1); # error, since ! ischar
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
123 ## 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
124 ##
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], "type", "linear"); # valid
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 is also valid. Note how the Switch argument type can
21677
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
128 ## ## be mixed into or before the Parameter argument type (but it
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
129 ## ## 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
130 ## 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
131 ##
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
132 ## ## following returns an error since not all optional arguments,
27216
823b4bcf79fc unless necessary for formatting or code, use ' instead of `
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
133 ## ## '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
134 ## check ("mech", "~/dev", "type", "linear");
21316
6cc091426e52 doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents: 20937
diff changeset
135 ## @end group
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
136 ## @end example
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
137 ##
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
138 ## @emph{Note 1}: A function can have any mixture of the four API types but
26293
095eb3a04f43 doc: grammarcheck m-file scripts ahead of 5.0 release.
Rik <rik@octave.org>
parents: 25628
diff changeset
139 ## they must appear in a specific order. @code{Required} arguments must be
095eb3a04f43 doc: grammarcheck m-file scripts ahead of 5.0 release.
Rik <rik@octave.org>
parents: 25628
diff changeset
140 ## first and can be followed by any @code{Optional} arguments. Only
095eb3a04f43 doc: grammarcheck m-file scripts ahead of 5.0 release.
Rik <rik@octave.org>
parents: 25628
diff changeset
141 ## the @code{Parameter} and @code{Switch} arguments may be mixed
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
142 ## 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
143 ##
26293
095eb3a04f43 doc: grammarcheck m-file scripts ahead of 5.0 release.
Rik <rik@octave.org>
parents: 25628
diff changeset
144 ## @emph{Note 2}: If both @code{Optional} and @code{Parameter} arguments
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
145 ## are mixed in a function API then once a string Optional argument fails to
26293
095eb3a04f43 doc: grammarcheck m-file scripts ahead of 5.0 release.
Rik <rik@octave.org>
parents: 25628
diff changeset
146 ## validate it will be considered the end of the @code{Optional}
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
147 ## arguments. The remaining arguments will be compared against any
26293
095eb3a04f43 doc: grammarcheck m-file scripts ahead of 5.0 release.
Rik <rik@octave.org>
parents: 25628
diff changeset
148 ## @code{Parameter} or @code{Switch} arguments.
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
149 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
150 ## @seealso{nargin, validateattributes, validatestring, varargin}
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
151 ## @end deftypefn
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
152
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
153 ## -*- texinfo -*-
20852
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20735
diff changeset
154 ## @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
155 ## @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
156 ## 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
157 ## 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
158 ##
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
159 ## @var{argname} must be a string with the name of the new argument. The order
26293
095eb3a04f43 doc: grammarcheck m-file scripts ahead of 5.0 release.
Rik <rik@octave.org>
parents: 25628
diff changeset
160 ## in which new arguments are added with @code{addOptional}, represents the
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
161 ## expected order of arguments.
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
162 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
163 ## @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
164 ##
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
165 ## @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
166 ## 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
167 ## 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
168 ##
26293
095eb3a04f43 doc: grammarcheck m-file scripts ahead of 5.0 release.
Rik <rik@octave.org>
parents: 25628
diff changeset
169 ## See @code{help inputParser} for examples.
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
170 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
171 ## @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
172 ## 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
173 ## 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
174 ## 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
175 ## 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
176 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
177 ## @end deftypefn
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
178
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
179 ## -*- texinfo -*-
21677
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
180 ## @deftypefn {} {} addParameter (@var{argname}, @var{default})
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
181 ## @deftypefnx {} {} addParameter (@var{argname}, @var{default}, @var{validator})
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
182 ## 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
183 ## 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
184 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
185 ## @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
186 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
187 ## @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
188 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
189 ## @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
190 ## 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
191 ## can be used.
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
192 ##
26293
095eb3a04f43 doc: grammarcheck m-file scripts ahead of 5.0 release.
Rik <rik@octave.org>
parents: 25628
diff changeset
193 ## See @code{help inputParser} for examples.
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
194 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
195 ## @end deftypefn
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 ## -*- texinfo -*-
21677
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
198 ## @deftypefn {} {} addParamValue (@var{argname}, @var{default})
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
199 ## @deftypefnx {} {} addParamValue (@var{argname}, @var{default}, @var{validator})
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
200 ## Add new parameter to the object @var{parser} of the class inputParser to
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
201 ## implement a name/value pair type of API.
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
202 ##
26293
095eb3a04f43 doc: grammarcheck m-file scripts ahead of 5.0 release.
Rik <rik@octave.org>
parents: 25628
diff changeset
203 ## This is an alias for @code{addParameter} method without the
21677
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
204 ## @qcode{"PartialMatchPriority"} option. See it for the help text.
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
205 ##
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
206 ## @end deftypefn
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
207
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
208 ## -*- texinfo -*-
20852
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20735
diff changeset
209 ## @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
210 ## @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
211 ## 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
212 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
213 ## 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
214 ## arguments type of API.
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
215 ##
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
216 ## @var{argname} must be a string with the name of the new argument. The order
26293
095eb3a04f43 doc: grammarcheck m-file scripts ahead of 5.0 release.
Rik <rik@octave.org>
parents: 25628
diff changeset
217 ## in which new arguments are added with @code{addrequired}, represents the
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
218 ## expected order of arguments.
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 ## @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
221 ## 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
222 ## can be used.
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
223 ##
26293
095eb3a04f43 doc: grammarcheck m-file scripts ahead of 5.0 release.
Rik <rik@octave.org>
parents: 25628
diff changeset
224 ## See @code{help inputParser} for examples.
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
225 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
226 ## @emph{Note}: this can be used together with the other type of arguments but
26293
095eb3a04f43 doc: grammarcheck m-file scripts ahead of 5.0 release.
Rik <rik@octave.org>
parents: 25628
diff changeset
227 ## it must be the first (see @code{@@inputParser}).
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
228 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
229 ## @end deftypefn
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
230
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
231 ## -*- texinfo -*-
20852
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20735
diff changeset
232 ## @deftypefn {} {} addSwitch (@var{argname})
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
233 ## 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
234 ## class.
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
235 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
236 ## 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
237 ## arguments type of API.
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
238 ##
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
239 ## @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
240 ## of this type can be specified at the end, after @code{Required} and
21677
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
241 ## @code{Optional}, and mixed between the @code{Parameter}. They default to
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
242 ## 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
243 ## 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
244 ## true.
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
245 ##
26293
095eb3a04f43 doc: grammarcheck m-file scripts ahead of 5.0 release.
Rik <rik@octave.org>
parents: 25628
diff changeset
246 ## See @code{help inputParser} for examples.
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
247 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
248 ## @end deftypefn
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
249
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
250 ## -*- texinfo -*-
20852
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20735
diff changeset
251 ## @deftypefn {} {} parse (@var{varargin})
19037
d900f863335c inputParser.m: Format docstring to Octave guidelines.
Rik <rik@octave.org>
parents: 19035
diff changeset
252 ## 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
253 ## the class inputParser.
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
254 ##
26293
095eb3a04f43 doc: grammarcheck m-file scripts ahead of 5.0 release.
Rik <rik@octave.org>
parents: 25628
diff changeset
255 ## After parsing, the results can be accessed with the @code{Results}
095eb3a04f43 doc: grammarcheck m-file scripts ahead of 5.0 release.
Rik <rik@octave.org>
parents: 25628
diff changeset
256 ## accessor. See @code{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
257 ##
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
258 ## @end deftypefn
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
259
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
260 classdef inputParser < handle
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
261 properties
21578
683a1beee538 maint: Use "FIXME:" for all code blocks needing further attention.
Rik <rik@octave.org>
parents: 21568
diff changeset
262 ## FIXME: set input checking for these properties
21568
3d60ed163b70 maint: Eliminate bad spacing around '='.
Rik <rik@octave.org>
parents: 21546
diff changeset
263 CaseSensitive = false;
3d60ed163b70 maint: Eliminate bad spacing around '='.
Rik <rik@octave.org>
parents: 21546
diff changeset
264 FunctionName = "";
3d60ed163b70 maint: Eliminate bad spacing around '='.
Rik <rik@octave.org>
parents: 21546
diff changeset
265 KeepUnmatched = false;
21937
55f7de37b618 maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
266 PartialMatching = false; # FIXME: unimplemented (and default should be true)
21667
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
267 StructExpand = true;
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
268 endproperties
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
269
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
270 properties (SetAccess = protected)
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19597
diff changeset
271 Parameters = cell ();
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19597
diff changeset
272 Results = struct ();
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19597
diff changeset
273 Unmatched = struct ();
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19597
diff changeset
274 UsingDefaults = cell ();
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
275 endproperties
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 properties (Access = protected)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
278 ## 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
279 ## structs with the fields "name", "def" (default), and "val" (validator).
23164
99ca557fd34f maint: Use Octave whitespace conventions for scripts/general/inputParser.m.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22755
diff changeset
280 Required = cell ();
99ca557fd34f maint: Use Octave whitespace conventions for scripts/general/inputParser.m.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22755
diff changeset
281 Optional = cell ();
21677
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
282 ## Parameter 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
283 ## are the argname, and values are a struct with fields "def" and "val"
23164
99ca557fd34f maint: Use Octave whitespace conventions for scripts/general/inputParser.m.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22755
diff changeset
284 Parameter = struct ();
99ca557fd34f maint: Use Octave whitespace conventions for scripts/general/inputParser.m.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22755
diff changeset
285 Switch = struct ();
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
286
21677
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
287 ## List of Parameter and Switch names to ease searches
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
288 ParameterNames = cell ();
23164
99ca557fd34f maint: Use Octave whitespace conventions for scripts/general/inputParser.m.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22755
diff changeset
289 SwitchNames = cell ();
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
290
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
291 ## 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
292 ## 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
293 ## is_argname method.
21568
3d60ed163b70 maint: Eliminate bad spacing around '='.
Rik <rik@octave.org>
parents: 21546
diff changeset
294 last_name = "";
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
295 endproperties
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
296
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
297 properties (Access = protected, Constant = true)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
298 ## 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
299 def_val = @() true;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
300 endproperties
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
301
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
302 methods
21668
58f5a6347851 inpputParser.m: fix display method.
Carnë Draug <carandraug@octave.org>
parents: 21667
diff changeset
303 function set.PartialMatching (this, val)
58f5a6347851 inpputParser.m: fix display method.
Carnë Draug <carandraug@octave.org>
parents: 21667
diff changeset
304 if (val)
58f5a6347851 inpputParser.m: fix display method.
Carnë Draug <carandraug@octave.org>
parents: 21667
diff changeset
305 error ("inputParser: PartialMatching is not yet implemented");
58f5a6347851 inpputParser.m: fix display method.
Carnë Draug <carandraug@octave.org>
parents: 21667
diff changeset
306 endif
58f5a6347851 inpputParser.m: fix display method.
Carnë Draug <carandraug@octave.org>
parents: 21667
diff changeset
307 endfunction
58f5a6347851 inpputParser.m: fix display method.
Carnë Draug <carandraug@octave.org>
parents: 21667
diff changeset
308
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
309 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
310 if (nargin < 2 || nargin > 3)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
311 print_usage ();
21677
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
312 elseif (numel (this.Optional) || numfields (this.Parameter)
20937
3b2cc6ef0624 use numfields (x) instead of numel (fieldnames (x))
John W. Eaton <jwe@octave.org>
parents: 20852
diff changeset
313 || numfields (this.Switch))
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
314 error (["inputParser.addRequired: can't have a Required argument " ...
21677
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
315 "after Optional, Parameter, or Switch"]);
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
316 endif
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
317 this.validate_name ("Required", name);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
318 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
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 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
322 if (nargin < 3 || nargin > 4)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
323 print_usage ();
21677
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
324 elseif (numfields (this.Parameter) || numfields (this.Switch))
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
325 error (["inputParser.Optional: can't have Optional arguments " ...
21677
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
326 "after Parameter or Switch"]);
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
327 endif
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
328 this.validate_name ("Optional", name);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
329 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
330 endfunction
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
331
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
332 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
333 if (nargin < 3 || nargin > 4)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
334 print_usage ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
335 endif
21677
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
336 this.addParameter (name, def, val);
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
337 endfunction
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
338
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
339 function addParameter (this, name, def, varargin)
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
340 if (nargin < 3 || nargin > 6)
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
341 print_usage ();
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
342 endif
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
343
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
344 n_opt = numel (varargin);
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
345
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
346 if (n_opt == 0 || n_opt == 2)
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
347 val = inputParser.def_val;
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
348 else # n_opt is 1 or 3
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
349 val = varargin{1};
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
350 endif
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
351
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
352 if (n_opt == 0 || n_opt == 1)
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
353 match_priority = 1;
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
354 else # n_opt is 2 or 3
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
355 if (! strcmpi (varargin{end-1}, "PartialMatchPriority"))
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
356 error ("inputParser.addParameter: unrecognized option");
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
357 endif
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
358 match_priority = varargin{end};
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
359 validateattributes (match_priority, {"numeric"}, {"positive", "integer"},
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
360 "inputParser.addParameter",
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
361 "PartialMatchPriority");
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
362 endif
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
363
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
364 this.validate_name ("Parameter", name);
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
365 this.Parameter.(name).def = def;
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
366 this.Parameter.(name).val = val;
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
367 endfunction
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
368
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
369 function addSwitch (this, name)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
370 if (nargin != 2)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
371 print_usage ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
372 endif
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
373 this.validate_name ("Switch", name);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
374 this.Switch.(name).def = false;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
375 endfunction
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
376
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
377 function parse (this, varargin)
22541
4b7ab10b5c38 inputParser clear previous results before new parse (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents: 22489
diff changeset
378 this.Results = struct ();
22559
27f2a7a3b55d inputParser reset more parse results before new parse. (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents: 22541
diff changeset
379 this.Unmatched = struct ();
27f2a7a3b55d inputParser reset more parse results before new parse. (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents: 22541
diff changeset
380 this.UsingDefaults = cell ();
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
381 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
382 if (this.FunctionName)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
383 print_usage (this.FunctionName);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
384 else
20726
25d676f9619c Preface error() messages with name of function when possible.
Rik <rik@octave.org>
parents: 20575
diff changeset
385 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
386 endif
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
387 endif
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
388 pnargin = numel (varargin);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
389
23167
a2d6b84ce5c5 scripts/general/inputParser.m: refactor two xtest cases to normal test cases.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23165
diff changeset
390 this.ParameterNames = fieldnames (this.Parameter);
a2d6b84ce5c5 scripts/general/inputParser.m: refactor two xtest cases to normal test cases.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23165
diff changeset
391 this.SwitchNames = fieldnames (this.Switch);
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
392
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
393 ## Evaluate the Required arguments first
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
394 nReq = numel (this.Required);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
395 for idx = 1:nReq
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
396 req = this.Required{idx};
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
397 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
398 endfor
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
399
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
400 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
401
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
402 ## 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
403 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
404 nOpt = numel (this.Optional);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
405 while (vidx < pnargin && idx < nOpt)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
406 opt = this.Optional{++idx};
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
407 in = varargin{++vidx};
23377
f1bf2590272a inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23365
diff changeset
408 if ((this.is_argname ("Parameter", in) && vidx < pnargin)
f1bf2590272a inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23365
diff changeset
409 || this.is_argname ("Switch", in))
f1bf2590272a inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23365
diff changeset
410 ## This looks like an optional parameter/value pair or a
f1bf2590272a inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23365
diff changeset
411 ## switch, not an positional option. This does mean that
f1bf2590272a inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23365
diff changeset
412 ## positional options cannot be strings named like parameter
f1bf2590272a inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23365
diff changeset
413 ## keys. See bug #50752.
23365
7b594fcfa32b improve inputParser compatibility for optional args (bug #50752)
John W. Eaton <jwe@octave.org>
parents: 23337
diff changeset
414 idx -= 1;
7b594fcfa32b improve inputParser compatibility for optional args (bug #50752)
John W. Eaton <jwe@octave.org>
parents: 23337
diff changeset
415 vidx -= 1;
7b594fcfa32b improve inputParser compatibility for optional args (bug #50752)
John W. Eaton <jwe@octave.org>
parents: 23337
diff changeset
416 break
7b594fcfa32b improve inputParser compatibility for optional args (bug #50752)
John W. Eaton <jwe@octave.org>
parents: 23337
diff changeset
417 endif
21666
09517e0a8aa0 inputParser.m: handle errors in Optional parameters (maybe is a param key).
Carnë Draug <carandraug@octave.org>
parents: 21634
diff changeset
418 try
09517e0a8aa0 inputParser.m: handle errors in Optional parameters (maybe is a param key).
Carnë Draug <carandraug@octave.org>
parents: 21634
diff changeset
419 valid_option = opt.val (in);
09517e0a8aa0 inputParser.m: handle errors in Optional parameters (maybe is a param key).
Carnë Draug <carandraug@octave.org>
parents: 21634
diff changeset
420 catch
09517e0a8aa0 inputParser.m: handle errors in Optional parameters (maybe is a param key).
Carnë Draug <carandraug@octave.org>
parents: 21634
diff changeset
421 valid_option = false;
09517e0a8aa0 inputParser.m: handle errors in Optional parameters (maybe is a param key).
Carnë Draug <carandraug@octave.org>
parents: 21634
diff changeset
422 end_try_catch
09517e0a8aa0 inputParser.m: handle errors in Optional parameters (maybe is a param key).
Carnë Draug <carandraug@octave.org>
parents: 21634
diff changeset
423 if (! valid_option)
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
424 ## 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
425 ## 1) input is actually wrong and we should error;
23377
f1bf2590272a inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23365
diff changeset
426 ## 2) it's a Parameter or Switch name and we should use
f1bf2590272a inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23365
diff changeset
427 ## the default for the rest;
21677
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
428 ## 3) it's a struct with the Parameter pairs.
21667
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
429 if (ischar (in) || (this.StructExpand && isstruct (in)
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
430 && isscalar (in)))
20735
418ae0cb752f Replace ++,-- with in-place operators for performance.
Rik <rik@octave.org>
parents: 20726
diff changeset
431 idx -= 1;
418ae0cb752f Replace ++,-- with in-place operators for performance.
Rik <rik@octave.org>
parents: 20726
diff changeset
432 vidx -= 1;
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
433 break
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
434 else
23165
5291b67ff124 More verbose information when inputParser fails validating argument (patch #9241)
Georg Wiora
parents: 23164
diff changeset
435 this.error (sprintf (["failed validation of %s\n", ...
5291b67ff124 More verbose information when inputParser fails validating argument (patch #9241)
Georg Wiora
parents: 23164
diff changeset
436 "Validation function: %s"],
5291b67ff124 More verbose information when inputParser fails validating argument (patch #9241)
Georg Wiora
parents: 23164
diff changeset
437 toupper (opt.name), disp(opt.val)));
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
438 endif
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
439 endif
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
440 this.Results.(opt.name) = in;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
441 endwhile
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
442
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
443 ## 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
444 while (idx++ < nOpt)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
445 opt = this.Optional{idx};
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
446 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
447 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
448 endwhile
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
449
21677
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
450 ## Search unordered Options (Switch and Parameter)
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
451 while (vidx++ < pnargin)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
452 name = varargin{vidx};
21667
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
453
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
454 if (this.StructExpand && isstruct (name) && isscalar (name))
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
455 expanded_options = [fieldnames(name) struct2cell(name)]'(:);
25628
a0d642f24349 Parse empty struct input correctly (bug #54318).
Rik <rik@octave.org>
parents: 25054
diff changeset
456 if (isempty (expanded_options))
a0d642f24349 Parse empty struct input correctly (bug #54318).
Rik <rik@octave.org>
parents: 25054
diff changeset
457 continue; # empty, continue to next argument
a0d642f24349 Parse empty struct input correctly (bug #54318).
Rik <rik@octave.org>
parents: 25054
diff changeset
458 endif
21667
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
459 n_new_args = numel (expanded_options) -1;
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
460 pnargin += n_new_args;
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
461 varargin(vidx+n_new_args+1:pnargin) = varargin(vidx+1:end);
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
462 varargin(vidx:vidx+n_new_args) = expanded_options;
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
463 name = varargin{vidx};
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
464 endif
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
465
23383
62320e943696 inputParser.m: check if Param key and Switch are strings for better errors.
Carnë Draug <carandraug@octave.org>
parents: 23382
diff changeset
466 if (! ischar (name))
62320e943696 inputParser.m: check if Param key and Switch are strings for better errors.
Carnë Draug <carandraug@octave.org>
parents: 23382
diff changeset
467 this.error ("non-string for Parameter name or Switch");
62320e943696 inputParser.m: check if Param key and Switch are strings for better errors.
Carnë Draug <carandraug@octave.org>
parents: 23382
diff changeset
468 endif
62320e943696 inputParser.m: check if Param key and Switch are strings for better errors.
Carnë Draug <carandraug@octave.org>
parents: 23382
diff changeset
469
21677
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
470 if (this.is_argname ("Parameter", name))
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
471 if (vidx++ > pnargin)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
472 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
473 toupper (name)));
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
474 endif
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19597
diff changeset
475 this.validate_arg (this.last_name,
21677
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
476 this.Parameter.(this.last_name).val,
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
477 varargin{vidx});
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
478 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
479 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
480 else
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
481 if (vidx++ < pnargin && this.KeepUnmatched)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
482 this.Unmatched.(name) = varargin{vidx};
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
483 else
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
484 this.error (sprintf ("argument '%s' is not a valid parameter",
23167
a2d6b84ce5c5 scripts/general/inputParser.m: refactor two xtest cases to normal test cases.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23165
diff changeset
485 toupper (name)));
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
486 endif
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
487 endif
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
488 endwhile
23337
f04f32f08590 Override disp rather than display for class objects (bug #50640).
Rik <rik@octave.org>
parents: 23333
diff changeset
489 ## Add them to the UsingDefaults list
21677
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
490 this.add_missing ("Parameter");
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
491 this.add_missing ("Switch");
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
492
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
493 endfunction
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
494
23337
f04f32f08590 Override disp rather than display for class objects (bug #50640).
Rik <rik@octave.org>
parents: 23333
diff changeset
495 function disp (this)
23333
b636f10ce53f fix display methods to only expect one argument
John W. Eaton <jwe@octave.org>
parents: 23220
diff changeset
496 if (nargin != 1)
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
497 print_usage ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
498 endif
23337
f04f32f08590 Override disp rather than display for class objects (bug #50640).
Rik <rik@octave.org>
parents: 23333
diff changeset
499 printf ("inputParser object with properties:\n\n");
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
500 b2s = @(x) ifelse (any (x), "true", "false");
21634
96518f623c91 Backed out changeset dcf8922b724b
Mike Miller <mtmiller@octave.org>
parents: 21633
diff changeset
501 printf ([" CaseSensitive : %s\n FunctionName : %s\n" ...
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
502 " 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
503 " StructExpand : %s\n\n"],
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
504 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
505 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
506 b2s (this.StructExpand));
21634
96518f623c91 Backed out changeset dcf8922b724b
Mike Miller <mtmiller@octave.org>
parents: 21633
diff changeset
507 printf ("Defined parameters:\n\n {%s}\n",
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
508 strjoin (this.Parameters, ", "));
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
509 endfunction
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
510 endmethods
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
511
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
512 methods (Access = private)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
513 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
514 if (! isvarname (name))
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
515 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
516 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
517 ## 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
518 ## 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
519 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
520 type, name);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
521 endif
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
522 this.Parameters{end+1} = name;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
523 endfunction
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 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
526 if (! val (in))
23165
5291b67ff124 More verbose information when inputParser fails validating argument (patch #9241)
Georg Wiora
parents: 23164
diff changeset
527 this.error (sprintf ("failed validation of %s with %s",
5291b67ff124 More verbose information when inputParser fails validating argument (patch #9241)
Georg Wiora
parents: 23164
diff changeset
528 toupper (name), func2str (val)));
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
529 endif
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
530 this.Results.(name) = in;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
531 endfunction
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
532
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
533 function r = is_argname (this, type, name)
28187
3faa700d64d4 inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents: 27978
diff changeset
534 r = ischar (name) && isrow (name);
3faa700d64d4 inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents: 27978
diff changeset
535 if (r)
3faa700d64d4 inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents: 27978
diff changeset
536 if (this.CaseSensitive)
3faa700d64d4 inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents: 27978
diff changeset
537 r = isfield (this.(type), name);
3faa700d64d4 inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents: 27978
diff changeset
538 if (r)
3faa700d64d4 inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents: 27978
diff changeset
539 this.last_name = name;
3faa700d64d4 inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents: 27978
diff changeset
540 endif
3faa700d64d4 inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents: 27978
diff changeset
541 else
3faa700d64d4 inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents: 27978
diff changeset
542 fnames = this.([type "Names"]);
3faa700d64d4 inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents: 27978
diff changeset
543 l = strcmpi (name, fnames);
3faa700d64d4 inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents: 27978
diff changeset
544 r = any (l(:));
3faa700d64d4 inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents: 27978
diff changeset
545 if (r)
3faa700d64d4 inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents: 27978
diff changeset
546 this.last_name = fnames{l};
3faa700d64d4 inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents: 27978
diff changeset
547 endif
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
548 endif
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
549 endif
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
550 endfunction
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 function add_missing (this, type)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
553 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
554 for namec = unmatched(:)'
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
555 name = namec{1};
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
556 this.UsingDefaults{end+1} = name;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
557 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
558 endfor
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
559 endfunction
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
560
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
561 function error (this, msg)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
562 where = "";
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
563 if (this.FunctionName)
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
564 where = [this.FunctionName ": "];
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
565 endif
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
566 error ("%s%s", where, msg);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
567 endfunction
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
568 endmethods
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
569
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
570 endclassdef
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
571
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
572 %!function p = create_p ()
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
573 %! p = inputParser ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
574 %! p.CaseSensitive = true;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
575 %! 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
576 %! 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
577 %! 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
578 %! p.addSwitch ("verbose");
21677
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
579 %! p.addParameter ("line", "tree", @(x) any (strcmp (x, {"tree", "circle"})));
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
580 %!endfunction
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
581
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
582 ## 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
583 %!test
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
584 %! p = create_p ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
585 %! p.parse ("file");
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
586 %! r = p.Results;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
587 %! assert (r.req1, "file");
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
588 %! 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
589 %! assert ({r.req1, r.op1, r.op2, r.verbose, r.line},
21580
ecce63c99c3f maint: Add semicolons to terminate code in %! blocks.
Rik <rik@octave.org>
parents: 21578
diff changeset
590 %! {"file", "val", 78, false, "tree"});
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
591
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
592 ## 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
593 %!test
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
594 %! p = create_p ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
595 %! 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
596 %! r = p.Results;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
597 %! 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
598 %! {"file", "foo", 80, true, "circle"});
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
599
21677
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
600 ## check optional is skipped and considered Parameter if unvalidated string
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
601 %!test
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
602 %! p = create_p ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
603 %! p.parse ("file", "line", "circle");
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
604 %! r = p.Results;
19597
db92e7e28e1f strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 19039
diff changeset
605 %! 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
606 %! {"file", "val", 78, false, "circle"});
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
607
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
608 ## check case insensitivity
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
609 %!test
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
610 %! p = create_p ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
611 %! p.CaseSensitive = false;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
612 %! 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
613 %! r = p.Results;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
614 %! 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
615 %! {"file", "foo", 80, true, "circle"});
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
616
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
617 ## check KeepUnmatched
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
618 %!test
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
619 %! p = create_p ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
620 %! p.KeepUnmatched = true;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
621 %! p.parse ("file", "foo", 80, "line", "circle", "verbose", "extra", 50);
21580
ecce63c99c3f maint: Add semicolons to terminate code in %! blocks.
Rik <rik@octave.org>
parents: 21578
diff changeset
622 %! assert (p.Unmatched.extra, 50);
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
623
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
624 ## check error when missing required
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
625 %!error <not enough input arguments>
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
626 %! p = create_p ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
627 %! p.parse ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
628
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
629 ## 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
630 %!error <failed validation of >
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
631 %! p = create_p ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
632 %! p.parse (50);
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
633
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
634 ## 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
635 %!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
636 %! p = create_p ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
637 %! p.parse ("file", "no-val");
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
638
21677
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
639 ## check error when given Parameter does not validate
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
640 %!error <failed validation of >
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
641 %! p = create_p ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
642 %! 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
643
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
644 ## check alternative method (obj, ...) API
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
645 %!function p2 = create_p2 ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
646 %! p2 = inputParser;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
647 %! 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
648 %! 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
649 %! 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
650 %! addSwitch (p2, "verbose");
21677
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
651 %! addParameter (p2, "line", "tree", @(x) any (strcmp (x, {"tree", "circle"})));
19035
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
652 %!endfunction
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
653
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
654 ## 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
655 %!test
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
656 %! p2 = create_p2 ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
657 %! parse (p2, "file");
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
658 %! r = p2.Results;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
659 %! 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
660 %! {"file", "val", 78, false, "tree"});
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
661 %! 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
662
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
663 ## 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
664 %!test
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
665 %! p2 = create_p2 ();
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
666 %! 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
667 %! r = p2.Results;
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
668 %! 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
669 %! {"file", "foo", 80, true, "circle"});
ff820f92cbb5 inputParser: classdef port of @inputParser from Octave Forge general pkg.
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
670
22489
93ea313301f9 test: Add bug ids (<#####>) to BIST tests.
Rik <rik@octave.org>
parents: 22323
diff changeset
671 ## We must not perform validation of default values
23573
1b4f4ec53b4a use new script to tag fixed bugs in tests
John W. Eaton <jwe@octave.org>
parents: 23572
diff changeset
672 %!test <*45837>
20575
a61f0d6beb71 inputParser: do not perform validation of default values (bug #45837)
Carnë Draug <carandraug@octave.org>
parents: 20470
diff changeset
673 %! p = inputParser;
21677
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
674 %! p.addParameter ("Dir", [], @ischar);
20575
a61f0d6beb71 inputParser: do not perform validation of default values (bug #45837)
Carnë Draug <carandraug@octave.org>
parents: 20470
diff changeset
675 %! p.parse ();
21580
ecce63c99c3f maint: Add semicolons to terminate code in %! blocks.
Rik <rik@octave.org>
parents: 21578
diff changeset
676 %! assert (p.Results.Dir, []);
20575
a61f0d6beb71 inputParser: do not perform validation of default values (bug #45837)
Carnë Draug <carandraug@octave.org>
parents: 20470
diff changeset
677
a61f0d6beb71 inputParser: do not perform validation of default values (bug #45837)
Carnë Draug <carandraug@octave.org>
parents: 20470
diff changeset
678 %!test
a61f0d6beb71 inputParser: do not perform validation of default values (bug #45837)
Carnë Draug <carandraug@octave.org>
parents: 20470
diff changeset
679 %! p = inputParser;
21677
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
680 %! p.addParameter ("positive", -1, @(x) x > 5);
20575
a61f0d6beb71 inputParser: do not perform validation of default values (bug #45837)
Carnë Draug <carandraug@octave.org>
parents: 20470
diff changeset
681 %! p.parse ();
21580
ecce63c99c3f maint: Add semicolons to terminate code in %! blocks.
Rik <rik@octave.org>
parents: 21578
diff changeset
682 %! assert (p.Results.positive, -1);
20575
a61f0d6beb71 inputParser: do not perform validation of default values (bug #45837)
Carnë Draug <carandraug@octave.org>
parents: 20470
diff changeset
683
21666
09517e0a8aa0 inputParser.m: handle errors in Optional parameters (maybe is a param key).
Carnë Draug <carandraug@octave.org>
parents: 21634
diff changeset
684 ## Throw an error on validation of optional argument to check that it
09517e0a8aa0 inputParser.m: handle errors in Optional parameters (maybe is a param key).
Carnë Draug <carandraug@octave.org>
parents: 21634
diff changeset
685 ## is caught without preventing continuation into param/value pairs.
09517e0a8aa0 inputParser.m: handle errors in Optional parameters (maybe is a param key).
Carnë Draug <carandraug@octave.org>
parents: 21634
diff changeset
686 %!test
09517e0a8aa0 inputParser.m: handle errors in Optional parameters (maybe is a param key).
Carnë Draug <carandraug@octave.org>
parents: 21634
diff changeset
687 %! p = inputParser ();
09517e0a8aa0 inputParser.m: handle errors in Optional parameters (maybe is a param key).
Carnë Draug <carandraug@octave.org>
parents: 21634
diff changeset
688 %! p.addOptional ("err", "foo", @error);
21677
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
689 %! p.addParameter ("not_err", "bar", @ischar);
21666
09517e0a8aa0 inputParser.m: handle errors in Optional parameters (maybe is a param key).
Carnë Draug <carandraug@octave.org>
parents: 21634
diff changeset
690 %! p.parse ("not_err", "qux");
09517e0a8aa0 inputParser.m: handle errors in Optional parameters (maybe is a param key).
Carnë Draug <carandraug@octave.org>
parents: 21634
diff changeset
691 %! assert (p.Results.err, "foo")
09517e0a8aa0 inputParser.m: handle errors in Optional parameters (maybe is a param key).
Carnë Draug <carandraug@octave.org>
parents: 21634
diff changeset
692 %! assert (p.Results.not_err, "qux")
09517e0a8aa0 inputParser.m: handle errors in Optional parameters (maybe is a param key).
Carnë Draug <carandraug@octave.org>
parents: 21634
diff changeset
693
09517e0a8aa0 inputParser.m: handle errors in Optional parameters (maybe is a param key).
Carnë Draug <carandraug@octave.org>
parents: 21634
diff changeset
694
21677
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
695 ## With more Parameters to test StructExpand
21667
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
696 %!function p3 = create_p3 ();
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
697 %! p3 = inputParser;
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
698 %! addOptional (p3, "op1", "val", @(x) any (strcmp (x, {"val", "foo"})));
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
699 %! addOptional (p3, "op2", 78, @(x) x > 50);
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
700 %! addSwitch (p3, "verbose");
21677
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
701 %! addParameter (p3, "line", "tree", @(x) any (strcmp (x, {"tree", "circle"})));
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
702 %! addParameter (p3, "color", "red", @(x) any (strcmp (x, {"red", "green"})));
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
703 %! addParameter (p3, "style", "tt", @(x) any (strcmp (x, {"tt", "f", "i"})));
21667
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
704 %!endfunction
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
705
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
706 ## Test StructExpand
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
707 %!test
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
708 %! p3 = create_p3 ();
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
709 %! p3.parse (struct ("line", "circle", "color", "green"));
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
710 %! assert (p3.Results, struct ("op1", "val", "op2", 78, "verbose", false,
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
711 %! "line", "circle", "color", "green",
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
712 %! "style", "tt"))
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
713
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
714 %!test
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
715 %! p3 = create_p3 ();
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
716 %! p3.parse (struct ("line", "circle", "color", "green"), "line", "tree");
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
717 %! assert (p3.Results.line, "tree")
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
718 %! p3.parse ("line", "tree", struct ("line", "circle", "color", "green"));
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
719 %! assert (p3.Results.line, "circle")
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
720
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
721 %!test # unmatched parameters with StructExpand
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
722 %! p3 = create_p3 ();
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
723 %! p3.KeepUnmatched = true;
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
724 %! p3.parse (struct ("line", "circle", "color", "green", "bar", "baz"));
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
725 %! assert (p3.Unmatched.bar, "baz")
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
726
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
727 ## The validation for the second optional argument throws an error with
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
728 ## a struct so check that we can handle it.
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
729 %!test
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
730 %! p3 = create_p3 ();
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
731 %! p3.parse ("foo", struct ("color", "green"), "line", "tree");
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
732 %! assert (p3.Results.op1, "foo")
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
733 %! assert (p3.Results.line, "tree")
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
734 %! assert (p3.Results.color, "green")
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
735 %! assert (p3.Results.verbose, false)
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
736
84092ccb45e2 inputParser.m: implement StructExpand option (struct with param/value pairs).
Carnë Draug <carandraug@octave.org>
parents: 21666
diff changeset
737
21677
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
738 ## Some simple tests for addParamValue since all the other ones use add
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
739 ## addParameter but they use the same codepath.
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
740 %!test
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
741 %! p = inputParser;
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
742 %! addParameter (p, "line", "tree", @(x) any (strcmp (x, {"tree", "circle"})));
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
743 %! addParameter (p, "color", "red", @(x) any (strcmp (x, {"red", "green"})));
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
744 %! p.parse ("line", "circle");
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
745 %! assert ({p.Results.line, p.Results.color}, {"circle", "red"})
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
746
23167
a2d6b84ce5c5 scripts/general/inputParser.m: refactor two xtest cases to normal test cases.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23165
diff changeset
747 %!test
a2d6b84ce5c5 scripts/general/inputParser.m: refactor two xtest cases to normal test cases.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23165
diff changeset
748 %! p = inputParser;
a2d6b84ce5c5 scripts/general/inputParser.m: refactor two xtest cases to normal test cases.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23165
diff changeset
749 %! p.addParameter ("foo", "bar", @ischar);
a2d6b84ce5c5 scripts/general/inputParser.m: refactor two xtest cases to normal test cases.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23165
diff changeset
750 %! p.parse ();
a2d6b84ce5c5 scripts/general/inputParser.m: refactor two xtest cases to normal test cases.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23165
diff changeset
751 %! assert (p.Results, struct ("foo", "bar"))
a2d6b84ce5c5 scripts/general/inputParser.m: refactor two xtest cases to normal test cases.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23165
diff changeset
752 %! p.parse ("foo", "qux");
a2d6b84ce5c5 scripts/general/inputParser.m: refactor two xtest cases to normal test cases.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 23165
diff changeset
753 %! assert (p.Results, struct ("foo", "qux"))
21508
04923b7b0d89 inputParser.m: add failing test due to bug in the parser (bug #44779)
Carnë Draug <carandraug@octave.org>
parents: 21505
diff changeset
754
23377
f1bf2590272a inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23365
diff changeset
755 ## This behaviour means that a positional option can never be a string
f1bf2590272a inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23365
diff changeset
756 ## that is the name of a parameter key. This is required for Matlab
f1bf2590272a inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23365
diff changeset
757 ## compatibility.
23573
1b4f4ec53b4a use new script to tag fixed bugs in tests
John W. Eaton <jwe@octave.org>
parents: 23572
diff changeset
758 %!test <*50752>
23382
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
759 %! p = inputParser ();
21505
7f7d7cb73e0d inputParser.m: uncomment failing test and use %!xtest instead.
Carnë Draug <carandraug@octave.org>
parents: 21316
diff changeset
760 %! p.addOptional ("op1", "val");
21677
1cd04fb745f6 inputParser: new method addParameter --- just like addParamValue (bug #45367)
Carnë Draug <carandraug@octave.org>
parents: 21668
diff changeset
761 %! p.addParameter ("line", "tree");
21505
7f7d7cb73e0d inputParser.m: uncomment failing test and use %!xtest instead.
Carnë Draug <carandraug@octave.org>
parents: 21316
diff changeset
762 %! p.parse ("line", "circle");
23377
f1bf2590272a inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23365
diff changeset
763 %! assert (p.Results, struct ("op1", "val", "line", "circle"))
f1bf2590272a inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23365
diff changeset
764 %!
f1bf2590272a inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23365
diff changeset
765 %! p = inputParser ();
23382
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
766 %! p.addOptional ("op1", "val1");
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
767 %! p.addOptional ("op2", "val2");
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
768 %! p.addParameter ("line", "tree");
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
769 %! p.parse ("line", "circle");
23377
f1bf2590272a inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23365
diff changeset
770 %! assert (p.Results.op1, "val1")
f1bf2590272a inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23365
diff changeset
771 %! assert (p.Results.op2, "val2")
f1bf2590272a inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23365
diff changeset
772 %! assert (p.Results.line, "circle")
23382
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
773 %!
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
774 %! ## If there's enough arguments to fill the positional options and
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
775 %! ## param/key, it still skips positional options.
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
776 %! p = inputParser ();
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
777 %! p.addOptional ("op1", "val1");
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
778 %! p.addOptional ("op2", "val2");
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
779 %! p.addParameter ("line", "tree");
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
780 %! p.parse ("line", "circle", "line", "rectangle");
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
781 %! assert (p.Results, struct ("op1", "val1", "op2", "val2",
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
782 %! "line", "rectangle"))
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
783 %!
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
784 %! ## Even if the key/param fails validation, it does not backtrack to
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
785 %! ## check if the values are valid positional options.
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
786 %! p = inputParser ();
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
787 %! p.addOptional ("op1", "val1", @ischar);
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
788 %! p.addOptional ("op2", "val2", @isnumeric);
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
789 %! p.addParameter ("line", "circle", @ischar);
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
790 %! fail ('p.parse ("line", 89)', "failed validation of LINE")
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
791 %!
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
792 %! p = inputParser ();
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
793 %! p.addOptional ("op1", "val1");
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
794 %! p.addParamValue ("line", "circle", @ischar);
23383
62320e943696 inputParser.m: check if Param key and Switch are strings for better errors.
Carnë Draug <carandraug@octave.org>
parents: 23382
diff changeset
795 %! fail ('p.parse ("line", "line", 89)',
62320e943696 inputParser.m: check if Param key and Switch are strings for better errors.
Carnë Draug <carandraug@octave.org>
parents: 23382
diff changeset
796 %! "non-string for Parameter name or Switch")
23382
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
797
23573
1b4f4ec53b4a use new script to tag fixed bugs in tests
John W. Eaton <jwe@octave.org>
parents: 23572
diff changeset
798 %!test <*50752>
23382
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
799 %! ## This fails in Matlab but works in Octave. It is a bug there
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
800 %! ## that we do not replicate.
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
801 %! p = inputParser ();
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
802 %! p.addOptional ("op1", "val1");
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
803 %! p.addParameter ("line", "circle");
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
804 %! p.parse ("line");
5a3c3ff03167 inputParser.m: more tests for mix Param keys with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23377
diff changeset
805 %! assert (p.Results, struct ("op1", "line", "line", "circle"))
23377
f1bf2590272a inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23365
diff changeset
806
23573
1b4f4ec53b4a use new script to tag fixed bugs in tests
John W. Eaton <jwe@octave.org>
parents: 23572
diff changeset
807 %!test <*50752>
23377
f1bf2590272a inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23365
diff changeset
808 %! p = inputParser;
f1bf2590272a inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23365
diff changeset
809 %! p.addOptional ("op1", "val1");
f1bf2590272a inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23365
diff changeset
810 %! p.addSwitch ("line");
f1bf2590272a inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23365
diff changeset
811 %! p.parse ("line");
f1bf2590272a inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23365
diff changeset
812 %! assert (p.Results.op1, "val1")
f1bf2590272a inputParser.m: do not confuse Switch options with positional options (bug #50752)
Carnë Draug <carandraug@octave.org>
parents: 23365
diff changeset
813 %! assert (p.Results.line, true)
22541
4b7ab10b5c38 inputParser clear previous results before new parse (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents: 22489
diff changeset
814
4b7ab10b5c38 inputParser clear previous results before new parse (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents: 22489
diff changeset
815 %!test
4b7ab10b5c38 inputParser clear previous results before new parse (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents: 22489
diff changeset
816 %! p = inputParser;
4b7ab10b5c38 inputParser clear previous results before new parse (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents: 22489
diff changeset
817 %! p.addParameter ("a", []);
4b7ab10b5c38 inputParser clear previous results before new parse (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents: 22489
diff changeset
818 %! p.addParameter ("b", []);
4b7ab10b5c38 inputParser clear previous results before new parse (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents: 22489
diff changeset
819 %! p.parse ("a", 1);
4b7ab10b5c38 inputParser clear previous results before new parse (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents: 22489
diff changeset
820 %! p.parse ("b", 1);
4b7ab10b5c38 inputParser clear previous results before new parse (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents: 22489
diff changeset
821 %! assert (p.Results, struct ("a", [], "b", 1));
22559
27f2a7a3b55d inputParser reset more parse results before new parse. (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents: 22541
diff changeset
822 %! assert (p.UsingDefaults, {"a"});
22541
4b7ab10b5c38 inputParser clear previous results before new parse (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents: 22489
diff changeset
823
22559
27f2a7a3b55d inputParser reset more parse results before new parse. (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents: 22541
diff changeset
824 %!test
27f2a7a3b55d inputParser reset more parse results before new parse. (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents: 22541
diff changeset
825 %! p = inputParser;
27f2a7a3b55d inputParser reset more parse results before new parse. (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents: 22541
diff changeset
826 %! p.addParameter ("b", []);
27f2a7a3b55d inputParser reset more parse results before new parse. (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents: 22541
diff changeset
827 %! p.KeepUnmatched = true;
27f2a7a3b55d inputParser reset more parse results before new parse. (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents: 22541
diff changeset
828 %! p.parse ("a", 1);
27f2a7a3b55d inputParser reset more parse results before new parse. (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents: 22541
diff changeset
829 %! p.parse ("b", 1);
27f2a7a3b55d inputParser reset more parse results before new parse. (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents: 22541
diff changeset
830 %! assert (p.Results, struct ("b", 1));
27f2a7a3b55d inputParser reset more parse results before new parse. (bug #49198)
Carlo de Falco <carlo.defalco@polimi.it>
parents: 22541
diff changeset
831 %! assert (p.Unmatched, struct ());
23165
5291b67ff124 More verbose information when inputParser fails validating argument (patch #9241)
Georg Wiora
parents: 23164
diff changeset
832
5291b67ff124 More verbose information when inputParser fails validating argument (patch #9241)
Georg Wiora
parents: 23164
diff changeset
833 ## Test for patch #9241
5291b67ff124 More verbose information when inputParser fails validating argument (patch #9241)
Georg Wiora
parents: 23164
diff changeset
834 %!error<failed validation of A with ischar>
5291b67ff124 More verbose information when inputParser fails validating argument (patch #9241)
Georg Wiora
parents: 23164
diff changeset
835 %! p = inputParser;
5291b67ff124 More verbose information when inputParser fails validating argument (patch #9241)
Georg Wiora
parents: 23164
diff changeset
836 %! p.addParameter ("a", [], @ischar);
5291b67ff124 More verbose information when inputParser fails validating argument (patch #9241)
Georg Wiora
parents: 23164
diff changeset
837 %! p.parse ("a", 1);
28187
3faa700d64d4 inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents: 27978
diff changeset
838
3faa700d64d4 inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents: 27978
diff changeset
839 %!test <*58112>
3faa700d64d4 inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents: 27978
diff changeset
840 %! p = inputParser ();
3faa700d64d4 inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents: 27978
diff changeset
841 %! p.addRequired ("first");
3faa700d64d4 inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents: 27978
diff changeset
842 %! p.addOptional ("second", []);
3faa700d64d4 inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents: 27978
diff changeset
843 %! p.parse (1, {"test", 1, 2, 3});
3faa700d64d4 inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents: 27978
diff changeset
844 %! r = p.Results;
3faa700d64d4 inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents: 27978
diff changeset
845 %! assert (r.first, 1);
3faa700d64d4 inputParser.m: Fix error with cell array Optional argument (bug #58112)
Rik <rik@octave.org>
parents: 27978
diff changeset
846 %! assert (r.second, {"test", 1, 2, 3});