Approved 'cause you mentioned my name in there. Just kidding. Good job.
A couple questions:
1) Why use containi to check a string for [ ?
Code:
if(read[0] == '[') { /* zomg */ }
2) Err .. I lie, only 1 question ( unless I forgot the other one[s] ).
__________________