Revert "CSVFormat does not support explicit " as escape char"

This reverts commit 28acf1138b.
This commit is contained in:
Gary Gregory 2024-09-14 12:35:14 -04:00
parent 4d07845a95
commit 0546fb5653
3 changed files with 14 additions and 7 deletions

View File

@ -50,7 +50,6 @@
<action type="fix" dev="ggregory" due-to="Dávid Szigecsán">Migrate CSVFormat#print(File, Charset) to NIO #445.</action>
<action type="fix" dev="ggregory" due-to="Dávid Szigecsán">Fix documentation for CSVFormat private constructor #466.</action>
<action type="fix" issue="CSV-294" dev="ggregory" due-to="Joern Huxhorn, Gary Gregory">CSVFormat does not support explicit " as escape char.</action>
<action type="fix" issue="CSV-150" dev="ggregory" due-to="dota17, Gary Gregory, Jörn Huxhorn">Escaping is not disableable.</action>
<!-- UPDATE -->
<action type="update" dev="ggregory" due-to="Dependabot">Bump commons-codec:commons-codec from 1.16.1 to 1.17.1 #422, #449.</action>
<action type="update" dev="ggregory" due-to="Gary Gregory">Bump org.apache.commons:commons-parent from 69 to 74 #435, #452, #465, #468.</action>

View File

@ -32,12 +32,19 @@ final class Lexer implements Closeable {
private static final String CR_STRING = Character.toString(Constants.CR);
private static final String LF_STRING = Character.toString(Constants.LF);
/**
* Constant char to use for disabling comments, escapes, and encapsulation. The value -2 is used because it
* won't be confused with an EOF signal (-1), and because the Unicode value {@code FFFE} would be encoded as two
* chars (using surrogates) and thus there should never be a collision with a real text char.
*/
private static final char DISABLED = '\ufffe';
private final char[] delimiter;
private final char[] delimiterBuf;
private final char[] escapeDelimiterBuf;
private final int escape;
private final int quoteChar;
private final int commentStart;
private final char escape;
private final char quoteChar;
private final char commentStart;
private final boolean ignoreSurroundingSpaces;
private final boolean ignoreEmptyLines;
private final boolean lenientEof;
@ -190,8 +197,8 @@ final class Lexer implements Closeable {
return ch == Constants.LF || ch == Constants.CR || ch == Constants.UNDEFINED;
}
private int mapNullToDisabled(final Character c) {
return c == null ? -1 : c.charValue(); // Explicit unboxing is intentional
private char mapNullToDisabled(final Character c) {
return c == null ? DISABLED : c.charValue(); // N.B. Explicit (un)boxing is intentional
}
/**
@ -505,5 +512,4 @@ final class Lexer implements Closeable {
buffer.setLength(length);
}
}
}

View File

@ -23,8 +23,10 @@ import java.io.StringReader;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
@Disabled
public class JiraCsv150Test {
private void testDisable(final CSVFormat csvFormat, final StringReader stringReader) throws IOException {