annotate scripts/+matlab/+lang/makeValidName.m @ 27919:1891570abac8

update Octave Project Developers copyright for the new year In files that have the "Octave Project Developers" copyright notice, update for 2020.
author John W. Eaton <jwe@octave.org>
date Mon, 06 Jan 2020 22:29:51 -0500
parents b442ec6dda5c
children bd51beb6205e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27919
1891570abac8 update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents: 27918
diff changeset
1 ## Copyright (C) 2017-2020 The Octave Project Developers
27918
b442ec6dda5c use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
2 ##
b442ec6dda5c use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
3 ## See the file COPYRIGHT.md in the top-level directory of this distribution
b442ec6dda5c use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
4 ## or <https://octave.org/COPYRIGHT.html/>.
b442ec6dda5c use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
5 ##
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
6 ##
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
7 ## This file is part of Octave.
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
8 ##
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
9 ## Octave is free software: you can redistribute it and/or modify it
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
10 ## under the terms of the GNU General Public License as published by
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
11 ## the Free Software Foundation, either version 3 of the License, or
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
12 ## (at your option) any later version.
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
13 ##
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
14 ## Octave is distributed in the hope that it will be useful, but
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
15 ## WITHOUT ANY WARRANTY; without even the implied warranty of
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
16 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
17 ## GNU General Public License for more details.
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
18 ##
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
19 ## You should have received a copy of the GNU General Public License
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
20 ## along with Octave; see the file COPYING. If not, see
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
21 ## <https://www.gnu.org/licenses/>.
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
22
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
23 ## -*- texinfo -*-
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
24 ## @deftypefn {} {@var{varname} =} matlab.lang.makeValidName (@var{str})
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
25 ## @deftypefnx {} {@var{varname} =} matlab.lang.makeValidName (@dots{}, @qcode{"ReplacementStyle"}, @var{rs})
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
26 ## @deftypefnx {} {@var{varname} =} matlab.lang.makeValidName (@dots{}, @qcode{"Prefix"}, @var{pfx})
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
27 ## @deftypefnx {} {[@var{varname}, @var{ismodified}] =} matlab.lang.makeValidName (@dots{})
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
28 ##
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
29 ## Create valid variable name @var{varname} from @var{str}.
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
30 ##
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
31 ## The input @var{str} must be a string or a cell array of strings.
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
32 ## The output @var{varname} will be of the same type.
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
33 ##
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
34 ## A valid variable name is a sequence of letters, digits, and underscores that
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
35 ## does not begin with a digit.
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
36 ##
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
37 ## The @qcode{"ReplacementStyle"} option specifies how invalid characters
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
38 ## are handled. Acceptable values are
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
39 ##
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
40 ## @table @asis
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
41 ## @item @qcode{"underscore"} (default)
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
42 ## Replace all invalid characters with an underscore (@qcode{"_"}).
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
43 ##
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
44 ## @item @qcode{"delete"}
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
45 ## Remove any invalid character.
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
46 ##
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
47 ## @item @qcode{"hex"}
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
48 ## Replace all invalid characters with their hexadecimal representation.
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
49 ## @end table
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
50 ##
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
51 ## Whitespace characters are always removed @strong{prior} to the application
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
52 ## of the @qcode{"ReplacementStyle"}. Lowercase letters following a whitespace
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
53 ## will be changed to uppercase.
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
54 ##
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
55 ## The @qcode{"Prefix"} option specifies the string @var{pfx} to add as a
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
56 ## prefix to the input if it begins with a digit. @var{pfx} must be a valid
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
57 ## variable name itself. The default prefix is @qcode{"x"}.
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
58 ##
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
59 ## The optional output @var{ismodified} is a logical array indicating whether
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
60 ## the respective element in @var{str} was a valid name or not.
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
61 ##
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
62 ## @seealso{iskeyword, isvarname, matlab.lang.makeUniqueStrings}
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
63 ## @end deftypefn
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
64
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
65 function [varname, ismodified] = makeValidName (str, varargin)
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
66
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
67 if (nargin == 0 || nargout > 2)
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
68 print_usage ();
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
69 endif
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
70
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
71 if (! ischar (str) && ! iscellstr (str))
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
72 error ("makeValidName: STR must be a string or cellstr");
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
73 endif
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
74
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
75 if (mod (nargin - 1, 2) != 0)
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
76 error ("makeValidName: property/value options must occur in pairs");
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
77 endif
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
78
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
79 varname = cellstr (str);
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
80 ismodified = false (size (varname));
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
81 convert2char = ischar (str);
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
82 opts = struct ("replacementstyle", "underscore", "prefix", "x");
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
83
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
84 for i = 1:2:numel (varargin)
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
85 if (! ischar (varargin{i}))
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
86 error ("makeValidName: option argument must be a string");
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
87 endif
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
88 parameter = tolower (varargin{i});
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
89 value = varargin{i+1};
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
90 switch (parameter)
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
91 case "replacementstyle"
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
92 if (! ischar (value))
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
93 error ('makeValidName: "ReplacementStyle" value must be a string');
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
94 endif
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
95 value = tolower (value);
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
96 if (! any (strcmp (value, {"underscore", "delete", "hex"})))
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
97 error ('makeValidName: invalid "ReplacementStyle" value "%s"', value);
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
98 endif
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
99 opts.replacementstyle = value;
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
100
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
101 case "prefix"
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
102 if (! isvarname (value))
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
103 error ('makeValidName: invalid "Prefix" value "%s"', value);
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
104 endif
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
105 opts.prefix = value;
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
106
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
107 otherwise
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
108 error ('makeValidName: unknown property "%s"', parameter);
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
109 endswitch
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
110 endfor
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
111
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
112 for i = 1:numel (varname)
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
113 if (! isvarname (varname{i}))
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
114 ismodified(i) = true;
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
115
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
116 ## Remove leading and trailing whitespace
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
117 varname{i} = strtrim (varname{i});
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
118 if (isempty (varname{i}))
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
119 varname{i} = opts.prefix;
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
120 endif
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
121
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
122 ## Add prefix if input is a reserved keyword
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
123 if (iskeyword (varname{i}))
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
124 varname{i} = [opts.prefix, toupper(varname{i}(1)), varname{i}(2:end)];
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
125 endif
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
126
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
127 ## Change whitespace followed by lowercase letter to uppercase
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
128 idx = regexp (varname{i}, '\s[a-z]');
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
129 varname{i}(idx+1) = toupper (varname{i}(idx+1));
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
130
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
131 ## Remove any whitespace character
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
132 varname{i}(isspace (varname{i})) = "";
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
133
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
134 ## Add prefix if first character is not a letter or underscore
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
135 char1 = varname{i}(1);
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
136 if (! isalpha (char1) && char1 != "_")
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
137 varname{i} = [opts.prefix varname{i}];
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
138 endif
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
139
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
140 ## Replace non alphanumerics or underscores
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
141 idx = regexp (varname{i}, '[^0-9a-zA-Z_]');
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
142 switch (opts.replacementstyle)
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
143 case "underscore"
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
144 varname{i}(idx) = "_";
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
145
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
146 case "delete"
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
147 varname{i}(idx) = "";
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
148
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
149 case "hex"
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
150 for j = numel (idx):-1:1
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
151 varname{i} = strrep (varname{i}, varname{i}(idx(j)),
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
152 sprintf ("0x%02X",varname{i}(idx(j))));
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
153 endfor
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
154 endswitch
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
155 endif
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
156 endfor
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
157
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
158 if (convert2char)
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
159 varname = char (varname);
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
160 endif
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
161
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
162 endfunction
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
163
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
164
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
165 ## Test char vector input
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
166 %!test
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
167 %! varname = matlab.lang.makeValidName ("octave");
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
168 %! assert (varname, "octave");
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
169
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
170 ## Test cellstr input
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
171 %!test
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
172 %! varname = matlab.lang.makeValidName ({"gnu", "octave"});
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
173 %! assert (varname, {"gnu", "octave"});
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
174
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
175 ## Test default flags
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
176 %!test
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
177 %! str = {"Octave", "3d plot", "GNU/Octave", "laplace_*"};
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
178 %! varname = matlab.lang.makeValidName (str);
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
179 %! assert (varname, {"Octave", "x3dPlot", "GNU_Octave", "laplace__"});
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
180
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
181 ## Test ReplacementStyle flag
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
182 %!test
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
183 %! str = {"Octave", "3d plot", "GNU/Octave", "laplace_*"};
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
184 %! varname = matlab.lang.makeValidName (str, "ReplacementStyle", "underscore");
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
185 %! assert (varname, {"Octave", "x3dPlot", "GNU_Octave", "laplace__"});
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
186 %! varname = matlab.lang.makeValidName (str, "ReplacementStyle", "hex");
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
187 %! assert (varname, {"Octave", "x3dPlot", "GNU0x2FOctave", "laplace_0x2A"});
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
188 %! varname = matlab.lang.makeValidName (str, "ReplacementStyle", "delete");
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
189 %! assert (varname, {"Octave", "x3dPlot", "GNUOctave", "laplace_"});
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
190
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
191 ## Test Prefix flag
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
192 %!test
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
193 %! assert (matlab.lang.makeValidName ({"", " "}), {"x", "x"});
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
194 %! str = {"Octave", "3d plot", "GNU/Octave", "laplace_*"};
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
195 %! varname = matlab.lang.makeValidName (str, "prefix", "oct_");
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
196 %! assert (varname, {"Octave", "oct_3dPlot", "GNU_Octave", "laplace__"});
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
197
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
198 ## Test second output
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
199 %!test
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
200 %! str = {"Octave", "3d plot", "GNU/Octave", "laplace_*"};
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
201 %! [varname, modified] = matlab.lang.makeValidName (str);
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
202 %! assert (modified, [false, true, true, true]);
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
203
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
204 ## Test whitespace followed by a lowercase letter
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
205 %!test
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
206 %! varname = matlab.lang.makeValidName ("gnu octave");
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
207 %! assert (varname, "gnuOctave");
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
208 %! varname = matlab.lang.makeValidName (" octave ");
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
209 %! assert (varname, "octave");
26201
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
210
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
211 ## Check for keywords
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
212 %!test
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
213 %! assert (matlab.lang.makeValidName ("for"), "xFor")
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
214 %! assert (matlab.lang.makeValidName ("For"), "For")
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
215 %!error matlab.lang.makeValidName ("for", "Prefix", "for")
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
216
750a6f9957ea New functions makeUniqueStrings and makeValidName (bug #52596).
Guillaume Flandin <guillaume.offline@gmail.com>
parents:
diff changeset
217 ## Test input validation
26202
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
218 %!error matlab.lang.makeValidName ()
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
219 %!error <STR must be a string or cellstr> matlab.lang.makeValidName (42)
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
220 %!error <options must occur in pairs> matlab.lang.makeValidName ("a", "opt1")
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
221 %!error <option argument must be a string>
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
222 %! matlab.lang.makeValidName ("a", 1, 2)
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
223 %!error <"ReplacementStyle" value must be a string>
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
224 %! matlab.lang.makeValidName ("a", "ReplacementStyle", 1);
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
225 %!error <invalid "ReplacementStyle" value "foobar">
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
226 %! matlab.lang.makeValidName ("a", "ReplacementStyle", "foobar");
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
227 %!error <invalid "Prefix" value "1_">
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
228 %! matlab.lang.makeValidName ("a", "Prefix", "1_");
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
229 %!error <unknown property "foobar">
368dc1142072 makeValidName.m, makeUniqueStrings.m: Clean up functions to use Octave conventions.
Rik <rik@octave.org>
parents: 26201
diff changeset
230 %! matlab.lang.makeValidName ("a", "foobar", 1);