pingus-cvs
[Top][All Lists]
Advanced

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

[Pingus-CVS] r3486 - trunk/sexpr


From: grumbel at BerliOS
Subject: [Pingus-CVS] r3486 - trunk/sexpr
Date: Sun, 4 Nov 2007 13:24:08 +0100

Author: grumbel
Date: 2007-11-04 13:24:08 +0100 (Sun, 04 Nov 2007)
New Revision: 3486

Modified:
   trunk/sexpr/level-syntax.scm
   trunk/sexpr/schema.rb
   trunk/sexpr/sexpr.rb
Log:
- implemented some more subtypes

Modified: trunk/sexpr/level-syntax.scm
===================================================================
--- trunk/sexpr/level-syntax.scm        2007-11-04 11:47:33 UTC (rev 3485)
+++ trunk/sexpr/level-syntax.scm        2007-11-04 12:24:08 UTC (rev 3486)
@@ -45,31 +45,38 @@
                      (element (name "groundpiece")
                        (type (mapping
                               (children
+                               (element (name "type")     (type (string)))
                                (element (name "position") (type (vector2i)))
                                (element (name "surface")  (type (surface)))))))
 
-                     (element (name "exit")
-                       (type (mapping
-                              (children
-                               (element (name "position") (type (vector2i)))
-                               (element (name "surface")  (type (surface)))
-                               (element (name "release-rate") (type 
(integer)))))))
-
                      (element (name "surface-background")
                        (type (mapping
                               (children
-                               (element (name "position") (type (vector2i)))
-                               (element (name "surface")  (type (surface)))))))
+                               (element (name "color")       (type (color)))
+                               (element (name "scroll-x")    (type (real)))
+                               (element (name "scroll-y")    (type (real)))
+                               (element (name "stretch-x")   (type (boolean)))
+                               (element (name "stretch-y")   (type (boolean)))
+                               (element (name "keep-aspect") (type (boolean)))
+                               (element (name "para-x")      (type (real)))
+                               (element (name "para-y")      (type (real)))
+                               (element (name "position")    (type (vector2i)))
+                               (element (name "surface")     (type 
(surface)))))))
 
                      (element (name "liquid")
                        (type (mapping
                               (children
+                               (element (name "speed")    (type (integer)) 
(depricated #t))
                                (element (name "position") (type (vector2i)))
-                               (element (name "surface")  (type (surface)))))))
+                               (element (name "surface")  (type (surface)))
+                               (element (name "repeat")   (type (integer (min 
1))))
+                               ))))
 
                      (element (name "hotspot")
                        (type (mapping
                               (children
+                               (element (name "speed")    (type (color)) 
(depricated #t))
+                               (element (name "parallax") (type (real))  
(depricated #t))
                                (element (name "position") (type (vector2i)))
                                (element (name "surface")  (type (surface)))))))
 
@@ -77,13 +84,20 @@
                      (element (name "exit")
                        (type (mapping
                               (children
+                               (element (name "owner-id") (type (integer)))
                                (element (name "position") (type (vector2i)))
-                               (element (name "surface")  (type (surface)))))))
+                               (element (name "surface")  (type (surface)))
+                               ))))
 
                      (element (name "entrance")
                        (type (mapping
                               (children
-                               (element (name "position") (type 
(vector2i)))))))
+                               (element (name "owner-id") (type (any)))
+                               (element (name "release-rate") (type (integer)))
+                               (element (name "position") (type (vector2i)))
+                               (element (name "direction") (type (any)))
+                               (element (name "type")     (type (any)))
+                               ))))
 
                      (element (name "spike")
                        (type (any)))

Modified: trunk/sexpr/schema.rb
===================================================================
--- trunk/sexpr/schema.rb       2007-11-04 11:47:33 UTC (rev 3485)
+++ trunk/sexpr/schema.rb       2007-11-04 12:24:08 UTC (rev 3486)
@@ -50,6 +50,10 @@
       @root.validate(sexpr)
     end
 
+    def Schema.report(str)
+      puts str
+    end
+
     def Schema.type_factory(reader)
       case reader.name
       when "mapping"
@@ -80,18 +84,21 @@
         return Vector2iType.new(reader)
 
       when "size"
-        return Vector2iType.new(reader)
+        return SizeType.new(reader)
 
       when "surface"
         return SurfaceType.new(reader)
 
+      when "color"
+          return ColorType.new(reader)
+
       when "any"
           return AnyType.new(reader)
 
       else
-          raise "#{reader.pos}: unknown type '#{reader.name}'"
+        raise "#{reader.pos}: unknown type '#{reader.name}'"
       end
-  end
+    end
   end # Schema
 
   class Element
@@ -109,16 +116,16 @@
     
     def validate(sexpr)
       if not sexpr.is_a?(List) then
-        raise "#{sexpr.pos}: expected list, got #{sexpr.class}"
+        Schema.report "#{sexpr.pos}: expected list, got #{sexpr.class}"
       else
         if sexpr.value.empty? then
-          raise "#{sexpr.pos}: expected a non-empty List"
+          Schema.report "#{sexpr.pos}: expected a non-empty List"
         else
           if not sexpr[0].is_a?(Symbol) then
-            raise "#{sexpr.pos}: expected a symbol, got #{sexpr[0].class}"
+            Schema.report "#{sexpr.pos}: expected a symbol, got 
#{sexpr[0].class}"
           else
             if sexpr[0].value != @name then
-              raise "#{sexpr.pos}: expected symbol '#{name}', got 
#{sexpr[0].value}"
+              Schema.report "#{sexpr.pos}: expected symbol '#{name}', got 
#{sexpr[0].value}"
             else
               # puts "Element ok: address@hidden"
               # ok, now check type and/or validate children
@@ -133,37 +140,66 @@
   class AnyType
     def initialize(reader)
     end
+
+    def validate(sexprlst)
+    end
   end
 
   class SymbolType
     def initialize(reader)
     end
+
+    def validate(sexprlst)
+    end
   end
 
   class StringType
     def initialize(reader)
     end
 
-    def validate(element)
+    def validate(sexprlst)
     end
   end
 
+  class BooleanType
+    def initialize(reader)
+    end
+
+    def validate(sexprlst)
+    end
+  end
+
   class Vector2iType
     def initialize(reader)
     end
 
-    def validate(element)
+    def validate(sexprlst)
+      
     end
   end
 
+  class SizeType
+    def initialize(reader)
+    end
+
+    def validate(sexprlst)
+    end
+  end
+
   class ColorType
     def initialize(reader)
     end
+
+    def validate(sexprlst)
+    end
   end
 
   class SurfaceType
     def initialize(reader)
     end
+
+    def validate(sexprlst)
+    end
   end
 
   class IntegerType
@@ -173,10 +209,10 @@
 
     def validate(sexpr)
       if sexpr.length() != 1 then
-        raise "#{sexpr.pos}: expected a single integer got #{sexpr.to_s}"
+        Schema.report "#{sexpr.pos}: expected a single integer got 
#{sexpr.to_s}"
       else
         if not sexpr[0].is_a?(Integer) then
-          raise "#{sexpr.pos}: expected integer got #{sexpr[0].class}"
+          Schema.report "#{sexpr.pos}: expected integer got #{sexpr[0].class}"
         else
           # ok
         end
@@ -185,12 +221,17 @@
   end
 
   class RealType
+    def initialize(reader)
+      
+    end
+
     def validate(sexpr)
       if sexpr.length() != 1 then
-        raise "#{sexpr.pos}: expected a single real got #{sexpr.to_s}"
+        Schema.report "#{sexpr.pos}: expected a single real got #{sexpr.to_s}"
       else
-        if not sexpr[0].is_a?(SExpr::Real) then
-          raise "#{sexpr.pos}: expected integer got #{sexpr[0].class}"
+        if not (sexpr[0].is_a?(Real) or sexpr[0].is_a?(Integer)) then
+          # FIXME: Should we make Integer optional?
+          Schema.report "#{sexpr.pos}: expected real got #{sexpr[0].class}"
         else
           # ok
         end
@@ -217,7 +258,8 @@
       sexpr.each{ |el|
         child = @children.find{|i| i.name == el[0].value } # FIXME: Works, but 
why? Shouldn't String and Symbol clash
         if not child then
-          raise "#{el.pos}: invalid element '#{el[0].value}'"
+          Schema.report "#{el.pos}: invalid element '#{el[0].value}'"
+          Schema.report "  - allowed elements are: address@hidden|i| 
i.name}.join(", ")}"
         else
           # puts "MappingType Child: ok: #{el[0].value} #{child}"
           child.validate(el)
@@ -232,19 +274,14 @@
       @children = reader.read_section("children").sections.map{|el| 
Element.new(el) }
     end    
 
-    def check_element(name)
-      # puts "SequenceType: #{name}"
-      el = @children.find{|i| i.name == name.value }
-      if not el then
-        raise "#{name.pos}: SequenceType: element '#{name}' not allowed"
-      else
-        # ok
-      end
-    end
-
-    def validate(sexpr) # sexpr == SExpr::List
-      sexpr.each{ |el|
-        check_element(el[0])
+    def validate(sexprlst) # sexpr == SExpr::List
+      sexprlst.each{ |sexpr|
+        el = @children.find{|i| i.name == sexpr[0].value }
+        if not el then
+          Schema.report "#{name.pos}: SequenceType: element '#{name}' not 
allowed"
+        else
+          el.validate(sexpr)
+        end
       }
     end
   end
@@ -258,7 +295,7 @@
       if sexpr.length() == 1 then
         # sexpr[0]
       else
-        raise "Expected exactly one subtag" 
+        Schema.report "Expected exactly one subtag" 
       end
     end
   end

Modified: trunk/sexpr/sexpr.rb
===================================================================
--- trunk/sexpr/sexpr.rb        2007-11-04 11:47:33 UTC (rev 3485)
+++ trunk/sexpr/sexpr.rb        2007-11-04 12:24:08 UTC (rev 3486)
@@ -20,8 +20,9 @@
 module SExpr
 
   class SExpr
-    attr_reader :pos
+    attr_reader :pos, :parent
 
+    # FIXME: Implement parent handling
     def initialize(pos = nil)
       @pos = pos
     end





reply via email to

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