Mercurial > hg > ltpda
diff m-toolbox/html_help/help/create_class_desc/create_methods_desc.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/html_help/help/create_class_desc/create_methods_desc.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,284 @@ +function create_methods_desc(fid, meta_obj, html_filename, indentation_in) + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%% Go throught the methods of the meta class %%% + %%% and collect all public methods %%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + public_fcn = struct; + static_fcn = struct; + + for ii = length(meta_obj.Methods):-1:1 + + method = meta_obj.Methods{ii}; + + %%% Display only public and not handle methods + if strcmp(method.Access, 'public') && ~strcmp(method.DefiningClass.Name, 'handle') + + %%% Devide the methods into 'normal' and 'static' methods + if ~method.Static + public_fcn.(method.Name) = method.DefiningClass.Name; + else + static_fcn.(method.Name) = method.DefiningClass.Name; + end + + end + end + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%% Create a struct which fields represent the categories %%% + %%% and devide the methods into this fields %%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + %%% The struct have the following fields: + %%% Operator: + %%% Trigonometry: + %%% Constructor: + + method_names = fieldnames(public_fcn); + + category_struct = struct(); + + for ii = 1:length(method_names) + + try + + %%% Get minfo-object + info = feval(sprintf('%s.getInfo',meta_obj.Name), method_names{ii}); + + fcn_name = sprintf('%s/%s',public_fcn.(method_names{ii}), method_names{ii}); + category = strrep(info.mcategory, ' ', '_'); + + %%% Add the new category to the struct + if ~ismember(category, fieldnames(category_struct)) + category_struct.(category) = {fcn_name}; + else + category_struct.(category){end+1} = fcn_name; + end + + %%% Order the fiels of the structure. + category_struct = orderfields(category_struct); + catch + end + end + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%% Remove from the default link_box in the class not used categories %%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + def_link_box = default_link_box(html_filename); + fcn_link_box = {}; + fcn_categories = sort(fieldnames(category_struct)); + rr = 1; + + for ii = 1:numel(fcn_categories) + idx = strcmpi(fcn_categories{ii}, strrep(def_link_box(:,1), ' ', '_')); + if any(idx) + fcn_link_box{rr,1} = def_link_box{idx,1}; + fcn_link_box{rr,2} = def_link_box{idx,2}; + fcn_link_box{rr,3} = def_link_box{idx,3}; + else + fcn_link_box{rr,1} = fcn_categories{ii}; + fcn_link_box{rr,2} = sprintf('%s#%s', html_filename, lower(strrep(fcn_categories{ii}, ' ', '_'))); + fcn_link_box{rr,3} = sprintf('%s methods', fcn_categories{ii}); + end + rr = rr + 1; + end + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%% Append to the fid the Information of the methods %%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + indentation(1:indentation_in) = ' '; + + %%% Headline + fprintf(fid, '%s<h2 class="title"><a name="top_methods"/>Methods</h2>\n', indentation); + + %%% Link box + create_link_box(fid, indentation_in, fcn_link_box, 'subcategorylist') + + %%% Top of page link + create_top_of_page(fid, indentation_in); + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%% Create a table for each category %%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + categories = fieldnames(category_struct); + + for ii = 1:length(categories) + category = categories{ii}; + category_struct.(category) = sort(category_struct.(category)); + + %%% table predefinitions %%% + fprintf(fid, '%s<!-- ===== Methods Category: %s ===== -->\n', indentation, category); + fprintf(fid, '%s<h3 class="title"><a name="%s"/>%s</h3>\n', indentation, lower(category), strrep(category, '_', ' ')); + fprintf(fid, '%s<p>\n', indentation); + fprintf(fid, '%s <table cellspacing="0" class="body" cellpadding="2" border="0" width="80%%">\n', indentation); + fprintf(fid, '%s <colgroup>\n', indentation); + fprintf(fid, '%s <col width="15%%"/>\n', indentation); + fprintf(fid, '%s <col width="73%%"/>\n', indentation); + fprintf(fid, '%s <col width="12%%"/>\n', indentation); + fprintf(fid, '%s </colgroup>\n', indentation); + fprintf(fid, '%s <thead>\n', indentation); + fprintf(fid, '%s <tr valign="top">\n', indentation); + fprintf(fid, '%s <th class="categorylist">Methods</th>\n', indentation); + fprintf(fid, '%s <th class="categorylist">Description</th>\n', indentation); + fprintf(fid, '%s <th class="categorylist">Defined in class</th>\n', indentation); + fprintf(fid, '%s </tr>\n', indentation); + fprintf(fid, '%s </thead>\n', indentation); + fprintf(fid, '%s <tbody>\n', indentation); + + for jj = 1:length(category_struct.(category)) + + fcn_name = category_struct.(category){jj}; + + %%%%%%%%%% Read the methods file to get the H1 line %%%%%%%%%% + fid_open = fopen(which(fcn_name)); + + f_line = fgetl(fid_open); + fcn_desc = 'No description'; + while f_line ~= -1 + f_line = strtrim(f_line); + if f_line(1) == '%' + fcn_desc = f_line(2:end); + fcn_desc = strtrim(fcn_desc); + break + end + f_line = fgetl(fid_open); + end + fclose(fid_open); + + %%% define the color for each row %%% + if mod(jj,2) == 0 + bgcolor = ''; + else + bgcolor = ' bgcolor="#f3f4f5"'; + end + + %%% table body %%% + fprintf(fid, '%s <!-- %s -->\n', indentation, fcn_name); + fprintf(fid, '%s <tr valign="top">\n', indentation); + fprintf(fid, '%s <td%s>\n', indentation, bgcolor); + %%% Create a special entry for a constructor + [t, r] = strtok(fcn_name, '/'); + if strcmp(t, r(2:end)) + fprintf(fid, '%s <p><a href="matlab:doc(''%s'')">%s</a></p>\n', indentation, t, fcn_name(length(strtok(fcn_name, '/'))+2:end)); + else + name = fcn_name(length(strtok(fcn_name, '/'))+2:end); + fprintf(fid, '%s <p><a href="matlab:doc(''%s'')">%s</a></p>\n', indentation, [meta_obj.Name, '/', name], name); + end + fprintf(fid, '%s </td>\n', indentation); + fprintf(fid, '%s <td%s>\n', indentation, bgcolor); + fprintf(fid, '%s <p>%s</p>\n', indentation, fcn_desc); + fprintf(fid, '%s </td>\n', indentation); + fprintf(fid, '%s <td%s>\n', indentation, bgcolor); + fprintf(fid, '%s <p>%s</p>\n', indentation, strtok(fcn_name, '/')); + fprintf(fid, '%s </td>\n', indentation); + fprintf(fid, '%s </tr>\n', indentation); + end + + %%% table end %%% + fprintf(fid, '%s </tbody>\n', indentation); + fprintf(fid, '%s </table>\n', indentation); + + %%% Back to top of the methods %%% + back2m = 'Back to Top of Section'; + + fprintf(fid, '%s <!-- ===== Back to Top of Methods ===== -->\n', indentation); + fprintf(fid, '%s <a href="#top_methods">\n', indentation); + fprintf(fid, '%s <img src="doc_to_top_up.gif" border="0" align="bottom" alt="%s"/>\n', indentation, back2m); + fprintf(fid, '%s %s\n', indentation, back2m); + fprintf(fid, '%s </a>\n\n', indentation); + fprintf(fid, '%s</p>\n\n', indentation); + end + +end + + +function fcn_link_box = default_link_box(html_filename) + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%% Define the link box for the methods %%% + %%% link_box{:,1} --> Link name %%% + %%% link_box{:,2} --> URL %%% + %%% link_box{:,3} --> Link description %%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + i = 1; + fcn_link_box{i,1} = 'Arithmetic Operator'; + fcn_link_box{i,2} = [html_filename, '#arithmetic_operator']; + fcn_link_box{i,3} = 'Arithmetic Operator'; + + i = i+1; + fcn_link_box{i,1} = 'Constructor'; + fcn_link_box{i,2} = [html_filename, '#constructor']; + fcn_link_box{i,3} = 'Constructor of this class'; + + i = i+1; + fcn_link_box{i,1} = 'Converter'; + fcn_link_box{i,2} = [html_filename, '#converter']; + fcn_link_box{i,3} = 'Convertor methods'; + + i = i+1; + fcn_link_box{i,1} = 'GUI function'; + fcn_link_box{i,2} = [html_filename, '#gui_function']; + fcn_link_box{i,3} = 'GUI function methods'; + + i = i+1; + fcn_link_box{i,1} = 'Helper'; + fcn_link_box{i,2} = [html_filename, '#helper']; + fcn_link_box{i,3} = 'Helper methods only for internal usage'; + + i = i+1; + fcn_link_box{i,1} = 'Internal'; + fcn_link_box{i,2} = [html_filename, '#internal']; + fcn_link_box{i,3} = 'Internal methods only for internal usage'; + + i = i+1; + fcn_link_box{i,1} = 'Input'; + fcn_link_box{i,2} = [html_filename, '#input']; + fcn_link_box{i,3} = 'Input methods'; + + i = i+1; + fcn_link_box{i,1} = 'MDC1'; + fcn_link_box{i,2} = [html_filename, '#mdc1']; + fcn_link_box{i,3} = 'Mock data challenge 1'; + + i = i+1; + fcn_link_box{i,1} = 'Operator'; + fcn_link_box{i,2} = [html_filename, '#operator']; + fcn_link_box{i,3} = 'Operator methods'; + + i = i+1; + fcn_link_box{i,1} = 'Output'; + fcn_link_box{i,2} = [html_filename, '#output']; + fcn_link_box{i,3} = 'Output methods'; + + i = i+1; + fcn_link_box{i,1} = 'Relational Operator'; + fcn_link_box{i,2} = [html_filename, '#relational_operator']; + fcn_link_box{i,3} = 'Relational operator methods'; + + i = i+1; + fcn_link_box{i,1} = 'Signal Processing'; + fcn_link_box{i,2} = [html_filename, '#signal_processing']; + fcn_link_box{i,3} = 'Signal processing methods'; + + i = i+1; + fcn_link_box{i,1} = 'Statespace'; + fcn_link_box{i,2} = [html_filename, '#statespace']; + fcn_link_box{i,3} = 'Statespace methods'; + + i = i+1; + fcn_link_box{i,1} = 'Trigonometry'; + fcn_link_box{i,2} = [html_filename, '#trigonometry']; + fcn_link_box{i,3} = 'Trigometry methods'; + + i = i+1; + fcn_link_box{i,1} = 'User defined'; + fcn_link_box{i,2} = [html_filename, '#user_defined']; + fcn_link_box{i,3} = 'User defined methods'; +end + + +