מנוע פריסה

מנוע פריסה

שכבת הפריסה ממירה 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דף אחד מעוצב

ראה גם

 עברית