]> git.llucax.com Git - software/mutt-debian.git/blob - doc/gen-map-doc
Update and enable NNTP patch
[software/mutt-debian.git] / doc / gen-map-doc
1 #!/usr/bin/perl -w
2
3 use strict;
4
5 my (%OPS, %MAP, %DOC, $map);
6
7 my $xml = shift @ARGV;
8
9 open F, "cat @ARGV |" or die "OPS*: $!";
10 while (<F>) {
11   /(\w+) "(.+)"/ or die "$.: parse error";
12   $OPS{$1} = $2;
13 }
14 close F;
15
16 while (<STDIN>) {
17   if (/^struct binding_t Op.*{ \/\* map: (.*) \*\//) {
18     $map = $1;
19     $DOC{$map} = "";
20   }
21   if ($map and /^\s*\*\*\s*(.*)/) {
22     $DOC{$map} .= "$1\n";
23   }
24   if ($map and /{\s*"(.+)"\s*,\s*(\w+)\s*,\s*(?:"([^"]+)"|(\w+))\s*}/) {
25     my ($function, $op, $binding) = ($1, $2, $3 || $4);
26     $binding =~ s/&/&amp;/;
27     # for <key>, try CamelCasing into <Key>
28     $binding =~ s/<(.)(.+)>/&lt;\U$1\E$2&gt;/;
29     $binding =~ s/</&lt;/;
30     $binding =~ s/>/&gt;/;
31     $binding =~ s/ /&lt;Space&gt;/;
32     $binding =~ s/^\\033/Esc /;
33     $binding =~ s/^\\010/&lt;Backspace&gt;/;
34     $binding =~ s/^\\(0\d+)$/'^'.chr(64+oct($1))/e;
35     $binding =~ s/^\\(0\d+)(.)/'^'.chr(64+oct($1)) ." $2"/e;
36     $binding =~ s/\\t/&lt;Tab&gt;/;
37     $binding =~ s/M_ENTER_S/&lt;Return&gt;/;
38     $binding =~ s/NULL//;
39     die "unknown key $binding" if $binding =~ /\\[^\\]|<|>/;
40     die "unknown OP $op" unless $OPS{$op};
41     $MAP{$map} .= "<row><entry><literal>&lt;$function&gt;</literal></entry><entry>$binding</entry><entry>$OPS{$op}</entry></row>\n";
42   }
43   if ($map and /^}/) {
44     undef $map;
45   }
46 }
47
48 open XML, $xml or die "$xml: $!";
49 while (<XML>) {
50   if (/__print_map\((.*)\)/) {
51     my $map = $1;
52     my $maptitle = $1;
53     $maptitle =~ s/^(.)/\U$1\E/;
54     unless ($MAP{$map}) {
55       warn "map $map undefined";
56       next;
57     }
58     my $title = $map;
59     $title =~ s/(.)(.+)/\U$1\E$2/;
60     print <<EOT;
61 <sect2 id="${map}-map">
62 <title>$maptitle Menu</title>
63 $DOC{$map}
64
65 <table id="tab-${map}-bindings">
66 <title>Default $title Menu Bindings</title>
67 <tgroup cols="3">
68 <thead>
69 <row><entry>Function</entry><entry>Default key</entry><entry>Description</entry></row>
70 </thead>
71 <tbody>
72 $MAP{$map}
73 </tbody>
74 </tgroup>
75 </table>
76
77 </sect2>
78
79 EOT
80     delete $MAP{$map};
81   } else {
82     print;
83   }
84 }
85 close XML;
86
87 warn "unprinted maps: ". join(" ", keys %MAP) if %MAP;