מנוע פריסה
מנוע פריסה
שכבת הפריסה ממירה 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
מה ההבדל בין box ל-fragment?
קופסאות (BoxNode) מתארות את מבנה הפריסה שנגזר מהסגנונות; פרגמנטים (BlockFragment, LineFragment) הם תוצאות המיקום עם גאומטריה.
האם המנוע מטפל בעימוד?
כן — paginate_fragments() מייצר PageFragment עמודים עם קופסאות שוליים.
מאין נובעות ריצות טקסט?
תוכן פנימי מעוצב לאובייקטים של ShapedRun ומורכב לשורות של LineFragment.
API Reference סיכום
| מחלקה/מתודה | תיאור |
|---|---|
build_box_tree | גזר את עץ התיבה מתוך DOM מעוצב |
layout_block_tree | הפעל פריסת בלוקים על עץ הקופסאות |
layout_inline_fragments | הרכבת תוכן מוטבע לשורות |
paginate_fragments | פצל קטעים לעמודים |
BoxNode | קופסה אחת במבנה הפריסה |
PageFragment | דף אחד מעוצב |