Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

(漢字)コードと Language #306

Closed
4 tasks done
nmaya opened this issue Sep 5, 2024 · 20 comments
Closed
4 tasks done

(漢字)コードと Language #306

nmaya opened this issue Sep 5, 2024 · 20 comments
Milestone

Comments

@nmaya
Copy link
Member

nmaya commented Sep 5, 2024

関連して commandline/teraterm.html についても手当てしてあるとさらに良いと思います。

  • コマンドラインで /KR=UTF8 /KT=UTF8 /LA=R のようにすると、/LA が勝つようです。将来的に /LA はどう扱われるでしょうか。
    • 引き続き利用可能とすると、類似のオプションで優先順位があることになりますから、それが記載されていると良いと思います。
    • 将来的に /LA を落としていく方向性だとすると、5.3 時点で deprecated である旨を記載しておくと良いと思います。

Originally posted by @sempreff in #274 (comment)


  • Language の削除(5.3で済)
  • /LA 引数の削除 aad1621
  • Ambiguous Width の自動調整 80aa0ad
  • UIの Encoding と /KR, /KR のドキュメントの Encoding の対応 *
@nmaya
Copy link
Member Author

nmaya commented Sep 5, 2024

指摘ありがとうございます。

コマンドラインから ts.Language を変更できますね。
指定する文字コードとLanguage(言語)の組み合わせによっては問題が出る気がします。

例えば、
ts.Language = IdChinese のとき、
ts.KanjiCode(or KanjiCodeSend) は 1 or 2 ですが、
JIS を選べば 3 を設定できます。

/KT,/KR の値から、Language(言語)は自動で決定するようにして、
/LA はなくすよう修正します。

Originally posted by @zmatsuo in #274 (comment)

@nmaya nmaya mentioned this issue Sep 5, 2024
20 tasks
@nmaya nmaya added this to the 5.4 milestone Sep 5, 2024
@nmaya
Copy link
Member Author

nmaya commented Sep 5, 2024

TERATERM.INI/引数/構造体のメンバ/UI の対応はこうなっていました。

TERATERM.INI 引数 構造体 UI(旧)
Language /LA ts->Language Genral - Language
KanjiReceive /KR ts->KanjiCode Terminal - Kanji(receive)
KanjiSend /KT ts->KanjiCodeSend Terminal - Kanji(transmit)

5.3 で Genaral から Language がなくなりましたが、内部的にはなくなっていません。

Coding タブの receive で KanjiCode と Language が、transmit の中に KanjiCodeSend と Language が同時に設定できるようになっていると思います(TKanjiList 構造体が使われています)。上の表のように、変数と UI が1対1で対応していません。

5.3 ではコマンドラインからは /LA が直接指定できます。

/KR=UTF8 /KT=UTF8 /LA=R のようにすると、/LA が勝つようです。

この処理はここかな?と思います。

/KT,/KR の値から、Language(言語)は自動で決定するようにして、/LA はなくす

リストに "UTF-8", "Japanese/UTF-8", "Korean/UTF-8", "Chinese/UTF-8" とあります。前が Language で後ろが Code ですが、一つの引数で区別がつきますか?

@zmatsuo
Copy link
Member

zmatsuo commented Sep 5, 2024

"UTF-8", "Japanese/UTF-8", "Korean/UTF-8", "Chinese/UTF-8" は
"UTF-8" にまとめて、
Ambiguous Characters Width などは、GUIでは GetACP()、
コマンドラインでは ini をみて値を決めればどうかなと思います。

Japanese/JIS が漢字インが数種類あって、
JIS にはバリエーションがある、のと同じようなイメージで、
UTF-8 にもバリエーションがある、として扱えば納得感がある感じでしょうか。

UTF-8m のように UTF-8w, UTF-8n とか名前を付けても良いかもしれませんが
やめたほうが無難そうです。

Ambiguous Characters Width を設定するエスケープシーケンスを実装して
ホスト側から指示が来るようになればとても平和になりそうです。
ということで、
どんなシーケンスだっけ、と手もとのメモを探したりしたのですが見つけられず。
文字幅設定/問い合わせシーケンス存在しませんでしたっけ?

@nmaya
Copy link
Member Author

nmaya commented Sep 5, 2024

"UTF-8", "Japanese/UTF-8", "Korean/UTF-8", "Chinese/UTF-8"

実装に詳しくないのですが、これらの "UTF-8" の違いは「曖昧文字幅」の標準的な値(プルダウン変更時に矯正適用される値)を持っているだけでしょうか?
"UTF-8" と "Japanese/UTF-8" では、なにか表示が違った覚えがあります。設定UIがなく曖昧文字幅を固定で表示していた時期があり、その違いだけでしょうか?

Ambiguous Characters Width

"曖昧文字幅"の文字が、1か2どちらの幅でデザインされているかはフォントによって違うはずなので、すべて自動で行うのは難しいと思います。

cf. https://ja.osdn.net/projects/ttssh2/ticket/44424

それ以外の部分で、Unicode charsetの行のロシア語のЗдравствуйте!がйとтの間で\で改行されているので emacs は2桁を想定しているように見えます。Europeのために曖昧文字幅を1にすると、キリル文字やギリシャ文字がつぶれることになるのですが、これはフォントの問題になるでしょうか?

JIS X 0208 にキリル文字やギリシャ文字が収録されている関係で、日本語用のフォントではこれらの文字が全角でデザインされている事が多いです。 これを半角で表示する為、文字の右側が切れて表示されます。
Ricty DiminishedHackGen Console などのように、半角としてデザインされているフォントを使うと綺麗に表示できます。

@zmatsuo
Copy link
Member

zmatsuo commented Sep 6, 2024

Ambiguous Characters Width を設定するエスケープシーケンスを実装して…

あったとおもったのですが、どうも思い違いだったようです。
失礼しました。

@zmatsuo
Copy link
Member

zmatsuo commented Sep 6, 2024

"曖昧文字幅"の文字が、1か2どちらの幅でデザインされているかはフォントによって違うはずなので、すべて自動で行うのは難しいと思います

フォントの拡縮表示(リサイズ)を試してみてください。
結構うまく表示できています。

描画幅に合わせてリサイズしたフォントを描画
を使うと拡大縮小して描画します。
7f33265

こんなふうにテストできます。

echo -e X"\u2192"X

(bash 組み込みechoを使うとUnicodeコードポイントを指定できるんですね。便利です。)
"→" (U+2192) は Ambiguousで、(フォントによって)文字幅が異なります。

手元だと、いまは Miryca M を使っていて、U+2192 は 2cell なデザインです。

Ambiguous Characters Width=1 設定のとき、
リサイズせず描画すると、マイナス("-")のような表示になってしまいますが、
リサイズ描画=onだといい感じで表示できます。

@zmatsuo
Copy link
Member

zmatsuo commented Sep 6, 2024

"UTF-8" と "Japanese/UTF-8" では、なにか表示が違った覚えがあります。

調べてみます。
違わない、となってほしいな、望ましいかなと思っています。
Ambiguous Characters Width、絵文字の幅 以外にも変数があったら
相談しますね。

@zmatsuo
Copy link
Member

zmatsuo commented Sep 10, 2024

aad1621 でlanguageを削除しました。

Ambiguous Characters width、Emoji Characters width のデフォルトを
どうするかはちょっと課題です。やはりGetACP()かな。

TTXKanjiMenuプラグインの言語設定は自分自身内で行うようにしました。
日本語/韓国語の初期値をGetACP()で決めればよりよさそうです。
(TTXKanjiMenuプラグイン単体の説明ページがないんですね。)

Unicode 設定ページはなんだか不要な感じがしてきました。

zmatsuo added a commit that referenced this issue Sep 11, 2024
- ドキュメントに反映した
- 文字コードにUTF-8を選択時、ambiguous, emoji 文字幅のデフォルトを適宜設定するようにした
  - Windowsの設定がCJKのとき、2cell
  - 以外は 1cell
- TTX KanjiMenu 起動時にWindowsの設定が韓国語の場合は韓国語モードをデフォルトにした
  - それ以外は 日本語モードがデフォルト
@zmatsuo
Copy link
Member

zmatsuo commented Sep 11, 2024

ACPを見て動作を設定するよう修正してpushしました。

ts.Languageがなくなって動作が変わる部分がありました。
変わりますが問題なさそうです。

Japanese/UTF-8など言語設定が日本語(ts.Language==IdJapanese)の時
Kanji-in (ESC $ B など)を受け入れて、
日本語以外の時は受け入れていない
など処理がありました。
といっても、Japanese/UTF-8 に設定していると、
JISコードを正しく表示できないので問題なさそうです。

ISO-2022-JP(=JIS)で日本語を表示していますが、
ISO 2022の枠組みの中には中国語、韓国語などもあります。

将来ISO/IEC 2022に対応して色々な言語に対応できればとてもよさそうです。
でもに要望は少ないのかなと思います。

@zmatsuo
Copy link
Member

zmatsuo commented Sep 14, 2024

Language をなくして今のところ問題ないのではないかと思います。

a3f6609 も一緒にマージしてます。
こちらもokですね。

この issue はクローズします。

@zmatsuo zmatsuo closed this as completed Sep 14, 2024
@nmaya
Copy link
Member Author

nmaya commented Sep 15, 2024

Kanji-in (ESC $ B など)を受け入れて、日本語以外の時は受け入れていない

この部分は私に知識がないので私にはわかりません。(いわもとさんならわかりそう)

Language をなくして今のところ問題ないのではないかと思います。

現状で問題があるかどうかわかりませんが、こうなったということで了解しました。

TERATERM.INI 引数 構造体 UI(Codingタブ)
KanjiReceive /KR ts->KanjiCode receive
KanjiSend /KT ts->KanjiCodeSend transmit

Codingタブの選択肢と、ここの選択肢を比較すると同じでないように思います。

  1. ISO8859-1などが引数の説明にない
  2. プルダウンの Japanese/EUC が、引数では単に "EUC" となる

@nmaya nmaya reopened this Sep 15, 2024
@nmaya
Copy link
Member Author

nmaya commented Sep 15, 2024

#318 に書こうかと思ったのですが、絵文字/非絵文字の話ではないのでこちらに。

フォントの拡縮表示(リサイズ)を試してみてください。
描画幅に合わせてリサイズしたフォントを描画
を使うと拡大縮小して描画します。

丸記号ですが、このようになります。

Tera Term 5.3
HackGen Console
Ambiguous Characters width = 2

Drawing resized font to fit cell width = on
HackGen Console_fit=on

Drawing resized font to fit cell width = off
HackGen Console_fit=off

すべて自動で行うのは難しいと思います。

と書いたように「全角で表示してほしい」「フォントでその文字が半角でデザインされている」の組み合わせだと、off のほうが綺麗に表示されます。


全角でデザインされている場合には on でうまく表示されます。

MS ゴシック
MSゴシック

PlemolJP Console
PlemolJP Console

戸越等幅ゴシック
戸越等幅ゴシック

@zmatsuo
Copy link
Member

zmatsuo commented Sep 15, 2024

1 cell デザインを 2 cell に引き延ばすとちょっと残念ですね。

$ echo -e 1234567\\n1\\u25cb4\\u25cf7
1234567
1○4●7

(↑webブラウザによって表示幅が変化すると思います。)

表示が横にのびている以外の動作には
問題ないように思います。

引き延ばさずに 2 cell の中央に描画すると
もう少しいい感じになるかもしれないです。

@nmaya
Copy link
Member Author

nmaya commented Sep 15, 2024

上で画像を上げたのは、

Ambiguous Characters Width などは、GUIでは GetACP()、コマンドラインでは ini をみて値を決めれば

とおっしゃたので

1か2どちらの幅でデザインされているかはフォントによって違うはずなので、すべて自動で行うのは難しいと思います

との返答したのに対し

フォントの拡縮表示(リサイズ)を試してみてください。結構うまく表示できています。

と言われたので、「フォントのデザイン幅はプログラムで取得できないので、なんでもうまくいくわけではない」「そういうフォントが存在する」という実例を挙げました。挙げただけです。


引き延ばさずに 2 cell の中央に描画すると

#318 で「アプリケーション(リモート側)の想定する表示幅」と「端末エミュレータの表示幅」の話をされています。
「端末エミュレータの表示幅」=「端末エミュレータが、文字に対して『どれだけの幅を確保 *1』して『フォントが持つ表示幅』を『どの倍率で表示するか *2』」が実装されていると思います。
*1 Ambiguous Characters width
*2 Drawing resized font to fit cell width

さらに『どの位置に表示するか』まで対応することになるので、複雑になりすぎる気がします。
それがいいかどうかわかりませんが、やるとしたら別の issue にしてください。


この issue の残件はこれだと思います。

Codingタブの選択肢と、ここの選択肢を比較すると同じでないように思います。

  1. ISO8859-1などが引数の説明にない
  2. プルダウンの Japanese/EUC が、引数では単に "EUC" となる

@zmatsuo
Copy link
Member

zmatsuo commented Sep 19, 2024

なんでもうまくいくわけではない」「そういうフォントが存在する」という実例
さらに『どの位置に表示するか』まで対応することになるので、複雑になりすぎる気がします。
やるとしたら別の issue にしてください。

了解です。

  1. ISO8859-1などが引数の説明にない
  2. プルダウンの Japanese/EUC が、引数では単に "EUC" となる

コマンドラインで全ての文字コードが指定できないのと、
Codingタブの文字コード名とコマンドラインの表示が異なっている
ところが指摘ポイントですね。

コマンドラインの引き数とEncodingタブの表示が
おなじだと分かりやすそうです。

GUIの たとえば "Japanese/EUC" の "Japanese" 部分は
以前は言語(Language)の値を示していました。
Language設定がなくなったので削除して "EUC" とすればよさそうです。
(EUCではなく(または加えて)EUC-JPのほうがよさそう。
EUC-KR, EUC-CN 等のコードもあるようです。現在未対応です)

気になるのは
"Russian/Windows (CP1251)" と
"Russian/ISO 8859-5" です。

"Windows (CP1251)" とすると不自然な感じがします。
"Windows-1251 (CP1251)" が良いのでしょうか?
コマンドラインの引き数にスペースが入っていると困るので
"Windows-1251" のほうが扱いが楽そうですが、
CodePage表示があるほうが分かりやすそうです。
GUIを "Windows-1251 (CP1251)" として、
コマンドラインを "Windows-1251" とするのはどうでしょう。

"ISO 8859-5" と "ISO8859-5" は同じです。

文字コードは同じですが、内部動作は別になっています。
"ISO 8859-5" は従来からの実装、
"ISO8859-5" はUnicodeから/へ変換する新しい実装です。

"ISO 8859-5" を削除して、
従来の実装は通らないようにしてはどうかと思います。

@zmatsuo zmatsuo closed this as completed Sep 22, 2024
@zmatsuo zmatsuo reopened this Sep 22, 2024
zmatsuo added a commit that referenced this issue Sep 22, 2024
- コマンドラインで使用できる文字コード指定を修正
- 不要関数など削除
  - GetLanguageList(), KanjiCodeTranslate()
zmatsuo added a commit that referenced this issue Sep 22, 2024
@zmatsuo
Copy link
Member

zmatsuo commented Sep 22, 2024

コマンドラインで文字コードを設定できるようにしました。

表示される、指定する文字列と文字コードを
一か所にまとめることができたので、
今後の修正は楽になると思います。
https://github.com/TeraTermProject/teraterm/blob/306-encoding-option/teraterm/common/ttlib_charset.cpp#L39

問題の指摘がなければ2,3日様子をみてmainにマージしようと思います。

zmatsuo added a commit that referenced this issue Sep 22, 2024
- コマンドラインで使用できる文字コード指定を修正
- 不要関数など削除
  - GetLanguageList(), KanjiCodeTranslate()
zmatsuo added a commit that referenced this issue Sep 22, 2024
@sempreff
Copy link
Contributor

sempreff commented Sep 22, 2024

ドキュメントについて、気づき事項がありますのでご報告しておきます。
history.hmtl

  • en の history.html は character codes と書かれています。他に揃えて encodings にすると良いと思います。(character codes だと、文字コードを1文字づつ指定できる、のようなニュアンスに見えます)
  • doc/en/html/usage/character_encoding.html の L.30 に「ファイル」と書いてあります。これは en なので「ファイル」は要らないです。

character_encoding.html

  • charactor と character で表記が揺れています。どちらかにすると良いでしょう。
  • additional settings は まだ「単なる settings」になっていない認識です。省略せずに additional settings と記載する方が良いと思います。
  • character_encoding.html のリンク「iniファイル」のリンク先には「使用可能文字コードは文字コードページを参照ください」とだけあり、設定方法がわかりません。たらい回し感があります。少なくとも KanjiReceive や KanjiSend といった具体的なキー名が必要ではないでしょうか。
  • Windows(CP1251) について、これだけ異質に見えます。1語にならないでしょうか。

@zmatsuo
Copy link
Member

zmatsuo commented Sep 24, 2024

チェックありがとうございます。
修正します。

zmatsuo added a commit that referenced this issue Sep 28, 2024
- charactor -> character
zmatsuo added a commit that referenced this issue Sep 28, 2024
- Windows(CP1251) -> Windows-1251
- 文字コードページを変更
  - 各ページへのリンクを修正
@zmatsuo
Copy link
Member

zmatsuo commented Sep 28, 2024

修正しました。

charactor は character に修正しました。
あちこちにあったのでまとめて修正しました。

Windows(CP-1251)はWindows-1251に変更しました。

@zmatsuo
Copy link
Member

zmatsuo commented Sep 29, 2024

main にマージしました。

3e9a7a1 のバイナリをビルドしました。
https://ci.appveyor.com/project/teraterm/github-snapshot/builds/50697495/artifacts

@zmatsuo zmatsuo closed this as completed Oct 16, 2024
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

No branches or pull requests

3 participants