[Top][All Lists]
[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
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Pingus-CVS] r3488 - trunk/sexpr,
grumbel at BerliOS <=