محرك التخطيط

محرك التخطيط

طبقة التخطيط تحوّل DOM مُنسق إلى هندسة: شجرة صناديق، ثم شظايا بأحجام ومواقع. إنها المرحلة التي تلي الأنماط المحسوبة، ومخرجاتها هي كائنات Python بسيطة يمكنك فحصها.


من DOM إلى شجرة الصناديق

build_box_tree() ينتج BoxRoot من BoxNode مدخلات من وثيقة مُنسقة، يصنّف نموذج عرض كل عنصر عبر classify_display() مقابل تعداد Display. يحمل ComputedStyle وEdgeSizes نمط كل صندوق وقياسات نموذج الصندوق.

تخطيط الكتل

layout_block_tree() ينفّذ تخطيطًا على مستوى الكتلة فوق شجرة الصناديق، مُنتجًا FragmentRoot يحتوي على BlockFragment مدخلات مع هندسة محلولة.

تخطيط ضمني

المحتوى المتضمن يُشكَّل إلى قطع ShapedRun وInlineTextFragment، تُجمع في أسطر LineFragment عبر layout_inline_fragments() وflush_inline_run().

Pagination

paginate_fragments() يقسم ناتج القطعة إلى صفحات PageFragment، مع احترام BreakHints، حيث يُنمذج PageMarginBoxes مناطق هوامش الصفحة وflush_page() يُنهي كل صفحة.


نصائح وأفضل الممارسات

  • حَلّ الأنماط المحسوبة قبل التخطيط — شجرة الصناديق تُستمد من العناصر المُنسقة
  • افحص EdgeSizes عندما تبدو أبعاد الصندوق غير صحيحة؛ الهوامش والحشو تُحلّ هناك
  • احرص على تمييز شجرة الصناديق وشجرة القطع في نموذجك الذهني: الصناديق تصف البنية، والقطع تصف الهندسة الموضوعة

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

المشكلةالسببالإصلاح
إخراج جزء فارغتشغيل التخطيط على شجرة غير مُنسقة أو فارغةأرفق أوراق الأنماط والمحتوى أولاً
تصنيف العرض غير متوقعالقيمة المحتسبة للعنصر display تختلف عن الافتراضتحقق من نتيجة classify_display() للمربع
فواصل الصفحات في أماكن غريبةلم يتم تعيين تلميحات الفواصلقدّم BreakHints إلى paginate_fragments()

FAQ

ما الفرق بين الصندوق والجزء؟

الصناديق (BoxNode) تصف هيكل التخطيط المستمد من الأنماط؛ القطع (BlockFragment, LineFragment) هي النتائج الموضوعة مع الهندسة.

هل يتعامل المحرك مع ترقيم الصفحات؟

نعم — paginate_fragments() ينتج PageFragment صفحات مع صناديق الهوامش.

من أين تأتي مقاطع النص؟

المحتوى داخل السطر يتشكل إلى كائنات ShapedRun ويُجمّع في خطوط LineFragment.


ملخص API Reference

الصنف/الطريقةوصف
build_box_treeاستخرج شجرة الصناديق من DOM مُنسق
layout_block_treeتشغيل تخطيط الكتل على شجرة الصناديق
layout_inline_fragmentsتجميع المحتوى المضمن في سطور
paginate_fragmentsقسّم المقاطع إلى صفحات
BoxNodeصندوق واحد في بنية التخطيط
PageFragmentصفحة واحدة مُنظَّمة

انظر أيضاً

 العربية