Integrated the rest of RafaƂ changes.
[mp-5.x.git] / tools / update_ref_docs.mpsl
blobd0c73f17f0a074d513d0e3af51e51f4cc3030271
1 /*
3         update_ref_docs.mpsl
5         Updates some MP reference documents.
7         Angel Ortega <angel@triptico.com>
9 */
11 sub load_ref_document(file)
12 /* loads a document and returns a structure with header,
13    data entries and signature */
15         local f, l, d, k;
16         local r = {
17                 'header'        => NULL,
18                 'data'          => {},
19                 'sig'           => ''
20         };
22         if ((f = open(file, "r")) == NULL)
23                 return NULL;
25         d = [];
26         k = NULL;
28         while (l = read(f)) {
29                 l = sregex(l, "/\r?\n$/");
31                 /* is the line only dashes? */
32                 if (regex(l, '/^-+$/')) {
34                         /* pop last string */
35                         local p = pop(d);
37                         /* concat all data and reset */
38                         local b = join(d, "\n");
39                         d = [];
41                         /* flush previous data: is this the first one? */
42                         if (k == NULL) {
43                                 /* yes; everything is the header */
44                                 r.header = b;
45                         }
46                         else {
47                                 /* there is a previous one; store */
48                 r.data[k] = b->sregex("/\n$/")->sregex("/^\n/");
49                         }
51                         k = p;
53                         /* if it's the empty string, it's the
54                            signature mark; we're done */
55                         if (p eq '') {
56                                 r.sig = join([ l, read(f) ], "\n");
57                                 break;
58                         }
59                 }
60                 else
61                         push(d, l);
62         }
64         close(f);
66         return r;
70 sub save_ref_document(file, r, hash, prefix, def)
71 /* saves a parsed document filling empty entries from hash */
73         local f;
75         if ((f = open(file, "w")) == NULL)
76                 return;
78         write(f, r.header);
79         write(f, "\n");
81         foreach (k, sort(keys(hash))) {
83                 if (prefix)
84                         k = prefix ~ '.' ~ k;
86                 write(f, k ~ "\n");
87                 write(f, sregex(k, '/./g', '-'));
88                 write(f, "\n\n");
90                 write(f, r.data[k] || def[k] || "To be written.");
91                 write(f, "\n\n");
92         }
94         write(f, "\n");
95         write(f, r.sig);
97         close(f);
101 sub update_ref_document(file, hash, prefix, def)
103         local r;
105         if (r = load_ref_document(file))
106                 save_ref_document(file, r, hash, prefix, def);
109 /*****************/
111 update_ref_document('doc/mp_configuration.txt', mp.config, 'mp.config');
113 local kc = {};
115 foreach (k, keys(mp.keycodes))
116         kc[mp.keycodes[k]] = k;
118 local def = {};
120 /* fill now the default descriptions */
121 foreach (k, keys(mp.actdesc)) {
122         local l;
124         l = '_' ~ mp.actdesc[k] ~ '_';
126         if (kc[k])
127                 l = l ~ " (`" ~ kc[k] ~ "')";
129         l = l ~ "\n\nTo be written.";
131         def[k] = l;
134 update_ref_document('doc/mp_actions.txt', mp.actdesc, NULL, def);
136 local f;
138 if ((f = open('doc/mp_keycodes.txt', 'w')) != NULL) {
139         write(f, "Minimum Profit Keycodes\n");
140         write(f, "=======================\n\n");
142         write(f, "Table with Minimum Profit's keycodes and their default assigned actions.\n\n");
144         local tbl = " +---------------------+------------------------+\n";
146         write(f, tbl);
147         write(f, sprintf(" | %19s | %22s |\n", 'Keycode', 'Action'));
148         write(f, tbl);
150         foreach(k, sort(keys(mp.keycodes))) {
151                 write(f, sprintf(" | %19s | %22s |\n", k, mp.keycodes[k]));
152                 write(f, tbl);
153         }
155         write(f, "\n");
157         close(f);