public MutableString ReadLineOrParagraph(MutableString separator, RubyEncoding/*!*/ encoding, bool preserveEndOfLines, int limit) {
ContractUtils.Requires(limit >= 0);
if (limit == 0) {
return MutableString.CreateEmpty();
} else if (separator == null) {
var result = MutableString.CreateBinary();
return AppendBytes(result, limit, preserveEndOfLines) == 0 ? null : result;
} else if (separator.StartsWith('\n') && separator.GetLength() == 1) {
return ReadLine(encoding, preserveEndOfLines, limit);
} else if (separator.IsEmpty) {
return ReadParagraph(encoding, preserveEndOfLines, limit);
} else {
return ReadLine(separator, encoding, preserveEndOfLines, limit);
}
}