Mercurial > projects > dil
diff 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 |
line wrap: on
line diff
--- a/trunk/src/dil/SettingsLoader.d Thu Feb 14 03:31:19 2008 +0100 +++ b/trunk/src/dil/SettingsLoader.d Fri Feb 15 02:07:53 2008 +0100 @@ -16,16 +16,19 @@ import tango.io.FilePath; -struct SettingsLoader +class SettingsLoader { InfoManager infoMan; Module mod; /// Current module. + this(InfoManager infoMan) + { + this.infoMan = infoMan; + } + static SettingsLoader opCall(InfoManager infoMan) { - SettingsLoader sl; - sl.infoMan = infoMan; - return sl; + return new SettingsLoader(infoMan); } void error(Token* token, char[] formatMsg, ...) @@ -79,7 +82,6 @@ if (auto val = getValue!(StringExpression)("langfile")) GlobalSettings.langFile = val.getString(); - if (auto array = getValue!(ArrayInitExpression)("import_paths")) foreach (value; array.values) if (auto str = castTo!(StringExpression)(value)) @@ -88,6 +90,10 @@ foreach (value; array.values) if (auto str = castTo!(StringExpression)(value)) GlobalSettings.ddocFilePaths ~= resolvePath(execPath, str.getString()); + if (auto val = getValue!(StringExpression)("xml_map")) + GlobalSettings.xmlMapFile = val.getString(); + if (auto val = getValue!(StringExpression)("html_map")) + GlobalSettings.htmlMapFile = val.getString(); if (auto val = getValue!(StringExpression)("lexer_error")) GlobalSettings.lexerErrorFormat = val.getString(); if (auto val = getValue!(StringExpression)("parser_error")) @@ -124,6 +130,43 @@ } } +class TagMapLoader : SettingsLoader +{ + this(InfoManager infoMan) + { + super(infoMan); + } + + static TagMapLoader opCall(InfoManager infoMan) + { + return new TagMapLoader(infoMan); + } + + string[string] load(string filePath) + { + mod = new Module(filePath, infoMan); + mod.parse(); + if (mod.hasErrors) + return null; + + auto pass1 = new SemanticPass1(mod); + pass1.start(); + + string[string] map; + if (auto array = getValue!(ArrayInitExpression)("map")) + foreach (i, value; array.values) + { + auto key = array.keys[i]; + if (auto valExp = castTo!(StringExpression)(value)) + if (!key) + error(value.begin, "expected key : value"); + else if (auto keyExp = castTo!(StringExpression)(key)) + map[keyExp.getString()] = valExp.getString(); + } + return map; + } +} + string resolvePath(FilePath execPath, string filePath) { if ((new FilePath(filePath)).isAbsolute())