Skip to content

Conversation

@grosbeak2p
Copy link
Contributor

@grosbeak2p grosbeak2p commented Jan 9, 2026

これは元々は issue #21 として投稿したものです。

curses インターフェースでは、状態 (ステータス) 表示をするのに src/botl.c で定義されて
いる valid_conditions[] を参照しています。

| /* valid_conditions[] is used primarily for parsing hilite_status rules, but
|    we can use it for condition names and mask bits, avoiding duplication */
| extern const struct condmap valid_conditions[]; /* botl.c */

コメントにもあるように、この配列は元々ハイライトステータスの設定を
パースするのに使用しているので、これを直接翻訳すると、ハイライト設定に日本語が
混ざるようになってしまいます。

そこで、上記配列からビットマスクを省略した、日本語ステータスだけの配列を
定義して、それを参照するように修正しました。

tty インターフェースでも、重量ステータスで同様の対応をしています (src/botl.c)。
なので、似たようなコメント行を入れてみました。

修正前
Image
修正後
Image

Shift-JIS のファイルを新規に commit / push したのは初めてなのですが、「jnethack-alpha リポジトリは
Shift-JIS のファイルをそのまま commit している」ことに気がつくのにだいぶ遠回りしてしまい、
時間がかかってしまいました。

最初に github の差分表示や編集画面で文字化けしたのは、単に文字コードの自動識別に失敗して
Shift-JIS ではなく iso8859-1 とみなされていた為でした (commit 自体は問題なくされていた)。
自動識別するにはステータス文字列だけでは短かすぎたようで、日本語コメントを 1 行入れたら
Shift-JIS として識別してくれるようになりました。

この差分及び #22 #23 #24 #25 も、FreeBSD 14.3-RELEASE、NetBSD 10.1、Debian 12 で
動作確認しています.

Summary by CodeRabbit

リリースノート

  • 新機能
    • 日本語版で状態異常の条件名を日本語で表示するようになりました。

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link

coderabbitai bot commented Jan 9, 2026

Walkthrough

win/curses/cursstat.c ファイルに JP 固有の条件名ラベル配列 valid_conditions_jp を追加し、JP が有効な場合に条件表示時にこの配列を使用するよう制御フローを変更しました。プリプロセッサディレクティブで保護された条件付きコンパイルにより、JP 環境と非 JP 環境で異なるテキストを選択します。

Changes

Cohort / File(s) 説明
JP 条件名ラベル追加
win/curses/cursstat.c
static 配列 valid_conditions_jp を追加。curs_stat_conds 関数内の 2 箇所で、JP が有効な場合に valid_conditions_jp[i] から日本語ラベルを選択し、無効な場合は valid_conditions[i].id にフォールバック。プリプロセッサディレクティブ (#if 1 /JP/ ... #endif) により条件分岐を実装。

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~8 minutes

Possibly related issues

  • [curses] ステータスの日本語表示 #21 — JP 固有の条件名配列をカーセス状態表示に実装し、valid_conditions[] の代わりにこの配列を使用することで、状態条件の日本語表示に対応させている。
🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed タイトルはプルリクエストの主な変更内容を正確に反映しており、curses インターフェースでのステータス(状態)の日本語表示対応を明確に示している。

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
win/curses/cursstat.c (1)

1020-1024: 条件名の切り替えロジックは正しく実装されています

日本語ステータス専用配列への切り替えは正しく実装されており、hilite_status 設定への日本語混入を防ぐという PR の目的を達成しています。

ただし、line 980 の #if 1 /*JP*/ と、ここでの #if 0 /*JP*/ のプリプロセッサディレクティブの使い方に一貫性がありません。JP マクロの定義状態に関わらず、現在の実装では常に日本語版が有効になっています。

💡 より明確なプリプロセッサディレクティブの提案

一貫性のために、以下のような実装を検討してください:

+#ifdef JP
-#if 0 /*JP*/
                Strcpy(condnam, valid_conditions[i].id);
-#else
+#else /* !JP */
                Strcpy(condnam, valid_conditions_jp[i]);
-#endif
+#endif /* JP */
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 54453d3 and e6b0aa2.

📒 Files selected for processing (1)
  • win/curses/cursstat.c
🔇 Additional comments (2)
win/curses/cursstat.c (2)

1052-1056: 一貫した実装になっています

Lines 1020-1024 と同様の条件名切り替えロジックが正しく適用されています。条件表示の両方のコードパス(バッファへの蓄積と直接出力)で一貫して日本語配列を使用しています。

Lines 1020-1024 のレビューコメントで指摘したプリプロセッサディレクティブの懸念は、ここにも同様に当てはまります。


979-996: 配列サイズと順序は正しく対応しています

検証結果により、当初の懸念事項は解決されました:

  1. 配列サイズ: valid_conditions_jp[] の要素数(13個)は BL_MASK_BITS の値(include/botl.h:70 で定義)と完全に一致しています。

  2. 配列順序: 各エントリは対応する BL_MASK_* 定数と正しい順序で対応しており、石化→ぬらぬら→絞殺→食毒→末期→目盲→耳聾→意識不→混乱→幻覚→浮遊→飛行→騎乗の順序が保たれています。

  3. プリプロセッサディレクティブ: #if 1 /*JP*/ は常に真と評価されますが、これはこの curses ビルド変種では意図的な設計です。実際の使用箇所(lines 1022 と 1054)で #if 0 /*JP*/ パターンによって valid_conditions_jp[i] が常に選択されるため、配列が常に必要です。

  4. バッファ安全性: condnam[20] のバッファサイズは日本語文字列に対して十分です。

インデックスアクセスの範囲外参照のリスクはありません。コードは安全です。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant