Sneaking the different styled texts in through opts[:text_styles] seems to be a bad practice to me. TextBlock could have a method `contents` taking care of this. (we actually have some ticket for TextBlock#contents or used to have) Then the different elements could be in there. Maybe along with their ranges.