/* 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 ; } }