public class LineOrientedInterpolatingReader
extends java.io.FilterReader
When a possible keyword token is recognized (by detecting the starting and ending token delimiters):
A token in the incoming character stream may be escaped by prepending an "escape sequence" which is specified to the constructor. An escaped token is passed through as written, with the escape sequence removed. This allows things which would look like tokens to be read literally rather than interpolated.
InterpolationFilterReader
Modifier and Type | Field and Description |
---|---|
private static char |
CARRIAGE_RETURN_CHAR |
private java.util.Map<java.lang.String,java.lang.Object> |
context |
static java.lang.String |
DEFAULT_END_DELIM |
static java.lang.String |
DEFAULT_ESCAPE_SEQ |
static java.lang.String |
DEFAULT_START_DELIM |
private java.lang.String |
endDelim |
private java.lang.String |
escapeSeq |
private java.lang.String |
line |
private int |
lineIdx |
private int |
minExpressionSize |
private static char |
NEWLINE_CHAR |
private java.io.PushbackReader |
pushbackReader |
private Reflector |
reflector |
private java.lang.String |
startDelim |
Constructor and Description |
---|
LineOrientedInterpolatingReader(java.io.Reader reader,
java.util.Map<java.lang.String,?> context)
Filters a Reader using the default escape sequence "\" and token delimiters "${", "}".
|
LineOrientedInterpolatingReader(java.io.Reader reader,
java.util.Map<java.lang.String,?> context,
java.lang.String startDelim,
java.lang.String endDelim)
Filters a Reader using the default escape sequence "\".
|
LineOrientedInterpolatingReader(java.io.Reader reader,
java.util.Map<java.lang.String,?> context,
java.lang.String startDelim,
java.lang.String endDelim,
java.lang.String escapeSeq)
Construct an interpolating Reader, specifying token delimiters and the escape sequence.
|
Modifier and Type | Method and Description |
---|---|
private java.util.Map<java.lang.String,java.lang.Object> |
evaluateExpressions(java.util.Set<java.lang.String> expressions) |
private java.lang.String |
findAndReplaceUnlessEscaped(java.lang.String rawLine,
java.lang.String search,
java.lang.String replace) |
private int |
findDelimiter(java.lang.String rawLine,
java.lang.String delimiter,
int lastPos) |
private java.util.Set<java.lang.String> |
parseForExpressions(java.lang.String rawLine) |
int |
read() |
int |
read(char[] cbuf,
int off,
int len) |
private void |
readAndInterpolateLine() |
private java.lang.String |
readLine() |
private java.lang.String |
replaceWithInterpolatedValues(java.lang.String rawLine,
java.util.Map<java.lang.String,java.lang.Object> evaluatedExpressions) |
long |
skip(long n) |
public static final java.lang.String DEFAULT_START_DELIM
public static final java.lang.String DEFAULT_END_DELIM
public static final java.lang.String DEFAULT_ESCAPE_SEQ
private static final char CARRIAGE_RETURN_CHAR
private static final char NEWLINE_CHAR
private final java.io.PushbackReader pushbackReader
private final java.util.Map<java.lang.String,java.lang.Object> context
private final java.lang.String startDelim
private final java.lang.String endDelim
private final java.lang.String escapeSeq
private final int minExpressionSize
private final Reflector reflector
private int lineIdx
private java.lang.String line
public LineOrientedInterpolatingReader(java.io.Reader reader, java.util.Map<java.lang.String,?> context, java.lang.String startDelim, java.lang.String endDelim, java.lang.String escapeSeq)
reader
- the Reader to be filtered.context
- keyword/value pairs for interpolation.startDelim
- character sequence which (possibly) begins a token.endDelim
- character sequence which ends a token.escapeSeq
- public LineOrientedInterpolatingReader(java.io.Reader reader, java.util.Map<java.lang.String,?> context, java.lang.String startDelim, java.lang.String endDelim)
reader
- the Reader to be filtered.context
- keyword/value pairs for interpolation.startDelim
- the character sequence which (possibly) begins a token.endDelim
- the character sequence which ends a token.public LineOrientedInterpolatingReader(java.io.Reader reader, java.util.Map<java.lang.String,?> context)
reader
- the Reader to be filtered.context
- keyword/value pairs for interpolation.public int read() throws java.io.IOException
read
in class java.io.FilterReader
java.io.IOException
public int read(char[] cbuf, int off, int len) throws java.io.IOException
read
in class java.io.FilterReader
java.io.IOException
public long skip(long n) throws java.io.IOException
skip
in class java.io.FilterReader
java.io.IOException
private void readAndInterpolateLine() throws java.io.IOException
java.io.IOException
private java.lang.String readLine() throws java.io.IOException
java.io.IOException
private java.lang.String replaceWithInterpolatedValues(java.lang.String rawLine, java.util.Map<java.lang.String,java.lang.Object> evaluatedExpressions)
private java.util.Map<java.lang.String,java.lang.Object> evaluateExpressions(java.util.Set<java.lang.String> expressions)
private java.util.Set<java.lang.String> parseForExpressions(java.lang.String rawLine)
private int findDelimiter(java.lang.String rawLine, java.lang.String delimiter, int lastPos)
private java.lang.String findAndReplaceUnlessEscaped(java.lang.String rawLine, java.lang.String search, java.lang.String replace)