# Postext — منضّد قابل للبرمجة للويب

> محرّك إخراج يصل حرفة التنضيد الطباعي التي تراكمت عبر القرون بتقنيات الويب الحديثة. تُدخل Markdown دلاليًا وتحصل على صفحات بجودة النشر، تُعرض في HTML وعلى اللوحة (Canvas) وفي ملف PDF جاهز للطباعة.

- نسخة HTML: https://postext.dev/ar
- لغات أخرى: [en](https://postext.dev/en.md), [es](https://postext.dev/es.md), [ca](https://postext.dev/ca.md), [zh](https://postext.dev/zh.md)

## باختصار

Postext برنامج مجاني مفتوح المصدر يُخرج صفحات الكتب والمجلات والتقارير. تكتب النص مع بعض العلامات البسيطة، فيحوّله Postext إلى صفحات مكتملة، مثل صفحات كتاب مطبوع. وهو يتبع قواعد استخدمها الطبّاعون منذ قرون، فيكون النص سهل القراءة. ويمكن أن تُعرض الصفحات في موقع ويب أو في تطبيق أو في ملف PDF جاهز للطباعة. صُنع للكتّاب والناشرين والمصممين والمطوّرين.

## <em>المنضّد</em> القابل للبرمجة للويب

يأخذ Postext نص Markdown دلاليًا ويطبّق عليه قواعد تحريرية عمرها قرون، من ضبط الأسطر بخوارزمية Knuth-Plass إلى الأعمدة المتوازنة والعناصر العائمة التي تعرف مكانها، لينتج صفحات بجودة النشر في HTML أو على اللوحة (Canvas) أو في ملف PDF جاهز للطباعة.

## Postext في دقيقتين

**النص المكتوب.** كل ما يقوله الراوي، مع وصف لما يظهر على الشاشة.

- 0:00 · *على الشاشة:* بطاقة داكنة كُتب عليها «ماينتس · 1455» فوق خط ذهبي رفيع. خلف العنوان «طوال خمسة قرون، تعلّمت الطباعة كيف تنضّد الصفحة.» تتصاعد السنة من 1455 إلى 2026 بأرقام مفرّغة ضخمة، وتحطّ حولها مصطلحات الطباعة: ضبط الأسطر، تقنين الأزواج، الأرامل واليتامى، الأعمدة المتوازنة، تباعد الأسطر، شبكة خطوط الأساس، hy·phen·a·tion (تقسيم الكلمات بالواصلة)، طول السطر، العناصر العائمة، الترويسات، الأنهار. تغوص الكاميرا في النقطة الأخيرة، فتغمر الشاشة باللون الذهبي. · *السرد:* طوال خمسة قرون، تعلّمت الطباعة كيف تنضّد الصفحة.
- 0:05 · *على الشاشة:* العنوان: «تعلّم الويب تخطيط الواجهات، ولم يتعلّم قط تنضيد الصفحة.» نافذة متصفح على example.com/longform/article فيها مقال مضبوط على ثلاثة أعمدة عنوانه «لماذا لا يستطيع الويب تنضيد الصفحة»؛ وتشير وسوم حمراء إلى أنهار من البياض، وأرملة، ويتيمة، وصورة تقع فوق النص، وعمود أخير غير متوازن. بجانبها شريحة شيفرة نصها «column-count: 3;» ثم «…ولا شيء يُذكر غير ذلك.» وقائمة مشطوبة بالعيوب الخمسة نفسها. ثم تضطرب النافذة وتنهار. · *السرد:* تعلّم الويب تخطيط الواجهات، لا الصفحات. لذلك ما زال النص الطويل ينكسر: أنهار، وأرامل، ويتامى، وتصادمات.
- 0:18 · *على الشاشة:* بعد وميض أبيض ومرور خطوط زرقاء وذهبية وحمراء، يرتفع شعار Postext واسمه إلى مكانهما مع العبارة «منضّد قابل للبرمجة للويب». وتحتها: مفتوح المصدر · رخصة MIT · v1.7.0 · يعمل في متصفحك. · *السرد:* إليك Postext: منضّد قابل للبرمجة للويب.
- 0:24 · *على الشاشة:* القسم 01 من 07، «المحتوى يدخل»: «Markdown يقول ما الأشياء.» ملف Markdown اسمه 03-why-postext.md يكتب نفسه: موجّه part، والعنوان «Why Postext» مع مقدمة، وفقرة تحيل إلى الشكل fig-flow بالموجّه :ref، وسطر ::resource، وكتلة :::callout. بجانبه ملف config.ts يستدعي buildDocument بتخطيط من عمودين ومتن مضبوط وتقسيم بالواصلة للغة en-us، تحت السطر «الإعداد يقرّر شكلها. لا شيء من الإخراج يعيش في النص.» · *السرد:* تكتب Markdown دلاليًا، يقول ما الأشياء. ويقرّر الإعداد شكلها.
- 0:32 · *على الشاشة:* القسم 02، «Pretext يقيس»: «قياس من دون لمس DOM.» عنوان وفقرة وإطار تُمسح واحدًا بعد آخر، وتعطي خطوط الأبعاد ارتفاعاتها بالنقاط؛ ولوحة شيفرة تعرض prepare(text, '25px Lora') وlayout(prepared, width, 38) يعيدان ارتفاعًا وعدد أسطر. شريطان يتسابقان عبر 10,000 فقرة: «إعادة التدفّق في المتصفح · DOM» بالكاد يتحرك، و«Pretext · مقاييس canvas + حساب» يمتلئ في الحال، وعدّاد يصعد إلى 600× فوق «قياس للنص أسرع منه في DOM، فيُعاد تدفّق كتاب كامل وأنت تكتب» و«Powered by @chenglou/pretext». · *السرد:* تُقاس كل فقرة من دون لمس DOM، بسرعة تصل إلى ستمئة ضعف، بفضل Pretext، المكتبة التي جعلت ذلك ممكنًا.
- 0:42 · *على الشاشة:* القسم 03، «Postext يقرّر»: «كل سطر يُوضع قبل أن يُرسم أي بكسل.» حلقة من سبعة أجزاء تضيء تباعًا، البنية والقياس والوضع والتعويم والتحسين والموازنة والإيقاع، مع وصف من سطر واحد لكل منها، بينما تتجمّع بجانبها صفحة من عمودين من دليل Postext: كتل موسومة تطير إلى أعمدتها، ويستقر شكل في مكانه تحت الملاحظة «:ref{id="fig-flow"} → column foot»، وينزل شريط الافتتاح، وتظهر الأسطر، وتتساوى الأعمدة، وتمسح شبكة خطوط الأساس الصفحة نزولًا. تدور الحلقة في التكرارات من 1 إلى 3 وتعرض «استقر في 3 تكرارات» مع علامة صح؛ ويعرض إطار مربع إحاطة سطر واحد وخط أساسه. · *السرد:* ثم يقرّر Postext. سبع مراحل تضع كل سطر، وتعوّم كل شكل، وتوازن كل عمود، وتتكرر حتى لا يتحرك شيء.
- 0:54 · *على الشاشة:* القسم 04، «المستند الافتراضي»: «غيّر كلمة، فلا يُنضَّد من جديد إلا ما تغيّر.»، مع الملاحظة «مثل DOM الافتراضي في React، لكن للصفحات: VDT، شجرة المستند الافتراضية.» سبع صفحات، من p. 7 إلى p. 13، مصفوفة في صف؛ مؤشر كتابة يعلّم تعديلًا في p. 11، فيتحوّل باقي ذلك العمود إلى الذهبي بوسم DIRTY، وينسكب جزء يسير إلى p. 12 التي تنال علامة صح ووسم SETTLED، بينما تحمل الصفحات السابقة وسم SKIPPED واللاحقة وسم UNTOUCHED. ثلاث نقاط تعرض القاعدة، ولوحة عنوانها renderToHtmlIndexed() تعلّم العقد المتغيّرة في شجرة المستند بوسم PATCHED. · *السرد:* كل ذلك يعيش في مستند افتراضي، مثل DOM الافتراضي في React. غيّر كلمة، فلا يُنضَّد من جديد إلا ما تغيّر.
- 1:03 · *على الشاشة:* «مستند طويل؟ لا يُرسم إلا ما على الشاشة.» عمود من صفحات كتاب يمرّ عبر إطار ذهبي اسمه VIEWPORT، مع هامش 200 بكسل فوقه وتحته: الصفحات داخله مرسومة كاملة، والصفحات خارجه حدود متقطعة. عدّاد كبير يعرض عدد الصفحات المرسومة في تلك اللحظة من أصل 48 (IntersectionObserver · +200 px)، بجانب «الهندسة: كل صفحة. البكسلات: ما تراه فقط.» · *السرد:* وفي الكتاب الطويل، لا تُرسم أبدًا إلا الصفحات الظاهرة على الشاشة.
- 1:10 · *على الشاشة:* القسم 05، «ضبط الأسطر بخوارزمية Knuth–Plass»: «كل طرق تقسيم الفقرة. دفعة واحدة.» على اليسار فقرة عن تقسيم الأسطر منضّدة بطريقة أول ما يتسع، كما يفعل المتصفح، وتتحوّل أرخى أسطرها إلى الأحمر. وتحتها تصير كل كلمة نقطة على خط: أقواس حمراء تعلّم مواضع القطع الجشعة، وأقواس زرقاء باهتة تجرّب كل قطع ممكن، ومسار ذهبي يختار أفضل مجموعة. وعلى اليمين نسخة Knuth–Plass متساوية التباعد، مع رداءة كل سطر، والصيغة «(1 + badness + penalty)²»، ومجموع أدنى من نقاط العيب. · *السرد:* يقسم المتصفح الأسطر بجشع، سطرًا بعد سطر. أما Postext فيستعمل Knuth–Plass، الخوارزمية التي يقوم عليها TeX. تزن كل طرق تقسيم الفقرة كاملة، وتحتفظ بأكثرها انتظامًا.
- 1:24 · *على الشاشة:* القسم 06، «إخراج واحد، ثلاثة مُخرِجات»: «ما تراه هو ما يذهب إلى المطبعة.» تحت سطر الشيفرة const vdt = buildDocument(content, config); تنقسم صفحة واحدة إلى ثلاث. Canvas (renderToCanvas()، صور نقطية دقيقة حتى البكسل) تمرّ فوق شبكة بكسلاتها عدسة مكبّرة؛ وHTML (renderToHtml()، نص قابل للتحديد، يتكيّف مع تغيير الحجم) تُحاط كل كتلة فيه بإطار وتُوسم <h1> و<p> و<figure> وغيرها؛ وPDF (renderToPdf()، جاهز للطباعة، PDF/UA، CMYK) تنزلق فيه أربعة ألواح ألوان حتى تتطابق، ثم تظهر علامات القص وشريط الألوان. · *السرد:* إخراج واحد وثلاثة مُخرِجات: Canvas وHTML وPDF جاهز للطباعة. ما تراه هو ما يذهب إلى المطبعة.
- 1:35 · *على الشاشة:* القسم 07، «لماذا معيار مفتوح»: «وضع LaTeX المعيار للطباعة. والنشر اليوم يعيش أيضًا على كل شاشة.» بطاقتان: LaTeX، 1984، مع علامات خطأ أمام «مصمَّم للصفحة المطبوعة» و«بناء مقيّد بخطوط جهاز واحد وحزمه» و«ترجم، انتظر، كرّر» و«لا إخراج تحريري على الويب المتجاوب»؛ وPostext، 2026، مع علامات صح أمام «الويب وCanvas وPDF جاهز للطباعة من إخراج واحد» و«ملف .postext محمول واحد يحمل كل شيء» و«يُعاد تدفّقه مباشرةً وأنت تكتب» و«يعمل في أي متصفح · بلا خوادم · MIT». وتضيء بطاقة Postext. · *السرد:* وضع LaTeX المعيار للطباعة. لكن النشر اليوم يعيش على كل شاشة.
- 1:41 · *على الشاشة:* العنوان التمهيدي «ملف واحد، الكتاب كله»، والعنوان «معيار مفتوح للنشر، يبلغ ما لا يبلغه LaTeX.» تنفجر أيقونة ملف .postext إلى خمسة أجزاء: preset.json (الإعدادات والتصميم)، وchapters/*.md (ملف Markdown لكل فصل)، وfonts/*.woff2 (الخطوط نفسها)، وimages/ · SVG (كل صورة، مضمّنة)، وresources (الجداول والأشكال والتعليقات). والتعليق: «ملف ZIP عادي: مفتوح، موثّق، برخصة MIT. يمكن لأي أداة قراءته وكتابته.» · *السرد:* Postext معيار مفتوح: ملف واحد محمول، موثّق وبرخصة MIT، يمكن لأي أداة قراءته وكتابته.
- 1:51 · *على الشاشة:* «المعرض · نضّده المحرّك الحقيقي»: جدار من صفحات الكتب يبتعد في منظور بينما يبلغ عدّاد 48 صفحة. النص: «12 فصلًا، و3 أجزاء، وغلاف، أُخرجت في نحو نصف ثانية. كل صفحة من دليل Postext حسبها postext v1.7.0 في المتصفح لهذا الفيلم. لا شيء وُضع باليد.» ثم وسوم: كتب مدرسية، مجلات، طبعات أدبية، كتالوجات. · *السرد:* لهذا يستطيع إخراج كتب من مئات الصفحات في أعشار من الثانية.
- 1:58 · *على الشاشة:* بطاقة الختام: شعار Postext مع العبارة «منضّد قابل للبرمجة للويب»، والعنوان postext.dev، وسطر طرفية يكتب «$ pnpm add postext»، والتذييل «مفتوح المصدر · MIT · github.com/drnachio/postext». · *السرد:* Postext. مفتوح المصدر، على postext.dev.

## إخراج تحريري يُحسب للويب

تمنحك CSS تخطيطًا متجاوبًا: flexbox وgrid والأعمدة. لكنها لا تستطيع موازنة الأعمدة، ولا إبقاء العنوان مع فقرته، ولا منع الأسطر الأرامل واليتيمة، ولا تعويم شكل إلى رأس العمود التالي. هذه قرارات تحريرية صُقلت عبر قرون من الطباعة.

يسدّ Postext هذه الفجوة. تعطيه نص Markdown دلاليًا وكائن إعدادات، فيقيس النص أسرع من DOM بما بين 300 و600 مرة باستخدام [@chenglou/pretext](https://github.com/chenglou/pretext)، ثم يحسب هندسة الصفحة كاملة، كل سطر وكل عنصر عائم وكل تعليق، ويرسمها عبر واجهات إخراج HTML واللوحة (Canvas) وPDF الجاهز للطباعة.

## ما عرفه المنضّدون في الطباعة منذ البداية

### ضبط الأسطر بخوارزمية Knuth-Plass

خوارزمية تقسيم الأسطر المثلى نفسها التي يستخدمها TeX، مع تقسيم الكلمات بالواصلة وفق أنماط TeX والتحكم في الأسطر اليتيمة: كتل نص منضّدة بانتظام، بلا أنهار من الفراغات، بما يتجاوز كل ما تستطيع CSS التعبير عنه.

[اقرأ في التوثيق](https://postext.dev/ar/docs/justification#knuth-plass-النظر-إلى-الفقرة-كاملة)

### الموارد والإحالات المتبادلة

تطفو الأشكال ومخططات SVG والجداول إلى أعلى الأعمدة والصفحات أو أسفلها، كما تطفو العناصر في الطباعة، مع ترقيم حسب النوع وإحالات ⁦:ref⁩ تبقى متزامنة دائمًا.

[اقرأ في التوثيق](https://postext.dev/ar/docs/document-format#الموارد)

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

جداول تُنضَّد بخطوط مستقلة للمتن والرأس، وتنقسم عبر الصفحات مع تكرار رؤوسها، وتعليقات تتبع إعداداتك: مرقّمة وموضوعة بجانب المورد الذي تصفه.

[اقرأ في التوثيق](https://postext.dev/ar/docs/configuration#نمط-الجداول)

### مخططات بحبر واحد

أعد تلوين مخططات SVG بدرجات حبر واحد حسب الإضاءة، فتتسق كل الرسوم مع تصميمك، جاهزة للطباعة بالألوان الخاصة (spot colour).

[اقرأ في التوثيق](https://postext.dev/ar/docs/configuration#نمط-المخططات)

### رياضيات LaTeX

معادلات داخل السطر ومعادلات معروضة تُكتب بـ LaTeX، يقيسها المحرّك وينضّدها لتستقر على شبكة خطوط الأساس إلى جانب النص.

[اقرأ في التوثيق](https://postext.dev/ar/docs/document-format#الصيغ-الرياضية)

### الويب وPDF الجاهز للطباعة وEPUB

محرّك إخراج واحد وأربعة مُخرَجات. تُرسم الصفحات المحسوبة نفسها في HTML أو على اللوحة (Canvas) أو في PDF جاهز للطباعة، مع إشارات مرجعية وألوان CMYK ومُخرَج PDF/UA موسوم وقابل للوصول، وتصدر كتابًا إلكترونيًا بصيغة EPUB 3، صفحة بصفحة أو قابلًا لإعادة التدفق.

[اقرأ في التوثيق](https://postext.dev/ar/docs/architecture#واجهة-المُخرِجات)

## دالة واحدة وتحكم كامل

استدعِ `buildDocument` بمحتواك وكائن إعدادات، فتحصل على هندسة الصفحات كاملة: ارسم أي صفحة صورةً بـ `renderPage`، أو نضّد الكتاب كله ملف PDF جاهزًا للطباعة بـ `renderToPdf`.

```ts
import { buildDocument, renderToHtml } from "postext";

const doc = buildDocument(
  { markdown },
  {
    layout: { layoutType: "double" },
    bodyText: {
      textAlign: "justify",
      hyphenation: { enabled: true, locale: "en-us" },
    },
  }
);

const html = renderToHtml(doc);
```

## ثلاث خطوات إلى إخراج بجودة النشر

1. **اكتب Markdown دلاليًا.** اكتب محتواك بـ Markdown مُعزَّز: عناوين وقوائم وجداول ورياضيات وإطارات وإحالات ⁦:ref⁩ إلى أشكالك. لا شأن لك بالإخراج، المحتوى فقط.
2. **اضبط قواعد الإخراج.** حدّد مقاس الصفحة والأعمدة والخطوط وتصاميم العناوين والترويسات ومواضع العناصر العائمة في كائن PostextConfig، أو صمّمها بصريًا في Sandbox.
3. **اعرض في HTML أو على اللوحة أو في PDF.** استدعِ buildDocument لتتلقى هندسة الإخراج كاملة، ثم اعرضها بواجهة HTML أو اللوحة (Canvas) أو PDF الجاهز للطباعة.

## ملف واحد، الكتاب كله

يحمل ملف ⁦.postext⁩ كل ما يحتاج إليه المستند ليُنضَّد من جديد على أي جهاز: صيغة مفتوحة قابلة للتحرير يستطيع أي أحد اعتمادها.

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

ملف ⁦.postext⁩ أرشيف ZIP عادي يستطيع أي أحد فتحه وقراءته وتحريره: بيان JSON، وملف Markdown لكل فصل، وملفات الخطوط والصور نفسها. يصدّره Sandbox، وتكتبه مهارة الوكيل postext-port، وتفتحه `postext/bundle` في أي برنامج لتنضيد الصفحات نفسها من جديد. الصيغة موثّقة ومرخّصة بـ MIT، وجاهزة لتقرأها أي أداة وتكتبها.

- **الإعدادات**
- **الفصول**
- **المحارف**
- **الموارد**
- **الصور**

### افتح الدليل واحصل على صفحاته

أول أمثلة Sandbox، دليل Postext، ملف ⁦.postext⁩ واحد. افتحه في المتصفح وحوّل كل صفحة إلى صورة: محارفه وأشكاله وجداوله تأتي من الملف نفسه.

- [postext-guide.postext](https://postext.dev/bundles/postext-guide.postext)

## ابدأ في أقل من دقيقة

```bash
pnpm add postext
```

```ts
import { buildDocument, renderToHtml } from "postext";

const doc = buildDocument({
  markdown: "# Hello World\n\nYour content here.",
});

const html = renderToHtml(doc);
```

## التوثيق

- [مدخل إلى Postext](https://postext.dev/ar/docs/introduction.md): ما Postext، ولماذا وُجد، وما المشكلة التي يحلّها
- [بنية Postext](https://postext.dev/ar/docs/architecture.md): البنية التقنية لمحرّك الإخراج في Postext
- [إعدادات Postext](https://postext.dev/ar/docs/configuration.md): المرجع الكامل لكل خيارات إعدادات الإخراج في Postext
- [تقسيم الكلمات وضبط الأسطر](https://postext.dev/ar/docs/justification.md): كيف يقسّم Postext الأسطر ويضبط النص ويتحكم في التباعد بين الكلمات بخوارزمية Knuth-Plass
- [صيغة المستند](https://postext.dev/ar/docs/document-format.md): مجموعة Markdown الجزئية التي يحلّلها Postext، وقواعد كتابة المستندات المصدرية
- [الإخراج الصيني](https://postext.dev/ar/docs/chinese-layout.md): كيف ينضّد Postext النص الصيني أفقيًا وعموديًا: المناطق، وكسر الأسطر، وعروض علامات الترقيم، وضبط الأسطر بين المحارف، وشبكة المحارف، والكتب المجلّدة من اليمين، والأرقام القائمة، والعلامات، والروبي، والواريتشو، والأعداد الصينية، والخطوط
- [الإخراج العربي](https://postext.dev/ar/docs/arabic-layout.md): كيف ينضّد Postext النص العربي: اتجاه النص وخوارزمية النص ثنائي الاتجاه، والكتب المجلّدة على اليمين، والكلمات الموصولة التي لا تُقطع ولا تُباعَد حروفها، وضبط الأسطر بالكشيدة، والحركات، والتوكيد، والأرقام وأنماط الترقيم، والأعداد الترتيبية بالحروف، والحواشي، والشعر العمودي، والمحتويات، والفهرس، والاستشهادات، والخطوط
- [المساهمة في Postext](https://postext.dev/ar/docs/contributing.md): كيف تنضم إلى مجتمع Postext وتساهم في المشروع
- [Sandbox](https://postext.dev/ar/docs/sandbox.md): بيئة تفاعلية لتجربة محرّك الإخراج في Postext
- [مهارة الوكيل: انقل منشورًا إلى Postext](https://postext.dev/ar/docs/skill.md): ثبّت مهارة postext-port في Claude Code أو Codex أو أي وكيل، ودعه يحوّل مصدرًا بصيغة PDF أو Word أو PowerPoint أو EPUB أو InDesign أو HTML إلى مشروع Postext يتبع إخراج الأصل

## روابط

- [GitHub](https://github.com/drnachio/postext)
- [npm](https://www.npmjs.com/package/postext)
- [YouTube](https://www.youtube.com/@Postext)
- [دليل الوصفات](https://postext.dev/ar/cookbook.md): أمثلة Postext جاهزة للنسخ، من صفحة افتتاح فصل إلى كتاب كامل، ومع كل منها الصفحات التي ينضّدها والشيفرة كاملة.
- [Sandbox](https://postext.dev/ar/sandbox): محرر تفاعلي في المتصفح: اكتب Markdown، واضبط الإعدادات، وصدّر ملف PDF جاهزًا للطباعة وكتابًا إلكترونيًا بصيغة EPUB 3.
- [ترخيص MIT](https://postext.dev/ar/license.md)
