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 126 def initialize(signature) 127 @signature = signature 128 @idx = 0 129 end
Public Instance Methods
nextchar()
click to toggle source
Returns the next character from the signature.
# File lib/dbus/type.rb 132 def nextchar 133 c = @signature[@idx] 134 @idx += 1 135 c 136 end
parse()
click to toggle source
Parse the entire signature, return a DBus::Type
object.
# File lib/dbus/type.rb 167 def parse 168 @idx = 0 169 ret = [] 170 while (c = nextchar) 171 ret << parse_one(c) 172 end 173 ret 174 end
parse_one(c)
click to toggle source
Parse one character c of the signature.
# File lib/dbus/type.rb 139 def parse_one(c) 140 res = nil 141 case c 142 when "a" 143 res = Type.new(ARRAY) 144 c = nextchar 145 raise SignatureException, "Parse error in #{@signature}" if c.nil? 146 child = parse_one(c) 147 res << child 148 when "(" 149 res = Type.new(STRUCT) 150 while (c = nextchar) && c != ")" 151 res << parse_one(c) 152 end 153 raise SignatureException, "Parse error in #{@signature}" if c.nil? 154 when "{" 155 res = Type.new(DICT_ENTRY) 156 while (c = nextchar) && c != "}" 157 res << parse_one(c) 158 end 159 raise SignatureException, "Parse error in #{@signature}" if c.nil? 160 else 161 res = Type.new(c) 162 end 163 res 164 end