pingus-cvs
[Top][All Lists]
Advanced

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

[Pingus-CVS] r3488 - trunk/sexpr


From: grumbel at BerliOS
Subject: [Pingus-CVS] r3488 - trunk/sexpr
Date: Sun, 4 Nov 2007 14:36:29 +0100

Author: grumbel
Date: 2007-11-04 14:36:29 +0100 (Sun, 04 Nov 2007)
New Revision: 3488

Modified:
   trunk/sexpr/level-syntax.scm
   trunk/sexpr/reader.rb
   trunk/sexpr/schema.rb
Log:
- added 'depricated'

Modified: trunk/sexpr/level-syntax.scm
===================================================================
--- trunk/sexpr/level-syntax.scm        2007-11-04 12:36:03 UTC (rev 3487)
+++ trunk/sexpr/level-syntax.scm        2007-11-04 13:36:29 UTC (rev 3488)
@@ -66,7 +66,7 @@
                      (element (name "liquid")
                        (type (mapping
                               (children
-                               (element (name "speed")    (type (integer)) 
(depricated #t))
+                               (element (name "speed")    (type (integer)) 
(deprecated #t))
                                (element (name "position") (type (vector2i)))
                                (element (name "surface")  (type (surface)))
                                (element (name "repeat")   (type (integer (min 
1))))
@@ -75,8 +75,8 @@
                      (element (name "hotspot")
                        (type (mapping
                               (children
-                               (element (name "speed")    (type (color)) 
(depricated #t))
-                               (element (name "parallax") (type (real))  
(depricated #t))
+                               (element (name "speed")    (type (color)) 
(deprecated #t))
+                               (element (name "parallax") (type (real))  
(deprecated #t))
                                (element (name "position") (type (vector2i)))
                                (element (name "surface")  (type (surface)))))))
 

Modified: trunk/sexpr/reader.rb
===================================================================
--- trunk/sexpr/reader.rb       2007-11-04 12:36:03 UTC (rev 3487)
+++ trunk/sexpr/reader.rb       2007-11-04 13:36:29 UTC (rev 3488)
@@ -96,7 +96,9 @@
 
     def read_real(name)
       el = find(name)
-      if el.length() != 2 then
+      if not el then
+        return nil
+      elsif el.length() != 2 then
         raise "#{el.pos}: Error expected exactly one integer, got #{el.to_s}"
       elsif (not el[1].is_a?(Real)) and (not el[1].is_a?(Integer)) then
         raise "#{el.pos}: Error expected a Real, got #{el.class}"
@@ -131,6 +133,19 @@
       end      
     end
 
+    def read_boolean(name)
+      el = find(name)
+      if not el then
+        return nil
+      elsif el.length() != 2 then
+        raise "#{el.pos}: Error expected exactly one boolean, got #{el.to_s}"
+      elsif not el[1].is_a?(Boolean) then
+        raise "#{el.pos}: Error expected a Boolean, got #{el.class}"
+      else
+        return el[1].value
+      end      
+    end
+
     def read_section(name)
       el = find(name)
       if el then

Modified: trunk/sexpr/schema.rb
===================================================================
--- trunk/sexpr/schema.rb       2007-11-04 12:36:03 UTC (rev 3487)
+++ trunk/sexpr/schema.rb       2007-11-04 13:36:29 UTC (rev 3488)
@@ -105,10 +105,12 @@
     attr_reader :name  # name of the expected element
     attr_reader :use   # required, optional, forbidden
     attr_reader :type  # ListType, IntegerType, ...
-
+    attr_reader :deprecated # #t, #f
+    
     def initialize(reader)
       @use  = reader.read_string("use")
       @name = reader.read_string("name")
+      @deprecated = reader.read_boolean("deprecated")
       
       type_reader = reader.read_section("type").sections()[0]
       @type = Schema.type_factory(type_reader)
@@ -127,6 +129,10 @@
             if sexpr[0].value != @name then
               Schema.report "#{sexpr.pos}: expected symbol '#{name}', got 
#{sexpr[0].value}"
             else
+              if @deprecated then
+                Schema.report "#{sexpr.pos}: symbol '#{name}' is deprecated"
+              end
+
               # puts "Element ok: address@hidden"
               # ok, now check type and/or validate children
               type.validate(sexpr[1..-1])
@@ -230,7 +236,8 @@
 
   class RealType
     def initialize(reader)
-      
+      @min = reader.read_real("min")
+      @max = reader.read_real("max")      
     end
 
     def validate(sexpr)
@@ -241,7 +248,13 @@
           # FIXME: Should we make Integer optional?
           Schema.report "#{sexpr.pos}: expected real got #{sexpr[0].class}"
         else
-          # ok
+          if @max and sexpr[0].value > @max then
+            Schema.report "#{sexpr[0].pos}: real out of range: address@hidden 
address@hidden real=#{sexpr[0].value}"
+          elsif @min and sexpr[0].value < @min then
+            Schema.report "#{sexpr[0].pos}: real out of range: address@hidden 
address@hidden real=#{sexpr[0].value}"
+          else
+            # everything ok
+          end
         end
       end
     end
@@ -253,15 +266,6 @@
       @children = reader.read_section("children").sections.map{|el| 
Element.new(el) }
     end
 
-    def check(name)
-      @children.each{|i|
-        if i.name == name then
-          return true
-        end
-      }
-      return false
-    end
-
     def validate(sexpr)
       sexpr.each{ |el|
         child = @children.find{|i| i.name == el[0].value } # FIXME: Works, but 
why? Shouldn't String and Symbol clash
@@ -270,6 +274,7 @@
           Schema.report "  - allowed elements are: address@hidden|i| 
i.name}.join(", ")}"
         else
           # puts "MappingType Child: ok: #{el[0].value} #{child}"
+          # FIXME: Add validation of (use "required") types
           child.validate(el)
         end
       }





reply via email to

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