def initialize(lexer, str_type, delimiter, str_s, heredoc_e = nil,
indent = false, dedent_body = false, label_allowed = false)
@lexer = lexer
@nesting = 1
str_type = coerce_encoding(str_type)
delimiter = coerce_encoding(delimiter)
unless TYPES.include?(str_type)
lexer.send(:diagnostic, :error, :unexpected_percent_str,
{ :type => str_type }, @lexer.send(:range, str_s, str_s + 2))
end
@str_type = str_type
@str_s = str_s
@start_tok, @interpolate = TYPES[str_type]
@start_delim = DELIMITERS.include?(delimiter) ? delimiter : nil
@end_delim = DELIMITERS.fetch(delimiter, delimiter)
@heredoc_e = heredoc_e
@indent = indent
@label_allowed = label_allowed
@dedent_body = dedent_body
@dedent_level = nil
@interp_braces = 0
@space_emitted = true
@monolithic = (@start_tok == :tSTRING_BEG &&
%w(' ").include?(str_type) &&
!heredoc?)
@str_type += delimiter if @str_type.start_with?('%'.freeze)
clear_buffer
emit_start_tok unless @monolithic
end