مسار المعالجة
- تحليل Markdown إلى IR (
markdownToIR) - نص عادي إلى جانب نطاقات الأنماط (عريض، مائل، يتوسطه خط، شيفرة، كتلة شيفرة، محتوى مخفي، اقتباس كتلي، عناوين من 1 إلى 6) ونطاقات الروابط. الإزاحات بوحدات شيفرة UTF-16 كي تتوافق نطاقات أنماط Signal مباشرةً مع واجهة API الخاصة به. لا تُحلَّل الجداول إلا عندما تختار القناة وضعًا للجداول. - تقسيم IR (
chunkMarkdownIR/renderMarkdownIRChunksWithinLimit)- يحدث التقسيم على نص IR قبل التصيير، لذا تُجزّأ الأنماط المضمّنة والروابط لكل جزء بدلًا من انقطاعها عبر حدّ فاصل.
- التصيير لكل قناة (
renderMarkdownWithMarkers) - تحوّل خريطة علامات الأنماط النطاقات إلى ترميز القناة الأصلي.
مثال على IR
Markdown المُدخل: OC_I18N_900000 IR (تخطيطي): OC_I18N_900001معالجة الجداول
يتحكمmarkdown.tables في كيفية تحويل القناة لجداول Markdown، لكل
قناة، واختياريًا لكل حساب:
الإعدادات الافتراضية للـ Plugin حسب القناة: تستخدم Signal وWhatsApp وMatrix
bullets افتراضيًا؛ ويستخدم Mattermost الوضع off افتراضيًا؛ وتستخدم Telegram الوضع block افتراضيًا (والذي
يُحل إلى code ما لم يكن richMessages مفعّلًا للحساب). تعود أي
قناة بلا إعداد افتراضي صريح للـ Plugin إلى code.
OC_I18N_900002
قواعد التقسيم
- تأتي حدود الأجزاء من مهايئات القنوات أو إعداداتها، وتنطبق على نص IR لا على المخرجات المصيّرة.
- يُحتفظ بكتل الشيفرة المسيّجة ككتلة واحدة مع سطر جديد لاحق كي تصيّر القنوات السياج الختامي بصورة صحيحة.
- بادئات القوائم والاقتباسات الكتلية جزء من نص IR، لذا لا يؤدي التقسيم مطلقًا إلى الشطر في منتصف البادئة.
- لا تنقسم الأنماط المضمّنة عبر الأجزاء مطلقًا؛ يعيد المصيّر فتح أي نمط مفتوح في بداية الجزء التالي.
سياسة الروابط
- Slack:
[label](url)-><url|label>؛ تبقى عناوين URL المجرّدة كما هي. - Telegram:
[label](url)-><a href="url">label</a>(وضع تحليل HTML). - Signal:
[label](url)->label (url)ما لم تكن التسمية مطابقة لعنوان URL بالفعل.
المحتوى المخفي
تُحلّل علامات المحتوى المخفي (||spoiler||) في Signal (وتُحوّل إلى نطاقات نمط SPOILER)
وفي Telegram (وتُحوّل إلى <tg-spoiler>). تتعامل القنوات الأخرى مع
||...|| كنص عادي.
إضافة منسّق قناة أو تحديثه
- حلّل مرة واحدة باستخدام
markdownToIR(...)، مع تمرير الخيارات المناسبة للقناة (autolinkوheadingStyleوblockquotePrefixوtableMode). - صيّر باستخدام
renderMarkdownWithMarkers(...)وخريطة علامات أنماط (أو منطق مخصص لنطاقات الأنماط لوسائل نقل مثل Signal). - قسّم باستخدام
chunkMarkdownIR(...)أوrenderMarkdownIRChunksWithinLimit(...)قبل تصيير كل جزء. - اربط المهايئ لاستدعاء المقسّم والمصيّر الجديدين من مسار الإرسال الصادر.
- اختبر باختبارات التنسيق إلى جانب اختبار تسليم صادر إذا كانت القناة تقسّم الرسائل.
مشكلات شائعة
- يجب أن تبقى رموز Slack المحاطة بأقواس زاوية (
<@U123>و<#C123>و<https://...>) سليمة أثناء التخطي؛ ولا يزال يلزم تخطي HTML الخام بأمان. - يتطلب HTML في Telegram تخطي النص خارج الوسوم لتجنب تلف الترميز.
- تستخدم نطاقات الأنماط في Signal إزاحات UTF-16، لا إزاحات نقاط الشيفرة.
- احتفظ بالأسطر الجديدة اللاحقة في كتل الشيفرة المسيّجة كي تقع علامة الإغلاق في سطر مستقل.
ذو صلة
البث والتقسيم
سلوك البث الصادر، وحدود الأجزاء، والتسليم الخاص بكل قناة.
موجّه النظام
ما يراه النموذج قبل المحادثة، بما في ذلك ملفات مساحة العمل المُدرجة.