split_into_flow()
  public
  
    
    
Splits the string into chunks by attribute change
   
  
    Show source    
    
      
  def split_into_flow
    res = []
    current_attr = 0
    str_len = @str.length
    
    i = 0
    i += 1 while i < str_len and @str[i].chr == "\00""
    start_pos = i
    # then scan the string, chunking it on attribute changes
    while i < str_len
      new_attr = @attrs[i]
      if new_attr != current_attr
        if i > start_pos
          res << copy_string(start_pos, i)
          start_pos = i
        end
        res << change_attribute(current_attr, new_attr)
        current_attr = new_attr
        if (current_attr & @attributes.special) != 0 then
          i += 1 while
            i < str_len and (@attrs[i] & @attributes.special) != 0
          res << RDoc::Markup::Special.new(current_attr,
                                           copy_string(start_pos, i))
          start_pos = i
          next
        end
      end
      # move on, skipping any invisible characters
      begin
        i += 1
      end while i < str_len and @str[i].chr == "\00""
    end
    
    if start_pos < str_len
      res << copy_string(start_pos, str_len)
    end
    
    res << change_attribute(current_attr, 0) if current_attr != 0
    res
  end