/*	ShogiInputStream.java		a stream filter for ascii shogi data files	97-feb-26 ped created*/import java.io.* ;public class ShogiInputStream implements Enum_PGNTokens{	private PushbackInputStream is ;	private	String				str ;		ShogiInputStream( InputStream is )	{		this.is = new PushbackInputStream( is ) ;	}		public int nextToken( )	{		str = new String( ) ;		int	ch ;		try {			do {				ch = is.read( ) ;				switch( ch ) {					case '[' :		//	game comment						ch = is.read( ) ;						while( ch != -1 && ch != ']' ) {							str += ( char ) ch ;							ch = is.read( ) ;						}						return CTT_GAME_COMMENT ;					case '{' :		//	move comment						ch = is.read( ) ;						while( ch != -1 && ch != '}' ) {							if( Character.isSpace( ( char ) ch ) ) {								if( ch == ' ' || ! str.endsWith( " " ) )									str += ' ' ;							} else								str += ( char ) ch ;							ch = is.read( ) ;						}						return CTT_MOVE_COMMENT ;					case '(' :		//	variation						return CTT_VARIATION_OPEN ;										case ')' :		//	end of variation						return CTT_VARIATION_CLOSE ;									}			} while( ch != -1 && Character.isSpace( ( char ) ch ) ) ;			while( ch != -1	&& ! Character.isSpace( ( char ) ch ) ) {				str += ( char ) ch ;				ch = is.read( ) ;				if( ch == ')' ) {					is.unread( ch ) ;					break ;				}			}		}		catch( IOException e ) {		}		if( str.length( ) == 0 )			return CTT_EOF ;		if( str.equals( "1-0" ) || str.equals( "0-1" ) || str.equals( "1/2-1/2" ) || str.equals( "*" ) )			return CTT_EOG ;		if( Character.isDigit( str.charAt( 0 ) ) )			return CTT_MOVE_NUMBER ;		return CTT_MOVE ;	}	public String getString( )	{		return str ;	}}
