diff m-toolbox/mk_functions_by_category.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/mk_functions_by_category.m	Wed Nov 23 19:22:13 2011 +0100
@@ -0,0 +1,194 @@
+function mk_functions_by_category
+  
+  % Make a list of functions by category and write out
+  % to html_help/help/ug/bycatagory_content.html
+  %
+  
+  outfile = 'html_help/help/ug/bycategory_content.html';
+  
+  % Make a list of categories
+  cats = utils.const.categories.list;
+  
+  % Start HTML header
+  fd = fopen(outfile, 'w+');
+  
+  % Make table header
+  fprintf(fd, '<h2><a name="TOP">Categories</a></h2>\n');
+  fprintf(fd, '<br>\n');
+  fprintf(fd, '<p>\n');
+  fprintf(fd, '<ul>\n');
+  for jj=1:length(cats)
+    c   = cats{jj};
+    cns = strrep(c, ' ', '_');
+    fprintf(fd, '\t<li><a href="bycategory.html#%s">%s</a></li>\n', cns, c);
+  end
+  fprintf(fd, '</ul>\n');
+  fprintf(fd, '</p>\n');
+  fprintf(fd, '<br>\n');
+  
+  % Get functions for each category
+  infos = getAllMethods();
+  for jj=1:length(cats)
+    
+    c   = cats{jj};
+    cns = strrep(c, ' ', '_');
+        
+    disp(sprintf('*** Writing help for category %s', c));
+    % Start new section
+    fprintf(fd, '<hr>\n');
+    fprintf(fd, '<h4><a name="%s"></a>%s</h4>\n', cns, c);
+    fprintf(fd, '\n');
+    
+    % start table
+    fprintf(fd, '<table cellspacing="0" class="body" cellpadding="4" border="2">\n');
+    fprintf(fd, '  <colgroup>\n');
+    fprintf(fd, '      <col width="20%%">\n');
+    fprintf(fd, '      <col width="20%%">\n');
+    fprintf(fd, '      <col width="60%%">\n');
+    fprintf(fd, '    </colgroup>\n');
+    fprintf(fd, '    <thead>\n');
+    fprintf(fd, '      <tr valign="top">\n');
+    fprintf(fd, '        <th bgcolor="#B2B2B2">Function name</th>\n');
+    fprintf(fd, '        <th bgcolor="#B2B2B2">Class</th>\n');
+    fprintf(fd, '        <th bgcolor="#B2B2B2">Description</th>\n');
+    fprintf(fd, '      </tr>\n');
+    fprintf(fd, '    </thead>\n');
+    fprintf(fd, '    <tbody>\n');
+    
+    % add each row
+    for kk=1:numel(infos)
+      ii = infos(kk);
+      if strcmpi(ii.mcategory, c)
+        
+        % This function
+        fcn = ii.mname;
+        
+        % Function description
+        fi = which([ii.mclass '/' fcn]);
+        desc = getDescription(fi);
+        
+        fprintf(fd, '      <!-- %s -->\n', fcn);
+        fprintf(fd, '      <tr valign="top">\n');
+        fprintf(fd, '         <td bgcolor="#F2F2F2">\n');
+        fprintf(fd, '           <p>%s</p>\n', fcn);
+        fprintf(fd, '         </td>\n');
+        fprintf(fd, '         <td bgcolor="#F2F2F2">\n');
+        fprintf(fd, '           <p>%s</p>\n', ii.mclass);
+        fprintf(fd, '         </td>\n');
+        fprintf(fd, '         <td bgcolor="#F2F2F2">\n');
+        fprintf(fd, '           <p>%s</p>\n', desc);
+        fprintf(fd, '         </td>\n');
+        fprintf(fd, '      </tr>\n');
+        
+      end
+    end
+    
+    % close table
+    fprintf(fd, '  </tbody>\n');
+    fprintf(fd, '</table>\n');
+    
+    % back to top link
+    fprintf(fd, '\n');
+    fprintf(fd, '<a href="bycategory.html#TOP">Back to top</a>\n');
+    
+  end
+  
+  fclose(fd);
+end
+
+
+function infos = getAllMethods()
+  
+  infos = [];
+  cls = utils.helper.ltpda_userclasses;
+  
+  for cc=1:numel(cls)
+    cl = cls{cc};
+    infos = [infos getPublicMethods(cl)];    
+  end
+end
+
+function infos = getPublicMethods(cl)
+  
+  mths = {};
+  
+%   prefs = getappdata(0, 'LTPDApreferences');
+%   vl = LTPDAprefs.verboseLevel;
+%   LTPDAprefs('display', 'verboseLevel', -1);
+  
+  cms = eval(['?' cl]);
+  infos = [];
+  for ll=1:numel(cms.Methods)
+    try
+      mt = cms.Methods{ll};
+      if (~mt.Static && ...
+          strcmpi(mt.Access, 'public') && ...
+          ~strcmpi(cms.Methods{ll}.DefiningClass.Name, 'handle') && ...
+          ~mt.Hidden)
+        
+        cmd = sprintf('%s.getInfo(''%s'');', cl, mt.Name);
+        ii = eval(cmd);
+        ii.setMclass(cl);
+        
+        disp(sprintf('Added method: %s/%s', ii.mclass, ii.mname));
+        mths = [mths {ii.mname}];
+        infos = [infos ii];
+      end
+    catch Me
+      fprintf(2, 'failed to add %s/%s\n', cl, mt.Name);
+      fprintf(2, '%s', Me.message);
+    end
+  end
+  
+%   LTPDAprefs('display', 'verboseLevel', vl);
+  
+  [mths,i,j] = unique(mths);
+  infos = infos(i);
+end
+
+%--------------------------------------------------------------------------
+% Reads the first comment line from the file
+function desc = getDescription(fname)
+  
+  try
+    fd = fopen(fname, 'r');
+    
+    while ~feof(fd)
+      l = strtrim(fgetl(fd));
+      % look for comments
+      if ~isempty(l) && l(1) == '%'
+        desc = l;
+        break
+      end
+    end
+    
+    fclose(fd);
+  catch
+    desc = '';
+  end
+end
+
+%--------------------------------------------------------------------------
+% Make a list of files and functions in ltpda
+%
+%
+function cats = mkfilecatlist(versions)
+  
+  
+  cats = {};
+  
+  % get categories
+  for j=1:length(versions)
+    c = versions(j,9);
+    if ~isempty(c{1})
+      % check this is already in cats
+      if ~ismember(c, cats)
+        cats = [cats c];
+      end
+    end
+  end
+  
+end
+
+
+