Closed Nyoho closed 1 year ago
封じ手の部分を消せば読み込めるのですが、それでも一手間かかるので、 封じ手は無視するか何かして、エラーなく読み込めるようにするpull requestを書いてみても良いでしょうか。
@Nyoho ご報告いただきありがとうございます。
KIF 形式については http://kakinoki.o.oo7.jp/kif_format.html に従うようにしており、「封じ手」という表記は想定していませんでした。 さきほど王将戦の棋譜を https://mainichi.jp/oshosen2023/schedule/ からダウンロードしたところ、既に 2 日目の対局を終えているせいか、「封じ手」の記述はなくなっているようでした。
テキストエディタで「封じ手」と書き換えたファイルを作ると同じエラーをこちらでも確認はできました。 また、他の将棋アプリで開くと以下のような挙動でした。
KIF 形式の定義は曖昧なのでどれが正解ということはないと思うのですが、扱えない指し手の直前までは読み込むものが多数派なので、現在のエラーの基準は緩和(エラーにしない、または警告表示のみ)した方が良さそうです。
改修の方針としては以下のパターンのどれかを考えています。
PR のご提案もありがとうございます。 「無視するか何か」の部分の実装方針(何を条件とするか)だけ確認させていただきたいです。 なお、最終的に
任意の文言を受け入れて、それを表示・保存にも反映する。
に変えたい印象なので、該当箇所を無視する実装を入れた場合それを v1.4.3 / v1.5.1 でリリースして、 v1.6.0 で更に改修することになると思います。
大変詳細な調査、ありがとうございます! 僕も
任意の文言を受け入れて、それを表示・保存にも反映する。
に賛同します。 その方向で work in progress でPR作成してみます。 できたあかつきには @sunfish-shogi さんのお望みの実装になるようにコメントいただければ幸いです。
その方向で
いったん読まないようにする(棋譜に反映しない)形での対応をまず入れるかと思っていましたが、もしかすると最終形(任意の文言を受け入れて、それを表示・保存にも反映)を目指して開発されようとしているでしょうか。
現状、特殊な指し手は SpecialMove という enum 型で表現していますが、任意の値を扱えるようにする場合は表現力自体が足りないので、型を見直す必要がありそうです。 その場合、抽象化の方法を考えたり関係箇所に影響がないか精査する必要があるので(結果的な変更行数はそれほどでもないかも知れませんが)それなりに重い修正になると思います。
アドバイスありがとうございます。 最終形は最後にすることにして、まずは簡単な実装からPR作成してみます。(時間がかかっているのは最終形を目指しているからではなく、僕の手が遅いだけです。すみません。)
@Nyoho 承知しました。 スケジュールを気にしていたわけではないので大丈夫です。
main ブランチには他の変更が入りましたので、 v1.5.x の support ブランチ を作成しました。 v1.5.1 や v1.5.2 をリリースする場合、このブランチに変更を入れてタグを作成します。
私は v1.5 と v1.6 のどちらでも構いませんので、パッチバージョンアップデートを希望される場合は support-v1.5 、 v1.6.0 への反映を希望される場合は main へプルリクエストをいただければと思います。
ありがとうございます。ブランチも承知いたしました。 (もう保存されているかもしれませんが)ちょうど今なら王将戦の1日目が終わったところなので「封じ手」が最後に書かれたkifの実データが取れます。
v1.6.0 のリリース候補を作成しますので、こちらの改修はいったん v1.7.0 ターゲットに変更させていただきました。
ありがとうございます。
@Nyoho この Issue のタイトルで示されている問題自体は解決しており、残された課題は機能拡張と捉えているので、新しい Issue https://github.com/sunfish-shogi/electron-shogi/issues/496 を立ち上げ、本 Issue はクローズとさせていただきます。
昨日の王将戦の1日目の終了時点のkifファイルを入れようとすると「不正な指し手形式: 61 封じ手」というエラーが出ました。
封じ手の部分を消せば読み込めます。