def concat(s)
return @output.concat(s) if s.is_a? OutputHandler
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