pingus-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Pingus-CVS] r3491 - trunk/sexpr


From: grumbel at BerliOS
Subject: [Pingus-CVS] r3491 - trunk/sexpr
Date: Sun, 4 Nov 2007 16:10:49 +0100

Author: grumbel
Date: 2007-11-04 16:10:47 +0100 (Sun, 04 Nov 2007)
New Revision: 3491

Modified:
   trunk/sexpr/level-syntax.scm
   trunk/sexpr/reader.rb
   trunk/sexpr/schema.rb
Log:
- added Reader.read_string_array()
- added Enumeration to Schema

Modified: trunk/sexpr/level-syntax.scm
===================================================================
--- trunk/sexpr/level-syntax.scm        2007-11-04 14:23:27 UTC (rev 3490)
+++ trunk/sexpr/level-syntax.scm        2007-11-04 15:10:47 UTC (rev 3491)
@@ -33,10 +33,10 @@
                               (element (name "miner")    (type (integer (min 
1))) (use "optional"))
                               (element (name "slider")   (type (integer (min 
1))) (use "optional"))
 
-                              (element (name "boarder")   (type (integer (min 
1))) (use "optional"))
-                              (element (name "angel")   (type (integer (min 
1))) (use "optional"))
-                              (element (name "rocketlauncher")   (type 
(integer (min 1))) (use "optional"))
-                              (element (name "superman")   (type (integer (min 
1))) (use "optional"))
+                              (element (name "boarder")        (type (integer 
(min 1))) (use "optional") (deprecated #t))
+                              (element (name "angel")          (type (integer 
(min 1))) (use "optional") (deprecated #t))
+                              (element (name "rocketlauncher") (type (integer 
(min 1))) (use "optional") (deprecated #t))
+                              (element (name "superman")       (type (integer 
(min 1))) (use "optional") (deprecated #t))
                               ))))
                     ))))
           (element (name "objects")
@@ -95,8 +95,8 @@
                                (element (name "owner-id")     (type (integer 
(min 0) (max 4))))
                                (element (name "release-rate") (type (integer)))
                                (element (name "position")     (type 
(vector3i)))
-                               (element (name "direction")    (type (any)))
-                               (element (name "type")         (type (any)))
+                               (element (name "direction")    (type 
(enumeration (values "left" "right" "misc"))))
+                               (element (name "type")         (type 
(enumeration (values "generic"))))
                                ))))
 
                      (element (name "solidcolor-background")

Modified: trunk/sexpr/reader.rb
===================================================================
--- trunk/sexpr/reader.rb       2007-11-04 14:23:27 UTC (rev 3490)
+++ trunk/sexpr/reader.rb       2007-11-04 15:10:47 UTC (rev 3491)
@@ -120,6 +120,19 @@
       end
     end
 
+    def read_string_array(name)
+      el = find(name)
+      if not el then
+        return nil
+      else
+        if not el[1..-1].inject(true){|memo, i| memo and i.is_a?(String)} then
+          raise "#{el.pos}: Error expected a String array: #{el.to_sexpr}"
+        else
+          return el[1..-1].map{|i| i.value }
+        end
+      end
+    end
+
     def read_symbol(name)
       el = find(name)
       if not el then

Modified: trunk/sexpr/schema.rb
===================================================================
--- trunk/sexpr/schema.rb       2007-11-04 14:23:27 UTC (rev 3490)
+++ trunk/sexpr/schema.rb       2007-11-04 15:10:47 UTC (rev 3491)
@@ -95,6 +95,9 @@
       when "color"
           return ColorType.new(reader)
 
+      when "enumeration"
+          return EnumerationType.new(reader)
+
       when "any"
           return AnyType.new(reader)
 
@@ -206,6 +209,31 @@
     end
   end
 
+  class EnumerationType
+    def initialize(reader)
+      @values = reader.read_string_array("values")
+      if not @values then
+        raise "#{reader.pos}: Error: 'values' not specified"
+      end
+    end
+
+    def validate(sexprlst)
+      if sexprlst.length() != 1 then
+        Schema.report "#{sexprlst.pos}: expected a single String got 
#{sexprlst.to_s}"
+      else
+        if not sexprlst[0].is_a?(String) then
+          Schema.report "#{sexprlst.pos}: expected String got 
#{sexprlst[0].class}"
+        else
+          if not @values.member?(sexprlst[0].value) then
+            Schema.report "#{sexprlst.pos}: '#{sexprlst[0].value}' not a 
member of address@hidden|i| i.inspect}.join(", ")}]"
+          else
+            # ok
+          end
+        end
+      end      
+    end
+  end
+
   class Vector2iType
     def initialize(reader)
     end





reply via email to

[Prev in Thread] Current Thread [Next in Thread]