*** empty log message ***
authorhanda <handa>
Mon, 9 Nov 2009 05:41:02 +0000 (05:41 +0000)
committerhanda <handa>
Mon, 9 Nov 2009 05:41:02 +0000 (05:41 +0000)
XmlExpr.cs
xex.xml

index f877772..e37e7ea 100644 (file)
@@ -321,8 +321,8 @@ namespace System.Xml
            return true;
          }
 
-       public StrType (Domain domain, Symbol name, string str, string desc,
-                   string[] range)
+       public StrType (Domain domain, Symbol name, Str str, string desc,
+                       string[] range)
          : base (domain, name, new Term (str), desc)
          {
            this.range = range;
@@ -336,7 +336,7 @@ namespace System.Xml
              if (range == null)
                return true;
              Str str = val.Strval;
-             foreach (Str s in range)
+             foreach (string s in range)
                if (str.Equals (s))
                  return true;
            }
@@ -914,7 +914,8 @@ namespace System.Xml
          }
        else
          {
-           vari = new Variable.StrType (this, name, str, desc, range);
+           vari = new Variable.StrType (this, name, new Str (str), desc,
+                                        range);
            variables[name] = vari;
          }
        return vari;
@@ -1337,8 +1338,6 @@ namespace System.Xml
 
     private static Term Fnth (Domain domain, Variable vari, Term[] args)
     {
-      Term result;
-
       if (args[1].IsStr)
        return new Term (args[1].Strval.Nth (args[0].Intval));
       if (args[1].IsList)
@@ -1880,15 +1879,19 @@ namespace System.Xml
 
       public Str Clone (Str str) { return new Str (str.str); }
 
+      public bool Equals (string str) { return this.str == str; }
+
       public bool Equals (Str str) { return this.str == str.str; }
 
       public bool Matches (Str str)
       {
-       if (regex = null)
+       if (regex != null)
          regex = new Regex (this.str);
        return regex.IsMatch (str.str);
       }
 
+      public int Nth (int index) { return (int) str[index]; }
+
       public void Insert (int index, Str str)
       {
        if (index < 0)
@@ -1912,6 +1915,8 @@ namespace System.Xml
        this.str = this.str.Remove (from, to - from);
        regex = null;
       }
+
+      public override string ToString () { return str; }
     }
 
     public struct Term
@@ -1924,7 +1929,7 @@ namespace System.Xml
       // <symbol>...</symbol>
       public Term (Symbol name) { intval = 0; objval = name; }
       // <string>...</string>
-      public Term (string str) { intval = 0; objval = new StringBuilder (str); }
+      public Term (string str) { intval = 0; objval = new Str (str); }
       // <list>...</list>
       public Term (List<Term> list) { intval = 0; objval = list; }
       // <error ename="ERROR-NAME">ERROR-MESSASGE</error>
@@ -1934,6 +1939,7 @@ namespace System.Xml
          objval = new ErrorTerm (name, message);
        }
 
+      public Term (Str str) { intval = 0; objval = str; }
       public Term (TermValue obj) { intval = 0; objval = obj; }
 
       // <varref vname="VNAME"/>
@@ -2019,14 +2025,14 @@ namespace System.Xml
       }
 
       public bool IsInt { get { return (objval == null); } }
-      public bool IsStr { get { return (objval is StringBuilder); } }
+      public bool IsStr { get { return (objval is Str); } }
       public bool IsSymbol { get { return (objval is Symbol); } }
       public bool IsList { get { return (objval is List<Term>); } }
       public bool IsError { get { return (objval is ErrorTerm); } }
 
       internal Term Eval (Domain domain)
       {
-       if (objval == null || objval is Symbol || objval is string
+       if (objval == null || objval is Symbol || objval is Str
            || objval is List<Term>)
          return this;
        try {
@@ -2045,8 +2051,8 @@ namespace System.Xml
       {
        if (objval == null || objval is Symbol)
          return this;
-       if (objval is StringBuilder)
-         return new Term (((StringBuilder) objval).ToString ());
+       if (objval is Str)
+         return new Term (((Str) objval).ToString ());
        if (objval is List<Term>)
          {
            List<Term> list = new List<Term> ();
@@ -2128,7 +2134,7 @@ namespace System.Xml
          str = "<integer>" + intval + "</integer>";
        else if (objval is Symbol)
          str = "<symbol>" + objval + "</symbol>";
-       else if (objval is string)
+       else if (objval is Str)
          str = "<string>" + objval + "</string>";
        else if (objval is List<Term>)
          {
diff --git a/xex.xml b/xex.xml
index 3566ba7..008bd97 100644 (file)
--- a/xex.xml
+++ b/xex.xml
@@ -67,6 +67,6 @@
     <concat><integer>?a</integer><integer>?b</integer></concat>
     <quote><add><varref vname="x"/><integer>1</integer></add></quote>
     <integer>100</integer>
-    <temp><add vname="y"><integer>5</integer></add></temp>
+    <temp><add vname="y"><integer>20</integer></add></temp>
   </append>
 </expr>