| #!/usr/bin/perl -w | |
| use File::Compare qw(compare); | |
| sub format_one { | |
| my ($out, $nameattr) = @_; | |
| my ($name, $attr) = @$nameattr; | |
| my ($state, $description); | |
| $state = 0; | |
| open I, '<', "$name.txt" or die "No such file $name.txt"; | |
| while (<I>) { | |
| if (/^NAME$/) { | |
| $state = 1; | |
| next; | |
| } | |
| if ($state == 1 && /^----$/) { | |
| $state = 2; | |
| next; | |
| } | |
| next if ($state != 2); | |
| chomp; | |
| $description = $_; | |
| last; | |
| } | |
| close I; | |
| if (!defined $description) { | |
| die "No description found in $name.txt"; | |
| } | |
| if (my ($verify_name, $text) = ($description =~ /^($name) - (.*)/)) { | |
| print $out "linkgit:$name\[1\]::\n\t"; | |
| if ($attr =~ / deprecated /) { | |
| print $out "(deprecated) "; | |
| } | |
| print $out "$text.\n\n"; | |
| } | |
| else { | |
| die "Description does not match $name: $description"; | |
| } | |
| } | |
| my %cmds = (); | |
| for (sort <>) { | |
| next if /^#/; | |
| chomp; | |
| my ($name, $cat, $attr) = /^(\S+)\s+(.*?)(?:\s+(.*))?$/; | |
| $attr = '' unless defined $attr; | |
| push @{$cmds{$cat}}, [$name, " $attr "]; | |
| } | |
| for my $cat (qw(ancillaryinterrogators | |
| ancillarymanipulators | |
| mainporcelain | |
| plumbinginterrogators | |
| plumbingmanipulators | |
| synchingrepositories | |
| foreignscminterface | |
| purehelpers | |
| synchelpers)) { | |
| my $out = "cmds-$cat.txt"; | |
| open O, '>', "$out+" or die "Cannot open output file $out+"; | |
| for (@{$cmds{$cat}}) { | |
| format_one(\*O, $_); | |
| } | |
| close O; | |
| if (-f "$out" && compare("$out", "$out+") == 0) { | |
| unlink "$out+"; | |
| } | |
| else { | |
| print STDERR "$out\n"; | |
| rename "$out+", "$out"; | |
| } | |
| } |