]> git.llucax.com Git - software/mutt-debian.git/blob - doc/gen-map-doc
upstream/311296-rand-mktemp.patch: more random file creation in /tmp, see CVE CAN...
[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     print <<EOT;
59 <sect2 id="${map}-map">
60 <title>$maptitle Menu</title>
61 $DOC{$map}
62
63 <table id="${map}-table">
64 <title>Default $map Function Bindings</title>
65 <tgroup cols="3">
66 <thead>
67 <row><entry>Function</entry><entry>Default key</entry><entry>Description</entry></row>
68 </thead>
69 <tbody>
70 $MAP{$map}
71 </tbody>
72 </tgroup>
73 </table>
74
75 </sect2>
76
77 EOT
78     delete $MAP{$map};
79   } else {
80     print;
81   }
82 }
83 close XML;
84
85 warn "unprinted maps: ". join(" ", keys %MAP) if %MAP;