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