class DBus::Type::Parser

D-Bus type parser class

Helper class to parse a type signature in the protocol.

Public Class Methods

new(signature) click to toggle source

Create a new parser for the given signature.

# File lib/dbus/type.rb, line 126
def initialize(signature)
  @signature = signature
  @idx = 0
end

Public Instance Methods

nextchar() click to toggle source

Returns the next character from the signature.

# File lib/dbus/type.rb, line 132
def nextchar
  c = @signature[@idx]
  @idx += 1
  c
end
parse() click to toggle source

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

# File lib/dbus/type.rb, line 167
def parse
  @idx = 0
  ret = []
  while (c = nextchar)
    ret << parse_one(c)
  end
  ret
end
parse_one(c) click to toggle source

Parse one character c of the signature.

# File lib/dbus/type.rb, line 139
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) && c != ")"
      res << parse_one(c)
    end
    raise SignatureException, "Parse error in #{@signature}" if c.nil?
  when "{"
    res = Type.new(DICT_ENTRY)
    while (c = nextchar) && c != "}"
      res << parse_one(c)
    end
    raise SignatureException, "Parse error in #{@signature}" if c.nil?
  else
    res = Type.new(c)
  end
  res
end