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 }