class Haml::StringSplitter

def shift_balanced_embexpr(tokens)

def shift_balanced_embexpr(tokens)
  String.new.tap do |embedded|
    embexpr_open = 1
    until tokens.empty?
      _, type, str = tokens.shift
      case type
      when :on_embexpr_beg
        embexpr_open += 1
      when :on_embexpr_end
        embexpr_open -= 1
        break if embexpr_open == 0
      end
      embedded << str
    end
  end
end