Xterm.js: Обработка Юникода в xterm.js

Созданный на 25 сент. 2018  ·  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
}

В идеале провайдер является самодостаточным, поэтому терминалу просто нужно иметь дело с методами интерфейса и при необходимости обновлять версию/язык. Поставщику придется иметь дело с низкоуровневыми вещами, чтобы предоставить правильные наборы данных, чтобы методы работали так, как ожидалось для поддерживаемой версии.
Затем внутри поставщика мы можем решить, будут ли данные предоставляться статически в базе кода или даже пытаться создавать данные на лету. Первый сильно повлияет на размер xterm.js, второй вызовет вопросы об асинхронности (помните, что большинство основных частей являются синхронными). Весь материал Unicode также может быть объединен в какую-то надстройку, подобную функции для версии 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:

  • На данный момент мы хотим предоставить две версии таблицы wcwidth: старую и новую, созданную @dnfield.
  • Как отметил @gnachman , неоднозначные символы не стоят проблем. Большинство приложений обрабатывают их половинной ширины, поэтому мы можем сделать то же самое (уже сделано в устаревшей таблице, необходимо протестировать с новой таблицей).
  • Создайте новую глобальную опцию для версии Unicode. Эта опция должна быть установлена ​​интеграторами или предложена пользователям для внесения изменений во время выполнения.
  • Отложить создание новой управляющей последовательности для установки версии юникода, так как интерфейс для регистрации нестандартных последовательностей еще не установлен.
  • На данный момент нет волшебного угадателя версии Unicode. Как только мы сделаем такой инструмент в будущем, он все равно будет вне xterm.js (возможно, он мог бы жить в организации как отдельный пакет).
  • В будущем нам, возможно, придется придумать надстройки Unicode, чтобы размер пакета 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 рейтинги

Смежные вопросы

kolbe picture kolbe  ·  3Комментарии

Tyriar picture Tyriar  ·  4Комментарии

jerch picture jerch  ·  3Комментарии

circuitry2 picture circuitry2  ·  4Комментарии

Mlocik97-issues picture Mlocik97-issues  ·  3Комментарии