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())