Workshop o mikrokontrolérech na SKSP 2024.
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

2 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;