---
read_when:
    - أنت تغيّر تنسيق Markdown أو تقسيم المحتوى إلى أجزاء للقنوات الصادرة
    - أنت تضيف مُنسّقًا جديدًا للقناة أو تعيينًا للأنماط
    - أنت تصحّح أخطاء تراجع التنسيق عبر القنوات
summary: مسار تنسيق Markdown للقنوات الصادرة
title: تنسيق Markdown
x-i18n:
    generated_at: "2026-07-12T05:50:38Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    provider: openai
    source_hash: f9a35fd9a6386068e1e3bec73ec6e692f49239b468f42dd737f919b1c6a88e41
    source_path: concepts/markdown-formatting.md
    workflow: 16
---

يحوّل OpenClaw صيغة Markdown الصادرة إلى تمثيل وسيط مشترك
(IR) قبل تصيير المخرجات الخاصة بكل قناة. يحتفظ IR بالنص العادي إلى جانب
نطاقات الأنماط والروابط، بحيث تغذّي خطوة تحليل واحدة كل قناة، ولا يؤدي التقسيم مطلقًا
إلى شطر التنسيق في منتصف النطاق.

## مسار المعالجة

1. **تحليل Markdown إلى IR** (`markdownToIR`) - نص عادي إلى جانب نطاقات الأنماط
   (عريض، مائل، يتوسطه خط، شيفرة، كتلة شيفرة، محتوى مخفي، اقتباس كتلي،
   عناوين من 1 إلى 6) ونطاقات الروابط. الإزاحات بوحدات شيفرة UTF-16 كي تتوافق نطاقات
   أنماط Signal مباشرةً مع واجهة API الخاصة به. لا تُحلَّل الجداول إلا عندما تختار القناة
   وضعًا للجداول.
2. **تقسيم IR** (`chunkMarkdownIR` / `renderMarkdownIRChunksWithinLimit`)
   - يحدث التقسيم على نص IR قبل التصيير، لذا تُجزّأ الأنماط المضمّنة
     والروابط لكل جزء بدلًا من انقطاعها عبر حدّ فاصل.
3. **التصيير لكل قناة** (`renderMarkdownWithMarkers`) - تحوّل خريطة علامات الأنماط
   النطاقات إلى ترميز القناة الأصلي.

| القناة                                                           | المصيّر                                                                              | ملاحظات                                                                                       |
| ---------------------------------------------------------------- | ------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------- |
| Slack                                                            | رموز mrkdwn (`*bold*`، `_italic_`، `` `code` ``، أسوار الشيفرة)                      | تتحول الروابط إلى `<url\|label>`؛ يُعطّل الربط التلقائي أثناء التحليل لتجنب تكرار الربط       |
| Telegram                                                         | وسوم HTML (`<b>`، `<i>`، `<s>`، `<code>`، `<pre><code>`، `<a href>`، `<tg-spoiler>`) | يدعم أيضًا جداول الرسائل المنسّقة والعناوين (`<h1>`-`<h6>`) عند تفعيل `richMessages`          |
| Signal                                                           | نص عادي + نطاقات `text-style`                                                        | تُصيّر الروابط بصيغة `label (url)` عندما تختلف التسمية عن عنوان URL                           |
| Discord وWhatsApp وiMessage وMicrosoft Teams والقنوات الأخرى     | نص عادي                                                                              | لا تنسيق قائم على IR؛ يظل تحويل جداول Markdown يعمل عبر `convertMarkdownTables`               |

## مثال على IR

Markdown المُدخل:
__OC_I18N_900000__
IR (تخطيطي):
__OC_I18N_900001__
## معالجة الجداول

يتحكم `markdown.tables` في كيفية تحويل القناة لجداول Markdown، لكل
قناة، واختياريًا لكل حساب:

| الوضع    | السلوك                                                                                       |
| -------- | -------------------------------------------------------------------------------------------- |
| `code`   | التصيير كجدول ASCII محاذى داخل كتلة شيفرة (الوضع الاحتياطي الافتراضي)                       |
| `bullets` | تحويل كل صف إلى نقاط تعداد بصيغة `label: value`                                             |
| `block`  | الاحتفاظ بالجداول الأصلية حيث تدعمها وسيلة النقل؛ والرجوع إلى `code` خلاف ذلك                |
| `off`    | تعطيل تحليل الجداول؛ يمر نص الجدول الخام دون تغيير                                           |

الإعدادات الافتراضية للـ Plugin حسب القناة: تستخدم Signal وWhatsApp وMatrix
`bullets` افتراضيًا؛ ويستخدم Mattermost الوضع `off` افتراضيًا؛ وتستخدم Telegram الوضع `block` افتراضيًا (والذي
يُحل إلى `code` ما لم يكن `richMessages` مفعّلًا للحساب). تعود أي
قناة بلا إعداد افتراضي صريح للـ Plugin إلى `code`.
__OC_I18N_900002__
## قواعد التقسيم

- تأتي حدود الأجزاء من مهايئات القنوات أو إعداداتها، وتنطبق على نص IR لا على
  المخرجات المصيّرة.
- يُحتفظ بكتل الشيفرة المسيّجة ككتلة واحدة مع سطر جديد لاحق كي
  تصيّر القنوات السياج الختامي بصورة صحيحة.
- بادئات القوائم والاقتباسات الكتلية جزء من نص IR، لذا لا يؤدي التقسيم مطلقًا
  إلى الشطر في منتصف البادئة.
- لا تنقسم الأنماط المضمّنة عبر الأجزاء مطلقًا؛ يعيد المصيّر فتح أي
  نمط مفتوح في بداية الجزء التالي.

راجع [البث والتقسيم](/concepts/streaming) للاطلاع على حدود الأجزاء وسلوك
التسليم عبر القنوات.

## سياسة الروابط

- **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>`). تتعامل القنوات الأخرى مع
`||...||` كنص عادي.

## إضافة منسّق قناة أو تحديثه

1. **حلّل مرة واحدة** باستخدام `markdownToIR(...)`، مع تمرير الخيارات المناسبة
   للقناة (`autolink` و`headingStyle` و`blockquotePrefix` و`tableMode`).
2. **صيّر** باستخدام `renderMarkdownWithMarkers(...)` وخريطة علامات أنماط (أو
   منطق مخصص لنطاقات الأنماط لوسائل نقل مثل Signal).
3. **قسّم** باستخدام `chunkMarkdownIR(...)` أو
   `renderMarkdownIRChunksWithinLimit(...)` قبل تصيير كل جزء.
4. **اربط المهايئ** لاستدعاء المقسّم والمصيّر الجديدين من
   مسار الإرسال الصادر.
5. **اختبر** باختبارات التنسيق إلى جانب اختبار تسليم صادر إذا كانت القناة
   تقسّم الرسائل.

## مشكلات شائعة

- يجب أن تبقى رموز Slack المحاطة بأقواس زاوية (`<@U123>` و`<#C123>` و`<https://...>`)
  سليمة أثناء التخطي؛ ولا يزال يلزم تخطي HTML الخام بأمان.
- يتطلب HTML في Telegram تخطي النص خارج الوسوم لتجنب تلف الترميز.
- تستخدم نطاقات الأنماط في Signal إزاحات UTF-16، لا إزاحات نقاط الشيفرة.
- احتفظ بالأسطر الجديدة اللاحقة في كتل الشيفرة المسيّجة كي تقع علامة الإغلاق
  في سطر مستقل.

## ذو صلة

<CardGroup cols={2}>
  <Card title="البث والتقسيم" href="/ar/concepts/streaming" icon="bars-staggered">
    سلوك البث الصادر، وحدود الأجزاء، والتسليم الخاص بكل قناة.
  </Card>
  <Card title="موجّه النظام" href="/ar/concepts/system-prompt" icon="message-lines">
    ما يراه النموذج قبل المحادثة، بما في ذلك ملفات مساحة العمل المُدرجة.
  </Card>
</CardGroup>
