125: def convert_array(str)
126:
127: array_nesting = 0
128: in_string = false
129: escaped = false
130: sbuffer = ''
131: result_array = ::Array.new
132:
133: str.each_byte { |char|
134: char = char.chr
135:
136: if escaped then
137: sbuffer += char
138: escaped = false
139: next
140: end
141:
142: case char
143:
144: when '{'
145: if in_string then
146: sbuffer += char
147: next
148: end
149:
150: if array_nesting >= 1 then
151: sbuffer += char
152: end
153: array_nesting += 1
154:
155:
156: when '"'
157: in_string = !in_string
158:
159:
160: when "\\"
161: if array_nesting > 1
162: sbuffer += char
163: else
164: escaped = true
165: end
166:
167:
168: when ','
169: if in_string or array_nesting > 1 then
170: sbuffer += char
171: else
172: if !sbuffer.is_a? ::Array then
173: sbuffer = @base_type.parse(sbuffer)
174: end
175: result_array << sbuffer
176: sbuffer = ''
177: end
178:
179:
180: when '}'
181: if in_string then
182: sbuffer += char
183: next
184: end
185:
186: array_nesting -=1
187:
188: if array_nesting == 1
189: sbuffer += char
190: sbuffer = convert_array( sbuffer )
191: elsif array_nesting > 1
192: sbuffer += char
193: else
194: if !sbuffer.is_a? ::Array then
195: sbuffer = @base_type.parse( sbuffer )
196: end
197:
198: result_array << sbuffer unless sbuffer.nil?
199: end
200:
201:
202: else
203: sbuffer += char
204: end
205: }
206: return result_array
207: end