Xterm.js: Penanganan unicode di xterm.js

Dibuat pada 25 Sep 2018  ·  10Komentar  ·  Sumber: xtermjs/xterm.js

Berasal dari #1707, tampaknya penanganan unicode yang benar semakin menjadi masalah bagi orang-orang karena emoji. Karena kita semua menyukai emoji, ini harus diperbaiki secepatnya :smile:

Usul:
Buat penyedia untuk versi unicode yang berbeda, yang mampu menyembunyikan data spesifik versi dan implementasi di balik API yang bagus. Saat ini kami hanya membutuhkan implementasi yang bergantung pada versi untuk wcwidth, sehingga sketsa kasarnya dapat terlihat seperti ini:

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
}

Idealnya penyedia mandiri, sehingga terminal hanya perlu berurusan dengan metode antarmuka dan memperbarui versi/lokal bila diperlukan. Penyedia harus berurusan dengan hal-hal tingkat rendah untuk menyediakan kumpulan data yang benar sehingga metode hanya berfungsi seperti yang diharapkan untuk versi yang didukung.
Di dalam penyedia, kami kemudian dapat memutuskan apakah data disediakan secara statis dalam basis kode atau bahkan mencoba membuat data dengan cepat. Pertama akan berdampak cukup besar pada ukuran xterm.js, yang kedua akan menimbulkan pertanyaan asinkron (ingat - sebagian besar bagian inti adalah atm sinkron). Seluruh barang unicode juga dapat digabungkan ke dalam beberapa fitur seperti addon untuk versi XY.

Untuk diskusi.
/cc @Tyriar , @bgw , @mofux , @dnfield

areparser typenhancement

Komentar yang paling membantu

Upaya baru di https://github.com/xtermjs/xterm.js/pull/2568 , semoga kami dapat meluncurkan ini dengan rilis berikutnya.

Semua 10 komentar

Saya pikir sesuatu seperti ini mungkin lebih mudah didekati:

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

Dengan sesuatu seperti UnicodeProviderFactory.v11 akan sedikit lebih baik pada waktu pengkodean, tetapi ini masuk akal bagi saya.

@dnfield Ya, keduanya akan berhasil. Tidak yakin apakah kita akan memerlukan info jenis di tingkat versi.

Ide saya adalah membuat antarmuka, yang secara transparan dapat melakukan peralihan versi saat runtime seperti ini:

// 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(...)

Dengan cara ini this.unicodeProvider dapat dibawa-bawa tanpa perlu dipasang kembali setelah perubahan versi atau menggunakan properti mahal pada instance terminal.

Apa yang saya dapatkan dari diskusi di #1707:

  • Kami ingin memberikan dua versi tabel wcwidth untuk saat ini, yang lama dan yang baru dibuat oleh @dnfield.
  • Karakter ambigu tidak sebanding dengan masalahnya, seperti yang ditunjukkan @gnachman . Mereka ditangani setengah lebar oleh sebagian besar aplikasi, jadi kami dapat melakukan hal yang sama (sudah dilakukan di tabel lama, perlu diuji dengan tabel baru).
  • Buat opsi global baru untuk versi unicode. Opsi harus disetel oleh integrator atau ditawarkan kepada pengguna untuk perubahan runtime.
  • Tunda pembuatan escape sequence baru untuk menyetel versi unicode, karena antarmuka untuk mendaftarkan sequence non-standar belum dibuat.
  • Tidak ada penerka versi unicode ajaib untuk saat ini. Setelah kami melakukan alat seperti itu di masa depan, itu akan berada di luar xterm.js (mungkin itu bisa hidup di org sebagai paket terpisah).
  • Di masa depan, kita mungkin perlu membuat add-on unicode untuk menjaga ukuran paket xterm,js tetap kecil.

Adakah pengambil untuk memasukkannya ke dalam kode TS?

Melakukan inkarnasi pertama yang mungkin di #1714. Menyalin tabel baru dari #1707, semoga tidak apa-apa (@dnfield).

Tidak masalah!

https://github.com/xtermjs/xterm.js/pull/1714 adalah referensi yang bagus untuk ini, tetapi rencananya adalah mengirimkan beberapa addon setelah model addon baru (https://github.com/xtermjs/xterm. js/issues/1128) masuk, lalu izinkan penyemat untuk memilih versi yang tepat.

Tolong perbaiki ASAP, memperbarui Windows baru-baru ini sepertinya merusak ini untuk saya. Saya mencoba untuk mendukung perpustakaan Node.js yang emoji'fies beberapa aspek logging agar lebih mudah dibaca (kedengarannya jauh lebih konyol daripada itu).

Upaya baru di https://github.com/xtermjs/xterm.js/pull/2568 , semoga kami dapat meluncurkan ini dengan rilis berikutnya.

@jerch bisakah kita menyebutnya ditutup dengan #2568 digabung?

@Tyriar Yepp, udah ada follow upnya juga :smile_cat: --> #2668

Apakah halaman ini membantu?
0 / 5 - 0 peringkat