# File lib/rgen/template_language/output_handler.rb, line 24
    def concat(s)
      return @output.concat(s) if s.is_a? OutputHandler
      #puts [object_id, noIndentNextLine, @state, @output.to_s, s].inspect

      s = s.to_str.gsub(/^[\t ]*\r?\n/,'') if @ignoreNextNL
      s = s.to_str.gsub(/^\s+/,'') if @ignoreNextWS
      @ignoreNextNL = @ignoreNextWS = false if s =~ /\S/
      if @mode == :direct
        @output.concat(s)
      elsif @mode == :explicit
        while s.size > 0
          if @state == :wait_for_nl
            if s =~ /\A([^\r\n]*\r?\n)(.*)/m
              rest = $2
              @output.concat($1.gsub(/[\t ]+(?=\r|\n)/,''))
              s = rest || ""
              @state = :wait_for_nonws
            else
              @output.concat(s)
              s = ""
            end
          elsif @state == :wait_for_nonws
            if s =~ /\A\s*(\S+.*)/m
              s = $1 || ""
              if !@noIndentNextLine && !(@output.to_s.size > 0 && @output.to_s[-1] != "\n"[0])
                @output.concat(@indentString * @indent)
              else
                @noIndentNextLine = false
              end
              @state = :wait_for_nl
            else
              s = ""
            end
          end
        end
      end
    end