Switch to side-by-side view

--- a
+++ b/functions/adminfunc/gethelpvar.m
@@ -0,0 +1,319 @@
+% GETHELPVAR - convert a Matlab m-file help-message header 
+%               into out variables 
+% Usage:
+%  >> [vartext, varnames] = gethelpvar( filein, varlist);
+%
+% Inputs:
+%   filein     - input filename  (with .m extension)
+%   varlist    - optional list of variable to return. If absent
+%                return all variables.
+%
+% Outputs:
+%   vartext     - variable text
+%   varnames    - name of the variable returned;
+%
+% Notes: see HELP2HTML for file format
+%
+% Example: >> gethelpvar( 'gethelpvar.m', 'filein')
+%
+% Author:  Arnaud Delorme, Salk Institute 20 April 2002
+%
+% See also: HELP2HTML
+
+% Copyright (C) 2001 Arnaud Delorme, Salk Institute, arno@salk.edu
+%
+% This file is part of EEGLAB, see http://www.eeglab.org
+% for the documentation and details.
+%
+% Redistribution and use in source and binary forms, with or without
+% modification, are permitted provided that the following conditions are met:
+%
+% 1. Redistributions of source code must retain the above copyright notice,
+% this list of conditions and the following disclaimer.
+%
+% 2. Redistributions in binary form must reproduce the above copyright notice,
+% this list of conditions and the following disclaimer in the documentation
+% and/or other materials provided with the distribution.
+%
+% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+% THE POSSIBILITY OF SUCH DAMAGE.
+
+function [alltext, allvars] = gethelpvar( filename, varlist )
+
+if nargin < 1
+	help gethelpvar;
+	return;
+end
+
+% input file
+% ---------- 
+fid = fopen( filename, 'r');
+if fid == -1
+	error('File not found');
+end
+
+cont = 1;
+
+% scan file
+% -----------
+str = fgets( fid );
+% if first line is the name of the function, reload
+if str(1) ~= '%', str = fgets( fid ); end; 
+
+% state variables
+% -----------
+maindescription 	 = 1;
+varname = [];
+oldvarname = [];
+vartext = []; 	
+newvar  	 = 0;
+allvars = {};
+alltext = {};
+indexout = 1;
+
+while (str(1) == '%')
+   str = deblank(str(2:end-1));
+  
+   % --- DECODING INPUT
+   newvar  	 = 0;
+   str = deblank2(str); 
+   
+   if ~isempty(str)
+      
+	  % find a title
+	  % ------------
+	  i2d = findstr(str, ':');
+	  newtitle = 0;
+	  if ~isempty(i2d)
+	  	 i2d = i2d(1);
+	  	 switch lower(str(1:i2d))
+	  		case { 'usage:' 'authors:' 'author:' 'notes:' 'note:' 'input:' ...
+	  		'inputs:' 'outputs:' 'output' 'example:' 'examples:' 'see also:' }, newtitle = 1;
+		 end
+		 if (i2d == length(str)) && (str(1) ~= '%'), newtitle = 1; end;	
+   	  end
+      if newtitle
+  			tilehtml = str(1:i2d); 
+  			newtitle = 1;
+	        oldvarname = varname;
+        		oldvartext = vartext;
+        	if i2d < length(str)
+         			%vartext = formatstr(str(i2d+1:end), g.refcall);
+         			vartext = str(i2d+1:end);
+         	else	vartext = [];
+         	end;	
+         	varname = [];
+      else
+	  % not a title
+	  % ------------
+         % scan lines
+         [tok1, strrm] = strtok( str );
+         [tok2, strrm] = strtok( strrm );
+
+         if ~isempty(tok2) && ( isequal(tok2,'-') || isequal(tok2,'=')) % new variable 
+            newvar = 1;
+            oldvarname = varname;
+            oldvartext = vartext;
+            varname = tok1;
+            strrm = deblank(strrm);            % remove tail blanks
+            strrm = deblank(strrm(end:-1:1));	% remove initial blanks 
+           	%strrm = formatstr( strrm(end:-1:1), g.refcall);
+           	strrm = strrm(end:-1:1);
+            vartext = strrm;
+         else
+            % continue current text
+            str = deblank(str);            % remove tail blanks
+            str = deblank(str(end:-1:1));	% remove initial blanks
+            %str = formatstr( str(end:-1:1), g.refcall );
+            str = str(end:-1:1);
+            if isempty(vartext)
+               vartext = str;
+            else	
+               if ~isempty(varname) 
+               	    vartext = [ vartext 10 str]; % space if in array
+               else 
+               		if length(vartext)>3 && all(vartext(	end-2:end) == '.')
+               			vartext = [ deblank2(vartext(1:end-3)) 10 str]; % space if '...'
+               		else
+                    	vartext = [ vartext 10 str];    % CR otherwise
+                    end;	
+               end;		
+            end
+         end;	 
+         newtitle = 0;		
+      end
+	  % --- END OF DECODING 	
+      
+   	  str = fgets( fid );
+
+      % test if last entry
+      % ------------------
+      if str(1) ~= '%'
+  	 	 if ~newtitle
+  	 	 	if ~isempty(oldvarname)
+				allvars{indexout} = oldvarname;
+				alltext{indexout} = oldvartext;
+				indexout = indexout + 1;
+           		%fprintf( fo, [ '</tr>' g.normrow g.normcol1 g.var '</td>\n' ], oldvarname);
+           		%fprintf( fo, [ g.normcol2 g.vartext '</td></tr>\n' ], oldvartext);
+       	 	else
+       			if ~isempty(oldvartext)
+           			%fprintf( fo, [ g.normcol2 g.tabtext '</td></tr>\n' ], oldvartext);	
+       			end
+         	end;	 	
+         	newvar = 1;
+         	oldvarname = varname;
+         	oldvartext = vartext;
+         end;	
+      end; 
+
+      % test if new input for an array
+      % ------------------------------
+      if newvar || newtitle
+         if maindescription
+            if ~isempty(oldvartext) % FUNCTION TITLE
+               maintext = oldvartext;
+               maindescription = 0;
+               functioname = oldvarname( 1:findstr( oldvarname, '()' )-1);
+               %fprintf( fo, [g.normrow g.normcol1 g.functionname '</td>\n'],upper(functioname));
+               %fprintf( fo, [g.normcol2 g.description '</td></tr>\n'], [ upper(oldvartext(1)) oldvartext(2:end) ]);
+
+               % INSERT IMAGE IF PRESENT
+               %imagename = [ htmlfile( 1:findstr( htmlfile, functioname )-1) functioname '.jpg' ];
+			   %if exist( imagename ) % do not make link if the file does not exist 
+					%fprintf(fo, [ g.normrow g.doublecol ...
+					%			'<CENTER><BR><A HREF="' imagename '" target="_blank"><img SRC=' imagename ...
+					%			' height=150 width=200></A></CENTER></td></tr>' ]);
+		       %end
+            end;             
+   		elseif ~isempty(oldvarname)
+			allvars{indexout} = oldvarname;
+			alltext{indexout} = oldvartext;
+			indexout = indexout + 1;
+       		%fprintf( fo, [ '</tr>' g.normrow g.normcol1 g.var '</td>\n' ], oldvarname);
+       		%fprintf( fo, [ g.normcol2 g.vartext '</td></tr>\n' ], oldvartext);
+   	 	else
+   			if ~isempty(oldvartext)
+       			%fprintf( fo, [ g.normcol2 g.text '</td></tr>\n' ], oldvartext);	
+   			end
+         end;      
+      end;	
+      
+      % print title
+      % -----------
+      if newtitle
+		 %fprintf( fo, [ g.normrow g.doublecol '<BR></td></tr>' g.normrow g.normcol1 g.title '</td>\n' ], tilehtml);
+      	 if str(1) ~= '%' % last input
+         	%fprintf( fo, [ g.normcol2 g.text '</td></tr>\n' ], vartext);
+         end;		
+         oldvarname = [];
+         oldvartext = [];
+      end
+   else
+      str = fgets( fid );
+   end
+end
+fclose( fid );
+
+% remove quotes of variables
+% --------------------------
+for index = 1:length(allvars)
+	if allvars{index}(1) == '''', allvars{index} = eval( allvars{index} ); end
+end
+
+if exist('varlist') == 1
+	if ~iscell(varlist), varlist = { varlist }; end
+        newtxt = mat2cell(zeros(length(varlist), 1), length(varlist), 1); % preallocation
+	for index = 1:length(varlist)
+		loc = strmatch( varlist{index}, allvars);
+		if ~isempty(loc)
+			newtxt{index} = alltext{loc(1)};
+		else
+			disp([ 'warning: variable ''' varlist{index} ''' not found']);
+			newtxt{index} = '';
+		end
+	end
+	alltext = newtxt;
+end
+	
+return;
+
+% -----------------
+% sub-functions
+% -----------------
+function str = deblank2( str )
+   str = deblank(str(end:-1:1));    % remove initial blanks
+   str = deblank(str(end:-1:1));	% remove tail blanks 
+return;
+
+function strout = formatstr( str, refcall )
+		[tok1, strrm] = strtok( str );
+		strout = [];
+		while ~isempty(tok1)
+			tokout = functionformat( tok1, refcall );
+			if isempty( strout)
+				strout = tokout; 	
+			else
+				strout = [strout ' ' tokout ]; 	
+            end
+			[tok1, strrm] = strtok( strrm );
+		end
+return;	
+ 
+function tokout = functionformat( tokin, refcall )
+	tokout = tokin;	% default
+	[test, realtokin, tail] = testfunc1( tokin );
+	if ~test,  [test, realtokin, tail] = testfunc2( tokin ); end
+	if test
+        i1 = findstr( refcall, '%s');
+        i2 = findstr(refcall(i1(1):end), '''');
+        if isempty(i2)
+            i2 = length(refcall(i1(1):end)) + 1;
+        end
+		filename  = [ realtokin refcall(i1+2:i1+i2-2)];
+		if exist( filename ) % do not make link if the file does not exist 
+			tokout =  sprintf( [ '<A HREF="' refcall '">%s</A>' tail ' ' ], realtokin, realtokin );
+		end
+    end
+return;
+
+function [test, realtokin, tail] = testfunc1( tokin ) % test if is string is 'function()[,]'
+test = 0; realtokin = ''; tail = '';
+if ~isempty( findstr( tokin, '()' ) )
+    realtokin = tokin(1:findstr(tokin, '()') - 1);
+    if length(realtokin) < (length(tokin) - 2)
+        tail = tokin(end);
+    else
+        tail = [];
+    end
+    test = 1;
+end
+return;
+
+function [test, realtokin, tail] = testfunc2( tokin ) % test if is string is 'FUNCTION[,]'  
+	test = 0; realtokin = ''; tail = '';
+	if all( upper(tokin) == tokin)
+		if tokin(end) == ',' 
+			realtokin = tokin(1:end-1);
+			tail = ',';
+		else
+			realtokin = tokin;
+		end
+		testokin = realtokin;
+		testokin(findstr(testokin, '_')) = 'A';
+		testokin(findstr(testokin, '2')) = 'A';
+		if all(double(testokin) > 64) && all(double(testokin) < 91)
+			test = 1;
+        end
+		realtokin = lower(realtokin);
+	end
+return;