Mercurial > hg > octave-nkf
view scripts/plot/print.m @ 5361:0ac38aea9f76
[project @ 2005-05-23 19:08:36 by jwe]
author | jwe |
---|---|
date | Mon, 23 May 2005 19:08:36 +0000 |
parents | |
children | ef053d682e42 |
line wrap: on
line source
## Copyright (C) 2001 Laurent Mazet ## ## This program is free software; it is distributed in the hope that it ## will be useful, but WITHOUT ANY WARRANTY; without even the implied ## warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See ## the GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this file; see the file COPYING. If not, write to the ## Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA ## 02111-1307, USA. ## ## Copyright (C) 1999 Daniel Heiserer ## -*- texinfo -*- ## @deftypefn {Function File} {} print (@var{filename}, @var{options}) ## ## Print a graph, or save it to a file ## ## @var{filename} defines the file name of the output file. If no ## filename is specified, output is sent to the printer. ## ## @var{options}: ## @table @code ## @item -P@var{printer} ## Set the @var{printer} name to which the graph is sent if no ## @var{filename} is specified. ## @item -color ## @itemx -mono ## Monochrome or colour lines. ## @item -solid ## @itemx -dashed ## Solid or dashed lines. ## @item -portrait ## @itemx -landscape ## Plot orientation, as returned by "orient". ## @item -d@var{device} ## Output device, where @var{device} is one of: ## @table @code ## @item ps ## @itemx ps2 ## @itemx psc ## @itemx psc2 ## Postscript (level 1 and 2, mono and color) ## @item eps ## @itemx eps2 ## @itemx epsc ## @itemx epsc2 ## Encapsulated postscript (level 1 and 2, mono and color) ## @item ill ## @itemx aifm ## Adobe Illustrator ## @item cdr ## @itemx corel ## CorelDraw ## @item hpgl ## HP plotter language ## @item fig ## XFig ## @item dxf ## AutoCAD ## @item mf ## Metafont ## @item png ## Portable network graphics ## @item pbm ## PBMplus ## @end table ## ## Other devices are supported by "convert" from ImageMagick. Type ## system("convert") to see what formats are available. ## ## If the device is omitted, it is inferred from the file extension, ## or if there is no filename it is sent to the printer as postscript. ## ## @item -F@var{fontname} ## @itemx -F@var{fontname}:@var{size} ## @itemx -F:@var{size} ## @var{fontname} set the postscript font (for use with postscript, ## aifm, corel and fig). By default, 'Helvetica' is set for PS/Aifm, ## and 'SwitzerlandLight' for Corel. It can also be 'Times-Roman'. ## @var{size} is given in points. @var{fontname} is ignored for the ## fig device. ## @end table ## ## The filename and options can be given in any order. ## ## If you are using Octave 2.1.x or above, command("print") will change ## print from a function to a command, so instead of typing ## print("-FTimes-Roman:14", "-dashed", "-depsc", "out.ps") ## you can type ## print -FTimes-Roman:14 -dashed -depsc out.ps ## ## See also: orient, command ## @end deftypefn ## Author: Daniel Heiserer <Daniel.heiserer@physik.tu-muenchen.de> ## 2001-03-23 Laurent Mazet <mazet@crm.mot.com> ## * simplified interface: guess the device from the extension ## * font support ## 2001-03-25 Paul Kienzle <pkienzle@kienzle.powernet.co.uk> ## * add unwind_protect ## * use tmpnam to generate temporary name ## * move "set term" before "set output" as required by gnuplot ## * more options, and flexible options ## 2001-03-29 Laurent Mazet <mazet@crm.mot.com> ## * add solid and dashed options ## * change PBMplus device ## * add Corel device ## * take care of the default terminal settings to restore them. ## * add color, mono, dashed and solid support for printing and convert. ## * add orientation for printing. ## * create a .ps for printing (avoid some filtering problems). ## * default printing is mono, default convert is color. ## * add font size support. ## 2001-03-30 Laurent Mazet <mazet@crm.mot.com> ## * correct correl into corel ## * delete a irrelevant test ## * check for convert before choosing the ouput device ## 2001-03-31 Paul Kienzle <pkienzle@kienzle.powernet.co.uk> ## * use -Ffontname:size instead of -F"fontname size" ## * add font size support to fig option ## * update documentation ## 2003-10-01 Laurent Mazet <mazet@crm.mot.com> ## * clean documentation function print(varargin) ## take care of the settings we had before origterm = gget("terminal"); origout = gget("output"); ## End of line trmination for __gnuplot_raw__ command strings. endl = ";\n"; _automatic_replot = automatic_replot; ## take care of the default terminal settings to restore them. terminal_default = ""; orientation = orient; use_color = 0; # 0=default, -1=mono, +1=color force_solid = 0; # 0=default, -1=dashed, +1=solid fontsize = font = name = devopt = printer = ""; va_arg_cnt = 1; for i=1:nargin arg = nth (varargin, va_arg_cnt++); if isstr(arg) if strcmp(arg, "-color") use_color = 1; elseif strcmp(arg, "-mono") use_color = -1; elseif strcmp(arg, "-solid") force_solid = 1; elseif strcmp(arg, "-dashed") force_solid = -1; elseif strcmp(arg, "-portrait") orientation = "portrait"; elseif strcmp(arg, "-landscape") orientation = "landscape"; elseif length(arg) > 2 && arg(1:2) == "-d" devopt = arg(3:length(arg)); elseif length(arg) > 2 && arg(1:2) == "-P" printer = arg; elseif length(arg) > 2 && arg(1:2) == "-F" idx = rindex(arg, ":"); if (idx) font = arg(3:idx-1); fontsize = arg(idx+1:length(arg)); else font = arg(3:length(arg)); endif elseif length(arg) >= 1 && arg(1) == "-" error([ "print: unknown option ", arg ]); elseif length(arg) > 0 name = arg; endif else error("print: expects string options"); endif endfor doprint = isempty(name); if doprint if isempty(devopt) printname = [ tmpnam, ".ps" ]; else printname = [ tmpnam, ".", devopt ]; endif name = printname; endif if isempty(devopt) dot = rindex(name, "."); if (dot == 0) error ("print: no format specified"); else dev = tolower(name(dot+1:length(name))); endif else dev = devopt; endif if strcmp(dev, "ill") dev = "aifm"; elseif strcmp(dev, "cdr") dev = "corel"; endif ## check if we have to use convert dev_list = [" aifm corel fig png pbm dxf mf hpgl", ... " ps ps2 psc psc2 eps eps2 epsc epsc2 " ]; convertname = ""; if isempty(findstr(dev_list , [ " ", dev, " " ])) if !isempty(devopt) convertname = [ devopt ":" name ]; else convertname = name; endif dev = "epsc"; name = [ tmpnam, ".eps" ]; endif unwind_protect automatic_replot = 0; if strcmp(dev, "ps") || strcmp(dev, "ps2") ... || strcmp(dev, "psc") || strcmp(dev, "psc2") ... || strcmp(dev, "epsc") || strcmp(dev, "epsc2") ... || strcmp(dev, "eps") || strcmp(dev, "eps2") ## Various postscript options ## FIXME: Do we need this? DAS ##__gnuplot_set__ term postscript terminal_default = gget ("terminal"); if dev(1) == "e" options = "eps "; else options = [ orientation, " " ]; endif options = [ options, "enhanced " ]; if any( dev == "c" ) || use_color > 0 if force_solid < 0 options = [ options, "color dashed " ]; else options = [ options, "color solid " ]; endif else if force_solid > 0 options = [ options, "mono solid " ]; else options = [ options, "mono dashed " ]; endif endif if !isempty(font) options = [ options, "\"", font, "\" " ]; endif if !isempty(fontsize) options = [ options, " ", fontsize ]; endif __gnuplot_raw__ (["set term postscript ", options, endl]); elseif strcmp(dev, "aifm") || strcmp(dev, "corel") ## Adobe Illustrator, CorelDraw ## FIXME: Do we need it? DAS ## eval(sprintf ("__gnuplot_set__ term %s", dev)); terminal_default = gget ("terminal"); if (use_color >= 0) options = " color"; else options = " mono"; endif if !isempty(font) options = [ options, " \"" , font, "\"" ]; endif if !isempty(fontsize) options = [ options, " ", fontsize ]; endif __gnuplot_raw__ (["set term ", dev, " ", options, endl]); elseif strcmp(dev, "fig") ## XFig ## FIXME: Do we need it? DAS ## __gnuplot_set__ term fig terminal_default = gget ("terminal"); options = orientation; if (use_color >= 0) options = " color"; else options = " mono"; endif if !isempty(fontsize) options = [ options, " fontsize ", fontsize ]; endif __gnuplot_raw__ (["set term fig ", options, endl]); elseif strcmp(dev, "png") || strcmp(dev, "pbm") ## Portable network graphics, PBMplus ## FIXME: Do we need it? DAS ## eval(sprintf ("__gnuplot_set__ term %s", dev)); terminal_default = gget ("terminal"); ## FIXME ## New PNG interface takes color as "xRRGGBB" where x is the literal character ## 'x' and 'RRGGBB' are the red, green and blue components in hex. ## For now we just ignore it and use default. ## The png terminal now is so rich with options, that one perhaps ## has to write a separate printpng.m function. ## DAS ## ## if (use_color >= 0) ## eval (sprintf ("__gnuplot_set__ term %s color medium", dev)); ##else ##eval (sprintf ("__gnuplot_set__ term %s mono medium", dev)); ##endif __gnuplot_raw__ ("set term png large;\n") elseif strcmp(dev,"dxf") || strcmp(dev,"mf") || strcmp(dev, "hpgl") ## AutoCad DXF, METAFONT, HPGL __gnuplot_raw__ (["set terminal ", dev, endl]); endif; ## Gnuplot expects " around output file name __gnuplot_raw__ (["set output \"", name, "\"", endl]); __gnuplot_replot__ unwind_protect_cleanup ## Restore init state if ! isempty (terminal_default) __gnuplot_raw__ (["set terminal ", terminal_default, endl]); endif __gnuplot_raw__ (["set terminal ", origterm, endl]); if isempty (origout) __gnuplot_raw__ ("set output;\n") else ## Gnuplot expects " around output file name __gnuplot_raw__ (["set output \"", origout, "\"", endl]); end __gnuplot_replot__ automatic_replot = _automatic_replot ; end_unwind_protect if !isempty(convertname) command = [ "convert '", name, "' '", convertname, "'" ]; [output, errcode] = system (command); unlink (name); if (errcode) error ("print: could not convert"); endif endif ## FIXME: This looks like a dirty, Unix-specific hack ## DAS if doprint system(sprintf ("lpr %s '%s'", printer, printname)); unlink(printname); endif endfunction