fixed/rearranged some tal stuff
[mir.git] / source / mir / generator / tal / TALTemplateEngine.java
index 13125bf..071d333 100755 (executable)
@@ -33,18 +33,39 @@ package mir.generator.tal;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.Map;
+import java.util.HashMap;
 
 import mir.generator.tal.interfaces.TALExpressionParser;
+import mir.generator.tal.template.TALTemplate;
+import mir.generator.tal.template.TALTemplateNodeLibrary;
+import mir.generator.tal.template.TALBasicTemplateNodeLibrary;
 
 public class TALTemplateEngine {
   private TALExpressionParser expressionParser;
   private String basePath;
   private CachingFileLoader loader;
 
+  private Map urlToLibrary;
+  private Map prefixToLibrary;
+
   public TALTemplateEngine(TALExpressionParser anExpressionParser, String aBasePath) {
     expressionParser = anExpressionParser;
     basePath = aBasePath;
     loader = new CachingFileLoader(100, new TemplateFactory());
+
+    urlToLibrary = new HashMap();
+    prefixToLibrary = new HashMap();
+
+    registerTemplateNodeLibrary("tal", "http://xml.zope.org/namespaces/tal", new TALBasicTemplateNodeLibrary("tal", "http://xml.zope.org/namespaces/tal"));
+    registerTemplateNodeLibrary("metal", "http://xml.zope.org/namespaces/metal",
+        new TALBasicTemplateNodeLibrary("metal", "http://xml.zope.org/namespaces/metal"));
+
+  }
+
+  public void registerTemplateNodeLibrary(String aPrefix, String aUrl, TALTemplateNodeLibrary aLibrary) {
+    urlToLibrary.put(aUrl, aLibrary);
+    prefixToLibrary.put(aPrefix, aLibrary);
   }
 
   public TALTemplate loadTemplate(String aName) throws IOException {
@@ -52,10 +73,20 @@ public class TALTemplateEngine {
     return (TALTemplate) loader.retrieveFile(location.getCanonicalPath());
   }
 
+  public TALTemplateNodeLibrary getLibraryForPrefix(String aPrefix) {
+    return (TALTemplateNodeLibrary) prefixToLibrary.get(aPrefix);
+  }
+
+  public TALTemplateNodeLibrary getLibraryForUrl(String aUrl) {
+    return (TALTemplateNodeLibrary) urlToLibrary.get(aUrl);
+  }
+
   private class TemplateFactory implements CachingFileLoader.CachedFileObjectFactory {
     public Object constructObject(InputStream aStream) {
       try {
-        return TALTemplateParser.parse(aStream, expressionParser);
+        TALTemplateParser parser = new TALTemplateParser(TALTemplateEngine.this);
+
+        return parser .parse(aStream, expressionParser);
       }
       catch (Throwable t) {
         throw new TALFailure(t);