Class: DBus::Type::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/dbus/type.rb

Overview

D-Bus type parser class

Helper class to parse a type signature in the protocol.

Instance Method Summary collapse

Constructor Details

#initialize(signature) ⇒ Parser

Create a new parser for the given signature.



127
128
129
130
# File 'lib/dbus/type.rb', line 127

def initialize(signature)
  @signature = signature
  @idx = 0
end

Instance Method Details

#nextcharObject

Returns the next character from the signature.



133
134
135
136
137
# File 'lib/dbus/type.rb', line 133

def nextchar
  c = @signature[@idx]
  @idx += 1
  c
end

#parseObject

Parse the entire signature, return a DBus::Type object.



168
169
170
171
172
173
174
175
# File 'lib/dbus/type.rb', line 168

def parse
  @idx = 0
  ret = Array.new
  while (c = nextchar)
    ret << parse_one(c)
  end
  ret
end

#parse_one(c) ⇒ Object

Parse one character c of the signature.



140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
# File 'lib/dbus/type.rb', line 140

def parse_one(c)
  res = nil
  case c
  when ?a
    res = Type.new(ARRAY)
    c = nextchar
    raise SignatureException, "Parse error in #{@signature}" if c == nil
    child = parse_one(c)
    res << child
  when ?(
    res = Type.new(STRUCT)
    while (c = nextchar) != nil and c != ?)
      res << parse_one(c)
    end
    raise SignatureException, "Parse error in #{@signature}" if c == nil
  when ?{
    res = Type.new(DICT_ENTRY)
    while (c = nextchar) != nil and c != ?}
      res << parse_one(c)
    end
    raise SignatureException, "Parse error in #{@signature}" if c == nil
  else
    res = Type.new(c)
  end
  res
end