📄 makedoc.perl
字号:
} if( $pass == 2 ) { $out = "<H1><eng>Function </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"; $out = $out . "<H2><jpn>愢柧</jpn><eng>Description</eng></H2>\n$desc\n"; $out = $out . "<H2><jpn>堷悢</jpn><eng>Arguments</eng></H2>\n$args\n" if $args ne ""; $out = $out . "<H2><jpn>栠傝抣</jpn><eng>Return value</eng></H2>\n$retval\n" if $retval 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;# print $out; &sendfile(&make_filename("$name.html"), "Function $name: $title", $out); } return "<li><ref>$name()</ref>$overview";}sub vardef{ return &convardef("var", @_);}sub constdef{ return &convardef("const", @_);}sub convardef{ local($convar, $str, $file, $title) = @_; local($name, $desc, $see, $decl, $namespace); if( $str =~ s#<name>(.*?)</name>##si ) { $name = $1; $name =~ s/\s//g; } else { die "no <name> in ${convar}def" }; if( $str =~ s#<desc>(.*?)</desc>##si ) { $desc = $1; } else { $desc = "" }; 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#<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+-->/); $decl =~ s/\s*[=\(;].*//; # cut off variable body $decl = "#include \"<ref>" . $file . "</ref>\"<br><br>\n$decl";# print $decl; } } if( $pass == 1 ) { $link{"$name"} = &make_filename("$name.html"); } if( $pass == 2 ) { if( $convar eq "var" ) { $out = "<H1><eng>Variable </eng>$name<jpn> 曄悢</jpn>$overview</H1>\n"; } else { $out = "<H1><eng>Constant </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"; $out = $out . "<H2><jpn>愢柧</jpn><eng>Description</eng></H2>\n$desc\n"; $out = $out . "<H2><jpn>堷悢</jpn><eng>Arguments</eng></H2>\n$args\n" if $args ne ""; $out = $out . "<H2><jpn>栠傝抣</jpn><eng>Return value</eng></H2>\n$retval\n" if $retval 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;# print $out; &sendfile(&make_filename("$name.html"), "$convar $name: $title", $out); } return "<li><ref>$name</ref>$overview";}sub escape{ local($s) = @_; $s =~ s#/\*([^\*]|\*[^/])+\*/##gs; $s =~ s/"([^"\\]|\\.)+"/"..."/gs; $s =~ s/'([^"\\]|\\.)+'/'.'/gs; return $s;}sub encode{ local($s) = @_; $s =~ s/&/&/g; $s =~ s/>/>/g; $s =~ s/</</g; return $s;}sub decode{ local($s) = @_; $s =~ s/>/>/g; $s =~ s/</</g; $s =~ s/&/&/g; return $s;}sub make_filename{ local($s) = @_; $s =~ s/ /_/g; $s =~ s/\./_/g; $s =~ s/>/_gt_/g; $s =~ s/</_lt_/g; $s =~ s/&/_amp_/g; $s =~ s/[;:]/_/g; $s =~ s/</_lt_/g; $s =~ s/>/_gt_/g; $s =~ s/&/_amp_/g; $s =~ s/_html$/.html/g; return $s;}sub makeref{ local($s, $x) = @_; local($t) = &decode($s); $t =~ s#<ref>.*?</ref>##sig; local($i, $last); local(@l) = split(/[^\w0-9\.]+/, $t); @l = sort {length($b) <=> length($a)} @l; $last = ""; foreach $i (@l) { if( defined $link{$i} && $i ne $x && $i ne $last) { while( $s =~ s#^(([^<]|<([^Rr>]|[Rr]([^Re>]|[Ee]([^Ff>]|[Ff][^>])))[^>]*>|<[Rr][Ee][Ff]>.*</[Rr][Ee][Ff]>)*)\b$i\b#$1<ref>$i</ref>#sg ) { } } $last = $i; } return $s;}sub makelink{ local($s, $loc) = @_; return '<eng><a href="' . $link{$s} . '">' . $linkstr{$s} . '</a></eng>' . '<jpn><a href="j-' . $link{$s} . '">' . $linkstr{$s} . '</a></jpn>' if defined $linkstr{$s}; return '<eng><a href="' . $link{$s} . '">' . $s . '</a></eng>' . '<jpn><a href="j-' . $link{$s} . '">' . $s . '</a></jpn>' if defined $link{$s}; warn "Undefined reference $s in $loc"; return $s;}sub sendfile{ local($name, $title, $out) = @_; local($jname, $header, $footer, $jout, $oldout); $jname = "j-" . $name; $header = "<HTML>\n" . "<!-- This file is automatically generated by makedoc.perl. Do not edit -->\n" . "<HEAD><TITLE> $title </TITLE><LINK REL=stylesheet TYPE=\"text/css\" HREF=\"cssdef.css\"></HEAD><BODY>\n"; $footer = "\n\n<br><br><hr><eng><a href=\"$jname\">To Japanese</eng></a><jpn><a href=\"$name\">To English</a></jpn><br>\n" . "<script> <!--\n" . "xx = new Date(document.lastModified); yy = xx.getYear(); mm = xx.getMonth() + 1; dd = xx.getDate();\n" . "if (yy < 2000) { yy += 1900; } if (mm < 10) { mm = \"0\" + mm; } if (dd < 10) { dd = \"0\" + dd; }\n" . "document.write(\"Last Modified: \" + yy + \"/\" + mm + \"/\" + dd);\n" . "-->\n" . "</script>\n" . "</body></html>" ; $out = $header . $out . $footer; $out =~ s#<ref>(.*?)</ref>#&makelink($1,$name)#esig; $jout = $out; $out =~ s#<jpn>(([^<]|<[^j]|<j[^p]|<jp[^n]|<jpn[^>]|<jpn>.*?</jpn>)*?)</jpn>##sig; $out =~ s#</?eng>##sig; $jout =~ s#<eng>(([^<]|<[^e]|<e[^n]|<en[^g]|<eng[^>]|<eng>.*?</eng>)*?)</eng>##sig; $jout =~ s#</?jpn>##sig; $oldout = ""; if( -r "$docdir$name" ) { open (CMP, "<$docdir$name"); while(<CMP>) { $oldout = $oldout . $_; } close(CMP); } if( $oldout ne $out ) { open (OUT, ">$docdir$name"); print OUT $out; close(OUT); } $oldout = ""; if( -r "$docdir$jname" ) { open (CMP, "<$docdir$jname"); while(<CMP>) { $oldout = $oldout . $_; } close(CMP); } if( $oldout ne $jout ) { open (OUT, ">$docdir$jname"); print OUT $jout; close(OUT); }}sub parent_search{ local( $name, $imode, $parents ) = @_; foreach $parent( @{$parents} ) { ($class, $mode) = ($parent =~ /^([^\&\(\)]*)[^\(\)]*\(.*\)$/); if( $mode eq "" ) { ($class) = ($parent =~ /^([^\&\(\)\s]*)/); $mode = "public"; }# print "search $name -> $class, $mode <$parent>\n"; $mode =~ s/virtual\s+//g; next if( $imode ne "root" && $mode eq "private" ); $mode = "protected" if $mode eq "public" && $imode eq "protected"; $mode = "private" if $imode eq "private";# print "-- $name <- '$class'\n"; next if( ! defined $classmember{$class} ); foreach $fname ( keys %{$classmember{$class}} ) {# print "??? $name <- $class : $fname\n"; if( ! defined $classmember{$name}{$fname} ) {# print "--- $name <- $class : $fname\n"; $classmember{$name}{$fname} = $classmember{$class}{$fname}; foreach $membercount ( @{$classmember{$class}{$fname}} ) { $fsect = $fsect{$membercount}; next if( $fsect =~ /private/ ); if( $mode ne "public" && $fsect=~ /public/ ) { $fsect =~ s/public/$mode/; } elsif( $mode eq "private" && $fsect =~ /protected/ ) { $fsect =~ s/protected/private/; } push(@{$func{$fsect}}, $membercount); # print " *** $name, $fsect, $membercount, @{$func{$fsect}}\n"; } } } if( defined $parent_class{$class} ) {# print "parents defined for $class = " ;# foreach $x (@{$parent_class{$class}}) { print "$x "; }# print "\n"; &parent_search( $name, $mode, $parent_class{$class} ); } else {# print "No parents defined for $class\n"; } }}sub makesecname{ local($s) = @_; $s =~ s#friend func#<eng>Friend function</eng><jpn>僼儗儞僪娭悢</jpn>#; $s =~ s#public ##; $s =~ s#private #<eng>Private </eng><jpn>僾儔僀儀乕僩 </jpn>#; $s =~ s#protected #<eng>Protected </eng><jpn>曐岇</jpn>#; $s =~ s#friend #<eng>Friend </eng><jpn>僼儗儞僪 </jpn>#; $s =~ s#typedef#<eng>Typedefs</eng><jpn>typedef</jpn>#; $s =~ s#subclass#<eng>inner class</eng><jpn>撪晹僋儔僗</jpn>#; $s =~ s#enum#<eng>enum</eng><jpn>楍嫇宆</jpn>#; $s =~ s#const#<eng>constant</eng><jpn>掕悢</jpn>#; $s =~ s#staticmember#<eng>static member variable</eng><jpn>惷揑儊儞僶曄悢</jpn>#; $s =~ s#staticfunc#<eng>static member function</eng><jpn>惷揑儊儞僶娭悢</jpn>#; $s =~ s#func#<eng>member function</eng><jpn>儊儞僶娭悢</jpn>#; $s =~ s#member#<eng>member variable</eng><jpn>儊儞僶曄悢</jpn>#; $s =~ s#ctor#<eng>constructor</eng><jpn>僐儞僗僩儔僋僞</jpn>#; $s =~ s#dtor#<eng>destructor</eng><jpn>僨僗僩儔僋僞</jpn>#; $s =~ s#operator#<eng>operator</eng><jpn>墘嶼巕</jpn>#; $s =~ s#class#<eng>class</eng><jpn>僋儔僗</jpn>#; return $s;}sub write_cssfile{ local($s) = @_; open(OUT, ">$docdir$s");print OUT <<'__END__';/*********************************************************************//* This file is automatically generated by makedoc.perl. DO NOT EDIT *//*********************************************************************/body { background-color: rgb(255, 255, 224); }H1 { color: #7f0000; text-align: center; background-color: rgb(255,255,255); padding-left: 10%; padding-right: 10%; padding-top: 1ex; padding-bottom: 1ex; }H2 { color: #7f0000; background-color: rgb(224,224,255);}H3 { color: #7f0000; border-style: solid; border-width: 2px 0px 0px 0px; border-color: rgb(0,0,255); }H4 { margin-bottom: 0em; margin-left: 1em; border-style: solid; border-width: 1px 0px 0px 0px; border-color: rgb(0, 0, 255);}P { text-indent: 1em; margin-left: 5%; margin-right: 5%; line-height: 125%;}DL.member { margin-left: 3em; margin-top: 0em; }HR { color: rgb(192,192,192); height: 5px;}/*********************************************************************/__END__ close(OUT);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -