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

East Asian Ambiguous Character #412

Closed
juggler999 opened this issue Aug 24, 2021 · 6 comments
Closed

East Asian Ambiguous Character #412

juggler999 opened this issue Aug 24, 2021 · 6 comments
Assignees

Comments

@juggler999
Copy link

最近気づいたのですが,罫線などの"East Asian Ambiguousな文字"の表示がおかしくなっていませんでしょうか?
例えば,
└─ (U+2514, U+2500)
はOKなのですが,
─┐ (U+2500, U+2510)
では表示が乱れます.以前のNyagos+Cmderではうまく表示されていました.

テスト環境
NYAGOS: 4.4.10_2
OS: Windows10 (21H1)
フォント: MeiryoKe_Console
ターミナル:
Cmder Version 1.3.18
Windows Terminal
cmd.exeコンソ-ル
(※三者三様の乱れ方)
コードページ: 65001

もっともcmd.exeコンソール+cmd.exeシェルでもおかしいので,East Asian Ambiguousな文字は難しいのかもしれませんが.
ただ,以前のNYAGOS+Cmderでは完璧だったのでここに報告しました.

@hymkor hymkor self-assigned this Aug 26, 2021
@hymkor
Copy link
Collaborator

hymkor commented Aug 26, 2021

ご報告ありがとうございます。

Windows10 の 21H1 と 20H2 で確認しました。症状は違うのですが、何かしらおかしいのは確認しました。

従来の Windows だと East Asian Ambiguous をコマンドプロンプトで表示すると、基本2セル幅をとっていたのが、文字によっては1セル幅になっているケースがあるように見えます。└─ と ─┐ を入力してみると、両方とも何か表示がおかしいのですが、20H2 の方がより酷いようです。

逆に WindowsTerminal では East Asian Ambiguous は常に1セル幅なので(たぶん仕様)、nyagos (go-readline-ny) も Windows Terminal 上では1セル前提で動作するようになっており、└─ も ─┐も正常に扱えているように見えます( Windows Terminal では再現せず、正常動作をしている )

WindowsTerminal でもあった「本当は2セル必要なのに、表示しても1セル分しかカーソルが移動してくれない」というターミナルの不具合が、コマンドプロンプト環境に逆輸入されてしまったのかもしれません。
どうも、これは WindowsTerminal の時と同じような対応、つまりベタに個別対応の積み重ねでいくしかなさそうです。

( そして、Windows 8.1 のコマンドプロンプトだと、安定の2セル表示で、カーソル位置もまったく大丈夫ですね… )

hymkor added a commit to nyaosorg/go-readline-ny that referenced this issue Aug 26, 2021
…n the legacy terminals

East Asian Ambiguous Character ・ Issue #412 ・ zetamatta/nyagos
nyaosorg/nyagos#412
hymkor added a commit that referenced this issue Aug 26, 2021
@hymkor
Copy link
Collaborator

hymkor commented Aug 26, 2021

Windows10以降の「標準コンソール (not WindowsTerminal)」で U+2500 ~ U+257F の罫線文字を表示した時、カーソルが2セル分移動したり1セル分しか移動しなかったりと環境によって違う可能性があるので、常に無理やり2セル分移動させるようにしました。たぶん、これで表示は直っているのではないかと存じます。

対応としては過去に近い事例があり、WindowsTerminal 下の「🏳」U+1F3F3(Waving White Flag) と同じことを行いました(「🏳」単品ではなく「SPC SPC ESC 7 BS BS 🏳 ESC 8」と出力する:ESC 7 はカーソル位置を記憶し、ESC 8 は記憶した場所を復元する)

WindowsTerminal の場合は、East Asian Ambiguous Character は常に1セルなので、本修正の影響は受けません。

他にも同様の文字があるかもしれません。その場合、追加で対応が必要になると思われます。
(あるいは、WindowsTerminal と同じように East Asian Ambiguous Character の文字幅が常に1セルになっているのかもしれないので、その場合は処理全体を見直した方がよいかもしれません)

hymkor added a commit that referenced this issue Aug 26, 2021
@juggler999
Copy link
Author

ご連絡とご対応,たいへんありがとうございます.

OS: Windows10 (21H1)
cmd.exeのコンソール+cmd.exeシェル (A)
cmd.exeのコンソール+Nyagos(新) (B, (386)),及びnyagos4.4.10_2 (C)
であらためて試してみました.

┐ (U+2500) 

単独では2セル幅(1全角幅)にみえますが,
─┐ (U+2500, U+2510)
の組合わせでは4セル幅(2全角幅)ではなく,それよりも短い幅で表示されるようです((A)~(B)のすべてで).
これは上で書かれた「常に無理やり2セル分移動させるようにしました」とは異なるようです.

UAX#11ではUnicode のテキストを東アジアの従来文字コードの文脈で扱う場合,特性値A(曖昧)を持つ文字は全角の文字として扱う,とされているようですが,日本語版Windows10のcmd.exeではこれには従っていないということかもしれません.

※Nyagosとcmd.exeの役割分担を理解できていないのでピントが外れているかもしれませんが.

@hymkor
Copy link
Collaborator

hymkor commented Aug 28, 2021

「表示」とは具体的に、どのような手順で表示させた場合でしょうか?

今回、nyagos で対応したのは「コマンドライン(=プロンプトのある行)の入力上の取り扱い」となります。ここで文字幅・カーソル位置などが狂ってしまうと「入力したコマンドの編集」が不能になってしまうため、カーソル位置を微調整するなどして無理やりにでも対応する必要がありました。

が、それ以外についてはターミナル側、もしくはターミナル上で動く各個別のアプリケーションの領域になるため、基本的には nyagos ではどうしようもありません( nyagos もまたターミナルの上で動く1アプリケーションに過ぎないので、自分の表示は調節できても他のアプリは… )

以下は、nyagos のコマンドラインから echo とタイプしてから、その後 ─┐ (U+2500, U+2510)をブラウザからコピペし、Enter を押した結果になります。

image

この例でいうと、コマンドライン上では罫線文字を表示させる時に、罫線1文字あたり画面の領域2セルを使うようにカーソル位置を調整しています。罫線文字は2つあるので、コマンドライン上では結果4セル分:8ピクセル×2セル = 32ピクセルをしめています。

一方で echo コマンドの出力についてはそういう調整がないので、2文字表示しているのに24ピクセル=3セル分しか使われないという「おかしな症状」が出ています。こちらは基本的にもう対応範囲外だと思っていただいた方がよいと思います。
(echo コマンドに限って言えば、一応 nyagos の内蔵コマンドなので調整できなくもありませんが、echo だけ直してもあまり意味がないと思われます)

以上、ご確認のほど、よろしくお願いいたします。

@juggler999
Copy link
Author

ていねいなご説明,ありがとうございます.
私がずっと言っているのは,コマンドライン上ではなく,くだんの文字列を含むテキストをコンソール上に表示した場合でした.
例えば,cat TEXT, type TEXT, echo TEXT, lv TEXTなどです.
Nyagosの扱い得る範囲外のようである,Windowsが合理的に対応するのを待つほかない,と理解しました.

@hymkor
Copy link
Collaborator

hymkor commented Aug 30, 2021

本件、一旦クローズさせていただきます。よろしくお願いいたします。

@hymkor hymkor closed this as completed Aug 30, 2021
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

2 participants