emailrelay/bin/doxygen_fixup.pl_
Graeme Walker 6d9b04341c v1.9
2013-12-08 12:00:00 +00:00

97 lines
3.1 KiB
Perl

#!/usr/bin/perl
#
# Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# ===
#
# doxygen_fixup.pl
#
# usage: doxygen_fixup.pl [<doc-doxygen-directory>]
#
# Does fixups on the doxygen-generated html files by adding
# css styles that emailrelay-doxygen.css can operate on.
#
# Note that the html header file speficied in doc/doxygen.cfg
# (typically doc/doxygen-header.html) should include the
# emailrelay-doxygen.css stylesheet after including doxygen.css.
#
# Designed for doxygen 1.6.x/1.7.x and does nothing (with an exit
# code of 1) if there is no suitable version marker in the html files.
#
# Typically run by the emailrelay/doc makefile after it has run
# doxygen.
#
use strict ;
use FileHandle ;
my $dir = @ARGV ? $ARGV[0] : "." ;
my $any_file_changed = 0 ;
my $marker = 'edited by doxygen_fixup.pl' ;
my $comment = '<!-- '.$marker.' -->' ;
for my $f ( <$dir/*> )
{
if( $f =~ m/\.html$/ )
{
my $input = new FileHandle( $f , "r" ) or die "cannot open $f" ;
my $output = new FileHandle( "$f.tmp" , "w" ) or die "cannot create $f.tmp" ;
my $seen_marker = undef ;
my $file_changed = undef ;
while ( <$input> )
{
chomp( my $line = $_ ) ;
$seen_marker ||= ( $line =~ m/Generated by Doxygen 1\.6/ ) ;
$seen_marker ||= ( $line =~ m/Generated by Doxygen 1\.7/ ) ;
my $old_line = $line ;
$line =~ s/p>References/p class="references">References/g ;
$line =~ s/p>Referenced by/p class="referencedby">Referenced by/g ;
$line =~ s/p>Definition at/p class="definitionat">Definition at/g ;
$line =~ s/p>Implements /p class="implements">Implements /g ;
if( $line =~ m/<td class="memname".* <\/td> *$/ )
{
$line =~ s/>/> /g ;
$line =~ s/</ </g ;
my @word = split( ' ' , $line ) ;
if( scalar(@word) > 2 )
{
my $n = scalar(@word) - 2 ;
if( $n =~ m/^[A-Za-z0-9&;:_]+$/ )
{
$word[$n] = '<span class="realmemname">' . $word[$n] . "</span>" ;
$line = join( " " , @word ) ;
}
}
}
my $line_changed = ( $line ne $old_line ) ;
my $line_has_comment = ( $line =~ m/$marker/ ) ;
print $output $line , ( ( $line_changed && !$line_has_comment ) ? "" : $comment ) , "\n" ;
$file_changed ||= $line_changed ;
}
$output->close() or die "cannot write $f.tmp" ;
$input->close() ;
if( $file_changed && $seen_marker )
{
rename( "$f.tmp" , $f ) or die "cannot rename $f.tmp to $f" ;
$any_file_changed = 1 ;
}
else
{
unlink( "$f.tmp" ) ;
}
}
}
exit( $any_file_changed ? 0 : 1 ) ;