Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright (C) 2014 Zach Melamed
   * 
   * Latest version available online at https://github.com/zach-m/tectonica-commons
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 package com.tectonica.util;
 
 import java.io.Reader;
 import java.util.Map;
 
 public class SearchReplaceReader extends Reader
 {
 	protected PushbackReader pushbackReader = null;
 	protected TokenResolver tokenResolver = null;
 	protected StringBuilder tokenNameBuffer = new StringBuilder();
 	protected String tokenValue = null;
 	protected int tokenValueIndex = 0;
 
 	public SearchReplaceReader(Reader sourceTokenResolver resolver)
 	{
 		this. = new PushbackReader(source, 2);
 		this. = resolver;
 	}
 
 	public int read(CharBuffer targetthrows IOException
 	{
 		throw new RuntimeException("Operation Not Supported");
 	}
 
 	public int read() throws IOException
 	{
 		if ( != null)
 		{
 
 			{
 				 = null;
 			}
 		}
 
 		int data = .read();
 		if (data != '$')
 			return data;
 
 		data = .read();
 		if (data != '{')
 		{
 			return '$';
 		}
 
 		data = .read();
 		while (data != '}')
 		{
 			.append((chardata);
 			data = .read();
 		}
 
 
 		if ( == null)
 			 = "${" + .toString() + "}";
 
 	}
 
 	public int read(char cbuf[]) throws IOException
 	{
 		return read(cbuf, 0, cbuf.length);
 	}
 
 	public int read(char cbuf[], int offint lenthrows IOException
 	{
 		int charsRead = 0;
 		for (int i = 0; i < leni++)
 		{
 			int nextChar = read();
 			if (nextChar == -1)
			{
				if (charsRead == 0)
					charsRead = -1;
				break;
			}
			charsRead = i + 1;
			cbuf[off + i] = (charnextChar;
		}
		return charsRead;
	}
	public void close() throws IOException
	{
	}
	public long skip(long nthrows IOException
	{
		throw new RuntimeException("Operation Not Supported");
	}
	public boolean ready() throws IOException
	{
	}
	public boolean markSupported()
	{
		return false;
	}
	public void mark(int readAheadLimitthrows IOException
	{
		throw new RuntimeException("Operation Not Supported");
	}
	public void reset() throws IOException
	{
		throw new RuntimeException("Operation Not Supported");
	}
	// //////////////////////////////////////////////////////////////////////////////////
	public static interface TokenResolver
	{
		public String resolveToken(String tokenName);
	}
	public static class MapTokenResolver implements TokenResolver
	{
		protected Map<StringStringtokenMap = new HashMap<StringString>();
		public MapTokenResolver(Map<StringStringtokenMap)
		{
			this. = tokenMap;
		}
		public String resolveToken(String tokenName)
		{
			return this..get(tokenName);
		}
	}
New to GrepCode? Check out our FAQ X