]> git.llucax.com Git - software/mutt-debian.git/blob - doc/gen-map-doc
adding DM-Upload-Allowed: yes
[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     unless ($MAP{$map}) {
53       warn "map $map undefined";
54       next;
55     }
56     print <<EOT;
57 <sect2 id="${map}_map">
58 <title>$map menu</title>
59 $DOC{$map}
60
61 <table id="${map}_table">
62 <title>Default $map function bindings</title>
63 <tgroup cols="3">
64 <thead>
65 <row><entry>Function</entry><entry>Default key</entry><entry>Description</entry></row>
66 </thead>
67 <tbody>
68 $MAP{$map}
69 </tbody>
70 </tgroup>
71 </table>
72
73 </sect2>
74
75 EOT
76     delete $MAP{$1};
77   } else {
78     print;
79   }
80 }
81 close XML;
82
83 warn "unprinted maps: ". join(" ", keys %MAP) if %MAP;