You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.5 KiB
65 lines
1.5 KiB
3 months ago
|
#!/usr/bin/perl
|
||
|
# Script for formatting documentation from definition lists
|
||
|
# (they get out of extract-doc.pl as a side-product).
|
||
|
# (c) 2008 Michal Vaner <vorner@ucw.cz>
|
||
|
use strict;
|
||
|
use warnings;
|
||
|
|
||
|
my $head = shift;
|
||
|
my $out = shift;
|
||
|
|
||
|
open OUT, ">$out" or die "Could not write output $out ($!)\n";
|
||
|
open HEAD, $head or die "Could not open head $head ($!)\n";
|
||
|
print OUT foreach( <HEAD> );
|
||
|
close HEAD;
|
||
|
|
||
|
my $dir = $out;
|
||
|
$dir =~ s/\/[^\/]+$//;
|
||
|
|
||
|
my @dump;
|
||
|
|
||
|
while( defined( my $line = <> ) ) {
|
||
|
chomp $line;
|
||
|
push @dump, [ split /,/, $line, 5 ];
|
||
|
}
|
||
|
|
||
|
my @types = (
|
||
|
[ 'enum', 'Enumerations' ],
|
||
|
[ 'struct', 'Structures' ],
|
||
|
[ 'type', 'Types' ],
|
||
|
[ 'fun', 'Functions' ],
|
||
|
[ 'var', 'Variables' ],
|
||
|
[ 'def', 'Preprocessor definitions' ]
|
||
|
);
|
||
|
|
||
|
my( $index, %groups, %heads ) = ( 0 );
|
||
|
|
||
|
foreach( @types ) {
|
||
|
my( $name, $value ) = @{$_};
|
||
|
$groups{$name} = ++ $index;
|
||
|
$heads{$name} = $value;
|
||
|
}
|
||
|
|
||
|
my $lasttype = '';
|
||
|
|
||
|
foreach( sort { ( $groups{$a->[2]} <=> $groups{$b->[2]} ) or ( $a->[3] cmp $b->[3] ); } @dump ) {
|
||
|
my( $file, $anchor, $type, $name, $text ) = @{$_};
|
||
|
if( $lasttype ne $type ) {
|
||
|
$lasttype = $type;
|
||
|
print OUT "\n== $heads{$type} [[$type]]\n\n";
|
||
|
}
|
||
|
my $dircp = $dir;
|
||
|
while( shift @{[ $dircp =~ /([^\/]+)/, "//" ]} eq shift @{[ $file =~ /([^\/]+)/, "///" ]} ) {
|
||
|
$dircp =~ s/[^\/]+\/?//;
|
||
|
$file =~ s/[^\/]+\/?//;
|
||
|
}
|
||
|
$dircp =~ s/[^\/]+/../g;
|
||
|
$file = $dircp."/".$file;
|
||
|
$file =~ s/^\///;
|
||
|
$file =~ s/\.[^.]+$//;
|
||
|
$text =~ s/(\.\.\.|\*|'|#|_)/\\$1/g;
|
||
|
print OUT "<<$file:$anchor,`$name`>>:: `$text`\n";
|
||
|
}
|
||
|
|
||
|
close OUT;
|