Mercurial > octave
changeset 21801:4acfe6a99a9f
Improve parsing of input arguments in __patch__.m (bug #48038).
* __patch__.m: Improve recognition of color spec in input parameters.
Let "set" check the rest of the input parameters.
author | mmuetzel <markus.muetzel@gmx.de> |
---|---|
date | Tue, 31 May 2016 16:49:46 +0200 |
parents | 0eefa882bcc7 |
children | 66972e1679df |
files | scripts/plot/draw/private/__patch__.m |
diffstat | 1 files changed, 24 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- a/scripts/plot/draw/private/__patch__.m Wed Jun 01 18:24:52 2016 -0500 +++ b/scripts/plot/draw/private/__patch__.m Tue May 31 16:49:46 2016 +0200 @@ -36,16 +36,6 @@ if (isempty (varargin)) args = varargin; - elseif (isstruct (varargin{1})) - if (isfield (varargin{1}, "vertices") && isfield (varargin{1}, "faces")) - fvs = varargin{1}; - fvc = cell (1, 2*numfields (fvs)); - fvc(1:2:end) = fieldnames (fvs); - fvc(2:2:end) = struct2cell (fvs); - args = [fvc(:)', varargin(2:end)]; - else - failed = true; - endif elseif (is_numeric_arg(1)) if (nargin < 3 || ! is_numeric_arg(2)) failed = true; @@ -59,25 +49,25 @@ elseif (nargin > 3 && all (is_numeric_arg(1:3))) x = varargin{1}; y = varargin{2}; - iarg = 4; - if (rem (nargin - iarg, 2) == 1) - c = varargin{iarg}; + if (nargin > 4 && iscolorspec (varargin{4})) z = varargin{3}; + c = varargin{4}; iarg = 5; else z = []; c = varargin{3}; + iarg = 4; endif elseif (nargin > 2 && all (is_numeric_arg(1:2))) x = varargin{1}; y = varargin{2}; z = []; - iarg = 3; - if (rem (nargin - iarg, 2) == 1) - c = varargin{iarg}; - iarg += 1; + if (iscolorspec (varargin{3})) + c = varargin{3}; + iarg = 4; else c = []; + iarg = 3; endif endif @@ -159,8 +149,7 @@ error ("patch: size of X, Y, and C must be equal"); endif endif - elseif (ischar (c) && rem (nargin - iarg, 2) == 0) - ## Assume any additional argument over an even number is a color string. + elseif (iscolorspec (c)) args{7} = "facecolor"; args{8} = tolower (c); args{9} = "cdata"; @@ -172,7 +161,11 @@ args{10} = []; endif - args = [args, varargin(iarg:end)]; + if (mod (numel (varargin) - iarg + 1, 2) != 0) + failed = true; + else + args = [args, varargin(iarg:end)]; + endif endif else args = varargin; @@ -184,3 +177,14 @@ endfunction +function retval = iscolorspec (arg) + retval = false; + if (ischar (arg)) + persistent colors = {"y", "yellow", "r", "red", "m", "magenta", ... + "c", "cyan", "g", "green", "b", "blue", ... + "w", "white", "k", "black"}; + if (any (strcmpi (arg, colors))) + retval = true; + endif + endif +endfunction