موتور چیدمان

موتور چیدمان

لایهٔ چیدمان یک DOM استایل‌دار را به هندسه تبدیل می‌کند: یک درخت جعبه، سپس تکه‌هایی با اندازه‌ها و موقعیت‌ها. این مرحله پس از سبک‌های محاسبه‌شده است و خروجی‌های آن اشیای سادهٔ Python هستند که می‌توانید آن‌ها را بررسی کنید.


از DOM به درخت جعبه

build_box_tree() یک BoxRoot شامل BoxNode ورودی از یک سند استایل‌دار تولید می‌کند، که مدل نمایش هر عنصر را از طریق classify_display() در مقابل شمارش Display طبقه‌بندی می‌کند. ComputedStyle و EdgeSizes سبک هر جعبه و اندازه‌های مدل جعبه را حمل می‌کنند.

چیدمان بلوکی

layout_block_tree() چیدمان سطح بلوکی را بر روی درخت جعبه انجام می‌دهد و یک FragmentRoot حاوی BlockFragment ورودی با هندسهٔ حل‌شده تولید می‌کند.

چیدمان درون‌خطی

محتویات درون‌خطی به قطعات ShapedRun و InlineTextFragment شکل می‌گیرد، و از طریق layout_inline_fragments() و flush_inline_run() به خطوط LineFragment ترکیب می‌شود.

Pagination

paginate_fragments() خروجی قطعه را به صفحات PageFragment تقسیم می‌کند، BreakHints را رعایت می‌کند، و PageMarginBoxes نواحی حاشیه صفحه را مدل می‌کند و flush_page() هر صفحه را نهایی می‌سازد.


نکات و بهترین روش‌ها

  • سبک‌های محاسبه‌شده را قبل از چیدمان حل کنید — درخت جعبه از عناصر دارای سبک استخراج می‌شود
  • زمانی که ابعاد جعبه نادرست به نظر می‌رسند، EdgeSizes را بررسی کنید؛ حاشیه‌ها و فاصله داخلی در آن حل می‌شوند
  • در مدل ذهنی خود، درخت جعبه و درخت قطعه را جدا نگه دارید: جعبه‌ها ساختار را توصیف می‌کنند، قطعات هندسهٔ قرار گرفته را توصیف می‌کنند

مسائل رایج

مشکلدلیلراه‌حل
خروجی تکه خالیاجرای Layout بر روی درخت بدون استایل یا خالیابتدا سبک‌ها و محتوا را پیوست کنید
دسته‌بندی نمایش غیرمنتظرهمقدار محاسبه‌شده 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یک صفحهٔ چیدمان‌شده

همچنین ببینید:

 فارسی