1 module dmacro;
2 
3 import colorize;
4 import std.stdio;
5 import std.string;
6 import std.algorithm;
7 import std.file;
8 import std.array;
9 
10 import applogger;
11 
12 /// generate a dictionary from parsed DMacro code
13 string[][string] parseDM(string s) {
14     
15     string buffer;
16     int state = 0;
17     string[][string] fB;
18     
19     string k;
20     string[] v;
21 
22     buffer = strip(buffer);
23 
24     foreach (char sw; s)
25     {
26         if (sw == '(' && state == 0) {
27             state = 1;
28             k = buffer.strip;
29             buffer = "";
30         } else if (sw == ')' && state == 1) {
31 
32             if (buffer.length != 0) v = v ~ buffer.strip;
33             state = 0;
34             buffer = "";
35             fB[k] = v;
36             k = "";
37             v = [];
38 
39         } else if (sw == ',' && state == 1) {
40 
41             v = v ~ buffer.strip;
42             buffer = "";
43             
44 
45         } else if (sw == '"' && state == 1) {
46 
47             state = 999;
48 
49         } else if (sw == '"' && state == 999) state = 1;
50 
51         else {
52             buffer ~= sw;
53         }
54     }
55     return fB;
56 }