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