# HG changeset patch # User Rik # Date 1361854896 28800 # Node ID 3cce6b4e0f7c21ab8a2363d5a5ac223fbbe8f431 # Parent 3b791008b88eaaeff57e734707c35a6f8a918145 Update gnuplot plotting scripts for faster or more modern synta * scripts/plot/__gnuplot_drawnow__.m: Use default values in function header. Check number of arguments to function immediately. Use single quotes to avoid lots of backslashing. Use strtok() to replace hand-coded functionality. Initialize persistent variables in declaration (10% faster). * scripts/plot/gnuplot_binary.in: Replace tabs with spaces. Simplify input validation. Add %!test block. * scripts/plot/private/__gnuplot_get_var__.m: Use default values in function header. Use "*char" in fread to automatically convert to char variable. * scripts/plot/private/__gnuplot_ginput__.m: Check immediately for required version of gnuplot. Use "*char" in fread to automatically convert to char variable. Use fputs in place of fprintf to match rest of code. * scripts/plot/private/__gnuplot_has_feature__.m: Initialize persistent varibles in declaration. Use false () rather than logical (zeros()) construction. * scripts/plot/private/__gnuplot_has_terminal__.m: Use strtok() to replace hand-coded functionality * scripts/plot/private/__gnuplot_print__.m: Replace sprintf calls with direct string char matrix concatenation (2.4x faster) where possible. Replace for loop with multiple argument form of set(). Use single quotes to avoid lots of backslashing. * scripts/plot/private/__gnuplot_version__.m: Use single quotes to avoid lots of backslashing. diff -r 3b791008b88e -r 3cce6b4e0f7c scripts/plot/__gnuplot_drawnow__.m --- a/scripts/plot/__gnuplot_drawnow__.m Mon Feb 25 23:49:43 2013 -0500 +++ b/scripts/plot/__gnuplot_drawnow__.m Mon Feb 25 21:01:36 2013 -0800 @@ -23,10 +23,10 @@ ## Author: jwe -function __gnuplot_drawnow__ (h, term, file, mono, debug_file) +function __gnuplot_drawnow__ (h, term, file, mono = false, debug_file) - if (nargin < 4) - mono = false; + if (nargin < 1 || nargin > 5 || nargin == 2) + print_usage (); endif if (nargin >= 3 && nargin <= 5) @@ -39,7 +39,7 @@ plot_stream = __gnuplot_open_stream__ (2, h); gnuplot_supports_term = __gnuplot_has_terminal__ (term, plot_stream); if (gnuplot_supports_term) - enhanced = gnuplot_set_term (plot_stream (1), true, h, term, file); + enhanced = gnuplot_set_term (plot_stream(1), true, h, term, file); __go_draw_figure__ (h, plot_stream(1), enhanced, mono); if (nargin == 5) fid = fopen (debug_file, "wb"); @@ -47,7 +47,7 @@ __go_draw_figure__ (h, fid, enhanced, mono); endif else - error ("__gnuplot_drawnow__: the gnuplot terminal, \"%s\", is not available", + error ('__gnuplot_drawnow__: the gnuplot terminal, "%s", is not available', gnuplot_trim_term (term)); endif unwind_protect_cleanup @@ -65,7 +65,7 @@ fclose (fid); endif end_unwind_protect - elseif (nargin == 1) + else # nargin == 1 ## Graphics terminal for display. plot_stream = get (h, "__plot_stream__"); if (isempty (plot_stream)) @@ -78,13 +78,13 @@ if (strcmp (term, "dumb")) ## popen2 eats stdout of gnuplot, use temporary file instead dumb_tmp_file = tmpnam (); - enhanced = gnuplot_set_term (plot_stream (1), new_stream, h, ... + enhanced = gnuplot_set_term (plot_stream(1), new_stream, h, term, dumb_tmp_file); else - enhanced = gnuplot_set_term (plot_stream (1), new_stream, h, term); + enhanced = gnuplot_set_term (plot_stream(1), new_stream, h, term); endif - __go_draw_figure__ (h, plot_stream (1), enhanced, mono); - fflush (plot_stream (1)); + __go_draw_figure__ (h, plot_stream(1), enhanced, mono); + fflush (plot_stream(1)); if (strcmp (term, "dumb")) fid = -1; while (fid < 0) @@ -94,17 +94,14 @@ ## reprint the plot on screen [a, count] = fscanf (fid, '%c', Inf); fclose (fid); - if (count>0) - if (a(1)==12) - ## avoid ^L at the beginning - a = a(2:end); + if (count > 0) + if (a(1) == 12) + a = a(2:end); # avoid ^L at the beginning endif puts (a); endif unlink (dumb_tmp_file); endif - else - print_usage (); endif endfunction @@ -117,9 +114,8 @@ term = gnuplot_default_term (plot_stream); opts_str = ""; else - ## Get the one word terminal id and save the remaining as options to - ## be passed on to gnuplot. The terminal may respect the graphics - ## toolkit. + ## Get the one word terminal id and save the remaining as options to be + ## passed on to gnuplot. The terminal may respect the graphics toolkit. [term, opts_str] = gnuplot_trim_term (term); term = lower (term); if (strcmp (term, "lua")) @@ -149,7 +145,7 @@ ## Generate gnuplot title string for plot windows. if (output_to_screen (term) && ! strcmp (term, "dumb")) fig.numbertitle = get (h, "numbertitle"); - fig.name = strrep (get (h, "name"), "\"", "\\\""); + fig.name = strrep (get (h, "name"), '"', '\"'); if (strcmp (get (h, "numbertitle"), "on")) title_str = sprintf ("Figure %d", h); else @@ -161,11 +157,11 @@ title_str = fig.name; endif if (! isempty (title_str)) - title_str = sprintf ("title \"%s\"", title_str); + title_str = sprintf ('title "%s"', title_str); endif if (strcmp (term, "aqua")) ## Adjust axes-label and tick-label spacing. - opts_str = sprintf ("%s font \"%s,%d\"", opts_str, + opts_str = sprintf ('%s font "%s,%d"', opts_str, get (0, "defaultaxesfontname"), get (0, "defaultaxesfontsize") / 1.5); endif @@ -195,8 +191,8 @@ if (all (gnuplot_size > 0)) terminals_with_size = {"canvas", "emf", "epslatex", "fig", ... "gif", "jpeg", "latex", "pbm", "pdf", ... - "pdfcairo", "postscript", "png", "pngcairo", ... - "pstex", "pslatex", "svg", "tikz"}; + "pdfcairo", "postscript", "png", ... + "pngcairo", "pstex", "pslatex", "svg", "tikz"}; if (__gnuplot_has_feature__ ("windows_figure_position")) terminals_with_size{end+1} = "windows"; endif @@ -207,27 +203,27 @@ terminals_with_size{end+1} = "wxt"; endif switch (term) - case terminals_with_size - size_str = sprintf ("size %.12g,%.12g", gnuplot_size); - case "tikz" - size_str = sprintf ("size %gin,%gin", gnuplot_size); - case "dumb" - new_stream = 1; - if (! isempty (getenv ("COLUMNS")) && ! isempty (getenv ("LINES"))) - ## Let dumb use full text screen size (minus prompt lines). - n = sprintf ("%i", -2 - length (find (sprintf ("%s", PS1) == "\n"))); - ## n = the number of times \n appears in PS1 - size_str = ["size ", getenv("COLUMNS"), ",", getenv("LINES"), n]; - else - ## Use the gnuplot default. + case terminals_with_size + size_str = sprintf ("size %.12g,%.12g", gnuplot_size); + case "tikz" + size_str = sprintf ("size %gin,%gin", gnuplot_size); + case "dumb" + new_stream = 1; + if (! isempty (getenv ("COLUMNS")) && ! isempty (getenv ("LINES"))) + ## Let dumb use full text screen size (minus prompt lines). + n = sprintf ("%i", -2 - length (find (sprintf ("%s", PS1) == "\n"))); + ## n = the number of times \n appears in PS1 + size_str = ["size ", getenv("COLUMNS"), ",", getenv("LINES"), n]; + else + ## Use the gnuplot default. + size_str = ""; + endif + case {"aqua", "fig", "corel"} + size_str = sprintf ("size %g %g", gnuplot_size); + case "dxf" size_str = ""; - endif - case {"aqua", "fig", "corel"} - size_str = sprintf ("size %g %g", gnuplot_size); - case "dxf" - size_str = ""; - otherwise - size_str = ""; + otherwise + size_str = ""; endswitch if ((strncmpi (term, "x11", 3) && __gnuplot_has_feature__ ("x11_figure_position")) @@ -269,32 +265,32 @@ endif ## Set the gnuplot terminal (type, enhanced, title, options & size). - term_str = sprintf ("set terminal %s", term); + term_str = ["set terminal " term]; if (! isempty (enh_str)) - term_str = sprintf ("%s %s", term_str, enh_str); + term_str = [term_str " " enh_str]; endif if (! isempty (title_str)) - term_str = sprintf ("%s %s", term_str, title_str); + term_str = [term_str " " title_str]; endif if (isempty (strfind (term, "corel"))) if (! isempty (size_str) && new_stream) ## size_str comes after other options to permit specification of ## the canvas size for terminals cdr/corel. - term_str = sprintf ("%s %s", term_str, size_str); + term_str = [term_str " " size_str]; endif if (nargin > 3 && ischar (opts_str)) ## Options must go last. - term_str = sprintf ("%s %s", term_str, opts_str); + term_str = [term_str " " opts_str]; endif else if (nargin > 3 && ischar (opts_str)) ## Options must go last. - term_str = sprintf ("%s %s", term_str, opts_str); + term_str = [term_str " " opts_str]; endif if (! isempty (size_str) && new_stream) ## size_str comes after other options to permit specification of ## the canvas size for terminals cdr/corel. - term_str = sprintf ("%s %s", term_str, size_str); + term_str = [term_str " " size_str]; endif endif if (! __gnuplot_has_feature__ ("has_termoption_dashed")) @@ -304,7 +300,7 @@ "fig", "pcl5", "mp", "next", "openstep", "pdf", \ "pdfcairo", "pngcairo", "postscript", \ "pslatex", "pstext", "svg", "tgif", "x11"}))) - term_str = sprintf ("%s dashed", term_str); + term_str = [term_str " dashed"]; endif end @@ -343,7 +339,7 @@ endfunction function term = gnuplot_default_term (plot_stream) - term = getenv ("GNUTERM"); + term = lower (getenv ("GNUTERM")); ## If not specified, guess the terminal type. if (isempty (term) || ! __gnuplot_has_terminal__ (term, plot_stream)) if (isguirunning () && __gnuplot_has_terminal__ ("qt", plot_stream)) @@ -362,35 +358,31 @@ function [term, opts] = gnuplot_trim_term (string) ## Extract the terminal type and terminal options (from print.m) - string = deblank (string); - n = strfind (string, ' '); - if (isempty (n)) - term = string; - opts = ""; - else - term = string(1:(n-1)); - opts = string((n+1):end); + string = strtrim (string); + [term, opts] = strtok (string, ' '); + if (! isempty (opts)) + opts(1) = ""; # trim extra space from strtok endif endfunction function have_enhanced = gnuplot_is_enhanced_term (plot_stream, term) - persistent enhanced_terminals; - if (isempty (enhanced_terminals)) - ## Don't include pstex, pslatex or epslatex here as the TeX commands - ## should not be interpreted in that case. - enhanced_terminals = {"aqua", "canvas", "dumb", "emf", "gif", "jpeg", ... - "pdf", "pdfcairo", "pm", "png", "pngcairo", ... - "postscript", "qt", "svg", "windows", "wxt", "x11"}; - endif + ## Don't include pstex, pslatex or epslatex here as the TeX commands + ## should not be interpreted in that case. + persistent enhanced_terminals = {"aqua", "canvas", "dumb", "emf", "gif", ... + "jpeg", "pdf", "pdfcairo", "pm", "png", ... + "pngcairo", "postscript", "qt", "svg", ... + "windows", "wxt", "x11"}; + if (nargin < 2) ## Determine the default gnuplot terminal. term = gnuplot_default_term (plot_stream); endif - have_enhanced = any (strncmp (enhanced_terminals, term, min (numel (term), 3))); + have_enhanced = any (strcmp (term, enhanced_terminals)); endfunction function ret = output_to_screen (term) - ret = any (strcmpi ({"aqua", "dumb", "pm", "qt", "windows", "wxt", "x11"}, term)); + ret = any (strcmpi (term, + {"aqua", "dumb", "pm", "qt", "windows", "wxt", "x11"})); endfunction function retval = have_non_legend_axes (h) diff -r 3b791008b88e -r 3cce6b4e0f7c scripts/plot/gnuplot_binary.in --- a/scripts/plot/gnuplot_binary.in Mon Feb 25 23:49:43 2013 -0500 +++ b/scripts/plot/gnuplot_binary.in Mon Feb 25 21:01:36 2013 -0800 @@ -22,8 +22,9 @@ ## Query or set the name of the program invoked by the plot command ## when the graphics toolkit is set to "gnuplot". Additional arguments to ## pass to the external plotting program may also be given. -## The default value is @code{"gnuplot"} without additional arguments. +## The default value is @code{"gnuplot"} with no additional arguments. ## @xref{Installation}. +## @seealso{graphics_toolkit} ## @end deftypefn ## Author: jwe @@ -39,23 +40,26 @@ endif if (nargin == 1) - if (ischar (new_prog)) - if (! isempty (new_prog)) - gp_binary = new_prog; - else - error ("gnuplot_binary: value must not be empty"); - endif - else - error ("gnuplot_binary: expecting program to be a character string"); + if (! ischar (new_prog) || isempty (new_prog)) + error ("gnuplot_binary: NEW_PROG must be a non-empty string"); endif + gp_binary = new_prog; endif if (nargin > 1) - if (iscellstr (varargin)) - gp_args = varargin; - else - error ("gnuplot_binary: expecting arguments to be character strings"); + if (! iscellstr (varargin)) + error ("gnuplot_binary: arguments must be character strings"); endif + gp_args = varargin; endif endfunction + + +%!test +%! orig_val = gnuplot_binary (); +%! old_val = gnuplot_binary ("X"); +%! assert (orig_val, old_val); +%! assert (gnuplot_binary (), "X"); +%! gnuplot_binary (orig_val); +%! assert (gnuplot_binary (), orig_val); diff -r 3b791008b88e -r 3cce6b4e0f7c scripts/plot/private/__gnuplot_get_var__.m --- a/scripts/plot/private/__gnuplot_get_var__.m Mon Feb 25 23:49:43 2013 -0500 +++ b/scripts/plot/private/__gnuplot_get_var__.m Mon Feb 25 21:01:36 2013 -0800 @@ -24,17 +24,11 @@ ## Author: Ben Abbott ## Created: 2009-02-07 -function gp_var_value = __gnuplot_get_var__ (h, gp_var_name, fmt) +function gp_var_value = __gnuplot_get_var__ (h, gp_var_name, fmt = "") - if (nargin == 0) - h = gcf (); - endif if (nargin < 2) print_usage (); endif - if (nargin < 3) - fmt = ''; - endif if (numel (h) == 1 && isfigure (h)) if (isempty (get (gcf, "__plot_stream__"))) @@ -65,8 +59,8 @@ ## Mode: 6*8*8 == 0600 [err, msg] = mkfifo (gpin_name, 6*8*8); - if (err != 0) - error ("__gnuplot_get_var__: Can not make fifo (%s)", msg); + if (err) + error ("__gnuplot_get_var__: Can not make FIFO (%s)", msg); endif endif @@ -79,18 +73,18 @@ unwind_protect ## Notes: Variables may be undefined if user closes gnuplot by "q" - ## or Alt-F4. Further, this abrupt close also requires the leading + ## or Alt-F4. Further, this abrupt close also requires the leading ## "\n" on the next line. if (use_mkfifo) fprintf (ostream, "\nset print \"%s\";\n", gpin_name); fflush (ostream); [gpin, err] = fopen (gpin_name, "r"); - if (err != 0) + if (err) ## Try a second time, and then give an error. [gpin, err] = fopen (gpin_name, "r"); endif - if (err != 0) - error ("__gnuplot_get_var__: can not open fifo"); + if (err) + error ("__gnuplot_get_var__: can not open FIFO"); endif gp_cmd = sprintf ("\nif (exists(\"%s\")) print %s; else print NaN\n", gp_var_name(1:n), gp_var_name); @@ -126,7 +120,7 @@ str = {}; while (isempty (str)) - str = char (fread (istream)'); + str = fread (istream, "*char")'; if (isempty (str)) sleep (0.05); else @@ -138,8 +132,7 @@ endif ## Strip out EOLs and the continuation character "|" - str(str=="\n") = ""; - str(str=="\r") = ""; + str(str=="\n" | str=="\r") = ""; n_continue = strfind (str, " \\ "); if (! isempty (n_continue)) str(n_continue+1) = ""; diff -r 3b791008b88e -r 3cce6b4e0f7c scripts/plot/private/__gnuplot_ginput__.m --- a/scripts/plot/private/__gnuplot_ginput__.m Mon Feb 25 23:49:43 2013 -0500 +++ b/scripts/plot/private/__gnuplot_ginput__.m Mon Feb 25 21:01:36 2013 -0800 @@ -31,6 +31,10 @@ function [x, y, button] = __gnuplot_ginput__ (f, n) + if (compare_versions (__gnuplot_version__ (), "4.0", "<=")) + error ("ginput: version %s of gnuplot not supported", gnuplot_version ()); + endif + ostream = get (f, "__plot_stream__"); if (numel (ostream) < 1) error ("ginput: stream to gnuplot not open"); @@ -46,10 +50,6 @@ ostream = ostream(1); endif - if (compare_versions (__gnuplot_version__ (), "4.0", "<=")) - error ("ginput: version %s of gnuplot not supported", gnuplot_version ()); - endif - if (nargin == 1) x = zeros (100, 1); y = zeros (100, 1); @@ -66,7 +66,7 @@ ##Mode: 6*8*8 == 0600 [err, msg] = mkfifo (gpin_name, 6*8*8); - if (err != 0) + if (err) error ("ginput: Can not open fifo (%s)", msg); endif endif @@ -84,8 +84,8 @@ fprintf (ostream, "set print \"%s\";\n", gpin_name); fflush (ostream); [gpin, err] = fopen (gpin_name, "r"); - if (err != 0) - error ("ginput: Can not open fifo (%s)", msg); + if (err) + error ("ginput: Can not open FIFO (%s)", msg); endif fputs (ostream, "pause mouse any;\n\n"); fputs (ostream, "\nif (exists(\"MOUSE_KEY\") && exists(\"MOUSE_X\")) print MOUSE_X, MOUSE_Y, MOUSE_KEY; else print \"0 0 -1\"\n"); @@ -98,7 +98,7 @@ [x(k), y(k), button(k), count] = fscanf (gpin, "%f %f %d", "C"); fclose (gpin); else - fprintf (ostream, "set print \"-\";\n"); + fputs (ostream, "set print \"-\";\n"); fflush (ostream); fputs (ostream, "pause mouse any;\n\n"); fputs (ostream, "\nif (exists(\"MOUSE_KEY\") && exists(\"MOUSE_X\")) print \"OCTAVE: \", MOUSE_X, MOUSE_Y, MOUSE_KEY; else print \"0 0 -1\"\n"); @@ -109,7 +109,7 @@ str = {}; while (isempty (str)) - str = char (fread (istream)'); + str = fread (istream, "*char")'; if (isempty (str)) sleep (0.05); else diff -r 3b791008b88e -r 3cce6b4e0f7c scripts/plot/private/__gnuplot_has_feature__.m --- a/scripts/plot/private/__gnuplot_has_feature__.m Mon Feb 25 23:49:43 2013 -0500 +++ b/scripts/plot/private/__gnuplot_has_feature__.m Mon Feb 25 21:01:36 2013 -0800 @@ -25,18 +25,18 @@ ## Created: 2009-01-27 function res = __gnuplot_has_feature__ (feature) - persistent features has_features - features = {"x11_figure_position", - "wxt_figure_size", - "transparent_patches", - "transparent_surface", - "epslatex_implies_eps_filesuffix", - "epslatexstandalone_terminal", - "screen_coordinates_for_{lrtb}margin", - "variable_GPVAL_TERMINALS", - "key_has_font_properties", - "windows_figure_position", - "has_termoption_dashed"}; + persistent features = {"x11_figure_position", + "wxt_figure_size", + "transparent_patches", + "transparent_surface", + "epslatex_implies_eps_filesuffix", + "epslatexstandalone_terminal", + "screen_coordinates_for_{lrtb}margin", + "variable_GPVAL_TERMINALS", + "key_has_font_properties", + "windows_figure_position", + "has_termoption_dashed"}; + persistent has_features; if (isempty (has_features)) try @@ -47,7 +47,7 @@ end_try_catch versions = {"4.2.5", "4.4", "4.4", "4.4", "4.2", "4.2", "4.4", "4.4", "4.4", "4.4", "4.3"}; operators = {">=", ">=", ">=", ">=", ">=", ">=", ">=", ">=", ">=", ">=", ">="}; - have_features = logical (zeros (size (features))); + have_features = false (size (features)); for n = 1 : numel (have_features) has_features(n) = compare_versions (gnuplot_version, versions{n}, operators{n}); endfor @@ -59,5 +59,6 @@ else res = has_features(n); endif + endfunction diff -r 3b791008b88e -r 3cce6b4e0f7c scripts/plot/private/__gnuplot_has_terminal__.m --- a/scripts/plot/private/__gnuplot_has_terminal__.m Mon Feb 25 23:49:43 2013 -0500 +++ b/scripts/plot/private/__gnuplot_has_terminal__.m Mon Feb 25 21:01:36 2013 -0800 @@ -25,11 +25,10 @@ ## Created: 2010-09-13 function gnuplot_supports_term = __gnuplot_has_terminal__ (term, plot_stream) - term = deblank (term); - n = find (term == " ", 1); - if (! isempty (n)) - term = term(1:n-1); - endif + + term = strtrim (term); + term = lower (strtok (term, " ")); + if (__gnuplot_has_feature__ ("variable_GPVAL_TERMINALS")) if (nargin < 2) plot_stream = __gnuplot_open_stream__ (2); @@ -59,6 +58,8 @@ "svg", "texdraw", "tgif", "tkcanvas", ... "tpic", "windows", "x11", "xlib", "xterm"}; endif - gnuplot_supports_term = any (strcmpi (available_terminals, term)); + + gnuplot_supports_term = any (strcmp (term, available_terminals)); + endfunction diff -r 3b791008b88e -r 3cce6b4e0f7c scripts/plot/private/__gnuplot_print__.m --- a/scripts/plot/private/__gnuplot_print__.m Mon Feb 25 23:49:43 2013 -0500 +++ b/scripts/plot/private/__gnuplot_print__.m Mon Feb 25 21:01:36 2013 -0800 @@ -51,15 +51,15 @@ switch (lower (opts.devopt)) case {"eps", "eps2", "epsc", "epsc2"} if (any (strcmp (opts.devopt, {"eps", "epsc"}))) - gp_opts = sprintf ("%s level1", gp_opts); + gp_opts = [gp_opts " level1"]; endif if (opts.tight_flag || ! isempty (opts.preview)) tmp_file = strcat (tmpnam (), ".eps"); eps_drawnow (opts, tmp_file, gp_opts); if (dos_shell) - cleanup = sprintf (" & del %s", strrep (tmp_file, '/', '\')); + cleanup = [" & del " strrep(tmp_file, '/', '\')]; else - cleanup = sprintf (" ; rm %s", tmp_file); + cleanup = [" ; rm " tmp_file]; endif pipeline = {sprintf("%s %s", opts.epstool_cmd (opts, tmp_file, opts.name), @@ -89,33 +89,33 @@ if (__gnuplot_has_feature__ ("epslatex_implies_eps_filesuffix")) suffix = "tex"; else - %% Gnuplot 4.0 wants a ".eps" suffix. + ## Gnuplot 4.0 wants a ".eps" suffix. suffix = "eps"; endif - local_drawnow (sprintf ("%s %s", term, gp_opts), + local_drawnow ([term " " gp_opts], strcat (name, ".", suffix), opts); case "tikz" if (__gnuplot_has_terminal__ ("tikz")) - local_drawnow (sprintf ("lua tikz %s", gp_opts), opts.name, opts); + local_drawnow (["lua tikz " gp_opts], opts.name, opts); else error (sprintf ("print:no%soutput", opts.devopt), "print.m: '%s' output is not available for gnuplot-%s", upper (opts.devopt), __gnuplot_version__ ()); endif case "svg" - local_drawnow (sprintf ("svg dynamic %s", gp_opts), opts.name, opts); + local_drawnow (["svg dynamic " gp_opts], opts.name, opts); case {"aifm", "corel", "eepic", "emf", "fig"} - local_drawnow (sprintf ("%s %s", opts.devopt, gp_opts), opts.name, opts); + local_drawnow ([opts.devopt " " gp_opts], opts.name, opts); case {"pdfcairo", "pngcairo"} if (__gnuplot_has_terminal__ (opts.devopt)) - local_drawnow (sprintf ("%s %s", opts.devopt, gp_opts), opts.name, opts); + local_drawnow ([opts.devopt " " gp_opts], opts.name, opts); else error (sprintf ("print:no%soutput", opts.devopt), "print.m: '%s' output is not available for gnuplot-%s", upper (opts.devopt), __gnuplot_version__ ()); endif case {"canvas", "dxf", "hpgl", "mf", "gif", "pstricks", "texdraw"} - local_drawnow (sprintf ("%s %s", opts.devopt, gp_opts), opts.name, opts); + local_drawnow ([opts.devopt " " gp_opts], opts.name, opts); case opts.ghostscript.device gp_opts = font_spec (opts, "devopt", "eps"); opts.ghostscript.output = opts.name; @@ -124,9 +124,9 @@ [cmd_gs, cmd_cleanup] = __ghostscript__ (opts.ghostscript); if (opts.send_to_printer || isempty (opts.name)) cmd_lpr = opts.lpr_cmd (opts); - cmd = sprintf ("%s | %s", cmd_gs, cmd_lpr); + cmd = [cmd_gs " | " cmd_lpr]; else - cmd = sprintf ("%s", cmd_gs); + cmd = cmd_gs; endif if (dos_shell) cmd = sprintf ("%s & del %s", cmd, strrep (opts.ghostscript.source, '/', '\')); @@ -135,9 +135,9 @@ endif if (! isempty (cmd_cleanup)) if (dos_shell) - pipeline = {sprintf("%s & %s", cmd, cmd_cleanup)}; + pipeline = {[cmd " & " cmd_cleanup]}; else - pipeline = {sprintf("%s ; %s", cmd, cmd_cleanup)}; + pipeline = {[cmd " ; " cmd_cleanup]}; endif else pipeline = {cmd}; @@ -170,14 +170,11 @@ function eps_drawnow (opts, epsfile, gp_opts) [h, fontsize] = get_figure_text_objs (opts); unwind_protect - for n = 1:numel (h) - set (h(n), "fontsize", 2 * fontsize{n}); - endfor - local_drawnow (sprintf ("postscript eps %s", gp_opts), epsfile, opts); + fontsize_2x = cellfun (@(x) 2*x, fontsize, "uniformoutput", false); + set (h, {"fontsize"}, fontsize_2x); + local_drawnow (["postscript eps " gp_opts], epsfile, opts); unwind_protect_cleanup - for n = 1:numel (h) - set (h(n), "fontsize", fontsize{n}); - endfor + set (h, {"fontsize"}, fontsize); end_unwind_protect endfunction @@ -203,9 +200,9 @@ switch (opts.devopt) case "cgm" if (! isempty (opts.font) && ! isempty (opts.fontsize)) - f = sprintf ("font ""%s,%d""", opts.font, opts.fontsize); + f = sprintf ('font "%s,%d"', opts.font, opts.fontsize); elseif (! isempty (opts.font)) - f = sprintf ("font ""%s""", opts.font); + f = sprintf ('font "%s"', opts.font); elseif (! isempty (opts.fontsize)) f = sprintf ("%d", opts.fontsize); endif @@ -215,39 +212,39 @@ ## Compensate for the half scale. This will produce the proper ## spacing for the requested fontsize. if (! isempty (opts.font) && ! isempty (opts.fontsize)) - f = sprintf ("font ""%s,%d""", opts.font, 2 * opts.fontsize); + f = sprintf ('font "%s,%d"', opts.font, 2 * opts.fontsize); elseif (! isempty (opts.font)) - f = sprintf ("font ""%s""", opts.font); + f = sprintf ('font "%s"', opts.font); elseif (! isempty (opts.fontsize)) f = sprintf ("%d", 2 * opts.fontsize); endif case "svg" if (! isempty (opts.font) && ! isempty (opts.fontsize)) fontsize = round (opts.fontsize * 0.75); - f = sprintf ("fname ""%s"" fsize %d", opts.font, fontsize); + f = sprintf ('fname "%s" fsize %d', opts.font, fontsize); elseif (! isempty (opts.font)) - f = sprintf ("fname ""%s""", opts.font); + f = sprintf ('fname "%s"', opts.font); elseif (! isempty (opts.fontsize)) fontsize = round (opts.fontsize * 0.75); f = sprintf ("%s fsize %d", f, fontsize); endif case "pdf" if (! isempty (opts.font) && ! isempty (opts.fontsize)) - f = sprintf ("font ""%s,%d""", opts.font, opts.fontsize); + f = sprintf ('font "%s,%d"', opts.font, opts.fontsize); elseif (! isempty (opts.font)) - f = sprintf ("font ""%s""", opts.font); + f = sprintf ('font "%s"', opts.font); elseif (! isempty (opts.fontsize)) f = sprintf ("fsize %d", f, opts.fontsize); endif case {"pdfcairo", "pngcairo"} if (! isempty (opts.font)) - f = sprintf ("font ""%s""", opts.font); + f = sprintf ('font "%s"', opts.font); endif case {"epslatex", "epslatexstandalone"} if (! isempty (opts.font) && ! isempty (opts.fontsize)) - f = sprintf ("font ""%s,%d""", opts.font, opts.fontsize); + f = sprintf ('font "%s,%d"', opts.font, opts.fontsize); elseif (! isempty (opts.font)) - f = sprintf ("font ""%s""", opts.font); + f = sprintf ('font "%s"', opts.font); elseif (! isempty (opts.fontsize)) f = sprintf ("%d", opts.fontsize); endif @@ -257,17 +254,17 @@ endif case {"gif", "jpeg", "png"} if (! isempty (opts.font) && ! isempty (opts.fontsize)) - f = sprintf ("font ""%s ,%d""", opts.font, opts.fontsize); + f = sprintf ('font "%s ,%d"', opts.font, opts.fontsize); elseif (! isempty (opts.font)) - f = sprintf ("font ""%s""", opts.font); + f = sprintf ('font "%s"', opts.font); elseif (! isempty (opts.fontsize)) - f = sprintf ("font ""%d""", opts.fontsize); + f = sprintf ('font "%d"', opts.fontsize); endif case "emf" if (! isempty (opts.font) && ! isempty (opts.fontsize)) - f = sprintf ("""%s"" %d", opts.font, opts.fontsize); + f = sprintf ('"%s" %d', opts.font, opts.fontsize); elseif (! isempty (opts.font)) - f = sprintf ("""%s""", opts.font); + f = sprintf ('"%s"', opts.font); elseif (! isempty (opts.fontsize)) f = sprintf ("%d", opts.fontsize); endif diff -r 3b791008b88e -r 3cce6b4e0f7c scripts/plot/private/__gnuplot_version__.m --- a/scripts/plot/private/__gnuplot_version__.m Mon Feb 25 23:49:43 2013 -0500 +++ b/scripts/plot/private/__gnuplot_version__.m Mon Feb 25 21:01:36 2013 -0800 @@ -30,12 +30,12 @@ persistent __version__ = ""; if (isempty (__version__)) - [status, output] = system (sprintf ("\"%s\" --version", gnuplot_binary ())); + [status, output] = system (sprintf ('"%s" --version', gnuplot_binary ())); if (status != 0) ## This message ends in a newline so that the traceback messages ## are skipped and people might actually see the message, read it, - ## comprehend it, actually take the advice it gives, and stop - ## asking us why plotting fails when gnuplot is not found. + ## comprehend it, take the advice it gives, and stop asking us + ## why plotting fails when gnuplot is not found. error ("you must have gnuplot installed to display graphics; if you have gnuplot installed in a non-standard location, see the 'gnuplot_binary' function\n"); endif output = strrep (output, "gnuplot", "");