*** empty log message ***
[m17n/m17n-lib-cs.git] / XmlExpr.cs
index e37e7ea..41501be 100644 (file)
@@ -415,6 +415,8 @@ namespace System.Xml
       // single list.
       internal readonly int max_args;
 
+      public delegate Term Builtin (Domain domain, Variable vari, Term[] terms);
+
       public Function () { }
 
       public Function (Symbol name, bool with_var, int min_args, int max_args)
@@ -434,10 +436,9 @@ namespace System.Xml
 
       internal class Subroutine : Function
       {
-       public Func<Domain, Variable, Term[], Term> builtin;
+       public Builtin builtin;
 
-       public Subroutine (Func<Domain, Variable, Term[], Term> builtin,
-                          Symbol name, bool with_var,
+       public Subroutine (Builtin builtin, Symbol name, bool with_var,
                           int min_args, int max_args)
          : base (name, with_var, min_args, max_args)
          {
@@ -462,10 +463,9 @@ namespace System.Xml
 
       internal class SpecialForm : Function
       {
-       public Func<Domain, Variable, Term[], Term> builtin;
+       public Builtin builtin;
 
-       public SpecialForm (Func<Domain, Variable, Term[], Term> builtin,
-                           Symbol name, bool with_var,
+       public SpecialForm (Builtin builtin, Symbol name, bool with_var,
                            int min_args, int max_args)
          : base (name, with_var, min_args, max_args)
          {
@@ -796,18 +796,16 @@ namespace System.Xml
          }
       }
 
-      public void DefSubr (Func<Domain, Variable, Term[], Term> builtin,
-                          Symbol name, bool with_var,
-                          int min_args, int max_args)
+      public void DefSubr (Function.Builtin builtin, Symbol name,
+                          bool with_var, int min_args, int max_args)
       {
        check_func_head (name, with_var, min_args, max_args, false);
        functions[name] = new Function.Subroutine (builtin, name, with_var,
                                                   min_args, max_args);
       }
 
-      public void DefSpecial (Func<Domain, Variable, Term[], Term> builtin,
-                             Symbol name, bool with_var,
-                             int min_args, int max_args)
+      public void DefSpecial (Function.Builtin builtin, Symbol name,
+                             bool with_var, int min_args, int max_args)
       {
        check_func_head (name, with_var, min_args, max_args, false);
        functions[name] = new Function.SpecialForm (builtin, name, with_var,
@@ -2346,9 +2344,10 @@ namespace System.Xml
       Function func = domain.GetFunc (name);
 
       for (node = node.FirstChild; node != null; node = node.NextSibling)
-       if (node.Name != Qdescription
-           && node.Name != Qargs)
+       if (node.Name != Qdescription && node.Name != Qargs)
          break;
+      Console.WriteLine ("found body " + node.Name);
+      
       Term[] body = Parse (domain, node, null);
       if (is_defun)
        ((Function.Lambda) func).SetBody (body);
@@ -2408,8 +2407,9 @@ namespace System.Xml
 
     private static bool default_stop (XmlNode n) { return n == null; }
 
-    public static Term[] Parse (Domain domain, XmlNode node,
-                               Func<XmlNode, bool> stop)
+    public delegate bool ParseStop (XmlNode node);
+
+    public static Term[] Parse (Domain domain, XmlNode node, ParseStop stop)
     {
       if (stop == null)
        stop = default_stop;
@@ -2457,8 +2457,9 @@ namespace System.Xml
       XmlDocument doc = new XmlDocument (Symbol.NameTable);
       XmlNode node;
 
-      using (XmlTextReader reader = new XmlTextReader (url, doc.NameTable))
+      using (XmlTextReader reader = new XmlTextReader (url, Symbol.NameTable))
        {
+         reader.WhitespaceHandling = WhitespaceHandling.None;
          do {
            reader.Read ();
          } while (reader.NodeType != XmlNodeType.None