in src/main/java/com/univocity/parsers/csv/CsvWriter.java [259:328]
private boolean append(boolean isElementQuoted, String element) {
if (element == null) {
if (nullValue == null) {
return isElementQuoted;
}
element = nullValue;
}
int start = 0;
if (this.ignoreLeading) {
start = skipLeadingWhitespace(whitespaceRangeStart, element);
}
final int length = element.length();
if (start < length && element.charAt(start) == quoteChar) {
isElementQuoted = true;
}
if (isElementQuoted) {
if (usingNullOrEmptyValue && length >= 2) {
if (element.charAt(0) == quoteChar && element.charAt(length - 1) == quoteChar) {
appender.append(element);
return false;
} else {
appendQuoted(start, element);
return true;
}
} else {
appendQuoted(start, element);
return true;
}
}
int i = start;
char ch = '\0';
for (; i < length; i++) {
ch = element.charAt(i);
if (ch == quoteChar || ch == separator || ch == newLine || ch == escapeChar || (ch < maxTrigger && quotationTriggers[ch])) {
appender.append(element, start, i);
start = i + 1;
if (ch == quoteChar || ch == escapeChar) {
if (quoteElement(i, element)) {
appendQuoted(i, element);
return true;
} else if (escapeUnquoted) {
appendQuoted(i, element);
} else {
appender.append(element, i, length);
if (ignoreTrailing && element.charAt(length - 1) <= ' ' && whitespaceRangeStart < element.charAt(length - 1)) {
appender.updateWhitespace();
}
}
return isElementQuoted;
} else if (ch == escapeChar && inputNotEscaped && escapeEscape != '\0' && escapeUnquoted) {
appender.append(escapeEscape);
} else if (ch == separator || ch == newLine || ch < maxTrigger && quotationTriggers[ch]) {
appendQuoted(i, element);
return true;
}
appender.append(ch);
}
}
appender.append(element, start, i);
if (ch <= ' ' && ignoreTrailing && whitespaceRangeStart < ch) {
appender.updateWhitespace();
}
return isElementQuoted;
}