محرك التخطيط
محرك التخطيط
طبقة التخطيط تحوّل 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 | صفحة واحدة مُنظَّمة |