import java.io.*;
import java.util.*;
/**
* SgfReader クラスは、SGF形式の棋譜情報を、囲碁Viewer形式の棋譜情報に変換します。
* @author Jiro Suzuki
*/
public class SgfReader{
private Kifu kifu;
private Vector sgfVectorTree;
/**
* 棋譜情報が空のインスタンスを生成します。
*/
SgfReader(){
kifu=new Kifu();
sgfVectorTree=new Vector();
}
/**
* SGF形式で作成された棋譜情報ファイルを読み込み、囲碁Viewer形式の棋譜情報に変換します。
* @param fileName SGF形式の棋譜ファイル名。フルパス指定で渡す。
* @return 囲碁Viewer形式の棋譜情報。Kifuクラス形式。
*/
public Kifu read(String fileName){
String strAll="";
try{
String line;
BufferedReader br=new BufferedReader(new FileReader(fileName));
while((line=br.readLine()) != null ) {
strAll=strAll.concat(line);
}
}
catch(IOException e){
System.out.print("Error:"+e);
System.exit(1);
}
//SgfTree取得
//ここで、SGF形式のデータ(String)から手順部分のデータツリーをVector形式で取得する。
SgfTree sgfTree=new SgfTree();
sgfVectorTree=sgfTree.getSgfTree(strAll);
//本手順取得
//ここで、Vector形式の手順を、囲碁Viewer形式の手順に変換し、同時に参考図情報を取り除く。
SgfOrder sgfOrder=new SgfOrder();
String[] strOrder=sgfOrder.includeOrder(sgfVectorTree);
IntOrder intOrder=new IntOrder();
OrderOfMoves orderOfMoves=intOrder.translateSgfToInt(strOrder);
kifu.setOrderOfMoves(orderOfMoves);
//ゲームインフォメーション取得
GameInformation gi=new GameInformation();
gi.editGameInformation(sgfVectorTree);
kifu.setGameInformation(gi);
return kifu;
}
/**
* SGF形式の手順データツリーを返します。
* @return SGF形式の手順データツリー。Vectorクラス形式。
*/
public Vector getSgfTree(){
return sgfVectorTree;
}
}