# File lib/puppet-lint/lexer.rb, line 260
    def interpolate_string(string, line, column)
      ss = StringScanner.new(string)
      first = true
      value, terminator = get_string_segment(ss, '"$')
      until value.nil?
        if terminator == "\""
          if first
            tokens << new_token(:STRING, value, :line => line, :column => column)
            first = false
          else
            line += value.count("\n")
            token_column = column + (ss.pos - value.size)
            tokens << new_token(:DQPOST, value, :line => line, :column => token_column)
          end
        else
          if first
            tokens << new_token(:DQPRE, value, :line => line, :column => column)
            first = false
          else
            line += value.count("\n")
            token_column = column + (ss.pos - value.size)
            tokens << new_token(:DQMID, value, :line => line, :column => token_column)
          end
          if ss.scan(/\{/).nil?
            var_name = ss.scan(/(::)?([\w-]+::)*[\w-]+/)
            unless var_name.nil?
              token_column = column + (ss.pos - var_name.size)
              tokens << new_token(:UNENC_VARIABLE, var_name, :line => line, :column => token_column)
            end
          else
            contents = ss.scan_until(/\}/)[0..-2]
            if contents.match(/\A(::)?([\w-]+::)*[\w-]+\Z/)
              token_column = column + (ss.pos - contents.size - 1)
              tokens << new_token(:VARIABLE, contents, :line => line, :column => token_column)
            else
              lexer = PuppetLint::Lexer.new
              lexer.tokenise(contents)
              lexer.tokens.each do |token|
                tok_col = column + token.column + (ss.pos - contents.size - 1)
                tok_line = token.line + line - 1
                tokens << new_token(token.type, token.value, :line => tok_line, :column => tok_col)
              end
            end
          end
        end
        value, terminator = get_string_segment(ss, '"$')
      end
    end