---
read_when:
    - أنت تغيّر تنسيق Markdown أو تقطيع الرسائل للقنوات الصادرة
    - أنت تضيف منسّق قناة جديدًا أو تعيينًا جديدًا للأنماط
    - أنت تصحح تراجعات التنسيق عبر القنوات
summary: خط أنابيب تنسيق Markdown للقنوات الصادرة
title: تنسيق Markdown
x-i18n:
    generated_at: "2026-04-05T12:40:25Z"
    model: gpt-5.4
    provider: openai
    source_hash: f3794674e30e265208d14a986ba9bdc4ba52e0cb69c446094f95ca6c674e4566
    source_path: concepts/markdown-formatting.md
    workflow: 15
---

# تنسيق Markdown

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

## الأهداف

- **الاتساق:** خطوة تحليل واحدة، وعدة عارضات.
- **تقطيع آمن:** تقسيم النص قبل العرض حتى لا ينكسر التنسيق المضمن
  عبر الأجزاء.
- **الملاءمة مع القناة:** تعيين IR نفسه إلى Slack mrkdwn وTelegram HTML ونطاقات
  أنماط Signal من دون إعادة تحليل Markdown.

## خط الأنابيب

1. **تحليل Markdown -> IR**
   - يكون IR عبارة عن نص عادي بالإضافة إلى نطاقات الأنماط (غامق/مائل/مشطوب/كود/مفسد) ونطاقات الروابط.
   - تكون الإزاحات بوحدات UTF-16 البرمجية بحيث تتوافق نطاقات أنماط Signal مع API الخاصة بها.
   - لا يتم تحليل الجداول إلا عندما تختار القناة التحويل من الجداول.
2. **تقطيع IR (التنسيق أولًا)**
   - يحدث التقطيع على نص IR قبل العرض.
   - لا ينقسم التنسيق المضمن عبر الأجزاء؛ ويتم اقتطاع النطاقات لكل جزء.
3. **العرض لكل قناة**
   - **Slack:** رموز mrkdwn ‏(غامق/مائل/مشطوب/كود)، والروابط بصيغة `<url|label>`.
   - **Telegram:** وسوم HTML ‏(`<b>` و`<i>` و`<s>` و`<code>` و`<pre><code>` و`<a href>`).
   - **Signal:** نص عادي + نطاقات `text-style`؛ وتصبح الروابط `label (url)` عندما يختلف label.

## مثال IR

إدخال Markdown:

```markdown
Hello **world** — see [docs](https://docs.openclaw.ai).
```

IR ‏(تخطيطي):

```json
{
  "text": "Hello world — see docs.",
  "styles": [{ "start": 6, "end": 11, "style": "bold" }],
  "links": [{ "start": 19, "end": 23, "href": "https://docs.openclaw.ai" }]
}
```

## أين يُستخدم

- تعرض محولات Slack وTelegram وSignal الصادرة انطلاقًا من IR.
- لا تزال القنوات الأخرى (WhatsApp وiMessage وMicrosoft Teams وDiscord) تستخدم نصًا عاديًا أو
  قواعد التنسيق الخاصة بها، مع تطبيق تحويل جداول Markdown قبل
  التقطيع عند التمكين.

## التعامل مع الجداول

لا يتم دعم جداول Markdown بشكل متسق عبر عملاء الدردشة. استخدم
`markdown.tables` للتحكم في التحويل لكل قناة (ولكل حساب).

- `code`: عرض الجداول ككتل كود (الافتراضي لمعظم القنوات).
- `bullets`: تحويل كل صف إلى نقاط تعداد (الافتراضي لـ Signal + WhatsApp).
- `off`: تعطيل تحليل الجداول وتحويلها؛ ويمر نص الجدول الخام كما هو.

مفاتيح الإعدادات:

```yaml
channels:
  discord:
    markdown:
      tables: code
    accounts:
      work:
        markdown:
          tables: off
```

## قواعد التقطيع

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

إذا كنت بحاجة إلى مزيد من المعلومات حول سلوك التقطيع عبر القنوات، فراجع
[البث + التقطيع](/concepts/streaming).

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

- **Slack:** تتحول `[label](url)` إلى `<url|label>`؛ وتبقى عناوين URL المجردة كما هي. يتم تعطيل
  autolink أثناء التحليل لتجنب الربط المزدوج.
- **Telegram:** تتحول `[label](url)` إلى `<a href="url">label</a>` ‏(وضع تحليل HTML).
- **Signal:** تتحول `[label](url)` إلى `label (url)` ما لم يكن label مطابقًا لـ URL.

## المفسدات

يتم تحليل علامات المفسد (`||spoiler||`) فقط في Signal، حيث تُعيَّن إلى
نطاقات أنماط SPOILER. أما القنوات الأخرى فتتعامل معها كنص عادي.

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

1. **حلّل مرة واحدة:** استخدم المساعد المشترك `markdownToIR(...)` مع
   الخيارات المناسبة للقناة (autolink، ونمط العنوان، وبادئة blockquote).
2. **اعرض:** نفّذ عارضًا باستخدام `renderMarkdownWithMarkers(...)` وخريطة
   محددات الأنماط (أو نطاقات أنماط Signal).
3. **قطّع:** استدعِ `chunkMarkdownIR(...)` قبل العرض؛ ثم اعرض كل جزء.
4. **اربط المحول:** حدّث المحول الصادر للقناة لاستخدام المقطّع
   والعارض الجديدين.
5. **اختبر:** أضف أو حدّث اختبارات التنسيق واختبار تسليم صادر إذا كانت
   القناة تستخدم التقطيع.

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

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