public Reader getReader( Reader reader ) { Interpolator interpolator = createInterpolator( delimiters, projectStartExpressions, propertiesValueSource, project, mavenSession, escapeString, escapeWindowsPaths ); MultiDelimiterInterpolatorFilterReaderLineEnding filterReader = new MultiDelimiterInterpolatorFilterReaderLineEnding( reader, interpolator, supportMultiLineFiltering ); final RecursionInterceptor ri; if ( projectStartExpressions != null && !projectStartExpressions.isEmpty() ) { ri = new PrefixAwareRecursionInterceptor( projectStartExpressions, true ); } else { ri = new SimpleRecursionInterceptor(); } filterReader.setRecursionInterceptor( ri ); filterReader.setDelimiterSpecs( delimiters ); filterReader.setInterpolateWithPrefixPattern( false ); filterReader.setEscapeString( escapeString ); return filterReader; }
int ch = read(); if ( ch == -1 )
boolean inEscape = useEscape && ch == getEscapeString().charAt( 0 ); for ( int i = 0; i < getEscapeString().length(); i++ ) if ( ch != getEscapeString().charAt( i ) || ch == -1 || ( ch == '\n' && !supportMultiLineFiltering ) ) if ( !isPreserveEscapeString() ) replaceIndex = key.length(); return read(); return read();
/** * @param in reader to use * @param interpolator interpolator instance to use * @param ri The {@link RecursionInterceptor} to use to prevent recursive expressions. * @param supportMultiLineFiltering If multi line filtering is allowed */ public MultiDelimiterInterpolatorFilterReaderLineEnding( Reader in, Interpolator interpolator, RecursionInterceptor ri, boolean supportMultiLineFiltering ) { // wrap our own buffer, so we can use mark/reset safely. super( new BufferedReader( in, MAXIMUM_BUFFER_SIZE ) ); this.interpolator = interpolator; // always cache answers, since we'll be sending in pure expressions, not mixed text. this.interpolator.setCacheAnswers( true ); recursionInterceptor = ri; delimiters.add( DelimiterSpecification.DEFAULT_SPEC ); this.supportMultiLineFiltering = supportMultiLineFiltering; calculateMarkLength(); }
/** * Skips characters. This method will block until some characters are available, an I/O error occurs, or the end of * the stream is reached. * * @param n The number of characters to skip * @throws IllegalArgumentException If <code>n</code> is negative. * @throws IOException If an I/O error occurs * @return the number of characters actually skipped */ public long skip( long n ) throws IOException, IllegalArgumentException { if ( n < 0L ) { throw new IllegalArgumentException( "skip value is negative" ); } for ( long i = 0; i < n; i++ ) { if ( read() == -1 ) { return i; } } return n; }