Mercurial > hg > ltpda
diff m-toolbox/m/MakeContents.m @ 0:f0afece42f48
Import.
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Wed, 23 Nov 2011 19:22:13 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/m-toolbox/m/MakeContents.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,232 @@ +function MakeContents(toolbox_name, version_str) +% MAKECONTENTS makes Contents file in current working directory and subdirectories +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% DESCRIPTION: MAKECONTENTS makes Contents file in current working directory and +% subdirectories. MakeContents creates a standard "Contents.m" file +% in the current directory by assembling the first comment (H1) +% line in each function found in the current working directory. The +% Contents file in the mean directory will also contain the H1 +% comments from the files in the subdirectories. +% MakeContents create also Contents files in the subdirectories with +% the H1 comments of the files in this subdirectories. +% +% CALL: MakeContents('toolbox_name', 'Version xxx dd-mmm-yyyy'); +% MakeContents('ltpda', '0.2 (R2007a) 21-May-2007'); +% +% H1 COMMENT Function name in upper case letter (optional) plus the description +% DEFINITION: e.g.: FUNCTION_NAME (optional) description +% +% VERSION: $Id: MakeContents.m,v 1.10 2008/07/31 18:41:53 ingo Exp $ +% +% HISTORY: 05-06-2007 Diepholz +% Creation +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +%% set default variables +if nargin < 1 + toolbox_name = 'no toolbox name'; +end + +if nargin < 2 + flags = ''; + version_str = 'no version number'; +end + +contents_file = 'Contents.m'; + +percent_line(1:80) = '%'; +header = ['% Toolbox ' toolbox_name]; +version = ['% Version ' version_str]; +contents_path = ['% Contents path ' pwd]; + +fcontents_main = fopen(contents_file,'w'); + +fprintf(fcontents_main, '%% %s Toolbox\n', toolbox_name); +fprintf(fcontents_main, '%% Version %s\n', version_str); +fprintf(fcontents_main, '%s\n%%\n', percent_line); +fprintf(fcontents_main, '%s\n%%\n', header); +fprintf(fcontents_main, '%s\n%%\n',version); + +fprintf(fcontents_main, '%s\n%%\n%%\n',contents_path); + +do_list('.', fcontents_main); + +fclose (fcontents_main); + +return + +%% Subfunction + +function do_list(path_in, fcontents_main) +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% DESCRIPTION: DO_LIST go recursive through the directories and create the +% standart Contents "Contents.m" file. +% +% CALL: do_list('starting_directory', file_identifier); +% do_list('.', fcontents_main); +% +% H1 COMMENT Function name in upper case letter (optional) plus the description +% DEFINITION: FUNCTION_NAME (optional) description +% +% VERSION: $Id: MakeContents.m,v 1.10 2008/07/31 18:41:53 ingo Exp $ +% +% HISTORY: 05-06-2007 Diepholz +% Creation +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%% Define directory list and m-file list +dirlist = dir(path_in); +dir_i = [dirlist.isdir]; +dirnames = {dirlist(dir_i).name}; + +% remove . and .. from directory list +dirnames = dirnames(~(strcmp('.', dirnames) | strcmp('..', dirnames))); + +filenames = {dirlist(~dir_i).name}; +mfiles = {}; +% Find .m files, excluding Contents file +for f = 1:length(filenames) + fname = filenames{f}; + + [pathstr,name,ext] = fileparts(fname); + + if length(fname) > 2 && ... + strcmp(ext, '.m') && ... + ~strcmpi('contents.m', fname) + + mfiles = [mfiles {fname}]; + end +end + +%% Define the print directory +if strcmp(path_in, '.') + print_dir = ''; +else + % Remove the './' from the path_in + print_dir = [path_in(3:end) filesep]; +end + +%% Create Contents.m files in the current search path +fcontents = []; +contents_file = 'Contents.m'; + +if ~strcmp(path_in, '.') && ~isempty(mfiles) + fcontents = fopen([path_in filesep contents_file], 'w'); +end + +% Remove 'classes/@' from print_dir +% hint: Matlab have a problem to display a class path by using a relative path +if length (print_dir) > 8 && strcmp(print_dir(1:9), 'classes/@') + print_dir = print_dir(10:end); + header = ['%%%%%%%%%%%%%%%%%%%% class: ' ... + print_dir(1:end-1) ... + ' %%%%%%%%%%%%%%%%%%%%']; +else + header = ['%%%%%%%%%%%%%%%%%%%% path: ' ... + print_dir(1:end-1) ... + ' %%%%%%%%%%%%%%%%%%%%']; +end + +if ~isempty(mfiles) + fprintf (fcontents_main, '%s\n%%\n', header); + if ~isempty(fcontents) + fprintf (fcontents , '%s\n%%\n', header); + end +end + +maxlen = size(char(mfiles),2) + length(print_dir); + +%% Each m-file in the directory +for i = 1:length(mfiles) + + %% Open the mfile to get the H1 line + mfile = mfiles{i}; + fid=fopen(fullfile(path_in, mfile),'r'); + if fid == -1 + error(['Could not open file: ' fullfile(path_in, mfile)]); + end + +% line = ''; +% while(isempty(line)) +% line = fgetl(fid); +% end +% +% % Remove leading and trailing white spaces +% line = strtrim(line); +% +% if length(line) > 7 && strcmp(line(1:8),'function') == 1, + + found = 0; + while found < 1 && feof(fid)==0; + line = fgetl(fid); + + %% End of file is reached + if feof(fid)==1 + fn = [print_dir strtok(mfile,'.')]; + n = maxlen - length(fn) - 1; + line = ['% ' fn blanks(n) '- (No help available)']; + + fprintf(fcontents_main,'%s\n',line); + if ~isempty(fcontents) + fprintf(fcontents ,'%s\n',line); + end + + elseif ~isempty(line) + + if ~isempty(findstr(line,'%')) + found = found + 1; + rr=line(2:length(line)); + + % Remove leading and trailing white spaces + rr = strtrim(rr); + + % get first word + [tt,rr2]=strtok(line(2:length(line))); + + % Is first word equal to the m-file then remove it + if findstr (lower(mfile), lower(tt)) + rr = rr2; + end + + if isempty(rr) + rr = '(No help available)'; + end + + fn = [print_dir strtok(mfile,'.')]; + asd = ['<a href="matlab:help ' fn '">' fn '</a>']; + n = maxlen - length(fn) - 1; + line = ['% ' asd blanks(n) '- ' rr]; + + fprintf(fcontents_main,'%s\n',line); + if ~isempty(fcontents) + fprintf(fcontents ,'%s\n',line); + end + + end % if ~isempty + end % if length + + end % while +% end % if strcmp + fclose(fid); +end % for + +if ~isempty(mfiles) + fprintf(fcontents_main,'%%\n%%\n'); +end + +if ~isempty(fcontents) + fclose (fcontents); +end + +%% recurse down directory tree +for d = 1:length(dirnames) + do_list(fullfile(path_in, dirnames{d}), fcontents_main); +end + +return