/// <summary> /// Makes block boxes be among only block boxes. /// Inline boxes should live in a pool of Inline boxes only. /// </summary> /// <param name="startBox"></param> private void BlockCorrection(CssBox startBox) { bool inlinesonly = startBox.ContainsInlinesOnly(); if (!inlinesonly) { List <List <CssBox> > inlinegroups = BlockCorrection_GetInlineGroups(startBox); foreach (List <CssBox> group in inlinegroups) { if (group.Count == 0) { continue; } if (group.Count == 1 && group[0] is CssAnonymousSpaceBox) { CssAnonymousSpaceBlockBox sbox = new CssAnonymousSpaceBlockBox(startBox, group[0]); group[0].ParentBox = sbox; } else { CssAnonymousBlockBox newbox = new CssAnonymousBlockBox(startBox, group[0]); foreach (CssBox inline in group) { inline.ParentBox = newbox; } } } } foreach (CssBox b in startBox.Boxes) { BlockCorrection(b); } }
/// <summary> /// Makes block boxes be among only block boxes. /// Inline boxes should live in a pool of Inline boxes only. /// </summary> /// <param name="startBox"></param> private void BlockCorrection(CssBox startBox) { bool inlinesonly = startBox.ContainsInlinesOnly(); if (!inlinesonly) { List<List<CssBox>> inlinegroups = BlockCorrection_GetInlineGroups(startBox); foreach (List<CssBox> group in inlinegroups) { if (group.Count == 0) continue; if (group.Count == 1 && group[0] is CssAnonymousSpaceBox) { CssAnonymousSpaceBlockBox sbox = new CssAnonymousSpaceBlockBox(startBox, group[0]); group[0].ParentBox = sbox; } else { CssAnonymousBlockBox newbox = new CssAnonymousBlockBox(startBox, group[0]); foreach (CssBox inline in group) { inline.ParentBox = newbox; } } } } foreach (CssBox b in startBox.Boxes) { BlockCorrection(b); } }