annotate toolboxes/MIRtoolbox1.3.2/somtoolbox/rep_utils.m @ 0:e9a9cd732c1e tip

first hg version after svn
author wolffd
date Tue, 10 Feb 2015 15:05:51 +0000
parents
children
rev   line source
wolffd@0 1 function aout = rep_utils(action,fmt,fid)
wolffd@0 2
wolffd@0 3 %REP_UTILS Utilities for print reports and report elements.
wolffd@0 4 %
wolffd@0 5 % aout = rep_utils(action,fmt,[fid])
wolffd@0 6 %
wolffd@0 7 % Input and output arguments ([]'s are optional):
wolffd@0 8 % action (string) action identifier
wolffd@0 9 % (cell array) {action,par1,par2,...}
wolffd@0 10 % the action identifier, followed by action
wolffd@0 11 % parameters
wolffd@0 12 % [fmt] (string) format of output, 'txt' by default
wolffd@0 13 % [fid] (scalar) output file id, by default NaN in which
wolffd@0 14 % case output is not written, only returned
wolffd@0 15 % in aout
wolffd@0 16 %
wolffd@0 17 % aout (varies) output of the action
wolffd@0 18 %
wolffd@0 19 % Here are the actions and their arguments:
wolffd@0 20 % 'printlines' par1 (cellstr) print par1, each cell on a new line
wolffd@0 21 % 'header' par1 (string) print document header using par1 as title
wolffd@0 22 % 'footer' print document footer
wolffd@0 23 % 'compile' par1 (string) compile the named document (only 'ps' and 'pdf')
wolffd@0 24 % 'inserttable' par1 (struct) print given table
wolffd@0 25 % par2 (scalar) print lines between rows if par2=1
wolffd@0 26 % par3 (scalar) use longtable format (only 'ps' and 'pdf')
wolffd@0 27 % 'printfigure' par1 (string) print current figure to file, par1 = filename
wolffd@0 28 % par2 (scalar) used resolution (150 dpi by default)
wolffd@0 29 % par3 (scalar) if par3=1, insert figure in minipage
wolffd@0 30 % 'insertfigure' par1 (string) insert figure to report, par1 = filename of figure
wolffd@0 31 % par2 (vector) size 2 x 1, size of figure relative to page size
wolffd@0 32 % NaN = automatic scaling
wolffd@0 33 % par3 (scalar) if par3=1, insert figure in minipage (only 'ps' and 'pdf')
wolffd@0 34 % 'insertbreak' insert paragraph break into report
wolffd@0 35 %
wolffd@0 36 % See also REP_STATS.
wolffd@0 37
wolffd@0 38 % Contributed to SOM Toolbox 2.0, January 2nd, 2002 by Juha Vesanto
wolffd@0 39 % Copyright (c) by Juha Vesanto
wolffd@0 40 % http://www.cis.hut.fi/projects/somtoolbox/
wolffd@0 41
wolffd@0 42 % Version 2.0beta juuso 020102
wolffd@0 43
wolffd@0 44 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
wolffd@0 45 %% input arguments
wolffd@0 46
wolffd@0 47 pars = {''};
wolffd@0 48 if iscell(action),
wolffd@0 49 if length(action)>1, pars = action(2:end); end
wolffd@0 50 action = action{1};
wolffd@0 51 end
wolffd@0 52
wolffd@0 53 if nargin<2 | isempty(fmt), fmt = 'txt'; end
wolffd@0 54 global REPORT_OUTPUT_FMT
wolffd@0 55 REPORT_OUTPUT_FMT = fmt;
wolffd@0 56
wolffd@0 57 if nargin<3 | isempty(fid), fid = NaN; end
wolffd@0 58
wolffd@0 59 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
wolffd@0 60 %% action
wolffd@0 61
wolffd@0 62 aout = [];
wolffd@0 63 printable = 0;
wolffd@0 64
wolffd@0 65 switch action,
wolffd@0 66 case 'printlines',
wolffd@0 67 aout = pars{1};
wolffd@0 68 case 'header',
wolffd@0 69 switch fmt,
wolffd@0 70 case {'ps','pdf'}, aout = tex_startdocument(pars{1});
wolffd@0 71 case 'html', aout = html_startpage(pars{1});
wolffd@0 72 case 'txt', aout = cell(0);
wolffd@0 73 end
wolffd@0 74 printable = 1;
wolffd@0 75 case 'footer',
wolffd@0 76 switch fmt,
wolffd@0 77 case {'ps','pdf'}, aout = tex_enddocument;
wolffd@0 78 case 'html', aout = html_endpage;
wolffd@0 79 case 'txt', aout = cell(0);
wolffd@0 80 end
wolffd@0 81 printable = 1;
wolffd@0 82 case 'compile', aout = compiledocument(pars{1});
wolffd@0 83 case 'inserttable', aout = inserttable(pars{:}); printable = 1;
wolffd@0 84 case 'printfigure', printfigure(pars{:});
wolffd@0 85 case 'insertfigure', aout = insertfigure(pars{:}); printable = 1;
wolffd@0 86 case 'insertbreak', aout = insertbreak; printable = 1;
wolffd@0 87 case 'joinstr', aout = joinstr(pars{:}); printable = 1;
wolffd@0 88 case 'rulestr', aout = rulestr(pars{:}); printable = 1;
wolffd@0 89 case 'c_and_p_str', aout = c_and_p_str(pars{:}); printable = 1;
wolffd@0 90 case 'p_str', aout = p_str(pars{:}); printable = 1;
wolffd@0 91 end
wolffd@0 92
wolffd@0 93 % if output file is given, print lines
wolffd@0 94 if ~isnan(fid) & printable,
wolffd@0 95 if ~iscell(aout), aout = {aout}; end
wolffd@0 96 for i = 1:length(aout), fprintf(fid,'%s\n',fmtline(aout{i})); end
wolffd@0 97 end
wolffd@0 98
wolffd@0 99 return;
wolffd@0 100
wolffd@0 101 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
wolffd@0 102 %% subfunctions
wolffd@0 103
wolffd@0 104 %% simple formatter strings
wolffd@0 105
wolffd@0 106 function s = joinstr(cs, sep1, sep2)
wolffd@0 107 if nargin==1, sep1 = ', '; sep2 = ' and '; end
wolffd@0 108 if nargin<3, sep2 = sep1; end
wolffd@0 109 if isempty(cs),
wolffd@0 110 s = '';
wolffd@0 111 elseif strcmp(sep1,'\n'),
wolffd@0 112 if size(cs,1)==1, cs = cs'; end
wolffd@0 113 s = char(cs);
wolffd@0 114 else
wolffd@0 115 s = cs{1};
wolffd@0 116 for i=2:length(cs)-1, s = [s sep1 cs{i}]; end
wolffd@0 117 if length(cs)>1, s = [s sep2 cs{end}]; end
wolffd@0 118 end
wolffd@0 119 return;
wolffd@0 120
wolffd@0 121 function str = c_and_p_str(n,m)
wolffd@0 122
wolffd@0 123 % return a string of form # (%), e.g. '23 (12%)'
wolffd@0 124 if n==m, p = '100';
wolffd@0 125 elseif n==0, p = '0';
wolffd@0 126 else p = sprintf('%.2g',100*n/m);
wolffd@0 127 end
wolffd@0 128 str = sprintf('%d (%s%%)',round(n),p);
wolffd@0 129 return;
wolffd@0 130
wolffd@0 131 function str = p_str(p)
wolffd@0 132 % return a string of form %, e.g. '12%'
wolffd@0 133 if round(p*100)>=100, p = sprintf('%3g',100*p);
wolffd@0 134 elseif abs(p)<eps, p = '0';
wolffd@0 135 else p = sprintf('%.2g',100*p);
wolffd@0 136 end
wolffd@0 137 str = sprintf('%s%%',p);
wolffd@0 138 return;
wolffd@0 139
wolffd@0 140 function cs = rulestr(sR,cnames)
wolffd@0 141 global REPORT_OUTPUT_FMT
wolffd@0 142 switch REPORT_OUTPUT_FMT
wolffd@0 143 case {'ps','pdf'}, [leq,geq,infi,m,less,in] = deal('\leq','\geq','\inf','$','<','\in');
wolffd@0 144 case 'html', [leq,geq,infi,m,less,in] = deal('&lt;=','&gt;=','Inf',' ','&lt;',' ');
wolffd@0 145 case 'txt', [leq,geq,infi,m,less,in] = deal('<=','>=','inf',' ','<','');
wolffd@0 146 end
wolffd@0 147 nr = length(sR);
wolffd@0 148 cs = cell(nr,1);
wolffd@0 149 fmt = '%.2g';
wolffd@0 150 if nargin<2, cnames = {sR.name}; end
wolffd@0 151 if isempty(cnames), cnames = cell(nr,1); cnames(:) = {''}; end
wolffd@0 152 for i=1:nr,
wolffd@0 153 low = sR(i).low;
wolffd@0 154 high = sR(i).high;
wolffd@0 155 switch isfinite(low) + 2*isfinite(high),
wolffd@0 156 case 0, cs{i} = [cnames{i} ' ' 'any'];
wolffd@0 157 case 1, cs{i} = [cnames{i} ' ' m geq sprintf(fmt,low) m];
wolffd@0 158 case 2, cs{i} = [cnames{i} ' ' m less sprintf(fmt,high) m];
wolffd@0 159 case 3, cs{i} = [cnames{i} ' ' m in '[' sprintf(fmt,low) ',' sprintf(fmt,high) ']' m];
wolffd@0 160 end
wolffd@0 161 end
wolffd@0 162 return;
wolffd@0 163
wolffd@0 164 %% print figure
wolffd@0 165
wolffd@0 166 function imgfmt = fmt2imgfmt
wolffd@0 167 global REPORT_OUTPUT_FMT
wolffd@0 168 switch REPORT_OUTPUT_FMT,
wolffd@0 169 case 'ps', imgfmt = 'ps';
wolffd@0 170 case 'pdf', imgfmt = 'pdf';
wolffd@0 171 case 'html', imgfmt = 'png';
wolffd@0 172 case 'txt', imgfmt = '';
wolffd@0 173 end
wolffd@0 174 return;
wolffd@0 175
wolffd@0 176 function printfigure(fname,resolution)
wolffd@0 177 if nargin<2, resolution = 150; end
wolffd@0 178 fnameps = [fname '.ps'];
wolffd@0 179 switch fmt2imgfmt,
wolffd@0 180 case 'ps',
wolffd@0 181 print('-dpsc2',fnameps);
wolffd@0 182 case 'pdf',
wolffd@0 183 print('-dpsc2',fnameps);
wolffd@0 184 eval(sprintf('!ps2pdf %s',fnameps));
wolffd@0 185 case 'gif',
wolffd@0 186 print('-dpsc2',fnameps);
wolffd@0 187 cmd = 'pstogif';
wolffd@0 188 opt = sprintf('-depth 1 -density %d',resolution);
wolffd@0 189 unix(sprintf('%s %s -out %s %s',cmd,opt,[fname '.gif'],fnameps));
wolffd@0 190 case 'png',
wolffd@0 191 opt = sprintf('-r%d',resolution);
wolffd@0 192 print('-dpng',opt,[fname '.png']);
wolffd@0 193 end
wolffd@0 194 return;
wolffd@0 195
wolffd@0 196 %% headers and footers, and compilation
wolffd@0 197
wolffd@0 198 function cs = tex_startdocument(title)
wolffd@0 199 % tex document headers
wolffd@0 200 global REPORT_OUTPUT_FMT
wolffd@0 201 cs = cell(0);
wolffd@0 202 cs{end+1} = '\documentclass[10pt,a4paper]{article}';
wolffd@0 203 cs{end+1} = '\usepackage[dvips]{epsfig,graphicx,color}';
wolffd@0 204 cs{end+1} = '\usepackage{float,graphics,subfigure}';
wolffd@0 205 cs{end+1} = '\usepackage{multirow,rotating,portland,lscape,longtable,pifont}';
wolffd@0 206 cs{end+1} = '\usepackage[T1]{fontenc}';
wolffd@0 207 if strcmp(REPORT_OUTPUT_FMT,'pdf'), cs{end+1} = '\usepackage{pslatex}'; end
wolffd@0 208 cs{end+1} = '\usepackage[english]{babel}';
wolffd@0 209
wolffd@0 210 cs{end+1} = '\oddsidemargin 0 mm';
wolffd@0 211 cs{end+1} = '\evensidemargin 0 mm';
wolffd@0 212 cs{end+1} = '\textwidth 17 cm';
wolffd@0 213 cs{end+1} = '\topmargin 0 mm';
wolffd@0 214 cs{end+1} = '\textheight 21 cm';
wolffd@0 215 cs{end+1} = '\voffset 0 mm';
wolffd@0 216
wolffd@0 217 cs{end+1} = '\begin{document}';
wolffd@0 218 cs{end+1} = ['\title{' title '}'];
wolffd@0 219 cs{end+1} = '\maketitle';
wolffd@0 220 %cs{end+1} = '\tableofcontents';
wolffd@0 221 %cs{end+1} = '\clearpage';
wolffd@0 222 return;
wolffd@0 223
wolffd@0 224 function cs = tex_enddocument
wolffd@0 225 cs = cell(0);
wolffd@0 226 cs{end+1} = '\end{document}';
wolffd@0 227 return;
wolffd@0 228
wolffd@0 229 function cs = html_startpage(title)
wolffd@0 230 % print HTML document headers
wolffd@0 231 cs = cell(0);
wolffd@0 232 cs{end+1} = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">';
wolffd@0 233 cs{end+1} = '<HTML>';
wolffd@0 234 cs{end+1} = '<HEAD>';
wolffd@0 235 cs{end+1} = sprintf(' <TITLE>%s</TITLE>',title);
wolffd@0 236 cs{end+1} = '</HEAD>';
wolffd@0 237 cs{end+1} = '<BODY bgcolor=white vlink="#000033" link="#0000ff" text="#000000">';
wolffd@0 238 if ~isempty(title), cs{end+1} = sprintf('<H1>%s</H1>',title); end
wolffd@0 239 return;
wolffd@0 240
wolffd@0 241 function cs = html_endpage
wolffd@0 242 % print HTML document footers
wolffd@0 243 cs = cell(0);
wolffd@0 244 cs{end+1} = '<P><HR>';
wolffd@0 245 cs{end+1} = '</BODY>';
wolffd@0 246 cs{end+1} = '</HTML>';
wolffd@0 247 return;
wolffd@0 248
wolffd@0 249 function files = compiledocument(filename)
wolffd@0 250 global REPORT_OUTPUT_FMT
wolffd@0 251 switch REPORT_OUTPUT_FMT,
wolffd@0 252 case 'pdf',
wolffd@0 253 eval(sprintf('!pdflatex --interaction batchmode %s.tex',filename));
wolffd@0 254 eval(sprintf('!pdflatex --interaction batchmode %s.tex',filename));
wolffd@0 255 %eval(sprintf('!acroread %s.pdf &',filename));
wolffd@0 256 files = {[filename '.aux'],[filename '.log'],[filename '.out'],[filename '.pdf']};
wolffd@0 257 case 'ps',
wolffd@0 258 eval(sprintf('!latex --interaction batchmode %s.tex',filename));
wolffd@0 259 eval(sprintf('!latex --interaction batchmode %s.tex',filename));
wolffd@0 260 eval(sprintf('!dvips %s.dvi',filename));
wolffd@0 261 eval(sprintf('!ps2pdf %s.ps',filename));
wolffd@0 262 %eval(sprintf('!ghostview %s.ps &',filename));
wolffd@0 263 files = {[filename '.aux'],[filename '.log'],[filename '.out'],[filename '.dvi'],[filename '.pdf']};
wolffd@0 264 case 'html',
wolffd@0 265 case 'txt',
wolffd@0 266 end
wolffd@0 267 return;
wolffd@0 268
wolffd@0 269
wolffd@0 270 function vstr = defaultformat(val)
wolffd@0 271 global REPORT_OUTPUT_FMT
wolffd@0 272 if ischar(val), vstr = val;
wolffd@0 273 elseif iscellstr(val), vstr = char(val);
wolffd@0 274 elseif isempty(val), vstr = '';
wolffd@0 275 elseif isnumeric(val),
wolffd@0 276 if val==round(val), fmt = '%d'; else fmt = '%.3g'; end
wolffd@0 277 if abs(val)<=eps, vstr = '0'; else vstr = sprintf(fmt,val); end
wolffd@0 278 elseif isstruct(val) & isfield(val,'values') & isfield(val,'headers'),
wolffd@0 279 % a table
wolffd@0 280 vstr = joinstr(inserttable(val,0),'\n');
wolffd@0 281 if any(strcmp(REPORT_OUTPUT_FMT,{'ps','pdf'})),
wolffd@0 282 vstr= inserttominipage(vstr);
wolffd@0 283 end
wolffd@0 284 else
wolffd@0 285 vstr = ''; fprintf(1,'defaultformat unable to handle input\n');
wolffd@0 286 whos val
wolffd@0 287 end
wolffd@0 288 return;
wolffd@0 289
wolffd@0 290 %% report elements (list, table, image, link)
wolffd@0 291
wolffd@0 292 function str = fmtline(str)
wolffd@0 293 % replace some formatting elements depeding on output format
wolffd@0 294 global REPORT_OUTPUT_FMT
wolffd@0 295 if isempty(str), str = ''; return; end
wolffd@0 296 switch REPORT_OUTPUT_FMT,
wolffd@0 297 case {'ps','pdf'},
wolffd@0 298 str = strrep(str,'<B>', '{\bf ');
wolffd@0 299 str = strrep(str,'<I>', '{\em ');
wolffd@0 300 str = strrep(str,'<TT>', '{\tt ');
wolffd@0 301 str = strrep(str,'</B>', '}');
wolffd@0 302 str = strrep(str,'</I>', '}');
wolffd@0 303 str = strrep(str,'</TT>','}');
wolffd@0 304 str = strrep(str,'#','\#');
wolffd@0 305 str = strrep(str,'%','\%');
wolffd@0 306 case 'html', % nil
wolffd@0 307 case 'txt',
wolffd@0 308 str = strrep(str,'<B>', '*');
wolffd@0 309 str = strrep(str,'<I>', '*');
wolffd@0 310 str = strrep(str,'<TT>', '');
wolffd@0 311 str = strrep(str,'</B>', '*');
wolffd@0 312 str = strrep(str,'</I>', '*');
wolffd@0 313 str = strrep(str,'</TT>','');
wolffd@0 314 end
wolffd@0 315 return;
wolffd@0 316
wolffd@0 317 function cs = insertbreak
wolffd@0 318 global REPORT_OUTPUT_FMT
wolffd@0 319 cs = cell(0);
wolffd@0 320 switch REPORT_OUTPUT_FMT
wolffd@0 321 case {'ps','pdf'}, cs{end+1} = '';
wolffd@0 322 case 'html', cs{end+1} = '<P>';
wolffd@0 323 case 'txt', cs{end+1} = '';
wolffd@0 324 end
wolffd@0 325 return;
wolffd@0 326
wolffd@0 327 function insertlist(list,enum)
wolffd@0 328 % make list
wolffd@0 329 global REPORT_OUTPUT_FMT
wolffd@0 330 if nargin<2, enum = 0; end
wolffd@0 331 cs = cell(0);
wolffd@0 332 switch REPORT_OUTPUT_FMT
wolffd@0 333 case {'ps','pdf'},
wolffd@0 334 if enum, tag = 'enumerate'; else tag = 'itemize'; end
wolffd@0 335 starttag = ['\begin{' tag '}'];
wolffd@0 336 listtag = '\item ';
wolffd@0 337 endtag = ['\end{' tag '}'];
wolffd@0 338 case 'html',
wolffd@0 339 if enum, tag = 'OL'; else tag = 'UL'; end
wolffd@0 340 starttag = ['<' tag '>'];
wolffd@0 341 listtag = '<LI>';
wolffd@0 342 endtag = ['</' tag '>'];
wolffd@0 343 case 'txt',
wolffd@0 344 starttag = '';
wolffd@0 345 listtag = '- ';
wolffd@0 346 endtag = '';
wolffd@0 347 end
wolffd@0 348 cs{end+1} = starttag;
wolffd@0 349 for i=1:length(list), cs{end+1} = sprintf('%s %s',listtag,list{i}); end
wolffd@0 350 cs{end+1} = endtag;
wolffd@0 351 return;
wolffd@0 352
wolffd@0 353 function csout = tablerow(cs,emp,span)
wolffd@0 354 % construct one table row
wolffd@0 355 global REPORT_OUTPUT_FMT
wolffd@0 356 if nargin<2 | isempty(emp), emp = 'none'; end
wolffd@0 357 if nargin<3 | isempty(span), span = ones(length(cs),2); end
wolffd@0 358 rowspan = span(:,1); colspan = span(:,2);
wolffd@0 359 switch emp,
wolffd@0 360 case 'bold', emp1 = '<B>'; emp2 = '</B>';
wolffd@0 361 case 'italic', emp1 = '<I>'; emp2 = '</I>';
wolffd@0 362 case 'fixed', emp1 = '<TT>'; emp2 = '</TT>';
wolffd@0 363 case 'none', emp1 = ''; emp2 = '';
wolffd@0 364 case 'header', emp1 = ''; emp2 = ''; tag = 'TH';
wolffd@0 365 end
wolffd@0 366 csout = cell(0);
wolffd@0 367 switch REPORT_OUTPUT_FMT,
wolffd@0 368 case {'pdf','ps'},
wolffd@0 369 %switch emp,
wolffd@0 370 % case 'bold', emp1 = '{\bf '; emp2 = '}';
wolffd@0 371 % case 'italic', emp1 = '{\em '; emp2 = '}';
wolffd@0 372 % case 'fixed', emp1 = '{\tt '; emp2 = '}';
wolffd@0 373 % case 'none', emp1 = ''; emp2 = '';
wolffd@0 374 %end
wolffd@0 375 s0 = '';
wolffd@0 376 for i=1:length(cs),
wolffd@0 377 if rowspan(i) & colspan(i),
wolffd@0 378 sp1 = ''; sp2 = '';
wolffd@0 379 if colspan(i)>1, sp1 = [sp1 ' \multicolumn{' num2str(colspan(i)) '}{|c|}{']; sp2 = [sp2 '}']; end
wolffd@0 380 if rowspan(i)>1, sp1 = [sp1 ' \multirow{' num2str(rowspan(i)) '}{2cm}{']; sp2 = [sp2 '}']; end
wolffd@0 381 s = s0;
wolffd@0 382 content = cellstr(defaultformat(cs{i}));
wolffd@0 383 csout{end+1} = [s sp1 emp1 content{1}];
wolffd@0 384 for j=2:length(content), csout{end+1} = content{j}; end
wolffd@0 385 csout{end} = [csout{end} emp2 sp2];
wolffd@0 386 s0 = ' & ';
wolffd@0 387 end
wolffd@0 388 end
wolffd@0 389 csout{end} = [csout{end} ' \\'];
wolffd@0 390 case 'html',
wolffd@0 391 tag = 'TD';
wolffd@0 392 csout{end+1} = '<TR>';
wolffd@0 393 for i=1:length(cs),
wolffd@0 394 if rowspan(i) & colspan(i),
wolffd@0 395 sp = '';
wolffd@0 396 if rowspan(i)>1, sp = [sp ' ROWSPAN=' num2str(rowspan(i))]; end
wolffd@0 397 if colspan(i)>1, sp = [sp ' COLSPAN=' num2str(colspan(i))]; end
wolffd@0 398 s = sprintf('<%s%s>%s',tag,sp,emp1);
wolffd@0 399 content = cellstr(defaultformat(cs{i}));
wolffd@0 400 csout{end+1} = [s content{1}];
wolffd@0 401 for j=2:length(content), csout{end+1} = content{j}; end
wolffd@0 402 csout{end} = [csout{end} emp2 '</' tag '>'];
wolffd@0 403 end
wolffd@0 404 end
wolffd@0 405 csout{end+1} = '</TR>';
wolffd@0 406 case 'txt',
wolffd@0 407 for i=1:length(cs), csout{end+1} = defaultformat(cs{i}); end
wolffd@0 408 end
wolffd@0 409 return;
wolffd@0 410
wolffd@0 411 function cs = inserttable(sTable,rowlines,long)
wolffd@0 412 % put table contents to cellstr
wolffd@0 413 global REPORT_OUTPUT_FMT
wolffd@0 414 if nargin<2, rowlines = 1; end
wolffd@0 415 if nargin<3, long = 0; end
wolffd@0 416 [rows cols] = size(sTable.values);
wolffd@0 417 cs = cell(0);
wolffd@0 418 if isempty(sTable.colfmt), cf = 'c'; sTable.colfmt = cf(ones(1,cols)); end
wolffd@0 419 if isempty(sTable.span), sTable.span = ones([rows cols 2]); end
wolffd@0 420 switch REPORT_OUTPUT_FMT
wolffd@0 421 case {'ps','pdf','tex','latex'}
wolffd@0 422 li1 = ' \hline';
wolffd@0 423 if rowlines>0, li2 = li1; li3 = li1;
wolffd@0 424 elseif rowlines==0, li2 = ''; li3 = li1;
wolffd@0 425 else li1 = ''; li2 = ''; li3 = '';
wolffd@0 426 end
wolffd@0 427 if long, tbl = 'longtable'; else tbl = 'tabular'; end
wolffd@0 428 cs{end+1} = ['\begin{' tbl '}{' sTable.colfmt '}' li1];
wolffd@0 429 if ~isempty(sTable.headers),
wolffd@0 430 row = tablerow(sTable.headers,'bold');
wolffd@0 431 for i=1:length(row), cs{end+1} = row{i}; end
wolffd@0 432 cs{end} = [cs{end} li1 li2];
wolffd@0 433 end
wolffd@0 434 for i=1:rows,
wolffd@0 435 row = tablerow(sTable.values(i,:),'',squeeze(sTable.span(i,:,:)));
wolffd@0 436 for i=1:length(row), cs{end+1} = row{i}; end
wolffd@0 437 cs{end} = [cs{end} li2];
wolffd@0 438 end
wolffd@0 439 if ~rowlines, cs{end} = [cs{end} li3]; end
wolffd@0 440 cs{end+1} = ['\end{' tbl '}'];
wolffd@0 441 case 'html'
wolffd@0 442 cs{end+1} = ['<TABLE BORDER=' num2str(rowlines>0) '>'];
wolffd@0 443 if ~isempty(sTable.headers),
wolffd@0 444 row = tablerow(sTable.headers,'header');
wolffd@0 445 for i=1:length(row), cs{end+1} = row{i}; end
wolffd@0 446 end
wolffd@0 447 for i=1:rows,
wolffd@0 448 row = tablerow(sTable.values(i,:),'',squeeze(sTable.span(i,:,:)));
wolffd@0 449 for i=1:length(row), cs{end+1} = row{i}; end
wolffd@0 450 end
wolffd@0 451 cs{end+1} = '</TABLE>';
wolffd@0 452 case 'txt'
wolffd@0 453 cT = [sTable.headers(:)'; sTable.values];
wolffd@0 454 A = cell2char(cT);
wolffd@0 455 for i=1:size(A,1), cs{end+1} = A(i,:); end
wolffd@0 456 end
wolffd@0 457 return;
wolffd@0 458
wolffd@0 459 function A = cell2char(T)
wolffd@0 460
wolffd@0 461 [nrow,ncol] = size(T);
wolffd@0 462 rowsep = 0;
wolffd@0 463 colsep = 1;
wolffd@0 464
wolffd@0 465 % change to strings
wolffd@0 466 for i=1:nrow,
wolffd@0 467 for j=1:ncol,
wolffd@0 468 t = T{i,j};
wolffd@0 469 if ischar(t), % ok
wolffd@0 470 elseif isempty(t), T{i,j} = '';
wolffd@0 471 elseif isstruct(t), % ??
wolffd@0 472 elseif iscell(t), T{i,j} = cell2char(t);
wolffd@0 473 elseif isnumeric(t), T{i,j} = num2str(t,3);
wolffd@0 474 end
wolffd@0 475 end
wolffd@0 476 end
wolffd@0 477
wolffd@0 478 % widths of columns and heights of rows
wolffd@0 479 HW = ones(nrow,ncol,2);
wolffd@0 480 for i=1:nrow, for j=1:ncol, HW(i,j,:) = size(T{i,j}); end, end
wolffd@0 481 colw = max(HW(:,:,2),[],1);
wolffd@0 482 rowh = max(HW(:,:,1),[],2);
wolffd@0 483
wolffd@0 484 % the table itself
wolffd@0 485 A = char(32*ones(sum(rowh)+rowsep*(nrow-1),sum(colw)+colsep*(ncol-1)));
wolffd@0 486 for i=1:nrow,
wolffd@0 487 for j=1:ncol,
wolffd@0 488 i0 = (i-1)*rowsep+sum(rowh(1:i-1));
wolffd@0 489 j0 = (j-1)*colsep+sum(colw(1:j-1));
wolffd@0 490 S = char(32*ones(rowh(i),colw(j)));
wolffd@0 491 si = size(T{i,j}); S(1:si(1),1:si(2)) = T{i,j};
wolffd@0 492 A(i0+[1:rowh(i)],j0+[1:colw(j)]) = S;
wolffd@0 493 end
wolffd@0 494 end
wolffd@0 495 return;
wolffd@0 496
wolffd@0 497
wolffd@0 498 function s = inserttominipage(s,width)
wolffd@0 499 if nargin<2 | isempty(width) | isnan(width), width = 1; end
wolffd@0 500 width = ['{' num2str(width) '\columnwidth}'];
wolffd@0 501 mp1 = '\begin{minipage}[t]'; mp2 = '\end{minipage}';
wolffd@0 502 if size(s,1)==1, s = [mp1 width s mp2];
wolffd@0 503 else s = char({[mp1 width]; s; mp2});
wolffd@0 504 end
wolffd@0 505 return;
wolffd@0 506
wolffd@0 507 function cs = insertfigure(fname,boxsize,inminipage)
wolffd@0 508 global REPORT_OUTPUT_FMT
wolffd@0 509 if nargin<2, boxsize = [NaN 1]; end
wolffd@0 510 if nargin<3, inminipage = 0; end
wolffd@0 511 htmlpagewidth = 800;
wolffd@0 512 si = cell(0);
wolffd@0 513 switch REPORT_OUTPUT_FMT,
wolffd@0 514 case {'ps','pdf'},
wolffd@0 515 if ~isnan(boxsize(1)), si{end+1} = ['height=' num2str(boxsize(1)) '\textheight']; end
wolffd@0 516 if ~isnan(boxsize(2)), si{end+1} = ['width=' num2str(boxsize(2)) '\columnwidth']; end
wolffd@0 517 if length(si), si = [', ' joinstr(si, ', ', ', ')]; end
wolffd@0 518 case 'html',
wolffd@0 519 if ~isnan(boxsize(1)), si{end+1} = ['HEIGHT=' num2str(htmlpagewidth*boxsize(1))]; end
wolffd@0 520 if ~isnan(boxsize(2)), si{end+1} = ['WIDTH=' num2str(htmlpagewidth*boxsize(2))]; end
wolffd@0 521 if length(si), si = [' ' joinstr(si, ' ', ' ')]; end
wolffd@0 522 case 'txt',
wolffd@0 523 % nil
wolffd@0 524 end
wolffd@0 525 switch REPORT_OUTPUT_FMT,
wolffd@0 526 case 'ps', s = ['\epsfig{file=./' fname '.ps ' si '}'];
wolffd@0 527 case 'pdf', s = ['\includegraphics[' si ']{./' fname '.pdf}'];
wolffd@0 528 case 'html',
wolffd@0 529 fn = [fname '.' fmt2imgfmt];
wolffd@0 530 s = ['<IMG SRC="' fn '" ALIGN="center" ALT="' fname '"' si '>'];
wolffd@0 531 s = makelinkfrom(fn,s);
wolffd@0 532 case 'txt',
wolffd@0 533 s = ['[image:' fname ']'];
wolffd@0 534 end
wolffd@0 535 switch REPORT_OUTPUT_FMT,
wolffd@0 536 case {'ps','pdf'},
wolffd@0 537 if inminipage, s = inserttominipage(s,boxsize(2)); end
wolffd@0 538 case 'html',
wolffd@0 539 s = ['<CENTER>' s '</CENTER>'];
wolffd@0 540 case 'txt',
wolffd@0 541 % nil
wolffd@0 542 end
wolffd@0 543 cs = {s};
wolffd@0 544 return;
wolffd@0 545
wolffd@0 546 function str = makelinkfrom(linkto,anchor)
wolffd@0 547 global REPORT_OUTPUT_FMT
wolffd@0 548 if iscell(linkto),
wolffd@0 549 if strcmp(REPORT_OUTPUT_FMT,'html'), linkto = joinstr(linkto,'','#');
wolffd@0 550 else linkto = joinstr(linkto,'','');
wolffd@0 551 end
wolffd@0 552 end
wolffd@0 553 switch REPORT_OUTPUT_FMT,
wolffd@0 554 case 'pdf', str = ['\hyperlink{' linkto '}{' anchor '}'];
wolffd@0 555 case 'ps', str = [anchor ' (p.\pageref{' linkto '})'];
wolffd@0 556 case 'html', str = ['<a href="' linkto '">' anchor '</a>'];
wolffd@0 557 case 'txt', str = '';
wolffd@0 558 end
wolffd@0 559 return;
wolffd@0 560
wolffd@0 561 function str = makelinkto(linkname)
wolffd@0 562 global REPORT_OUTPUT_FMT
wolffd@0 563 switch REPORT_OUTPUT_FMT,
wolffd@0 564 case 'pdf',
wolffd@0 565 fmt = '\pdfdest name {%s} fit \pdfoutline goto name {%s} {%s}';
wolffd@0 566 str = sprintf(fmt,linkname,linkname,linkname);
wolffd@0 567 case 'ps', str = ['\label{' linkname '}'];
wolffd@0 568 case 'html', str = ['<a name="' linkname '"> </a>'];
wolffd@0 569 case 'txt', str = '';
wolffd@0 570 end
wolffd@0 571 return;
wolffd@0 572