تمييز الكود مع علامات الاقتباس المهربة

يبدو أن تمييز الكود يتجاهل علامات الاقتباس المهربة (المفردة والمزدوجة). هذا يعني، إذا كان يحتوي على علامات اقتباس مهربة، فسيتم تمييز أجزاء من السلسلة النصية كرمز عادي. في هذا المنتدى، يبدو أن تمييز الكود معطل، لذلك أدرج رابطًا لمنشور المنتدى المحدد حيث لاحظت ذلك لأول مرة.


رابط لمنشور المنتدى الذي أخذت لقطة شاشة له: https://unofficialnextion.com/t/set-vale-on-page2/1679/3

مزيد من التفاصيل:

  • يعمل المنتدى المذكور على Discourse v2.9.0.beta9
  • تم تمكين تمييز الكود لـ bash، cs، cpp، xml، ini، json، makefile، markdown، python، c، c-like. الإعداد الافتراضي هو cpp. إعادة تعيين إعدادات تمييز اللغة هذه إلى الإعدادات الافتراضية لا يحل المشكلة.
  • المشكلة موجودة أيضًا في الوضع الآمن
  • المشكلة موجودة أيضًا عند تهريب علامات الاقتباس المفردة في سلسلة نصية مفردة (تهريب علامة الاقتباس المفردة في سلسلة نصية مزدوجة والعكس يعمل بشكل صحيح).

مع خالص التقدير،
ماكس

هذه هي مكتبة highlightjs لذا فإن أي خطأ سيكون في المنبع.

يبدو أيضًا أن هذا يعمل في وضع cpp؟

const char* NXT_CMD_END = "\xff\xff\xff";
Serial.print("page2.t0.txt=\"Any text\"");
Serial.print(NXT_CMD_END);

يمكنك تعيين لغة صريحة باستخدام ميزة “سلسلة المعلومات” في كتلة التعليمات البرمجية:

```cpp
your code here   
```

سيؤدي ذلك إلى إنشاء كتلة تعليمات برمجية بنكهة cpp.

3 إعجابات

شكراً على الرد السريع والمعلومات!

بالفعل، تمييز لغة ++cpp يعمل إذا تم تحديده صراحةً. ومع ذلك، أثناء البحث في هذا الأمر أكثر، وجدت سلوكًا آخر… غير متوقع.
لقد قمت بإزالة جميع اللغات من قائمة اللغات المميزة باستثناء cpp وأعدت اللغة الافتراضية إلى auto. كانت النتيجة لا تزال تمييزًا خاطئًا. كشف فتح المفتش في فيرفكس أن الكود يُعرف على ما يبدو باسم vbnet - وهي لغة لم تكن أبدًا في قائمة اللغات المميزة (لا الافتراضية ولا أي لغات مخصصة جربتها لهذه المشكلة)؟ هل من المفترض أن يحدث هذا؟

مع خالص التقدير،
ماكس

هل قمت بإعادة خبز المنشور الذي يحتوي على كتلة التعليمات البرمجية بعد تغيير الإعدادات؟

إعجاب واحد (1)

لقد قمت بإعادة تحميل الصفحة. بينما لم يتغير منشور المنتدى نفسه أبدًا - حتى عند إعادة تشغيل فايرفوكس أو إعادة تحميل الصفحة باستخدام CTRL+F5 - لاحظت أن المعاينة لتحرير المنشور تستخدم الإعدادات المعدلة عند إعادة تحميل الصفحة.

لذلك، مع cpp كلغة وحيدة في القائمة (لإبقاء الأمور بسيطة)، إذا قمت بتعيين اللغة الافتراضية إلى cpp، فإن تمييز الكود في معاينة تحرير المنشور يكون صحيحًا. إذا قمت بتعيين اللغة الافتراضية إلى auto وقمت بإعادة تحميل الصفحة مرة أخرى، فلن يكون الأمر صحيحًا كما هو موضح في المنشور السابق.

مع خالص التقدير،
ماكس

إعادة تشغيل المتصفح لن يفي بالغرض. في Discourse، يتم خبز المنشورات (تحويلها من markdown إلى HTML) في الخادم مرة واحدة فقط، ويتم تخزين HTML الناتج مؤقتًا في قاعدة البيانات. لتحديث المنشور المخبوز المذكور، تحتاج إلى “إعادة خبزه”. يمكن القيام بذلك بواسطة مستخدم إداري باستخدام قائمة المفتاح على منشور أو بواسطة مؤلف المنشور عن طريق تحرير محتويات المنشور المذكور.

إعجاب واحد (1)

شكرًا. إعادة الخبز تؤدي إلى نفس السلوك كما هو الحال مع معاينة التعديل. auto يحدد لغة (vbnet) غير موجودة في قائمة اللغات التي سيتم تمييزها. تعيين اللغة الافتراضية صراحةً إلى cpp (إما في إعدادات المنتدى أو كما أظهرت هنا) يعمل كما تم الإبلاغ عنه سابقًا.
لذا يبقى السؤال: هل من المفترض أن تستخدم auto لغات أخرى غير تلك الموجودة في القائمة؟

مع خالص التقدير،
ماكس