File indexing completed on 2024-05-19 16:01:25
0001 #!/usr/bin/perl 0002 # Copyright (C) 2006 Thomas Zander <zander@kde.org> 0003 # this script generates dox based on the availability of a Mainpage.dox file. 0004 # whereever there is one, doxygen is started. 0005 0006 #set basedir relative to ours. 0007 $rootdir=`pwd`; 0008 chomp($rootdir); 0009 $basedir = $rootdir."/doc/api/"; 0010 if(! -d $basedir) { 0011 print "Please start this script from the root of the checkout and make sure that there is a doc/api/ dir\n"; 0012 exit 1; 0013 } 0014 0015 # used in the tag decleration 0016 $remoteDocs_kdelibs="$rootdir/../kdelibs/doc/api"; 0017 $remoteDocs_qt="$rootdir/../qt-copy/doc/api"; 0018 0019 $doxygenconftmp=".doxygen.conf.tmp"; 0020 0021 #init 0022 if($#ARGV >= 0) { 0023 my $ok=0; 0024 for($i=0; $i <= $#ARGV; $i++) { 0025 if( -f "$rootdir/$ARGV[$i]/Mainpage.dox") { 0026 push @sections, $ARGV[$i]; 0027 $ok=1; 0028 } 0029 elsif($ARGV[$i] eq "--remote") { 0030 print "Using remote url for browing\n"; 0031 $remoteDocs_kdelibs="http://www.calligra.org/developer/kdelibs-api/"; 0032 $remoteDocs_qt="http://www.calligra.org/developer/qt-api/"; 0033 $ok=1; 0034 } else { 0035 print "No Mainpage.dox found at '$rootdir/$ARGV[$i]' skipping..\n"; 0036 } 0037 } 0038 if($ok == 0) { 0039 print "Nothing to do!\n"; 0040 exit; 0041 } 0042 } 0043 if($#sections == -1) { 0044 print "Finding all sections..."; 0045 @output=`find . -name Mainpage.dox -type f | grep -v _darcs`; 0046 foreach $section (@output) { 0047 chomp($section); 0048 $section=~s/^\.\///; 0049 $section=~s/\/Mainpage.dox//; 0050 # skip root dir while there are so little Mainpage.dox files 0051 if($section eq "Mainpage.dox") { 0052 next; 0053 } 0054 push @sections,$section; 0055 } 0056 @output=""; 0057 } 0058 0059 # for each section 0060 print $#sections+1 ." found"; 0061 $i=1; 0062 $totalSteps=$#sections*3 + 4; 0063 foreach $section (@sections) { 0064 print "\n". $i++ ."/$totalSteps) Indexing section: '$section' "; 0065 0066 chdir $section; 0067 @dirs=`find . -type d | grep -v .svn | grep -v _darcs | grep -v '/old\\b' | grep -v '/obsolete\\b'`; 0068 print "\n". $i++ ."/$totalSteps) Creating tags "; 0069 &createConf($section, @dirs); 0070 system "mkdir -p \"$basedir$section\""; 0071 system "doxygen $doxygenconftmp >/dev/null 2>/dev/null"; 0072 chdir $rootdir; 0073 } 0074 0075 foreach $section (@sections) { 0076 print "\n". $i++ ."/$totalSteps) Creating docs for section: '$section' "; 0077 chdir $section; 0078 &alterConf(); 0079 $sect=$section; 0080 $sect=~s/\//-/g; 0081 system "doxygen $doxygenconftmp.2 >/dev/null 2>$basedir$sect/err.log"; 0082 unlink "$doxygenconftmp"; 0083 unlink "$doxygenconftmp.2"; 0084 chdir $rootdir; 0085 } 0086 0087 #Create linking page 0088 print "\n". $i ."/$totalSteps) Creating wrapper pages"; 0089 my %classes; 0090 my %packages; 0091 0092 chdir "$rootdir/doc/api"; 0093 foreach $section (@sections) { 0094 $sect=$section; 0095 $sect=~s/\//-/g; 0096 $sect=~s/-$//; 0097 # read from TAGS 0098 $tagfile="$section\_TAGS"; 0099 $tagfile=~s/\//_/g; 0100 open(INPUT, "$sect/$tagfile"); 0101 $class=""; 0102 foreach $line (<INPUT>) { 0103 if($line=~/compound kind=\"class\"/) { $class="Class"; } 0104 elsif($line=~/compound kind=\"struct\"/) { $class="Struct"; } 0105 elsif($line=~/compound kind=\"namespace\"/) { $class="Namespace"; } 0106 elsif($class ne "" && $line=~/name\>(.*)\<\/name/) { 0107 $className=$1; 0108 } 0109 elsif($class ne "" && $line=~/filename\>(.*)\<\/filename/) { 0110 my $file = $1; 0111 $file=~s/^$rootdir/$project/; 0112 &addClass($file, $section, $className, $class); 0113 } 0114 } 0115 close INPUT; 0116 0117 # read undocumented from err.log 0118 &parseErrorLog("$sect", "err.log", $section); 0119 } 0120 chdir $rootdir; 0121 0122 $browsingHtml = "<html><body>\n" 0123 . "<style>.FrameItemFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif }</style>\n" 0124 . "<table border=\"0\" width=\"100%\"><tr><td nowrap><font class=\"FrameItemFont\">\n"; 0125 $browsingHtmlClose = "</font></td></tr></body></html>\n"; 0126 0127 # generate packages.html 0128 open(FILE, ">$rootdir/doc/api/packages.html"); 0129 print FILE "$browsingHtml"; 0130 foreach $section (@sections) { 0131 my $sect=$section; 0132 $sect=~s/\//-/g; 0133 $sect=~s/-$//; 0134 $packages{$sect}= "<a href=\"$sect/annotated.html\" target=\"main\">$section</a><br>\n"; 0135 } 0136 foreach $key (sort {uc($a) cmp uc($b)} keys %packages) { 0137 print FILE $packages{$key}; 0138 } 0139 print FILE $browsingHtmlClose; 0140 close FILE; 0141 0142 # sort and print 0143 open(FILE, ">$rootdir/doc/api/allClasses.html"); 0144 print FILE "$browsingHtml"; 0145 print FILE "<b><a href=\"allClasses.html\">All Classes</a> / <a href=\"allClasses-light.html\">Most Classes</a></b><br/><br/>\n"; 0146 foreach $key (sort {uc($a) cmp uc($b)} keys %classes) { 0147 print FILE $classes{$key}; 0148 } 0149 print FILE $browsingHtmlClose; 0150 close FILE; 0151 system "grep -v '/undocumented.html' $rootdir/doc/api/allClasses.html > $rootdir/doc/api/allClasses-light.html"; 0152 0153 # generate simple static index.html 0154 open (FILE,">$rootdir/doc/api/index.html"); 0155 if($rootdir=~/.*\/(.*)$/) { 0156 $project=$1; 0157 } 0158 print FILE "<html><head><title>$project API docs</title><frameset cols=\"20%,80%\">"; 0159 0160 if ($#sections == 0) { # remove 'packages' frameset when there is only one section 0161 print FILE "<frame src=\"allClasses-light.html\">"; 0162 my $section = $sections[0]; 0163 $section=~s/\//-/g; 0164 $section=~s/-$//; 0165 print FILE "<frame src=\"$section/index.html\" name=\"main\">"; 0166 } else { 0167 print FILE "<frameset rows=\"30%,70%\"><frame src=\"packages.html\">"; 0168 print FILE "<frame src=\"allClasses-light.html\">"; 0169 print FILE "</frameset>"; 0170 print FILE "<frame src=\"sections.html\" name=\"main\">"; 0171 } 0172 print FILE "</frameset>\n</head></html>"; 0173 0174 close (FILE); 0175 0176 # generate sections.html 0177 open (FILE,">$rootdir/doc/api/sections.html"); 0178 print FILE "<html><body><ul>\n"; 0179 foreach $section (@sections) { 0180 $sect=$section; 0181 $sect=~s/\//-/g; 0182 $sect=~s/-$//; 0183 # find out errorcount; 0184 &parseErrorLog("$rootdir/doc/api/$sect", "err.log", $section); 0185 print FILE "<li><a href=\"$sect/annotated.html\">$section</a> <font size=\"-2\">(<a href=\"$sect/annotated.html\" target=\"_top\">NoFrames</a>) "; 0186 if($error > 0) { 0187 print FILE "[<a href=\"$sect/errors.html\">$error errors</a>] "; 0188 } 0189 if($undocumented > 0) { 0190 print FILE "[<a href=\"$sect/undocumented.html\">$undocumented undocumented</a>]"; 0191 } 0192 print FILE "</font></li>\n"; 0193 } 0194 print FILE "</ul></body></html>\n"; 0195 close (FILE); 0196 print "\n"; 0197 0198 0199 ############## 0200 sub alterConf() { 0201 open(INPUT, "$doxygenconftmp") || die "internal error: $doxygenconftmp missing!"; 0202 open(FILE, ">$doxygenconftmp.2"); 0203 foreach $line (<INPUT>) { 0204 if($line=~/^GENERATE_HTML/) { 0205 print FILE "GENERATE_HTML=YES\n"; 0206 } 0207 elsif(! ($line=~/^GENERATE_TAGFILE/)) { 0208 print FILE $line; 0209 } 0210 } 0211 close INPUT; 0212 close FILE; 0213 } 0214 0215 sub createConf() { 0216 my $name = shift(@_); 0217 open FILE, ">$doxygenconftmp"; 0218 0219 print FILE "INPUT="; 0220 dirs: foreach $dir (@_) { 0221 chomp($dir); 0222 $dir=~s/^\.\///; 0223 if($dir=~/tests$/) { next; } 0224 foreach $sect (@sections) { 0225 # if another section is a subdir of this one; don't include its dirs. 0226 $target="$name/$dir"; 0227 #print "name: '$name', target: '$target', sect: '$sect'\n"; 0228 if($sect ne $name && $target=~m/$sect/ && !($name=~m/^$sect/)) { 0229 #print " skipping, '$sect' is in the start of '$target'\n"; 0230 next dirs; 0231 } 0232 } 0233 #print "USING '$dir'\n"; 0234 print FILE "$dir "; 0235 } 0236 print FILE "\n"; 0237 print FILE "PROJECT_NAME=$name\n"; 0238 #print FILE "PROJECT_NUMBER=\n"; 0239 my $output="$name"; 0240 $output=~s/\//-/g; 0241 print FILE "OUTPUT_DIRECTORY=$basedir$output\n"; 0242 #print FILE "CREATE_SUBDIRS=YES\n"; 0243 #print FILE "OUTPUT_LANGUAGE=English\n"; 0244 #print FILE "USE_WINDOWS_ENCODING=NO\n"; 0245 print FILE "BRIEF_MEMBER_DESC=YES\n"; 0246 print FILE "REPEAT_BRIEF=YES\n"; 0247 #print FILE "ABBREVIATE_BRIEF=\n"; 0248 #print FILE "ALWAYS_DETAILED_SEC=NO\n"; 0249 #print FILE "INLINE_INHERITED_MEMB=NO\n"; 0250 print FILE "FULL_PATH_NAMES=YES\n"; 0251 print FILE "STRIP_FROM_PATH=$rootdir\n"; 0252 #print FILE "STRIP_FROM_INC_PATH=\n"; 0253 #print FILE "SHORT_NAMES=NO\n"; 0254 print FILE "JAVADOC_AUTOBRIEF=YES\n"; 0255 #print FILE "MULTILINE_CPP_IS_BRIEF=NO\n"; 0256 #print FILE "DETAILS_AT_TOP=NO\n"; 0257 #print FILE "INHERIT_DOCS=NO\n"; 0258 #print FILE "SEPARATE_MEMBER_PAGES=NO\n"; 0259 #print FILE "TAB_SIZE=4\n"; 0260 #print FILE "ALIASES=\n"; 0261 #print FILE "OPTIMIZE_OUTPUT_FOR_C=NO\n"; 0262 #print FILE "OPTIMIZE_OUTPUT_JAVA=NO\n"; 0263 #print FILE "BUILTIN_STL_SUPPORT=NO\n"; 0264 #print FILE "DISTRIBUTE_GROUP_DOC=NO\n"; 0265 #print FILE "SUBGROUPING=YES\n"; 0266 #print FILE "EXTRACT_ALL=NO\n"; 0267 #print FILE "EXTRACT_PRIVATE=NO\n"; 0268 #print FILE "EXTRACT_STATIC=NO\n"; 0269 print FILE "EXTRACT_LOCAL_CLASSES=NO\n"; 0270 #print FILE "EXTRACT_LOCAL_METHODS=NO\n"; 0271 #print FILE "HIDE_UNDOC_MEMBERS=NO\n"; 0272 #print FILE "HIDE_UNDOC_CLASSES=NO\n"; 0273 #print FILE "HIDE_FRIEND_COMPOUNDS=NO\n"; 0274 #print FILE "HIDE_IN_BODY_DOCS=NO\n"; 0275 #print FILE "INTERNAL_DOCS=NO\n"; 0276 #print FILE "CASE_SENSE_NAMES=YES\n"; 0277 #print FILE "HIDE_SCOPE_NAMES=NO\n"; 0278 #print FILE "SHOW_INCLUDE_FILES=YES\n"; 0279 #print FILE "INLINE_INFO=YES\n"; 0280 #print FILE "SORT_MEMBER_DOCS=YES\n"; 0281 #print FILE "SORT_BRIEF_DOCS=NO\n"; 0282 #print FILE "SORT_BY_SCOPE_NAME=NO\n"; 0283 #print FILE "GENERATE_TODOLIST=YES\n"; 0284 #print FILE "GENERATE_TESTLIST=YES\n"; 0285 #print FILE "GENERATE_BUGLIST=YES\n"; 0286 #print FILE "GENERATE_DEPRECATEDLIST=YES\n"; 0287 #print FILE "ENABLED_SECTIONS= \n"; 0288 #print FILE "MAX_INITIALIZER_LINES=30\n"; 0289 #print FILE "SHOW_USED_FILES=YES\n"; 0290 #print FILE "SHOW_DIRECTORIES=NO\n"; 0291 #print FILE "FILE_VERSION_FILTER=\n"; 0292 #print FILE "QUIET=YES\n"; 0293 #print FILE "WARNINGS=YES\n"; 0294 #print FILE "WARN_IF_UNDOCUMENTED=YES\n"; 0295 #print FILE "WARN_IF_DOC_ERROR=YES\n"; 0296 #print FILE "WARN_NO_PARAMDOC=NO\n"; 0297 #print FILE "WARN_FORMAT=\"\$file:\$line: \$text\"\n"; 0298 #print FILE "WARN_LOGFILE=\n"; 0299 #print FILE "FILE_PATTERNS=*.h\n"; 0300 #print FILE "RECURSIVE=NO\n"; 0301 #print FILE "EXCLUDE=\n"; 0302 #print FILE "EXCLUDE_SYMLINKS=NO\n"; 0303 print FILE "EXCLUDE_PATTERNS=*_p.*\n"; 0304 #print FILE "EXAMPLE_PATH=$rootdir\n"; 0305 #print FILE "EXAMPLE_PATTERNS=\n"; 0306 #print FILE "EXAMPLE_RECURSIVE=YES\n"; 0307 print FILE "IMAGE_PATH=$basedir\n"; 0308 #print FILE "INPUT_FILTER=\n"; 0309 #print FILE "FILTER_PATTERNS=\n"; 0310 #print FILE "FILTER_SOURCE_FILES=NO\n"; 0311 print FILE "SOURCE_BROWSER=YES\n"; 0312 #print FILE "INLINE_SOURCES=NO\n"; 0313 #print FILE "STRIP_CODE_COMMENTS=YES\n"; 0314 #print FILE "REFERENCED_BY_RELATION=YES\n"; 0315 #print FILE "REFERENCES_RELATION=YES\n"; 0316 #print FILE "USE_HTAGS=NO\n"; 0317 print FILE "VERBATIM_HEADERS=NO\n"; 0318 #print FILE "ALPHABETICAL_INDEX=NO\n"; 0319 #print FILE "COLS_IN_ALPHA_INDEX=5\n"; 0320 #print FILE "IGNORE_PREFIX=\n"; 0321 print FILE "GENERATE_HTML=NO\n"; # no since we enabled this in the alterConf() 0322 print FILE "HTML_OUTPUT=.\n"; 0323 #print FILE "HTML_FILE_EXTENSION=.html\n"; 0324 #print FILE "HTML_HEADER=\n"; 0325 #print FILE "HTML_FOOTER=\n"; 0326 #print FILE "HTML_STYLESHEET=\n"; 0327 #print FILE "HTML_ALIGN_MEMBERS=YES\n"; 0328 #print FILE "GENERATE_HTMLHELP=NO\n"; 0329 #print FILE "CHM_FILE=\n"; 0330 #print FILE "HHC_LOCATION=\n"; 0331 #print FILE "GENERATE_CHI=NO\n"; 0332 #print FILE "BINARY_TOC=YES\n"; 0333 #print FILE "TOC_EXPAND=NO\n"; 0334 #print FILE "DISABLE_INDEX=NO\n"; 0335 #print FILE "ENUM_VALUES_PER_LINE=4\n"; 0336 #print FILE "GENERATE_TREEVIEW=NO\n"; 0337 #print FILE "TREEVIEW_WIDTH=250\n"; 0338 print FILE "GENERATE_LATEX=NO\n"; 0339 #print FILE "GENERATE_RTF=NO\n"; 0340 #print FILE "GENERATE_MAN=NO\n"; 0341 #print FILE "GENERATE_XML=NO\n"; 0342 #print FILE "GENERATE_AUTOGEN_DEF=NO\n"; 0343 #print FILE "GENERATE_PERLMOD=NO\n"; 0344 #print FILE "ENABLE_PREPROCESSING=YES\n"; 0345 #print FILE "MACRO_EXPANSION=NO\n"; 0346 #print FILE "EXPAND_ONLY_PREDEF=NO\n"; 0347 #print FILE "SEARCH_INCLUDES=YES\n"; 0348 #print FILE "INCLUDE_PATH=\n"; 0349 #print FILE "INCLUDE_FILE_PATTERNS=\n"; 0350 #print FILE "PREDEFINED=\n"; 0351 #print FILE "EXPAND_AS_DEFINED=\n"; 0352 #print FILE "SKIP_FUNCTION_MACROS=YES\n"; 0353 print FILE "TAGFILES="; 0354 foreach $sect (@sections) { 0355 # one tag for each section 0356 my $tagfile="$sect\_TAGS"; 0357 my $section=$sect; 0358 $section=~s/\//-/g; 0359 $section=~s/-$//; 0360 $tagfile=~s/\//_/g; 0361 if($sect ne $name) { 0362 print FILE "\"$basedir$section/$tagfile=../$section\" "; 0363 } 0364 } 0365 if($rootdir=~/kdelibs/) { } elsif(-d "$rootdir/../kdelibs") { 0366 print FILE "$rootdir/../kdelibs/doc/api/kio/kio_TAGS=$remoteDocs_kdelibs/kio $rootdir/../kdelibs/doc/api/kjs-api/kjs_api_TAGS=$remoteDocs_kdelibs/kjs-api $rootdir/../kdelibs/doc/api/kjs-wtf/kjs_wtf_TAGS=$remoteDocs_kdelibs/kjs-wtf $rootdir/../kdelibs/doc/api/kjs/kjs_TAGS=$remoteDocs_kdelibs/kjs $rootdir/../kdelibs/doc/api/interfaces/interfaces_TAGS=$remoteDocs_kdelibs/interfaces $rootdir/../kdelibs/doc/api/interfaces-khexedit/interfaces_khexedit_TAGS=$remoteDocs_kdelibs/interfaces-khexedit $rootdir/../kdelibs/doc/api/interfaces-ktexteditor/interfaces_ktexteditor_TAGS=$remoteDocs_kdelibs/interfaces-ktexteditor $rootdir/../kdelibs/doc/api/interfaces-kspeech/interfaces_kspeech_TAGS=$remoteDocs_kdelibs/interfaces-kspeech $rootdir/../kdelibs/doc/api/interfaces-kmediaplayer/interfaces_kmediaplayer_TAGS=$remoteDocs_kdelibs/interfaces-kmediaplayer $rootdir/../kdelibs/doc/api/kate/kate_TAGS=$remoteDocs_kdelibs/kate $rootdir/../kdelibs/doc/api/kded/kded_TAGS=$remoteDocs_kdelibs/kded $rootdir/../kdelibs/doc/api/kdecore/kdecore_TAGS=$remoteDocs_kdelibs/kdecore $rootdir/../kdelibs/doc/api/knewstuff/knewstuff_TAGS=$remoteDocs_kdelibs/knewstuff $rootdir/../kdelibs/doc/api/dnssd/dnssd_TAGS=$remoteDocs_kdelibs/dnssd $rootdir/../kdelibs/doc/api/kdesu/kdesu_TAGS=$remoteDocs_kdelibs/kdesu $rootdir/../kdelibs/doc/api/kdeui/kdeui_TAGS=$remoteDocs_kdelibs/kdeui $rootdir/../kdelibs/doc/api/kfile/kfile_TAGS=$remoteDocs_kdelibs/kfile $rootdir/../kdelibs/doc/api/khtml/khtml_TAGS=$remoteDocs_kdelibs/khtml $rootdir/../kdelibs/doc/api/kinit/kinit_TAGS=$remoteDocs_kdelibs/kinit $rootdir/../kdelibs/doc/api/kross/kross_TAGS=$remoteDocs_kdelibs/kross $rootdir/../kdelibs/doc/api/solid/solid_TAGS=$remoteDocs_kdelibs/solid $rootdir/../kdelibs/doc/api/kconf_update/kconf_update_TAGS=$remoteDocs_kdelibs/kconf_update $rootdir/../kdelibs/doc/api/kdoctools/kdoctools_TAGS=$remoteDocs_kdelibs/kdoctools $rootdir/../kdelibs/doc/api/kioslave/kioslave_TAGS=$remoteDocs_kdelibs/kioslave $rootdir/../kdelibs/doc/api/nepomuk/nepomuk_TAGS=$remoteDocs_kdelibs/nepomuk $rootdir/../kdelibs/doc/api/kimgio/kimgio_TAGS=$remoteDocs_kdelibs/kimgio $rootdir/../kdelibs/doc/api/kparts/kparts_TAGS=$remoteDocs_kdelibs/kparts $rootdir/../kdelibs/doc/api/kutils/kutils_TAGS=$remoteDocs_kdelibs/kutils $rootdir/../kdelibs/doc/api/kjsembed/kjsembed_TAGS=$remoteDocs_kdelibs/kjsembed $rootdir/../kdelibs/doc/api/kde3support/kde3support_TAGS=$remoteDocs_kdelibs/kde3support $rootdir/../kdelibs/doc/api/kde3support-kunittest/kde3support_kunittest_TAGS=$remoteDocs_kdelibs/kde3support-kunittest $rootdir/../kdelibs/doc/api/sonnet/sonnet_TAGS=$remoteDocs_kdelibs/sonnet $rootdir/../kdelibs/doc/api/threadweaver/threadweaver_TAGS=$remoteDocs_kdelibs/threadweaver"; 0367 } 0368 if($rootdir=~/qt-copy/) { } elsif(-d "$rootdir/../qt-copy") { 0369 print FILE " $rootdir/../qt-copy/doc/api/gui/gui_TAGS=$remoteDocs_qt/gui/ $rootdir/../qt-copy/doc/api/corelib/corelib_TAGS=$remoteDocs_qt/corelib/ $rootdir/../qt-copy/doc/api/network/network_TAGS=$remoteDocs_qt/network/ $rootdir/../qt-copy/doc/api/opengl/opengl_TAGS=$remoteDocs_qt/opengl/ $rootdir/../qt-copy/doc/api/plugins/plugins_TAGS=$remoteDocs_qt/plugins/ $rootdir/../qt-copy/doc/api/sql/sql_TAGS=$remoteDocs_qt/sql/ $rootdir/../qt-copy/doc/api/svg/svg_TAGS=$remoteDocs_qt/svg/ $rootdir/../qt-copy/doc/api/xml/xml_TAGS=$remoteDocs_qt/xml/"; 0370 } 0371 print FILE "\n"; 0372 $tagfile="$name\_TAGS"; 0373 $tagfile=~s/\//_/g; 0374 print FILE "GENERATE_TAGFILE=$basedir$output/$tagfile\n"; 0375 #print FILE "ALLEXTERNALS=NO\n"; 0376 #print FILE "EXTERNAL_GROUPS=YES\n"; 0377 #print FILE "PERL_PATH=/usr/bin/perl\n"; 0378 #print FILE "CLASS_DIAGRAMS=YES\n"; 0379 #print FILE "HIDE_UNDOC_RELATIONS=YES\n"; 0380 #print FILE "HAVE_DOT=NO\n"; 0381 #print FILE "CLASS_GRAPH=YES\n"; 0382 #print FILE "COLLABORATION_GRAPH=YES\n"; 0383 #print FILE "GROUP_GRAPHS=YES\n"; 0384 #print FILE "UML_LOOK=NO\n"; 0385 #print FILE "TEMPLATE_RELATIONS=NO\n"; 0386 #print FILE "INCLUDE_GRAPH=YES\n"; 0387 #print FILE "INCLUDED_BY_GRAPH=YES\n"; 0388 #print FILE "CALL_GRAPH=NO\n"; 0389 #print FILE "GRAPHICAL_HIERARCHY=YES\n"; 0390 #print FILE "DIRECTORY_GRAPH=YES\n"; 0391 #print FILE "DOT_IMAGE_FORMAT=png\n"; 0392 #print FILE "DOT_PATH=\n"; 0393 #print FILE "DOTFILE_DIRS=\n"; 0394 #print FILE "MAX_DOT_GRAPH_WIDTH=1024\n"; 0395 #print FILE "MAX_DOT_GRAPH_HEIGHT=1024\n"; 0396 #print FILE "MAX_DOT_GRAPH_DEPTH=0\n"; 0397 #print FILE "DOT_TRANSPARENT=NO\n"; 0398 #print FILE "DOT_MULTI_TARGETS=NO\n"; 0399 #print FILE "GENERATE_LEGEND=YES\n"; 0400 #print FILE "DOT_CLEANUP=YES\n"; 0401 #print FILE "SEARCHENGINE=NO\n"; 0402 0403 # copy arguments from Mainpage.dox 0404 open INPUT, "Mainpage.dox"; 0405 my $comment=0; 0406 foreach $in (<INPUT>) { 0407 if($in=~/\/\*/) { $comment=1; } 0408 if($in=~/\*\//) {$comment=0; next; } 0409 if($comment == 1) { next; } 0410 $in=~s/^\/\/\s*//; 0411 print FILE $in; 0412 } 0413 0414 close FILE; 0415 } 0416 0417 # writes the undocumented and error pages 0418 sub parseErrorLog() { 0419 my $dir = shift(@_); 0420 my $logfile = shift(@_); 0421 my $section = shift(@_); 0422 $undocumented=0; 0423 $error=0; 0424 open INPUT,"$dir/$logfile" || die "Can't read logfile '$dir/$logfile'\n"; 0425 open UNDOC, ">$dir/undocumented.html"; 0426 print UNDOC "<html><body><h2>$section: undocumented constructs found</h2><ul>Please consider typing some docs, or adding a \\internal tag to the headerfile as soon as you find out what these items do or mean. Thanks!\n"; 0427 open ERRORS, ">$dir/errors.html"; 0428 $inParameters=0; 0429 foreach $line (<INPUT>) { 0430 if($line=~/^\S*$/) { 0431 if($inParameters == 1) { 0432 print UNDOC "</ul></li>\n"; 0433 $inParameters = 0; 0434 } 0435 next; 0436 } 0437 chomp($line); 0438 if($inParameters == 1) { 0439 print UNDOC "<li>$line</li>\n"; 0440 next; 0441 } 0442 if($line=~m/^(.*):(\d+): (.*)$/) { 0443 my $file=$1; 0444 my $lineNumber=$2; 0445 my $message=$3; 0446 $file=~s/^$rootdir/$project/; 0447 if($message=~m/Warning: (Compound|Member) (.*) is not documented/) { 0448 $undocumented++; 0449 print UNDOC &printFile(1, $file); 0450 print UNDOC "<li>$lineNumber: $1 $2</li>\n"; 0451 if($1 eq "Compound") { 0452 &addClass("", $dir, $2, "Class"); 0453 } 0454 next; 0455 } 0456 if($message=~m/Warning: The following parameters of (.*) are not documented:/) { 0457 $inParameters = 1; 0458 $undocumented++; 0459 print UNDOC "<li>$lineNumber: parameters of $1<ul>\n"; 0460 next; 0461 } 0462 if($message=~m/Warning: argument `(.*)' of command \@param is not found in the argument list of /) { 0463 $error++; 0464 print ERRORS &printFile(2, $file); 0465 print ERRORS "<li>$lineNumber: argument $1 is not present in argument list</li>\n"; 0466 next; 0467 } 0468 if($message=~m/Warning: Internal inconsistency: /) { 0469 # ignore. 0470 next; 0471 } 0472 if($message=~m/Duplicate anchor .* found/) { 0473 # ignore. 0474 next; 0475 } 0476 $error++; 0477 print ERRORS &printFile(2, $file); 0478 print ERRORS "<li>$lineNumber: $message\n"; 0479 next; 0480 } 0481 $error++; 0482 print ERRORS "$line<br>\n"; 0483 } 0484 close ERRORS; 0485 if($error == 0) { 0486 unlink "$dir/errors.html"; 0487 } 0488 close UNDOC; 0489 if($undocumented == 0) { 0490 unlink "$dir/undocumented.html"; 0491 } 0492 close INPUT; 0493 } 0494 0495 sub printFile() { 0496 my $type = shift(@_); 0497 my $filename = shift(@_); 0498 if($filename eq ($type==1?$lastfile:$lasterrorfile)) { 0499 return ""; 0500 } 0501 if($type==1) { 0502 $lastfile = $filename; 0503 } else { 0504 $lasterrorfile = $filename; 0505 } 0506 return $string."</ul><b>$filename</b><ul>"; 0507 } 0508 0509 sub addClass() { 0510 my $filename=shift(@_); 0511 my $section=shift(@_); 0512 my $className=shift(@_); 0513 my $classType = shift(@_); 0514 0515 my $subsection=$section; 0516 $section=~s/\//-/g; 0517 0518 if($classType eq "Class" && $className=~/^(.*)::/) { 0519 $subsection.="/$1"; 0520 $className=~s/^.*:://; 0521 } 0522 my $string; 0523 my $target; 0524 if($filename eq "") { 0525 $string = "<a href=\"$section/undocumented.html\" title=\"$classType in $subsection\" target=\"main\"><font color=\"red\" target=\"main\">" 0526 } else { 0527 $string = "<a href=\"$section/$filename\" title=\"$classType in $subsection\" target=\"main\">"; 0528 } 0529 if($classType eq "Namespace") { $string .="<i>"; } 0530 $string .= $className; 0531 if($classType eq "Namespace") { $string .= "</i>"; } 0532 if($filename eq "") { 0533 $string .="</font>" 0534 } 0535 $string .= "</a><br>\n"; 0536 0537 if($classType eq "Namespace") { $packages{$className} = $string; } 0538 $classes{$className}=$string; 0539 }