Diff
Modified: trunk/Source/WebCore/ChangeLog (241242 => 241243)
--- trunk/Source/WebCore/ChangeLog 2019-02-09 19:44:06 UTC (rev 241242)
+++ trunk/Source/WebCore/ChangeLog 2019-02-09 20:37:03 UTC (rev 241243)
@@ -1,3 +1,24 @@
+2019-02-09 Zalan Bujtas <[email protected]>
+
+ [LFC][IFC] Add intrinsic width support for basic inline containers
+ https://bugs.webkit.org/show_bug.cgi?id=194473
+
+ Reviewed by Antti Koivisto.
+
+ Preferred width computation logic is very similar to normal layout.
+ One of the main difference is that the preferred width codepath does not provide valid containing block width.
+ This patch implement basic inline container support by passing nullopt containing block width in UsedHorizontalValues.
+
+ * layout/inlineformatting/InlineFormattingContext.cpp:
+ (WebCore::Layout::InlineFormattingContext::layout const):
+ (WebCore::Layout::InlineFormattingContext::instrinsicWidthConstraints const):
+ (WebCore::Layout::InlineFormattingContext::computeBorderAndPadding const):
+ (WebCore::Layout::InlineFormattingContext::computeMarginBorderAndPadding const):
+ (WebCore::Layout::InlineFormattingContext::computeWidthAndMargin const):
+ (WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot const):
+ (WebCore::Layout::InlineFormattingContext::computeWidthAndHeightForReplacedInlineBox const):
+ * layout/inlineformatting/InlineFormattingContext.h:
+
2019-02-08 Myles C. Maxfield <[email protected]>
[Cocoa] CTLineGetGlyphRuns() might return nullptr
Modified: trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp (241242 => 241243)
--- trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp 2019-02-09 19:44:06 UTC (rev 241242)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp 2019-02-09 20:37:03 UTC (rev 241243)
@@ -71,15 +71,16 @@
LOG_WITH_STREAM(FormattingContextLayout, stream << "[Start] -> inline formatting context -> formatting root(" << &root() << ")");
auto& root = downcast<Container>(this->root());
+ auto usedValues = UsedHorizontalValues { layoutState().displayBoxForLayoutBox(root).contentBoxWidth(), { }, { } };
auto* layoutBox = root.firstInFlowOrFloatingChild();
// Compute width/height for non-text content and margin/border/padding for inline containers.
while (layoutBox) {
if (layoutBox->establishesFormattingContext())
- layoutFormattingContextRoot(*layoutBox);
+ layoutFormattingContextRoot(*layoutBox, usedValues);
else if (is<Container>(*layoutBox))
- computeMarginBorderAndPadding(downcast<InlineContainer>(*layoutBox));
+ computeMarginBorderAndPadding(downcast<InlineContainer>(*layoutBox), usedValues);
else if (layoutBox->isReplaced())
- computeWidthAndHeightForReplacedInlineBox(*layoutBox);
+ computeWidthAndHeightForReplacedInlineBox(*layoutBox, usedValues);
layoutBox = nextInPreOrder(*layoutBox, root);
}
@@ -89,27 +90,70 @@
LOG_WITH_STREAM(FormattingContextLayout, stream << "[End] -> inline formatting context -> formatting root(" << &root << ")");
}
-void InlineFormattingContext::computeMarginBorderAndPadding(const InlineContainer& inlineContainer) const
+FormattingContext::InstrinsicWidthConstraints InlineFormattingContext::instrinsicWidthConstraints() const
{
+ ASSERT(!layoutState().formattingStateForBox(root()).instrinsicWidthConstraints(root()));
+ ASSERT(is<Container>(root()));
+
+ auto& layoutState = this->layoutState();
+ auto& root = downcast<Container>(this->root());
+
+ auto usedValues = UsedHorizontalValues { { }, { }, { } };
+ auto* layoutBox = root.firstInFlowOrFloatingChild();
+ while (layoutBox) {
+ if (layoutBox->establishesFormattingContext() || layoutBox->isReplaced())
+ ASSERT_NOT_IMPLEMENTED_YET();
+ else if (is<Container>(*layoutBox))
+ computeMarginBorderAndPadding(downcast<InlineContainer>(*layoutBox), usedValues);
+ layoutBox = nextInPreOrder(*layoutBox, root);
+ }
+
+ InlineRunProvider inlineRunProvider;
+ collectInlineContent(inlineRunProvider);
+
+ auto maximumLineWidth = [&](auto availableWidth) {
+ LayoutUnit maxContentLogicalRight;
+ auto lineBreaker = InlineLineBreaker { layoutState, formattingState().inlineContent(), inlineRunProvider.runs() };
+ LayoutUnit lineLogicalRight;
+ while (auto run = lineBreaker.nextRun(lineLogicalRight, availableWidth, !lineLogicalRight)) {
+ if (run->position == InlineLineBreaker::Run::Position::LineBegin)
+ lineLogicalRight = 0;
+ lineLogicalRight += run->width;
+
+ maxContentLogicalRight = std::max(maxContentLogicalRight, lineLogicalRight);
+ }
+ return maxContentLogicalRight;
+ };
+
+ auto instrinsicWidthConstraints = FormattingContext::InstrinsicWidthConstraints { maximumLineWidth(0), maximumLineWidth(LayoutUnit::max()) };
+ layoutState.formattingStateForBox(root).setInstrinsicWidthConstraints(root, instrinsicWidthConstraints);
+ return instrinsicWidthConstraints;
+}
+
+void InlineFormattingContext::computeBorderAndPadding(const Box& layoutBox, UsedHorizontalValues usedValues) const
+{
+ auto& displayBox = layoutState().displayBoxForLayoutBox(layoutBox);
+ displayBox.setBorder(Geometry::computedBorder(layoutBox));
+ displayBox.setPadding(Geometry::computedPadding(layoutBox, usedValues));
+}
+
+void InlineFormattingContext::computeMarginBorderAndPadding(const InlineContainer& inlineContainer, UsedHorizontalValues usedValues) const
+{
// Non-replaced, non-formatting root containers (<span></span>) don't have width property -> non width computation.
ASSERT(!inlineContainer.replaced());
ASSERT(!inlineContainer.establishesFormattingContext());
- computeBorderAndPadding(inlineContainer);
+ computeBorderAndPadding(inlineContainer, usedValues);
auto& displayBox = layoutState().displayBoxForLayoutBox(inlineContainer);
- auto containingBlockWidth = layoutState().displayBoxForLayoutBox(*inlineContainer.containingBlock()).contentBoxWidth();
- auto computedHorizontalMargin = Geometry::computedHorizontalMargin(inlineContainer, UsedHorizontalValues { containingBlockWidth, { }, { } });
+ auto computedHorizontalMargin = Geometry::computedHorizontalMargin(inlineContainer, usedValues);
displayBox.setHorizontalComputedMargin(computedHorizontalMargin);
displayBox.setHorizontalMargin({ computedHorizontalMargin.start.valueOr(0), computedHorizontalMargin.end.valueOr(0) });
}
-void InlineFormattingContext::computeWidthAndMargin(const Box& layoutBox) const
+void InlineFormattingContext::computeWidthAndMargin(const Box& layoutBox, UsedHorizontalValues usedValues) const
{
auto& layoutState = this->layoutState();
- auto containingBlockWidth = layoutState.displayBoxForLayoutBox(*layoutBox.containingBlock()).contentBoxWidth();
-
WidthAndMargin widthAndMargin;
- auto usedValues = UsedHorizontalValues { containingBlockWidth, { }, { } };
if (layoutBox.isFloatingPositioned())
widthAndMargin = Geometry::floatingWidthAndMargin(layoutState, layoutBox, usedValues);
else if (layoutBox.isInlineBlockBox())
@@ -144,12 +188,12 @@
displayBox.setVerticalMargin({ heightAndMargin.nonCollapsedMargin, { } });
}
-void InlineFormattingContext::layoutFormattingContextRoot(const Box& root) const
+void InlineFormattingContext::layoutFormattingContextRoot(const Box& root, UsedHorizontalValues usedValues) const
{
ASSERT(root.isFloatingPositioned() || root.isInlineBlockBox());
- computeBorderAndPadding(root);
- computeWidthAndMargin(root);
+ computeBorderAndPadding(root, usedValues);
+ computeWidthAndMargin(root, usedValues);
// Swich over to the new formatting context (the one that the root creates).
auto formattingContext = layoutState().createFormattingContext(root);
formattingContext->layout();
@@ -159,14 +203,14 @@
formattingContext->layoutOutOfFlowDescendants(root);
}
-void InlineFormattingContext::computeWidthAndHeightForReplacedInlineBox(const Box& layoutBox) const
+void InlineFormattingContext::computeWidthAndHeightForReplacedInlineBox(const Box& layoutBox, UsedHorizontalValues usedValues) const
{
ASSERT(!layoutBox.isContainer());
ASSERT(!layoutBox.establishesFormattingContext());
ASSERT(layoutBox.replaced());
- computeBorderAndPadding(layoutBox);
- computeWidthAndMargin(layoutBox);
+ computeBorderAndPadding(layoutBox, usedValues);
+ computeWidthAndMargin(layoutBox, usedValues);
computeHeightAndMargin(layoutBox);
}
@@ -292,42 +336,7 @@
}
}
-FormattingContext::InstrinsicWidthConstraints InlineFormattingContext::instrinsicWidthConstraints() const
-{
- auto& formattingStateForRoot = layoutState().formattingStateForBox(root());
- if (auto instrinsicWidthConstraints = formattingStateForRoot.instrinsicWidthConstraints(root()))
- return *instrinsicWidthConstraints;
-
- auto& inlineFormattingState = formattingState();
- InlineRunProvider inlineRunProvider;
- collectInlineContent(inlineRunProvider);
-
- // Compute width for non-text content.
- for (auto& inlineRun : inlineRunProvider.runs()) {
- if (inlineRun.isText())
- continue;
-
- computeWidthAndMargin(inlineRun.inlineItem().layoutBox());
- }
-
- auto maximumLineWidth = [&](auto availableWidth) {
- LayoutUnit maxContentLogicalRight;
- InlineLineBreaker lineBreaker(layoutState(), inlineFormattingState.inlineContent(), inlineRunProvider.runs());
- LayoutUnit lineLogicalRight;
- while (auto run = lineBreaker.nextRun(lineLogicalRight, availableWidth, !lineLogicalRight)) {
- if (run->position == InlineLineBreaker::Run::Position::LineBegin)
- lineLogicalRight = 0;
- lineLogicalRight += run->width;
-
- maxContentLogicalRight = std::max(maxContentLogicalRight, lineLogicalRight);
- }
- return maxContentLogicalRight;
- };
-
- return FormattingContext::InstrinsicWidthConstraints { maximumLineWidth(0), maximumLineWidth(LayoutUnit::max()) };
}
-
}
-}
#endif
Modified: trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h (241242 => 241243)
--- trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h 2019-02-09 19:44:06 UTC (rev 241242)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h 2019-02-09 20:37:03 UTC (rev 241243)
@@ -85,11 +85,12 @@
static WidthAndMargin inlineBlockWidthAndMargin(LayoutState&, const Box&, UsedHorizontalValues);
};
- void layoutFormattingContextRoot(const Box&) const;
- void computeWidthAndHeightForReplacedInlineBox(const Box&) const;
- void computeMarginBorderAndPadding(const InlineContainer&) const;
+ void layoutFormattingContextRoot(const Box&, UsedHorizontalValues) const;
+ void computeWidthAndHeightForReplacedInlineBox(const Box&, UsedHorizontalValues) const;
+ void computeBorderAndPadding(const Box&, UsedHorizontalValues) const;
+ void computeMarginBorderAndPadding(const InlineContainer&, UsedHorizontalValues) const;
void computeHeightAndMargin(const Box&) const;
- void computeWidthAndMargin(const Box&) const;
+ void computeWidthAndMargin(const Box&, UsedHorizontalValues) const;
void collectInlineContent(InlineRunProvider&) const;
InstrinsicWidthConstraints instrinsicWidthConstraints() const override;
Modified: trunk/Tools/ChangeLog (241242 => 241243)
--- trunk/Tools/ChangeLog 2019-02-09 19:44:06 UTC (rev 241242)
+++ trunk/Tools/ChangeLog 2019-02-09 20:37:03 UTC (rev 241243)
@@ -1,3 +1,14 @@
+2019-02-09 Zalan Bujtas <[email protected]>
+
+ [LFC][IFC] Add intrinsic width support for basic inline containers
+ https://bugs.webkit.org/show_bug.cgi?id=194473
+
+ Reviewed by Antti Koivisto.
+
+ Expand tests coverage (11 new tests -> 798)
+
+ * LayoutReloaded/misc/LFC-passing-tests.txt: not sure why run-singly keeps producing different ordering.
+
2019-02-09 Benjamin Poulain <[email protected]>
Fix MiniBrowser's entitlements
Modified: trunk/Tools/LayoutReloaded/misc/LFC-passing-tests.txt (241242 => 241243)
--- trunk/Tools/LayoutReloaded/misc/LFC-passing-tests.txt 2019-02-09 19:44:06 UTC (rev 241242)
+++ trunk/Tools/LayoutReloaded/misc/LFC-passing-tests.txt 2019-02-09 20:37:03 UTC (rev 241243)
@@ -403,12 +403,12 @@
css2.1/20110323/absolute-non-replaced-height-012.htm
css2.1/20110323/absolute-non-replaced-max-height-001.htm
css2.1/20110323/absolute-non-replaced-max-height-002.htm
-css2.1/t0402-c71-fwd-parsing-00-f.html
css2.1/20110323/absolute-non-replaced-max-height-003.htm
css2.1/20110323/absolute-non-replaced-max-height-004.htm
-css2.1/t0402-c71-fwd-parsing-01-f.html
css2.1/20110323/absolute-non-replaced-max-height-005.htm
+css2.1/t0402-c71-fwd-parsing-00-f.html
css2.1/20110323/absolute-non-replaced-max-height-006.htm
+css2.1/t0402-c71-fwd-parsing-01-f.html
css2.1/20110323/absolute-non-replaced-max-height-007.htm
css2.1/20110323/absolute-non-replaced-max-height-008.htm
css2.1/20110323/absolute-non-replaced-max-height-009.htm
@@ -421,12 +421,12 @@
css2.1/20110323/absolute-non-replaced-width-004.htm
css2.1/20110323/absolute-non-replaced-width-005.htm
css2.1/20110323/absolute-non-replaced-width-006.htm
-css2.1/t0402-c71-fwd-parsing-03-f.html
css2.1/20110323/absolute-non-replaced-width-007.htm
css2.1/20110323/absolute-non-replaced-width-008.htm
css2.1/20110323/absolute-non-replaced-width-009.htm
css2.1/20110323/absolute-non-replaced-width-010.htm
css2.1/20110323/absolute-non-replaced-width-011.htm
+css2.1/t0402-c71-fwd-parsing-03-f.html
css2.1/20110323/absolute-non-replaced-width-012.htm
css2.1/20110323/absolute-non-replaced-width-013.htm
css2.1/20110323/absolute-non-replaced-width-014.htm
@@ -474,7 +474,6 @@
css2.1/20110323/absolute-replaced-height-026.htm
css2.1/20110323/absolute-replaced-height-028.htm
css2.1/20110323/absolute-replaced-height-029.htm
-css2.1/t0803-c5502-imrgn-r-00-b-ag.html
css2.1/20110323/absolute-replaced-height-030.htm
css2.1/20110323/absolute-replaced-height-031.htm
css2.1/20110323/absolute-replaced-height-032.htm
@@ -481,6 +480,7 @@
css2.1/20110323/absolute-replaced-height-033.htm
css2.1/20110323/absolute-replaced-height-035.htm
css2.1/20110323/absolute-replaced-height-036.htm
+css2.1/t0803-c5502-imrgn-r-00-b-ag.html
css2.1/20110323/absolute-replaced-width-001.htm
css2.1/20110323/absolute-replaced-width-006.htm
css2.1/20110323/absolute-replaced-width-008.htm
@@ -496,11 +496,11 @@
css2.1/20110323/absolute-replaced-width-055.htm
css2.1/20110323/absolute-replaced-width-064.htm
css2.1/20110323/absolute-replaced-width-069.htm
-css2.1/t0803-c5502-mrgn-r-02-c.html
-css2.1/t0803-c5502-mrgn-r-03-c.html
css2.1/20110323/abspos-containing-block-initial-001.htm
css2.1/20110323/abspos-containing-block-initial-004a.htm
+css2.1/t0803-c5502-mrgn-r-02-c.html
css2.1/20110323/abspos-containing-block-initial-004b.htm
+css2.1/t0803-c5502-mrgn-r-03-c.html
css2.1/t0803-c5504-imrgn-l-00-b-ag.html
css2.1/20110323/abspos-containing-block-initial-005a.htm
css2.1/20110323/abspos-containing-block-initial-005c.htm
@@ -510,9 +510,6 @@
css2.1/20110323/abspos-containing-block-initial-009e.htm
css2.1/20110323/abspos-containing-block-initial-009f.htm
css2.1/t0803-c5504-mrgn-l-00-c-ag.html
-css2.1/t0803-c5504-mrgn-l-02-c.html
-css2.1/t0803-c5504-mrgn-l-03-c.html
-css2.1/t0803-c5505-mrgn-00-b-ag.html
css2.1/20110323/at-import-001.htm
css2.1/20110323/at-import-002.htm
css2.1/20110323/at-import-003.htm
@@ -522,36 +519,37 @@
css2.1/20110323/at-import-007.htm
css2.1/20110323/at-import-009.htm
css2.1/20110323/at-import-010.htm
+css2.1/t0803-c5504-mrgn-l-02-c.html
css2.1/20110323/at-import-011.htm
+css2.1/t0803-c5504-mrgn-l-03-c.html
+css2.1/20110323/background-intrinsic-001.htm
+css2.1/20110323/background-intrinsic-002.htm
+css2.1/20110323/background-intrinsic-003.htm
+css2.1/20110323/background-intrinsic-004.htm
+css2.1/20110323/background-intrinsic-005.htm
+css2.1/t0803-c5505-mrgn-00-b-ag.html
+css2.1/20110323/background-intrinsic-007.htm
+css2.1/20110323/background-intrinsic-008.htm
+css2.1/20110323/background-intrinsic-009.htm
+css2.1/20110323/block-non-replaced-height-001.htm
+css2.1/20110323/block-non-replaced-height-003.htm
css2.1/t0803-c5505-mrgn-03-c-ag.html
css2.1/t0804-c5506-ipadn-t-00-b-a.html
css2.1/t0804-c5506-ipadn-t-01-b-a.html
css2.1/t0804-c5506-ipadn-t-02-b-a.html
css2.1/t0804-c5507-ipadn-r-00-b-ag.html
-css2.1/20110323/background-intrinsic-003.htm
+css2.1/20110323/block-non-replaced-height-007.htm
+css2.1/20110323/block-non-replaced-height-009.htm
+css2.1/20110323/block-non-replaced-height-011.htm
css2.1/t0804-c5507-padn-r-00-c-ag.html
-css2.1/20110323/background-intrinsic-008.htm
-css2.1/20110323/background-intrinsic-009.htm
-css2.1/20110323/block-non-replaced-height-001.htm
+css2.1/20110323/block-non-replaced-height-013.htm
css2.1/t0804-c5507-padn-r-02-f.html
css2.1/t0804-c5507-padn-r-03-f.html
css2.1/t0804-c5508-ipadn-b-00-b-a.html
css2.1/t0804-c5508-ipadn-b-01-f-a.html
css2.1/t0804-c5508-ipadn-b-02-b-a.html
-css2.1/20110323/block-non-replaced-height-003.htm
+css2.1/20110323/block-non-replaced-height-015.htm
css2.1/t0804-c5509-ipadn-l-00-b-ag.html
-css2.1/20110323/block-non-replaced-height-007.htm
-css2.1/20110323/block-non-replaced-height-009.htm
-css2.1/t0804-c5509-padn-l-00-b-ag.html
-css2.1/20110323/block-non-replaced-height-011.htm
-css2.1/t0804-c5509-padn-l-02-f.html
-css2.1/20110323/block-non-replaced-height-013.htm
-css2.1/20110323/block-non-replaced-height-015.htm
-css2.1/t0804-c5510-padn-00-b-ag.html
-css2.1/t0804-c5510-padn-02-f.html
-css2.1/t0805-c5511-brdr-tw-01-b-g.html
-css2.1/t0805-c5511-brdr-tw-02-b.html
-css2.1/t0805-c5511-brdr-tw-03-b.html
css2.1/20110323/block-non-replaced-width-003.htm
css2.1/20110323/block-non-replaced-width-004.htm
css2.1/20110323/block-non-replaced-width-005.htm
@@ -559,10 +557,6 @@
css2.1/20110323/block-non-replaced-width-007.htm
css2.1/20110323/block-non-replaced-width-008.htm
css2.1/20110323/block-replaced-height-001.htm
-css2.1/t0805-c5512-brdr-rw-00-b.html
-css2.1/t0805-c5512-brdr-rw-01-b-g.html
-css2.1/t0805-c5512-brdr-rw-02-b.html
-css2.1/t0805-c5512-brdr-rw-03-b.html
css2.1/20110323/block-replaced-height-003.htm
css2.1/20110323/block-replaced-height-004.htm
css2.1/20110323/block-replaced-height-005.htm
@@ -569,6 +563,17 @@
css2.1/20110323/block-replaced-height-007.htm
css2.1/20110323/block-replaced-width-001.htm
css2.1/20110323/block-replaced-width-006.htm
+css2.1/t0804-c5509-padn-l-00-b-ag.html
+css2.1/t0804-c5509-padn-l-02-f.html
+css2.1/t0804-c5510-padn-00-b-ag.html
+css2.1/t0804-c5510-padn-02-f.html
+css2.1/t0805-c5511-brdr-tw-01-b-g.html
+css2.1/t0805-c5511-brdr-tw-02-b.html
+css2.1/t0805-c5511-brdr-tw-03-b.html
+css2.1/t0805-c5512-brdr-rw-00-b.html
+css2.1/t0805-c5512-brdr-rw-01-b-g.html
+css2.1/t0805-c5512-brdr-rw-02-b.html
+css2.1/t0805-c5512-brdr-rw-03-b.html
css2.1/t0805-c5513-brdr-bw-01-b-g.html
css2.1/t0805-c5513-brdr-bw-02-b.html
css2.1/t0805-c5513-brdr-bw-03-b.html
@@ -597,6 +602,8 @@
css2.1/t1001-abs-pos-cb-02-b.html
css2.1/t1001-abs-pos-cb-03-b.html
css2.1/t1001-abs-pos-cb-04-b.html
+css2.1/t1001-abs-pos-cb-05-b.html
+css2.1/t1001-abs-pos-cb-06-b.html
css2.1/t1001-abs-pos-cb-07-b.html
css2.1/t1001-abs-pos-cb-08-b.html
css2.1/t1001-abs-pos-cb-09-b.html
@@ -643,6 +650,7 @@
css2.1/20110323/dynamic-top-change-001.htm
css2.1/20110323/dynamic-top-change-004.htm
css2.1/t1604-c542-letter-sp-00-b-a.html
+css2.1/20110323/empty-inline-001.htm
css2.1/t1605-c545-txttrans-00-b-ag.html
css2.1/t010403-shand-border-00-c.html
css2.1/t010403-shand-font-00-b.html
@@ -661,13 +669,20 @@
css2.1/t040103-escapes-05-c.html
css2.1/t040103-escapes-06-b.html
css2.1/t040103-escapes-07-b.html
+css2.1/20110323/eof-001.htm
css2.1/t040103-escapes-08-b.html
+css2.1/20110323/eof-002.htm
css2.1/t040103-ident-00-c.html
+css2.1/20110323/eof-003.htm
css2.1/t040103-ident-01-c.html
+css2.1/20110323/eof-004.htm
css2.1/t040103-ident-02-c.html
+css2.1/20110323/eof-005.htm
css2.1/t040103-ident-03-c.html
css2.1/t040103-ident-04-c.html
+css2.1/20110323/eof-006.htm
css2.1/t040103-ident-05-c.html
+css2.1/20110323/eof-007.htm
css2.1/t040103-ident-06-c.html
css2.1/t040103-ident-07-c.html
css2.1/t040103-ident-08-c.html
@@ -689,29 +704,18 @@
css2.1/t040105-import-10-b.html
css2.1/t040109-c17-comments-00-b.html
css2.1/t040109-c17-comments-01-b.html
-css2.1/20110323/empty-inline-001.htm
css2.1/t040302-c61-phys-len-00-b.html
css2.1/t040302-c61-rel-len-00-b-ag.html
css2.1/t040303-c62-percent-00-b-ag.html
css2.1/t040304-c64-uri-00-a-g.html
-css2.1/20110323/eof-001.htm
css2.1/t040306-syntax-01-f.html
-css2.1/20110323/eof-002.htm
css2.1/t040307-syntax-01-b.html
-css2.1/20110323/eof-003.htm
css2.1/t050201-c12-grouping-00-b.html
-css2.1/20110323/eof-004.htm
-css2.1/20110323/eof-005.htm
-css2.1/20110323/eof-006.htm
-css2.1/20110323/eof-007.htm
css2.1/t051103-c21-activ-ln-00-e-i.html
css2.1/t051103-c21-focus-ln-00-e-i.html
css2.1/t051103-c21-hover-ln-00-e-i.html
css2.1/t051103-dom-hover-01-c-io.html
css2.1/t051103-dom-hover-02-c-io.html
-css2.1/t060402-c31-important-00-b.html
-css2.1/t060403-c21-pseu-cls-00-e-i.html
-css2.1/t060403-c21-pseu-id-00-e-i.html
css2.1/20110323/float-non-replaced-height-001.htm
css2.1/20110323/float-non-replaced-width-001.htm
css2.1/20110323/float-non-replaced-width-002.htm
@@ -719,11 +723,13 @@
css2.1/20110323/float-non-replaced-width-004.htm
css2.1/20110323/float-non-replaced-width-005.htm
css2.1/20110323/float-non-replaced-width-006.htm
-css2.1/t090501-c414-flt-00-d.html
-css2.1/t090501-c414-flt-02-d-g.html
+css2.1/t060402-c31-important-00-b.html
+css2.1/t060403-c21-pseu-cls-00-e-i.html
+css2.1/t060403-c21-pseu-id-00-e-i.html
css2.1/20110323/float-non-replaced-width-010.htm
css2.1/20110323/float-non-replaced-width-012.htm
css2.1/20110323/float-replaced-height-001.htm
+css2.1/t090501-c414-flt-00-d.html
css2.1/20110323/float-replaced-height-004.htm
css2.1/20110323/float-replaced-height-005.htm
css2.1/20110323/float-replaced-height-007.htm
@@ -734,6 +740,7 @@
css2.1/20110323/float-replaced-width-005.htm
css2.1/20110323/float-replaced-width-006.htm
css2.1/20110323/float-replaced-width-011.htm
+css2.1/t090501-c414-flt-02-d-g.html
css2.1/20110323/floats-001.html
css2.1/t100303-c412-blockw-00-d-ag.html
css2.1/t100801-c544-valgn-04-d-agi.html