موتور چیدمان
موتور چیدمان
لایهٔ چیدمان یک 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 | یک صفحهٔ چیدمانشده |