comparison trunk/src/dil/SettingsLoader.d @ 759:9c47f377ca0b

Revised module cmd.Generate. Added class TagMapLoader. Fixed StringExpression.getString() and related code in the Parser. Added options 'xml_map' and 'html_map' to config.d
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Fri, 15 Feb 2008 02:07:53 +0100
parents f4b9680c0e16
children 78be32e3e157
comparison
equal deleted inserted replaced
758:f4b9680c0e16 759:9c47f377ca0b
14 import dil.Information; 14 import dil.Information;
15 import common; 15 import common;
16 16
17 import tango.io.FilePath; 17 import tango.io.FilePath;
18 18
19 struct SettingsLoader 19 class SettingsLoader
20 { 20 {
21 InfoManager infoMan; 21 InfoManager infoMan;
22 Module mod; /// Current module. 22 Module mod; /// Current module.
23 23
24 this(InfoManager infoMan)
25 {
26 this.infoMan = infoMan;
27 }
28
24 static SettingsLoader opCall(InfoManager infoMan) 29 static SettingsLoader opCall(InfoManager infoMan)
25 { 30 {
26 SettingsLoader sl; 31 return new SettingsLoader(infoMan);
27 sl.infoMan = infoMan;
28 return sl;
29 } 32 }
30 33
31 void error(Token* token, char[] formatMsg, ...) 34 void error(Token* token, char[] formatMsg, ...)
32 { 35 {
33 auto location = token.getErrorLocation(); 36 auto location = token.getErrorLocation();
77 auto pass1 = new SemanticPass1(mod); 80 auto pass1 = new SemanticPass1(mod);
78 pass1.start(); 81 pass1.start();
79 82
80 if (auto val = getValue!(StringExpression)("langfile")) 83 if (auto val = getValue!(StringExpression)("langfile"))
81 GlobalSettings.langFile = val.getString(); 84 GlobalSettings.langFile = val.getString();
82
83 if (auto array = getValue!(ArrayInitExpression)("import_paths")) 85 if (auto array = getValue!(ArrayInitExpression)("import_paths"))
84 foreach (value; array.values) 86 foreach (value; array.values)
85 if (auto str = castTo!(StringExpression)(value)) 87 if (auto str = castTo!(StringExpression)(value))
86 GlobalSettings.importPaths ~= str.getString(); 88 GlobalSettings.importPaths ~= str.getString();
87 if (auto array = getValue!(ArrayInitExpression)("ddoc_files")) 89 if (auto array = getValue!(ArrayInitExpression)("ddoc_files"))
88 foreach (value; array.values) 90 foreach (value; array.values)
89 if (auto str = castTo!(StringExpression)(value)) 91 if (auto str = castTo!(StringExpression)(value))
90 GlobalSettings.ddocFilePaths ~= resolvePath(execPath, str.getString()); 92 GlobalSettings.ddocFilePaths ~= resolvePath(execPath, str.getString());
93 if (auto val = getValue!(StringExpression)("xml_map"))
94 GlobalSettings.xmlMapFile = val.getString();
95 if (auto val = getValue!(StringExpression)("html_map"))
96 GlobalSettings.htmlMapFile = val.getString();
91 if (auto val = getValue!(StringExpression)("lexer_error")) 97 if (auto val = getValue!(StringExpression)("lexer_error"))
92 GlobalSettings.lexerErrorFormat = val.getString(); 98 GlobalSettings.lexerErrorFormat = val.getString();
93 if (auto val = getValue!(StringExpression)("parser_error")) 99 if (auto val = getValue!(StringExpression)("parser_error"))
94 GlobalSettings.parserErrorFormat = val.getString(); 100 GlobalSettings.parserErrorFormat = val.getString();
95 if (auto val = getValue!(StringExpression)("semantic_error")) 101 if (auto val = getValue!(StringExpression)("semantic_error"))
122 if (auto val = getValue!(StringExpression)("lang_code")) 128 if (auto val = getValue!(StringExpression)("lang_code"))
123 GlobalSettings.langCode = val.getString(); 129 GlobalSettings.langCode = val.getString();
124 } 130 }
125 } 131 }
126 132
133 class TagMapLoader : SettingsLoader
134 {
135 this(InfoManager infoMan)
136 {
137 super(infoMan);
138 }
139
140 static TagMapLoader opCall(InfoManager infoMan)
141 {
142 return new TagMapLoader(infoMan);
143 }
144
145 string[string] load(string filePath)
146 {
147 mod = new Module(filePath, infoMan);
148 mod.parse();
149 if (mod.hasErrors)
150 return null;
151
152 auto pass1 = new SemanticPass1(mod);
153 pass1.start();
154
155 string[string] map;
156 if (auto array = getValue!(ArrayInitExpression)("map"))
157 foreach (i, value; array.values)
158 {
159 auto key = array.keys[i];
160 if (auto valExp = castTo!(StringExpression)(value))
161 if (!key)
162 error(value.begin, "expected key : value");
163 else if (auto keyExp = castTo!(StringExpression)(key))
164 map[keyExp.getString()] = valExp.getString();
165 }
166 return map;
167 }
168 }
169
127 string resolvePath(FilePath execPath, string filePath) 170 string resolvePath(FilePath execPath, string filePath)
128 { 171 {
129 if ((new FilePath(filePath)).isAbsolute()) 172 if ((new FilePath(filePath)).isAbsolute())
130 return filePath; 173 return filePath;
131 return execPath.dup.append(filePath).toString(); 174 return execPath.dup.append(filePath).toString();