Xterm.js: معالجة Unicode في xterm.js

تم إنشاؤها على ٢٥ سبتمبر ٢٠١٨  ·  10تعليقات  ·  مصدر: xtermjs/xterm.js

قادمًا من # 1707 ، يبدو أن التعامل الصحيح مع unicode يمثل مشكلة أكثر فأكثر للأشخاص بسبب الرموز التعبيرية. نظرًا لأننا جميعًا نحب الرموز التعبيرية ، يجب إصلاح هذا في أسرع وقت ممكن: ابتسم:

عرض:
قم بإنشاء موفر لإصدارات يونيكود مختلفة ، قادرة على إخفاء البيانات والتطبيقات الخاصة بالإصدار خلف واجهة برمجة تطبيقات لطيفة. في الوقت الحالي ، نحتاج فقط إلى تطبيقات تعتمد على الإصدار لـ 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 ، والثاني سيثير أسئلة غير متزامنة (تذكر - معظم الأجزاء الأساسية هي أجهزة الصراف الآلي المتزامنة). يمكن أيضًا تجميع عناصر يونيكود بأكملها في بعض الميزات المشابهة للإصدار XY.

حتى للمناقشة.
/ ccTyriar ، 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 على أي حال (ربما يمكن أن تعيش في المؤسسة كحزمة منفصلة).
  • في المستقبل ، قد نحتاج إلى ابتكار إضافات يونيكود للحفاظ على حجم حزمة xterm ، js صغيرًا.

أي آخذين لإدخال ذلك في كود TS؟

قام بأول تجسد ممكن في # 1714. نسخ الجدول الجديد من رقم 1707 ، أتمنى أن يكون هذا جيدًا (dnfield).

لا مشكلة!

https://github.com/xtermjs/xterm.js/pull/1714 هو مرجع جيد لذلك ، ولكن الخطة هي شحن عدة إضافات بعد نموذج الملحق الجديد (https://github.com/xtermjs/xterm. js / issue / 1128) ، ثم اسمح للمُضمن باختيار الإصدار الصحيح.

يرجى الإصلاح في أسرع وقت ممكن ، يبدو أن تحديث Windows مؤخرًا يكسر هذا بالنسبة لي. أحاول دعم مكتبة Node.js التي تتضمن emoji'fies بعض جوانب التسجيل لتسهيل القراءة (يبدو الأمر أكثر غموضًا مما هو عليه).

محاولة جديدة في https://github.com/xtermjs/xterm.js/pull/2568 ، ونأمل أن نتمكن من طرحها مع الإصدار التالي.

jerch هل يمكن أن نسمي هذا مغلقًا مع دمج # 2568؟

Tyriar Yepp ، هناك أيضًا متابعة بالفعل: smile_cat: -> # 2668

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات