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 127 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 133 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 168 def parse @idx = 0 ret = Array.new 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 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