Read a string until the end of the line.

The line terminator '\n' and '\r\n', if any, is removed in each line.

var txt = "Hello\n\nWorld\n"
var i = new StringReader(txt)
assert i.read_line == "Hello"
assert i.read_line == ""
assert i.read_line == "World"
assert i.eof

Only LINE FEED (\n), CARRIAGE RETURN & LINE FEED (\r\n), and the end or file (EOF) is considered to delimit the end of lines. CARRIAGE RETURN (\r) alone is not used for the end of line.

var txt2 = "Hello\r\n\n\rWorld"
var i2 = new StringReader(txt2)
assert i2.read_line == "Hello"
assert i2.read_line == ""
assert i2.read_line == "\rWorld"
assert i2.eof

NOTE: Use append_line_to if the line terminator needs to be preserved.

Property definitions

core $ Reader :: read_line
	# Read a string until the end of the line.
	#
	# The line terminator '\n' and '\r\n', if any, is removed in each line.
	#
	# ~~~
	# var txt = "Hello\n\nWorld\n"
	# var i = new StringReader(txt)
	# assert i.read_line == "Hello"
	# assert i.read_line == ""
	# assert i.read_line == "World"
	# assert i.eof
	# ~~~
	#
	# Only LINE FEED (`\n`), CARRIAGE RETURN & LINE FEED (`\r\n`), and
	# the end or file (EOF) is considered to delimit the end of lines.
	# CARRIAGE RETURN (`\r`) alone is not used for the end of line.
	#
	# ~~~
	# var txt2 = "Hello\r\n\n\rWorld"
	# var i2 = new StringReader(txt2)
	# assert i2.read_line == "Hello"
	# assert i2.read_line == ""
	# assert i2.read_line == "\rWorld"
	# assert i2.eof
	# ~~~
	#
	# NOTE: Use `append_line_to` if the line terminator needs to be preserved.
	fun read_line: String
	do
		if last_error != null then return ""
		if eof then return ""
		var s = new FlatBuffer
		append_line_to(s)
		return s.to_s.chomp
	end
lib/core/stream.nit:249,2--283,4