# HG changeset patch # User Rik # Date 1432012251 25200 # Node ID 70e8801a56f7db64ade8172570a4b1f12bccf8d4 # Parent d9f35ceff9e12dddc2d605f6c373d3f1094e13b6 Correctly parse linestyle specification for contour plots. * __contour__.m: Rewrite input varargin processing to handle the order in which "linecolor" and a plot-type linestyle argument are given. diff -r d9f35ceff9e1 -r 70e8801a56f7 scripts/plot/draw/private/__contour__.m --- a/scripts/plot/draw/private/__contour__.m Sun May 17 10:04:08 2015 -0700 +++ b/scripts/plot/draw/private/__contour__.m Mon May 18 22:10:51 2015 -0700 @@ -28,40 +28,42 @@ linespec.color = "auto"; linespec.linestyle = "-"; - for i = 3:2:nargin - arg = varargin{i}; - if (ischar (arg) || iscellstr (arg)) + opts = {}; + i = 3; + while (i <= length (varargin)) + if (ischar (varargin{i}) || iscellstr (varargin{i})) + arg = varargin{i}; + if (i < length (varargin)) + if (strcmpi (arg, "fill")) + filled = varargin{i+1}; + varargin(i:i+1) = []; + continue; + elseif (strcmpi (arg, "linecolor")) + linespec.color = varargin{i+1}; + varargin(i:i+1) = []; + continue; + endif + endif + [lspec, valid] = __pltopt__ ("__contour__", arg, false); if (valid) - have_line_spec = true; varargin(i) = []; - linespec = lspec; - if (isempty (linespec.color)) - linespec.color = "auto"; + if (! isempty (lspec.color)) + linespec.color = lspec.color; + endif + if (! isempty (lspec.linestyle)) + linespec.linestyle = lspec.linestyle; endif - if (isempty (linespec.linestyle)) - linespec.linestyle = "-"; + else # unrecognized option, pass unmodified in opts cell array + if (i < length (varargin)) + opts(end+(1:2)) = varargin(i:i+1); + varargin(i:i+1) = []; + else + error ("__contour__: Uneven number of PROP/VAL pairs"); endif - break; endif - endif - endfor - opts = {}; - i = 3; - while (i < length (varargin)) - if (ischar (varargin{i})) - if (strcmpi (varargin{i}, "fill")) - filled = varargin{i+1}; - varargin(i:i+1) = []; - elseif (strcmpi (varargin{i}, "linecolor")) - linespec.color = varargin{i+1}; - varargin(i:i+1) = []; - else - opts(end+(1:2)) = varargin(i:i+1); - varargin(i:i+1) = []; - endif - else + else # skip numeric arguments i++; endif endwhile