%PRCONTENT2HTML Construct HTML file from PRTools Contents file % % PRCONTENT2HTML(NAME,RECREATE) function out = prcontent2html(name,recreate) if nargin < 2, recreate = 0; end if exist([name '/Contents.m']) == 2 file = which([name '/Contents.m']); else error('Contents file not found') end t = gethf(file); % help part t = strrep(t,char([10 13]),char(10)); t = strrep(t,char([13 10]),char(10)); t = strrep(t,char(13),char(10)); t = strrep(t,char(9),char([32 32])); n = length(strfind(t,10)); s = ['' website_manual '' name '' newline]; title = listn(t,1); version = listn(t,2); s = [s '

' upper(name) '

']; s = [s '

' title ', ' version '

']; for j=3:n % do for all lines r1 = listn(t,j); r2 = listn(t,j+1); u = cleanstr(r1); [tok,posttok] = strtok(u); ntok = abs(tok); single = isempty(strtok(posttok)); emptyline = isempty(tok); if length(r1) > 2 skip = (strcmp(r1(1:3),'---')); else skip = 0; end if length(r2) > 2 section = strcmp(r2(1:3),'---'); else section = 0; end if emptyline % start new paragraph s = [s '

' newline '

']; elseif section & ~skip if j < 6 % first section s = [s '

' u '

' newline]; else % following section, end old table first s = [s '' newline '

' u '

' newline]; end s = [s '']; s = [s '']; end end s = [s '
' commandrefs(tok,recreate,subdir) '' posttok '
']; s = [s '

']; writf([name '.html'],s); if nargout > 0 out = s; end return function i = isupper(s) % true if s doesnot change by upper i = strcmp(s,upper(s)); return function out = code(s,n) %convert to code, add n spaces if nargin < 2, n = 0; end out = ['' htmlspace(n) s '']; return function out = makecode(s,n) %convert any consequetive set of uppers to lower and make them Courier if strmatch(s(end),char(',','.')) send = s(end); s(end) = []; elseif length(s) > 1 & strmatch(s(end-1:end),char(', ','. ')) send = s(end-1:end); s(end-1:end) = []; else send = []; end if nargin < 2, n = 0; end out = []; if isupper(s) %out = code(lower(s),n); out = code(s,n); else while ~isempty(s) [t,s] = strtok(s); if isupper(t) %t = code(lower(t)); t = code(t); end out = [out ' ' t]; end end out = [out send]; return function s = cleanstr(s) V = char([9 10 11 12 13 32]); for n=1:length(s) if all(V~=s(n)) break; end end s = s(n:end); for n=length(s):-1:1 if all(V~=s(n)) break end end s = s(1:n); return function s = commandrefs(r,recreate,subdir) if nargin < 2, recreate = 0; end if regexp(r,'^ *$') s = r; return end s = []; tok = lower(r); htmlname = fullfile(subdir,[tok '.html']); if recreate tt = prhelp2html(tok,1,subdir); end if exist(htmlname,'file') == 2 s = [s '' tok ', ']; elseif isempty(tok) | regexp(tok,'^ *') ; else s = [s tok ', ']; end s = strrep(s,'\','/'); % avoid \ in html addresses return function s = htmlspace(n) if nargin < 1, n=1; end if n > 0 s = repmat(' ',1,n); else s = []; end return %LISTN List lines specified by their line number % % t = listn(r,n) % Get the lines in r given by the line numbers in n. function t = listn(r,n) k = [0,find(r==newline)]; t = []; for j = n if j < length(k) t = [t,r(k(j)+1:k(j+1))]; end end return function s = gethf(file) %GETHF Create heading file from m-file % % s = gethf(file) % % The heading of the given m-file consisting of all starting % lines % is isolated and returned in s. % % gethf(dir) % % All headings of the files in dir are merged into a file named headings.doc. % Default dir is cd. % % Use mergeprt for restoring if nargin == 0 gethf(cd); end if isdir(file) files = dir(file); docfile = ['headings.doc']; m = size(files,1); for i = 1:m if (~files(i,:).isdir) & (files(i,:).name(end-1:end) == '.m') name = files(i,:).name; s = gethf(name); s = ['##1' name(1:end-2) newline s newline '##2' newline]; %disp(s) appendf(docfile,s); end end else %disp(file) [s,ns] = readf(file); p = grep(s,'%'); if isempty(p) % no comments found s = []; return end p = [p p(end)+10]; % trick I = find(p - [0,p(1:length(p)-1)] ~= 1); if p(1) == 1 & isempty(I), I = length(p) + 1; end % if length(I) > 0 & I(1) > 1 if length(I) > 0 if I(1) == 1 I(1) = []; end n = I(1) - 1; s = listn(s,p(1):n+p(1)-1); s = strrep(s,[newline '%'],newline); %s = strrep(s,[newline ' '],newline); %s = strrep(s,[newline newline],'&*&'); %s = strrep(s,[newline ' '],'*&* '); %s = strrep(s,newline,' '); %s = strrep(s,'&*&',[newline newline]); %s = strrep(s,'*&*',newline); s = s(2:end); else s = ''; end end function [r,n] = readf(file,newline) %READF Readfile % % [r,n] = readf(file,newline) % Reads file into string r. The number of lines % is returned in n. if nargin < 2, newline = 13; end fid = fopen(deblank(file),'r'); if fid < 0 error(['Cann''t open ' file]) end r = fscanf(fid,'%c'); fclose(fid); n = length(find(r==newline)); if r(length(r)) ~= newline, n = n + 1; end return function writf(file,r) %WRITF Write file % % writf(file,r) % Write file from string r fid = fopen(file,'w'); if fid < 0 error(['Cannot open file ' file]) end fprintf(fid,'%c',r); fclose(fid); return function [k,z] = grep(r,s) %GREP Get line specific lines % % [k,n] = grep(r,s) % Get the numbers of all lines in the set of lines r % that contain s. % n is the total number of lines. n = [0,find(r==newline)]; m = findstr(r,s); [i,j] = sort([n,m]);; q = [0,j(1:length(j)-1)]-j; k = j(find(q>0))-1; z = length(n)-1; % # of lines return function t = website_manual t = ['
website' ... '

manual

']; return