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

📄 makedoc.perl

📁 Amis - A maximum entropy estimator 一个最大熵模型统计工具
💻 PERL
📖 第 1 页 / 共 3 页
字号:
		$desc = $1;	}	else { die "no <desc> in classdef $name" };	if( $str =~ s#<remark>(.*?)</remark>##si ) { $remark = $1; }	else { $remark = "" };	if( $str =~ s#<overview>(.*?)</overview>##si ) { $overview = " - $1"; }	else { $overview = "" };	if( $str =~ s#<see>(.*?)</see>##si ) { $see = &makeref($1); }		else { $see = "" };	if( $str =~ s#<decl>(.*?)</decl>##si ) { $decl = $1; }	else { $decl = "" };	if( $str =~ s#<namespace>(.*?)</namespace>##si ) { $namespace = $1; }	else { $namespace = "" };	if( $str =~ s#<body>(.*?)</body>##si )	{		$body = $1;		$body =~ s# -->\n<!-- #\n#g;# find class header		if( !( $body =~ s#^[\s\n]*<!-- \s*(([^{;&]|&[^;]+;)*)[{;]##s ) )		{			die "no class header found at the top in classdef $name";		}		else		{			$classhead = $1;			$classhead =~ s#^[\s\n]+##;		# Remove head spaces			$classhead =~ s#[\s\n]+$##;		# Remove tail spaces			$classhead =~ s#\n#<br>\n#g;		# Insert <br>			if( $classhead =~ s/([^:])\s*:([^:].*)/$1/ )			{ 				if( $pass == 1 )				{# make reference to parent classes 					$derivation = $2;					while( $derivation =~ /(\w+(\s+\w+)*(\s*&lt;([^&]|&amp;|&lt;([^&]|&amp;)+&gt;)+&gt;)?)/g )					{#						print "$1\n";						$i = $1;						$i =~ s/\s+/ /g;						($t,$x,$x,$n) = ($i =~ /((virtual )?(public|private|protected)) (.*)/);						if( $t eq "public" ) { $t = "";	}							else { $t = " ($t)"; }						push(@{$parent_info{$name}}, $n);						push(@{$parent_class{$name}}, $n . $t);						$n =~ s/&lt;.*&gt;//g;						$n =~ s/\s+//g;						push(@{$child_class{$n}}, $name . $t);					}				}			}			$classhead = $classhead . ";";			if( $namespace ne "" )			{				$classhead = "namespace $namespace {\n<div style=\"margin-left: 2em\">$classhead</div>\n}";			}			$decl = "#include \"<ref>" . $file . "</ref>\"<br><br>\n" . $classhead if( $decl eq "" );		}		undef %func;		$mode = "private";		$mode = "public" if( $decl =~ /struct/ );		$enums = "";		if( $decl !~ /\btypedef\b/ && $decl !~ /\benum\b/)		{			while(1)			{				if( $body =~ s/^[\s\n]*(private|public|protected):// )				{	$mode = $1; next; }				last if ! ($body =~ s#^[\s\n]*(([^;{}&]|&[a-z]+;)*?)([;{}])##s);				($lin, $delim) = ($1,$3);				last if( $delim eq "}" );	#			print "$lin <<<$delim>>>\n";				if( $delim eq "{" )				{					while( $body =~ /([{}])/ )					{	#					print "--------\n $body";						if( $1 eq "}" )						{							$body =~ s/^[^}]*\}//s;	#						print "--------\n";							last;						}						if( ! ($body =~ s/\{[^\{\}]*\}//s) )						{							die "why?"						}					}				}				if( $lin ne "" )				{					$fname = "";					$descr = "";					if( $lin =~ s/[\s\n]*-->(.*?)<!--[\s\n]*$//s )					{						$descr = $descr . $1;					}					while( $body =~ s/^[\s\n]*-->(.*?)<!--[\s\n]*//s )					{						$descr = $descr . $1;					}					if( $lin =~ /(^|\W)friend\W/ )					{						$section = "friend func";						$section = "friend class" if $lin =~ /(^|\W)(class|struct)\W/;						$section = "friend operator" if $lin =~ /\Woperator\W/;						if( $section eq "friend func" )						{							($dummy,$fname) = ($lin =~ /^(|[^(]+[^(\w])(\w+)\(/);						}						elsif( $section eq "friend operator" )						{							($fname) = ($lin =~ /(operator([^(]|\(.*\))+)\(/);							$fname =~ s/operator\s*/operator /;						}					}					elsif( $lin =~ /(^|^[^\(]*)~$name\(/ )					{						$section = "$mode dtor";					}					elsif( $lin =~ /(^|^[^\(]*[^\(\w])$name\(/ )					{						$section = "$mode ctor";					}					elsif( $lin =~ /typedef/ )					{						$section = "$mode typedef";						($fname) = ($lin =~ /[^\w0-9](\w[\w0-9]+)[^\w0-9]*$/);					}					elsif( $lin =~ /(^|^[^\(]*[^\(\w])enum\W/ )					{						$section = "$mode enum";						($fname) = ($lin =~ /enum\s+(\w+)/);					}					elsif( $lin =~ /(^|^([^\(&]|&amp;|&lt;[^&]*&gt;)*[^\(\w])(class|struct)\W/ )					{						$section = "$mode subclass";						($dummy,$fname) = ($lin =~ /(class|struct)\s+(\w+)/);					}					elsif( $lin =~ /(^|\W)operator\W/ )					{						$section = "$mode operator";						($fname) = ($lin =~ /(operator([^(]|\(.*\))+)\(/);						$fname =~ s/operator\s*/operator /;					}					elsif( $lin =~ /^[^\(]*[A-Za-z0-9_]\(/ )					{						$section = "$mode func";						$section = "$mode staticfunc" if( $lin =~ /(^|^.*\W)static\W/ );						($dummy,$fname) = ($lin =~ /^(|[^(]+[^(\w])(\w+)\(/);					}					elsif( $lin =~ /(^|\W)static\W/ )					{						$section = "$mode staticmember";						if( $lin =~ /(^|\W)(const\s+static|static\s+const)\W/ )						{							$section = "$mode const";						}						($fname) = ($lin =~ /.*[^A-Za-z_0-9]([A-Za-z_][A-Za-z_0-9]+)/);					}					else					{						$section = "$mode member";						($fname) = ($lin =~ /[^\w0-9](\w[\w0-9]+)[^\w0-9]*$/);					}					if( $fname ne "" )					{						$fx = $fname;						$fx =~ s/([\[\]\*\+])/\\$1/g;						$fx =~ s/([A-Za-z0-9_])\s*([^A-Za-z0-9_\s])/$1\\s*$2/g;						$fx =~ s/\s+/$1\\s+$2/g;						$fx =~ s/^([A-Za-z_])/\\b$1/;						$fx =~ s/([A-Za-z0-9_])$/$1\\b/;						# print "$fx\n";						$lin =~ s#$fx#<strong>$fname</strong>#;						$fname =~ s/\bconst //;					}					$lin =~ s/([^:]):[^:].*/$1/s;					$lin =~ s/=\s*0\s*$//s;					$lin =~ s/\s+$//s;					$fdecl{$membercount} = $lin;					$fsect{$membercount} = $section;					$fdescr{$membercount} = $descr;					$fname{$membercount} = $fname;					$fclass{$membercount} = $name;					push(@{$func{$section}}, $membercount);					if( $pass == 1 )					{						push( @{$classmember{$name}{$fname}}, $membercount );					}					$membercount++;				}			}			if( $pass == 2 && defined $parent_class{$name} )			{				&parent_search( $name, "root", $parent_class{$name});			}		}		elsif( $decl =~ /\benum\b/ )		{			while(1)			{				last if ! ($body =~ s#^[\s\n]*(([^;{}&]|&[a-z]+;)*?)([,{}])##s);				($lin, $delim) = ($1,$3);								if( $lin ne "" )				{					$descr = "";					if( $lin =~ s/[\s\n]*-->(.*?)<!--[\s\n]*$//s )					{						$descr = $descr . $1;					}					while( $body =~ s/^[\s\n]*-->(.*?)<!--[\s\n]*//s )					{						$descr = $descr . $1;					}					$enums = $enums . "<dt><strong>$lin</strong><dd>$descr\n";				}			}			$enums = "<dl>" . $enums . "</dl>";		}	}	if( $pass == 1 )	{		$link{$name} = &make_filename("$name.html");	}	if( $pass == 2 )	{		$out = "<H1><eng>Class </eng>$name<jpn> 僋儔僗</jpn>$overview</H1>\n";		$out = $out . "<H2><jpn>愰尵</jpn><eng>Declaration</eng></H2>\n"			. "<div><code>\n" . &makeref($decl, $name) . "</code></div>\n";		if( defined $parent_class{$name} )		{			$out = $out . "<H2><jpn>恊僋儔僗</jpn><eng>Parent classes</eng></H2>\n<p>";			$connect = "";			foreach $i (@{$parent_class{$name}})			{				$out = $out . $connect . &makeref($i, $name);				$connect = ", ";			}			$out = $out . "</p>\n";		}		if( defined $child_class{$name} )		{			$out = $out . "<H2><jpn>巕僋儔僗</jpn><eng>Child classes</eng></H2>\n<p>";			$connect = "";			foreach $i (@{$child_class{$name}})			{				$out = $out . $connect . &makeref($i, $name);				$connect = ", ";			}			$out = $out . "</p>\n";		}		$out = $out . "<H2><jpn>愢柧</jpn><eng>Description</eng></H2>\n$desc\n";		$member_header = 0;		foreach $i (@order)		{			foreach $j ("public", "protected", "friend")			{				$secname = "$j $i";				if( defined $func{$secname} )				{					if( $member_header == 0 )					{						$member_header = 1;						$out = $out . "<H2><jpn>儊儞僶</jpn><eng>Members</eng></H2>\n";					}					$out = $out . "<H3>" . &makesecname($secname) . "</H3>\n";					$close = "";					$prevfname = "!";#					print "-- " . $secname . " @{$func{$secname}}\n";									foreach $x (sort {$fname{$a} cmp $fname{$b}} @{$func{$secname}} )					{						$derivestr = "";						$derivestr = "  (<eng>derived from </eng>$fclass{$x}<jpn>傛傝宲彸</jpn>)" if( $fclass{$x} ne $name );						if( $prevfname ne $fname{$x} )						{							$prevfname = $fname{$x};							if( $prevfname ne "" ) { $out = $out . "$close<H4>$prevfname $derivestr</H4><DL class=member>"; }							else		   { $out = $out . "$close<DL>"; }							$close = "</DL>\n";						}						$out = $out ."<DT class=member>" . &makeref($fdecl{$x}, $name) . ";\n<DD class=member>" . $fdescr{$x} . "\n";					}					$out = $out . "$close\n";				}			}		}		$out = $out . "<H2><jpn>抣</jpn><eng>Values</eng></H2>\n$enums\n" if $enums ne "";		$out = $out . "<H2><jpn>拲庍</jpn><eng>Remarks</eng></H2>\n$remark\n" if $remark ne "";		$out = $out . "<H2><jpn>嶲徠</jpn><eng>See also</eng></H2>\n$see\n" if $see ne "";# 嵟廔張棟		$out =~ s#\n\n\n+#\n\n#g;		&sendfile(&make_filename("$name.html"), "Class $name: $title", $out);	}	return "<li><ref>$name</ref>$overview";}sub funcdef{	local($str, $file, $title) = @_;	local($name, $desc, $see, $decl, $namespace);	if( $str =~ s#<name>(.*?)</name>##si )	{		$name = $1;		$name =~ s/^\s+//;		$name =~ s/\s+$//;		$name =~ s/\s+/ /g;	}	else { die "no <name> in funcdef" };	if( $str =~ s#<desc>(.*?)</desc>##si )	{		$desc = $1;	}	else { die "no <desc> in funcdef $name" };	if( $str =~ s#<remark>(.*?)</remark>##si ) { $remark = $1; }	else { $remark = "" };	if( $str =~ s#<overview>(.*?)</overview>##si ) { $overview = " - $1"; }	else { $overview = "" };	if( $str =~ s#<see>(.*?)</see>##si ) { $see = &makeref($1,$name); }		else { $see = "" };	if( $str =~ s#<decl>(.*?)</decl>##si ) { $decl = $1; }	else { $decl = "" };	if( $str =~ s#<args>(.*?)</args>##si ) { $args = $1; }	else { $args = "" };	if( $str =~ s#<retval>(.*?)</retval>##si ) { $retval = $1; }	else { $retval = "" };	if( $str =~ s#<namespace>(.*?)</namespace>##si ) { $namespace = $1; }	else { $namespace = "" };	if( $str =~ s#<body>(.*?)</body>##si )	{		$body = $1;		$body =~ s# -->\n<!-- #\n#g;		if( $decl eq "" )		{			($decl) = ($body =~ /<!--\s+(.*[^\s])\s+-->/s);			$decl =~ s/\binline\b//s;	# cut off inline			$decl =~ s/^((\s*[^&{\s]|\s*&[a-z]+;)*)\s*[;{].*/$1/s;		# cut off function body			$decl =~ s/(template.*&lt;.*&gt;)/$1<br>/s;			$decl = "#include \"<ref>" . $file . "</ref>\"<br><br>\n$decl";		}	}	else	{		print $str;	}	if( $pass == 1 )	{		$link{"$name"} = &make_filename("$name.html");		$linkstr{"$name"} = "$name()";		$link{"$name()"} = &make_filename("$name.html");		$linkstr{"$name()"} = "$name()";

⌨️ 快捷键说明

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