pingus-cvs
[Top][All Lists]
Advanced

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

[Pingus-CVS] r3490 - trunk/sexpr


From: grumbel at BerliOS
Subject: [Pingus-CVS] r3490 - trunk/sexpr
Date: Sun, 4 Nov 2007 15:23:27 +0100

Author: grumbel
Date: 2007-11-04 15:23:27 +0100 (Sun, 04 Nov 2007)
New Revision: 3490

Modified:
   trunk/sexpr/level-syntax.scm
   trunk/sexpr/parser.rb
   trunk/sexpr/schema.rb
   trunk/sexpr/sexpr.rb
Log:
- added parent tracking

Modified: trunk/sexpr/level-syntax.scm
===================================================================
--- trunk/sexpr/level-syntax.scm        2007-11-04 13:54:27 UTC (rev 3489)
+++ trunk/sexpr/level-syntax.scm        2007-11-04 14:23:27 UTC (rev 3490)
@@ -92,13 +92,19 @@
                      (element (name "entrance")
                        (type (mapping
                               (children
-                               (element (name "owner-id") (type (any)))
+                               (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 "position")     (type 
(vector3i)))
+                               (element (name "direction")    (type (any)))
+                               (element (name "type")         (type (any)))
                                ))))
 
+                     (element (name "solidcolor-background")
+                       (type (any)))
+
+                     (element (name "starfield-background")
+                       (type (any)))
+
                      (element (name "spike")
                        (type (any)))
 
@@ -132,12 +138,6 @@
                      (element (name "switchdoor")
                        (type (any)))
 
-                     (element (name "solidcolor-background")
-                       (type (any)))
-
-                     (element (name "starfield-background")
-                       (type (any)))
-
                      (element (name "thunderstorm-background")
                        (type (any)))
 

Modified: trunk/sexpr/parser.rb
===================================================================
--- trunk/sexpr/parser.rb       2007-11-04 13:54:27 UTC (rev 3489)
+++ trunk/sexpr/parser.rb       2007-11-04 14:23:27 UTC (rev 3490)
@@ -77,20 +77,21 @@
       @tokens.each{ |token|
         if token.is_a?(SExpr) then
           if not sublists.empty? then
-            sublists.last().append(token)
+            token.parent = sublists.last()
+            sublists.last() << token
           else
             elements << token
           end
         elsif token.is_a?(Array) then
           if token[0] == :list_start then
-            sublists.push(List.new([], token[1]))
+            sublists.push(List.new([], token[1], token[2]))
           elsif token[0] == :list_end then
             if sublists.empty? then
               raise "Unexpected List end"
             else
               lst = sublists.pop()
               if not sublists.empty? then
-                sublists.last().append(lst)
+                sublists.last() << lst
               else
                 elements << lst
               end
@@ -234,41 +235,44 @@
 
       # FIXME: This refers to the end of the token, not the start
       pretty_pos = "address@hidden:address@hidden"
+
+      parent = nil
      
       case type
       when :boolean
-        @tokens << Boolean.new(current_token == "#t", pretty_pos)
+        @tokens << Boolean.new(current_token == "#t", parent, pretty_pos)
         
       when :integer
-        @tokens << Integer.new(current_token.to_i, pretty_pos)
+        @tokens << Integer.new(current_token.to_i, parent, pretty_pos)
 
       when :real
-        @tokens << Real.new(current_token.to_f, pretty_pos)
+        @tokens << Real.new(current_token.to_f, parent, pretty_pos)
 
       when :string
         @tokens << String.new(current_token[1..-2].
                               gsub("\\n", "\n").
                               gsub("\\\"", "\"").
                               gsub("\\t", "\t"),
+                              parent, 
                               pretty_pos)
 
       when :symbol
-        @tokens << Symbol.new(current_token, pretty_pos)
+        @tokens << Symbol.new(current_token, parent, pretty_pos)
         
       when :list_start
-        @tokens << [:list_start, pretty_pos]
+        @tokens << [:list_start, parent, pretty_pos]
 
       when :list_end
-        @tokens << [:list_end, pretty_pos]
+        @tokens << [:list_end, parent, pretty_pos]
 
       when :comment
         if @parse_comments then
-          @tokens << Comment.new(current_token, pretty_pos)
+          @tokens << Comment.new(current_token, parent, pretty_pos)
         end
 
       when :whitespace
         if @parse_whitespace then
-          @tokens << Whitespace.new(current_token, pretty_pos)
+          @tokens << Whitespace.new(current_token, parent, pretty_pos)
         end
 
       else

Modified: trunk/sexpr/schema.rb
===================================================================
--- trunk/sexpr/schema.rb       2007-11-04 13:54:27 UTC (rev 3489)
+++ trunk/sexpr/schema.rb       2007-11-04 14:23:27 UTC (rev 3490)
@@ -151,7 +151,7 @@
     end
 
     def validate(sexprlst)
-      # always ok
+      Schema.report "#{sexprlst.pos}: AnyType: #{sexprlst.parent.to_sexpr}"
     end
   end
 
@@ -178,7 +178,7 @@
 
     def validate(sexprlst)
       if sexprlst.length() != 1 then
-        Schema.report "#{sexpr.pos}: expected a single String got 
#{sexpr.to_s}"
+        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}"

Modified: trunk/sexpr/sexpr.rb
===================================================================
--- trunk/sexpr/sexpr.rb        2007-11-04 13:54:27 UTC (rev 3489)
+++ trunk/sexpr/sexpr.rb        2007-11-04 14:23:27 UTC (rev 3490)
@@ -20,11 +20,13 @@
 module SExpr
 
   class SExpr
-    attr_reader :pos, :parent
+    attr_reader   :pos
+    attr_accessor :parent
 
     # FIXME: Implement parent handling
-    def initialize(pos = nil)
-      @pos = pos
+    def initialize(parent = nil, pos = nil)
+      @pos    = pos
+      @parent = parent
     end
 
     def self.parse(str)
@@ -39,14 +41,20 @@
     def to_ruby()
       return @value
     end
+    
+    def to_sexpr()
+      out = ""
+      write(out)
+      return out
+    end
   end
 
   # Boolean
   class Boolean < SExpr
     attr_reader :value
 
-    def initialize(value, pos = nil)
-      super(pos)
+    def initialize(value, parent = nil, pos = nil)
+      super(parent, pos)
       @value = value
     end
 
@@ -63,8 +71,8 @@
   class Integer < SExpr
     attr_reader :value
 
-    def initialize(value, pos = nil)
-      super(pos)
+    def initialize(value, parent = nil, pos = nil)
+      super(parent, pos)
       @value = value
     end
 
@@ -77,8 +85,8 @@
   class Real < SExpr
     attr_reader :value
 
-    def initialize(value, pos = nil)
-      super(pos)
+    def initialize(value, parent = nil, pos = nil)
+      super(parent, pos)
       @value = value
     end
 
@@ -91,8 +99,8 @@
   class String < SExpr
     attr_reader :value
 
-    def initialize(value, pos = nil)
-      super(pos)
+    def initialize(value, parent = nil, pos = nil)
+      super(parent, pos)
       @value = value
     end
 
@@ -109,8 +117,8 @@
   class Symbol < SExpr
     attr_reader :value
 
-    def initialize(value, pos = nil)
-      super(pos)
+    def initialize(value, parent = nil, pos = nil)
+      super(parent, pos)
       @value = value # FIXME: Is this supposed to be a String or Symbol?
     end
 
@@ -125,8 +133,8 @@
 
     attr_reader :children, :value
 
-    def initialize(value, pos = nil)
-      super(pos)
+    def initialize(value, parent = nil, pos = nil)
+      super(parent, pos)
       @value = value
     end
 
@@ -141,9 +149,9 @@
     def [](idx)
       if idx.is_a?(Range) then
         if idx.begin < @value.length then
-          return List.new(@value[idx], @value[idx.begin].pos)
+          return List.new(@value[idx], self, @value[idx.begin].pos)
         else # FIXME: When is this called?
-          return List.new(@value[idx], self.pos)
+          return List.new(@value[idx], self, self.pos)
         end
       else
         return @value[idx]
@@ -185,15 +193,15 @@
   end
 
   def Whitespace
-    def initialize(value, pos = nil)
-      super(pos)
+    def initialize(value, parent = nil, pos = nil)
+      super(parent, pos)
       @value = value
     end
   end
 
   def Comment
-    def initialize(value, pos = nil)
-      super(pos)
+    def initialize(value, parent = nil, pos = nil)
+      super(parent, pos)
       @value = value
     end
   end





reply via email to

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