⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mfileparse.m

📁 M2HTML by itself generates an HTML documentation of Matlab M-files in the current directory.
💻 M
字号:
function s = mfileparse(mfile, mdirs, names, options)%Parsing of an M-file to obtain synopsis, help and references%  S = MFILEPARSE(MFILE, MDIRS, NAMES, OPTIONS) parses the M-file MFILE looking%  for synopsis (function), H1 line, subroutines and todo tags (if any).%  It also fills in a boolean array indicating whether MFILE calls M-files %  defined by MDIRS (M-files directories) AND NAMES (M-file names).%  The input OPTIONS comes from M2HTML: fields used are 'verbose', 'global'%  and 'todo'.%  Output S is a structure whose fields are:%     o synopsis: char array (empty if MFILE is a script)%     o h1line: short one-line description into the first help line%     o subroutine: cell array of char containing subroutines synopsis%     o hrefs: boolean array with hrefs(i) = 1 if MFILE calls mdirs{i}/names{i}%     o todo: structure containing information about potential todo tags%%  See also M2HTML%  Copyright (C) 2003 Guillaume Flandin <Guillaume@artefact.tk>%  $Revision: 1.0 $Date: 2003/29/04 17:33:43 $error(nargchk(3,4,nargin));if nargin == 3,	options = struct('verbose',1, 'globalHypertextLinks',0, 'todo',0);end%- Delimiters used in strtok: some of them may be useless (% " .), removed '.'strtok_delim = sprintf(' \t\n\r(){}[]<>+-*~!|\\@&/,:;="''%%');%- Open for reading the M-fileif options.verbose	fprintf('Processing file %s...\n',mfile);endfid = openfile(mfile,'r');it = 0; % line number%- Initialize Outputs = struct('synopsis',   '', ...		   'h1line',     '', ...		   'subroutine', {{}}, ...		   'hrefs',      sparse(1,length(names)), ...		   'todo',       struct('line',[],'comment',{{}}), ...		   'ismex',      zeros(size(mexexts)));%- Initialize flag for synopsis cont ('...')flagsynopcont = 0;%- Look for synopsis and H1 line%  Help is the first set of contiguous comment lines in an m-file%  The H1 line is a short one-line description into the first help linewhile 1	tline = fgetl(fid);	if ~ischar(tline), break, end	it = it + 1;	tline = deblank(fliplr(deblank(fliplr(tline))));	%- Synopsis line	if ~isempty(strmatch('function',tline))		s.synopsis = tline;		if ~isempty(strmatch('...',fliplr(tline)))			flagsynopcont = 1;			s.synopsis = deblank(s.synopsis(1:end-3));		end	%- H1 Line	elseif ~isempty(strmatch('%',tline))		% allow for the help lines to be before the synopsis		if isempty(s.h1line)			s.h1line = fliplr(deblank(tline(end:-1:2)));		end		if ~isempty(s.synopsis), break, end	%- Go through empty lines	elseif isempty(tline)			%- Code found. Stop.	else		if flagsynopcont			if isempty(strmatch('...',fliplr(tline)))				s.synopsis = [s.synopsis tline];				flagsynopcont = 0;			else				s.synopsis = [s.synopsis deblank(tline(1:end-3))];			end		else			break;		end	endend%- Global Hypertext Links option%  If false, hypertext links are done only among functions in the same%  directory.if options.globalHypertextLinks	hrefnames = names;else	indhref = find(strcmp(fileparts(mfile),mdirs));	hrefnames = {names{indhref}};end%- Compute cross-references and extract subroutines%  hrefs(i) is 1 if mfile calls mfiles{i} and 0 otherwisewhile ischar(tline)	% Remove blanks at both ends	tline = deblank(fliplr(deblank(fliplr(tline))));		% Split code into meaningful chunks	splitc = splitcode(tline);	for j=1:length(splitc)		if isempty(splitc{j}) | ...			splitc{j}(1) == '''' | ...			~isempty(strmatch('...',splitc{j}))			% Forget about empty lines, char strings or conts		elseif splitc{j}(1) == '%'			% Cross-references are not taken into account in comments			% Just look for potential TODO line			if options.todo				if ~isempty(strmatch('% TODO %',splitc{j}))					s.todo.line   = [s.todo.line it];					s.todo.comment{end+1} = splitc{j}(9:end);				end			end		else			% detect if this line is a declaration of a subroutine			if ~isempty(strmatch('function',splitc{j}))				s.subroutine{end+1} = splitc{j};			else				% get list of variables and functions				symbol = {};				while 1					[t,splitc{j}] = strtok(splitc{j},strtok_delim);					if isempty(t), break, end;					symbol{end+1} = t;				end				if options.globalHypertextLinks					s.hrefs = s.hrefs + ismember(hrefnames,symbol);				else					s.hrefs(indhref) = s.hrefs(1,indhref) + ...									   ismember(hrefnames,symbol);				end			end		end	end	tline = fgetl(fid);	it = it + 1;end	fclose(fid);%- Look for Mex files[pathstr,name] = fileparts(mfile);samename = dir(fullfile(pathstr,[name	'.*']));samename = {samename.name};for i=1:length(samename)	[dummy, dummy, ext{i}] = fileparts(samename{i});ends.ismex = ismember(mexexts,ext);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -