Exemplo n.º 1
0
        /// <summary>
        /// コメント行を読み込み、それをノードに設定します。
        /// </summary>
        /// <remarks>
        /// コメント行は複数行に渡ることがあるため、
        /// コメント行がある間はずっとコメントを追加し続けます。
        /// </remarks>
        private void ReadCommentLines(KifMoveNode node, bool forceOneLine)
        {
            var alreadyRead = false;

            while (this.currentLine != null)
            {
                var commentData = KifUtil.ParseCommentLine(this.currentLine);
                if (commentData == null)
                {
                    if (forceOneLine && !alreadyRead)
                    {
                        ReadNextLine();
                    }

                    break;
                }

                // 必要なコメントのみ棋譜から取り出します。
                if (commentData.IsMoveComment)
                {
                    node.AddComment(commentData.Comment);
                }

                ReadNextLine();
                alreadyRead = true;
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// コメント行を読み込み、それをノードに設定します。
        /// </summary>
        /// <remarks>
        /// コメント行は複数行に渡ることがあるため、
        /// コメント行がある間はずっとコメントを追加し続けます。
        /// </remarks>
        private void ReadCommentLines(KifMoveNode node, bool forceOneLine)
        {
            var alreadyRead = false;

            while (this.currentLine != null)
            {
                var commentData = KifUtil.ParseCommentLine(this.currentLine);
                if (commentData == null)
                {
                    if (forceOneLine && !alreadyRead)
                    {
                        ReadNextLine();
                    }

                    break;
                }

                // 必要なコメントのみ棋譜から取り出します。
                if (commentData.IsMoveComment)
                {
                    node.AddComment(commentData.Comment);
                }

                ReadNextLine();
                alreadyRead = true;
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// ヘッダー行をパースします。
        /// </summary>
        private bool ParseHeaderLine(string line, BodParser parser,
                                     KifuHeader header = null, KifMoveNode head = null)
        {
            if (line == null)
            {
                // ファイルの終了を意味します。
                return false;
            }

            var commentData = KifUtil.ParseCommentLine(line);
            if (commentData != null)
            {
                // コメントはパース結果に含めます。
                if (head != null && commentData.IsMoveComment)
                {
                    head.AddComment(commentData.Comment);
                }

                return true;
            }

            // 読み飛ばすべき説明行
            if (line.Contains("手数----指手---------消費時間"))
            {
                this.isKif = true; // kif形式です。
                return true;
            }

            // 局面の読み取りを試みます。
            if (parser.TryParse(line))
            {
                return true;
            }

            var item = KifUtil.ParseHeaderItem(line);
            if (item != null)
            {
                if (item.Key == "手合割" && item.Value != "その他")
                {
                    this.startBoard = BoardTypeUtil.CreateBoardFromName(item.Value);
                }

                if (header != null)
                {
                    // 可能ならヘッダアイテムを設定します。
                    var type = KifUtil.GetHeaderType(item.Key);
                    if (type != null)
                    {
                        header[type.Value] = item.Value;
                    }
                }

                return true;
            }

            // ヘッダが正しく読めない場合、
            // 区切りなしに指し手行に入っている可能性があります。
            if (MoveLineRegex.IsMatch(line))
            {
                this.isKif = true;
            }

            return false;
        }
Exemplo n.º 4
0
        /// <summary>
        /// ヘッダー行をパースします。
        /// </summary>
        private bool ParseHeaderLine(string line, BodParser parser,
                                     KifuHeader header = null, KifMoveNode head = null)
        {
            if (line == null)
            {
                // ファイルの終了を意味します。
                return(false);
            }

            var commentData = KifUtil.ParseCommentLine(line);

            if (commentData != null)
            {
                // コメントはパース結果に含めます。
                if (head != null && commentData.IsMoveComment)
                {
                    head.AddComment(commentData.Comment);
                }

                return(true);
            }

            // 読み飛ばすべき説明行
            if (line.Contains("手数----指手---------消費時間"))
            {
                this.isKif = true; // kif形式です。
                return(true);
            }

            // 局面の読み取りを試みます。
            if (parser.TryParse(line))
            {
                return(true);
            }

            var item = KifUtil.ParseHeaderItem(line);

            if (item != null)
            {
                if (item.Key == "手合割" && item.Value != "その他")
                {
                    this.startBoard = BoardTypeUtil.CreateBoardFromName(item.Value);
                }

                if (header != null)
                {
                    // 可能ならヘッダアイテムを設定します。
                    var type = KifUtil.GetHeaderType(item.Key);
                    if (type != null)
                    {
                        header[type.Value] = item.Value;
                    }
                }

                return(true);
            }

            // ヘッダが正しく読めない場合、
            // 区切りなしに指し手行に入っている可能性があります。
            if (MoveLineRegex.IsMatch(line))
            {
                this.isKif = true;
            }

            return(false);
        }