Mercurial > projects > dil
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(); |