in src/main/java/com/univocity/parsers/csv/CsvParser.java [105:205]
protected final void parseRecord() {
if (ch <= ' ' && ignoreLeadingWhitespace && whitespaceRangeStart < ch) {
ch = input.skipWhitespace(ch, delimiter, quote);
}
while (ch != newLine) {
if (ch <= ' ' && ignoreLeadingWhitespace && whitespaceRangeStart < ch) {
ch = input.skipWhitespace(ch, delimiter, quote);
}
if (ch == delimiter || ch == newLine) {
output.emptyParsed();
} else {
unescaped = false;
prev = '\0';
if (ch == quote) {
input.enableNormalizeLineEndings(normalizeLineEndingsInQuotes);
int len = output.appender.length();
if (len == 0) {
String value = input.getQuotedString(quote, quoteEscape, escapeEscape, maxColumnLength, delimiter, newLine, keepQuotes, keepEscape, trimQuotedLeading, trimQuotedTrailing);
if (value != null) {
output.valueParsed(value == "" ? emptyValue : value);
try {
ch = input.nextChar();
if (ch == delimiter) {
try {
ch = input.nextChar();
if (ch == newLine) {
output.emptyParsed();
}
} catch (EOFException e) {
output.emptyParsed();
return;
}
}
} catch (EOFException e) {
return;
}
continue;
}
} else if (len == -1 && input.skipQuotedString(quote, quoteEscape, delimiter, newLine)){
output.valueParsed();
try {
ch = input.nextChar();
if (ch == delimiter) {
try {
ch = input.nextChar();
if (ch == newLine) {
output.emptyParsed();
}
} catch (EOFException e) {
output.emptyParsed();
return;
}
}
} catch (EOFException e) {
return;
}
continue;
}
output.trim = trimQuotedTrailing;
parseQuotedValue();
input.enableNormalizeLineEndings(true);
output.valueParsed();
} else if (doNotEscapeUnquotedValues) {
String value = null;
int len = output.appender.length();
if (len == 0) {
value = input.getString(ch, delimiter, ignoreTrailingWhitespace, nullValue, maxColumnLength);
}
if (value != null) {
output.valueParsed(value);
ch = input.getChar();
} else {
if (len != -1) {
output.trim = ignoreTrailingWhitespace;
ch = output.appender.appendUntil(ch, input, delimiter, newLine);
} else {
if (input.skipString(ch, delimiter)) {
ch = input.getChar();
} else {
ch = output.appender.appendUntil(ch, input, delimiter, newLine);
}
}
output.valueParsed();
}
} else {
output.trim = ignoreTrailingWhitespace;
parseValueProcessingEscape();
output.valueParsed();
}
}
if (ch != newLine) {
ch = input.nextChar();
if (ch == newLine) {
output.emptyParsed();
}
}
}
}