Added support for local sessions (Closes: #1234).
[mp-5.x.git] / tools / update_ref_docs.mpsl
blobfa88fb5b5927a4a09aa4633b478f9a02c2aa57c2
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("/\r?\n$/", l);
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("\n", d);
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;
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("\n", [ l, read(f) ] );
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)
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 (local k, sort(keys(hash))) {
83                 k = prefix ~ '.' ~ k;
85                 write(f, k ~ "\n");
86                 write(f, sregex('/./g', k, '-'));
87                 write(f, "\n");
89                 write(f, r.data[k] || "\nTo be written.\n");
90                 write(f, "\n");
91         }
93         write(f, "\n");
94         write(f, r.sig);
96         close(f);
100 sub update_ref_document(file, hash, prefix)
102         local r;
104         if (r = load_ref_document(file))
105                 save_ref_document(file, r, hash, prefix);
108 /*****************/
110 update_ref_document('doc/mp_configuration.txt', mp.config, 'mp.config');