Xterm.js: xterm.jsでのUnicode処理

作成日 2018年09月25日  ·  10コメント  ·  ソース: xtermjs/xterm.js

#1707から来て、正しいユニコード処理は絵文字のために人々にとってますます問題になっているようです。 私たちはみんな絵文字が大好きなので、これはできるだけ早く修正する必要があります:smile:

提案:
さまざまなUnicodeバージョンのプロバイダーを作成します。これにより、バージョン固有のデータと実装を優れたAPIの背後に隠すことができます。 現在、wcwidthのバージョン依存の実装のみが必要なので、大まかなスケッチアップは次のようになります。

interface IUnicodeProvider {
  supportedVersions(): string[];
  getVersion(): string;
  setVersion(version?: string);  // version optional for fallback behavior
  wcwidth(ucs: number): number;
  getStringCellWidth(s: string): number;
  ... // more to come with support of other unicode features
}

理想的には、プロバイダーは自己完結型であるため、端末はインターフェイスメソッドを処理し、必要に応じてバージョン/ロケールを更新する必要があります。 プロバイダーは、正しいデータセットを提供するために低レベルのものを処理する必要があるため、サポートされているバージョンで期待どおりにメソッドが機能します。
次に、プロバイダー内で、データがコードベースで静的に提供されるか、その場でデータを作成しようとするかを決定できます。 1つ目はxterm.jsのサイズにかなりの影響を与え、2つ目は非同期の質問を提起します(覚えておいてください-コア部分のほとんどは同期ATMです)。 ユニコード全体をバージョンXYの機能のようなアドオンにバンドルすることもできます。

議論のために。
/ cc @ Tyriar@ bgw@ mofux 、@ dnfield

areparser typenhancement

最も参考になるコメント

https://github.com/xtermjs/xterm.js/pull/2568での新しい試み、うまくいけば、これを次のリリースで展開できるようになります。

全てのコメント10件

私はこのようなものがより親しみやすいかもしれないと思います:

interface IUnicodeProvider {
  getVersion(): string;
  wcwidth(ucs: number): number;
  getStringCellWidth(s: string): number;
  ... // more to come with support of other unicode features
}

UnicodeProviderFactory.v11のようなものを使用すると、コーディング時に少し良いでしょうが、これはどちらの方法でも私には理にかなっています。

@dnfieldええどちらの方法でも機能します。 ただし、バージョンレベルでタイプ情報が必要かどうかはわかりません。

私のアイデアは、次のように実行時にバージョン切り替えを透過的に実行できるインターフェイスを作成することでした。

// terminal ctor - create the provider
this.unicodeProvider = new UnicodeProvider();
...
// some code that knows whether to switch unicode versions
this.unicodeProvider.setVersion(xy);
...
// some unicode consumer - does not care about versions at all, just gets the right method
this.unicodeProvider.wcwidth(...)

このようにして、バージョン変更後に再接続したり、ターミナルインスタンスでコストのかかるプロパティを使用したりすることなく、 this.unicodeProviderを持ち運ぶことができます。

#1707の議論から得たもの:

  • 今のところ、@ dnfieldによって作成された古いバージョンと新しいバージョンの2つのwcwidthテーブルバージョンを提供したいと思います。
  • @gnachmanが指摘したように、あいまいな文字は問題の価値がありません。 これらはほとんどのアプリで半分の幅で処理されるため、同じことができます(以前のテーブルですでに行われているため、新しいテーブルでテストする必要があります)。
  • Unicodeバージョンの新しいグローバルオプションを作成します。 このオプションは、インテグレーターが設定するか、実行時の変更のためにユーザーに提供する必要があります。
  • 非標準シーケンスを登録するためのインターフェイスがまだ確立されていないため、ユニコードバージョンを設定するための新しいエスケープシーケンスの作成を延期します。
  • 今のところ、魔法のユニコードバージョンの推測はありません。 将来このようなツールを実行すると、とにかくxterm.jsの外部になります(おそらく、別のパッケージとして組織内に存在する可能性があります)。
  • 将来的には、xterm、jsのパッケージサイズを小さく保つためにユニコードアドオンを考え出す必要があるかもしれません。

それをTSコードに取り入れるためのテイカーはいますか?

#1714で最初の可能な化身をしました。 #1707から新しいテーブルをコピーしました。問題ないことを願っています(@dnfield)。

問題ない!

https://github.com/xtermjs/xterm.js/pull/1714はこのための良いリファレンスですが、新しいアドオンモデル(https://github.com/xtermjs/xterm)の後にいくつかのアドオンを出荷する予定です。 js / issues / 1128)が入っている場合は、埋め込み者が適切なバージョンを選択できるようにします。

できるだけ早く修正してください。最近Windowsを更新すると、これがうまくいかないようです。 私は、読みやすくするためにロギングのいくつかの側面を絵文字で表現するNode.jsライブラリをサポートしようとしています(それはそれよりもはるかに間抜けに聞こえます)。

https://github.com/xtermjs/xterm.js/pull/2568での新しい試み、うまくいけば、これを次のリリースで展開できるようになります。

@ jerch #2568がマージされて、これを閉じたと呼ぶことができますか?

@Tyriar Yepp 、フォローアップもあります:smile_cat:->#2668

このページは役に立ちましたか?
0 / 5 - 0 評価