chiark / gitweb /
Merge branch 'master' of git.distorted.org.uk:~mdw/publish/public-git/disorder
[disorder] / scripts / macro-docs
CommitLineData
cf451c90
RK
1#! /usr/bin/perl -w
2use strict;
3
4my %macros = ();
5my $name;
6my $docs;
7while(defined($_ = <>)) {
8 chomp;
59cf25c4 9 if(!defined $name and m,^/\*\$ (\@?([a-z\-]+).*),) {
cf451c90
RK
10 $name = $2;
11 my $heading = $1;
12 $docs = [$heading];
13 $macros{$name} = $docs;
14 next;
15 }
16 if(defined $name) {
17 # Identify and strip trailing */
18 my $last = m,\*/ *$,;
19 s,\*/ *$,,;
20 # Strip trailing spaces
21 s,\s*$,,;
22 # Strip leading comment indicator and spaces
23 s,^ *\* *,,;
24 push(@$docs, $_);
25 undef $name if $last;
26 }
27}
28
29# Generate docs in name order
3e1616b6 30my $indented = 0;
cf451c90
RK
31for my $m (sort keys %macros) {
32 my @docs = @{$macros{$m}};
33 my $heading = shift @docs;
34 # Strip leading and trailing blanks
35 while(@docs > 0 and $docs[0] eq '') {
36 shift @docs;
37 }
38 while(@docs > 0 and $docs[$#docs] eq '') {
39 pop @docs;
40 }
41 print ".TP\n";
42 print ".B $heading\n";
43 for my $d (@docs) {
3e1616b6
RK
44 if($d =~ /^-\s*([^:]+):\s+(.*)/) {
45 if(!$indented) {
46 print ".RS\n";
47 $indented = 1;
48 }
49 print ".TP 8\n";
50 print ".B $1\n";
51 $d = $2;
52 }
9faa7a88
RK
53 if($d =~ /^- /) {
54 $d = $';
3e1616b6
RK
55 if(!$indented) {
56 print ".RS\n";
57 $indented = 1;
58 }
9faa7a88
RK
59 print ".TP\n";
60 print ".B .\n";
61 }
cf451c90 62 if($d eq '') {
3e1616b6
RK
63 if($indented) {
64 print ".RE\n";
65 $indented = 0;
66 }
67 print ".IP\n";
cf451c90
RK
68 } else {
69 # Keep sentence-ending full stops at end of line
70 $d =~ s/\. /\.\n/g;
71 print "$d\n";
72 }
73 }
3e1616b6
RK
74 if($indented) {
75 print ".RE\n";
76 $indented = 0;
77 }
cf451c90 78}