public final class CharacterReader
extends java.lang.Object
Modifier and Type | Field and Description |
---|---|
private int |
bufLength |
private int |
bufMark |
private int |
bufPos |
private int |
bufSplitPoint |
private char[] |
charBuf |
(package private) static char |
EOF |
private int |
lastIcIndex |
private java.lang.String |
lastIcSeq |
private int |
lineNumberOffset |
(package private) static int |
maxBufferLen |
private static int |
maxStringCacheLen |
private static int |
minReadAheadLen |
private java.util.ArrayList<java.lang.Integer> |
newlinePositions |
(package private) static int |
readAheadLimit |
private java.io.Reader |
reader |
private int |
readerPos |
private boolean |
readFully |
private java.lang.String[] |
stringCache |
private static int |
stringCacheSize |
Constructor and Description |
---|
CharacterReader(java.io.Reader input) |
CharacterReader(java.io.Reader input,
int sz) |
CharacterReader(java.lang.String input) |
Modifier and Type | Method and Description |
---|---|
void |
advance()
Moves the current position by one.
|
private void |
bufferUp() |
private static java.lang.String |
cacheString(char[] charBuf,
java.lang.String[] stringCache,
int start,
int count)
Caches short strings, as a flyweight pattern, to reduce GC load.
|
void |
close() |
int |
columnNumber()
Get the current column number (that the reader has consumed to).
|
(package private) int |
columnNumber(int pos) |
(package private) char |
consume() |
(package private) java.lang.String |
consumeAttributeQuoted(boolean single) |
(package private) java.lang.String |
consumeData() |
(package private) java.lang.String |
consumeDigitSequence() |
(package private) java.lang.String |
consumeHexSequence() |
(package private) java.lang.String |
consumeLetterSequence() |
(package private) java.lang.String |
consumeLetterThenDigitSequence() |
(package private) java.lang.String |
consumeRawData() |
(package private) java.lang.String |
consumeTagName() |
java.lang.String |
consumeTo(char c)
Reads characters up to the specific char.
|
(package private) java.lang.String |
consumeTo(java.lang.String seq) |
java.lang.String |
consumeToAny(char... chars)
Read characters until the first of any delimiters is found.
|
(package private) java.lang.String |
consumeToAnySorted(char... chars) |
(package private) java.lang.String |
consumeToEnd() |
(package private) boolean |
containsIgnoreCase(java.lang.String seq)
Used to check presence of , when we're in RCData and see a |
char |
current()
Get the char at the current position.
|
(package private) java.lang.String |
cursorPos()
Get a formatted string representing the current line and cursor positions.
|
boolean |
isEmpty()
Tests if all the content has been read.
|
private boolean |
isEmptyNoBufferUp() |
boolean |
isTrackNewlines()
Check if the tracking of newlines is enabled.
|
int |
lineNumber()
Get the current line number (that the reader has consumed to).
|
(package private) int |
lineNumber(int pos) |
private int |
lineNumIndex(int pos) |
(package private) void |
mark() |
(package private) boolean |
matchConsume(java.lang.String seq) |
(package private) boolean |
matchConsumeIgnoreCase(java.lang.String seq) |
(package private) boolean |
matches(char c) |
(package private) boolean |
matches(java.lang.String seq) |
(package private) boolean |
matchesAny(char... seq) |
(package private) boolean |
matchesAnySorted(char[] seq) |
(package private) boolean |
matchesAsciiAlpha()
Checks if the current pos matches an ascii alpha (A-Z a-z) per https://infra.spec.whatwg.org/#ascii-alpha
|
(package private) boolean |
matchesDigit() |
(package private) boolean |
matchesIgnoreCase(java.lang.String seq) |
(package private) boolean |
matchesLetter() |
(package private) int |
nextIndexOf(char c)
Returns the number of characters between the current position and the next instance of the input char
|
(package private) int |
nextIndexOf(java.lang.CharSequence seq)
Returns the number of characters between the current position and the next instance of the input sequence
|
int |
pos()
Gets the position currently read to in the content.
|
(package private) static boolean |
rangeEquals(char[] charBuf,
int start,
int count,
java.lang.String cached)
Check if the value of the provided range equals the string.
|
(package private) boolean |
rangeEquals(int start,
int count,
java.lang.String cached) |
(package private) boolean |
readFully()
Tests if the buffer has been fully read.
|
(package private) void |
rewindToMark() |
private void |
scanBufferForNewlines()
Scans the buffer for newline position, and tracks their location in newlinePositions.
|
java.lang.String |
toString() |
void |
trackNewlines(boolean track)
Enables or disables line number tracking.
|
(package private) void |
unconsume()
Unconsume one character (bufPos--).
|
(package private) void |
unmark() |
static final char EOF
private static final int maxStringCacheLen
static final int maxBufferLen
static final int readAheadLimit
private static final int minReadAheadLen
private char[] charBuf
private java.io.Reader reader
private int bufLength
private int bufSplitPoint
private int bufPos
private int readerPos
private int bufMark
private static final int stringCacheSize
private java.lang.String[] stringCache
@Nullable private java.util.ArrayList<java.lang.Integer> newlinePositions
private int lineNumberOffset
private boolean readFully
@Nullable private java.lang.String lastIcSeq
private int lastIcIndex
public CharacterReader(java.io.Reader input, int sz)
public CharacterReader(java.io.Reader input)
public CharacterReader(java.lang.String input)
public void close()
private void bufferUp()
public int pos()
boolean readFully()
public void trackNewlines(boolean track)
track
- set tracking on|offpublic boolean isTrackNewlines()
public int lineNumber()
trackNewlines(boolean)
int lineNumber(int pos)
public int columnNumber()
trackNewlines(boolean)
int columnNumber(int pos)
java.lang.String cursorPos()
5:10
indicating line
number 5 and column number 10.trackNewlines(boolean)
private int lineNumIndex(int pos)
private void scanBufferForNewlines()
public boolean isEmpty()
private boolean isEmptyNoBufferUp()
public char current()
char consume()
void unconsume()
public void advance()
void mark()
void unmark()
void rewindToMark()
int nextIndexOf(char c)
c
- scan targetint nextIndexOf(java.lang.CharSequence seq)
seq
- scan targetpublic java.lang.String consumeTo(char c)
c
- the delimiterjava.lang.String consumeTo(java.lang.String seq)
public java.lang.String consumeToAny(char... chars)
chars
- delimiters to scan forjava.lang.String consumeToAnySorted(char... chars)
java.lang.String consumeData()
java.lang.String consumeAttributeQuoted(boolean single)
java.lang.String consumeRawData()
java.lang.String consumeTagName()
java.lang.String consumeToEnd()
java.lang.String consumeLetterSequence()
java.lang.String consumeLetterThenDigitSequence()
java.lang.String consumeHexSequence()
java.lang.String consumeDigitSequence()
boolean matches(char c)
boolean matches(java.lang.String seq)
boolean matchesIgnoreCase(java.lang.String seq)
boolean matchesAny(char... seq)
boolean matchesAnySorted(char[] seq)
boolean matchesLetter()
boolean matchesAsciiAlpha()
boolean matchesDigit()
boolean matchConsume(java.lang.String seq)
boolean matchConsumeIgnoreCase(java.lang.String seq)
boolean containsIgnoreCase(java.lang.String seq)
public java.lang.String toString()
toString
in class java.lang.Object
private static java.lang.String cacheString(char[] charBuf, java.lang.String[] stringCache, int start, int count)
static boolean rangeEquals(char[] charBuf, int start, int count, java.lang.String cached)
boolean rangeEquals(int start, int count, java.lang.String cached)