[SCM] WebKit Debian packaging branch, webkit-1.3, updated. upstream/1.3.7-4207-g178b198

hyatt at apple.com hyatt at apple.com
Sun Feb 20 23:56:00 UTC 2011


The following commit has been merged in the webkit-1.3 branch:
commit 61bbedf56ed43eb62ac83796cc5592a708e1e6eb
Author: hyatt at apple.com <hyatt at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Wed Jan 26 23:10:57 2011 +0000

    https://bugs.webkit.org/show_bug.cgi?id=46421, make multi-column layout work with vertical text.
    
    Reviewed by Dan Bernstein.
    
    Added new tests in fast/multicol/vertical-lr and fast/multicol/vertical-rl.
    
    Source/WebCore:
    
    * css/html.css:
    Update p, blockquote and h1-h6 to respect directionality so that column layout tests that use those
    elements work properly.
    
    * rendering/InlineFlowBox.cpp:
    (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
    Fix a flipping bug with the computation of lineTopIncludingMargins where it could be incorrectly shrunk
    in some cases (causing lines to all stack on top of one another).
    
    * rendering/InlineTextBox.h:
    (WebCore::InlineTextBox::calculateBoundaries):
    Fix calculateBoundaries to be physical rather than logical.
    
    * rendering/LayoutState.cpp:
    (WebCore::LayoutState::addForcedColumnBreak):
    * rendering/LayoutState.h:
    Rename childY to childLogicalOffset.
    
    * rendering/RenderBlock.cpp:
    (WebCore::RenderBlock::layoutBlock):
    (WebCore::RenderBlock::addOverflowFromChildren):
    (WebCore::RenderBlock::addOverflowFromFloats):
    (WebCore::RenderBlock::collapseMargins):
    (WebCore::RenderBlock::estimateLogicalTopPosition):
    (WebCore::RenderBlock::layoutBlockChild):
    (WebCore::RenderBlock::markForPaginationRelayoutIfNeeded):
    (WebCore::RenderBlock::paintColumnRules):
    (WebCore::RenderBlock::paintColumnContents):
    (WebCore::RenderBlock::paintFloats):
    (WebCore::RenderBlock::selectionGaps):
    (WebCore::RenderBlock::removeFloatingObjectsBelow):
    (WebCore::RenderBlock::addOverhangingFloats):
    (WebCore::RenderBlock::hitTestFloats):
    (WebCore::RenderBlock::hitTestColumns):
    (WebCore::RenderBlock::calcColumnWidth):
    (WebCore::RenderBlock::desiredColumnWidth):
    (WebCore::RenderBlock::columnRectAt):
    (WebCore::RenderBlock::layoutColumns):
    (WebCore::RenderBlock::adjustPointToColumnContents):
    (WebCore::RenderBlock::adjustRectForColumns):
    (WebCore::RenderBlock::flipForWritingModeIncludingColumns):
    (WebCore::RenderBlock::adjustForColumns):
    (WebCore::RenderBlock::adjustForBorderFit):
    (WebCore::RenderBlock::nextPageLogicalTop):
    (WebCore::RenderBlock::applyBeforeBreak):
    (WebCore::RenderBlock::applyAfterBreak):
    (WebCore::RenderBlock::adjustForUnsplittableChild):
    (WebCore::RenderBlock::adjustLinePositionForPagination):
    * rendering/RenderBlock.h:
    (WebCore::RenderBlock::logicalRightOffsetForContent):
    (WebCore::RenderBlock::logicalLeftOffsetForContent):
    (WebCore::RenderBlock::leftForFloatIncludingMargin):
    (WebCore::RenderBlock::topForFloatIncludingMargin):
    * rendering/RenderBlockLineLayout.cpp:
    (WebCore::RenderBlock::layoutInlineChildren):
    (WebCore::RenderBlock::determineStartPosition):
    Reworking of all the RenderBlock column functions to support flipping and vertical modes.
    
    * rendering/RenderBox.cpp:
    (WebCore::RenderBox::offsetFromContainer):
    (WebCore::RenderBox::flipForWritingModeIncludingColumns):
    Patch offsetFromContainer to be aware of flipped block writing modes when dealing with column layouts.
    
    * rendering/RenderBox.h:
    (WebCore::RenderBox::clientLogicalBottom):
    Fix a bug in clientLogicalBottom where it didn't add in the right border/padding.
    
    * rendering/RenderFlexibleBox.cpp:
    (WebCore::RenderFlexibleBox::layoutBlock):
    Better terminology for pagination.
    
    * rendering/RenderInline.cpp:
    (WebCore::RenderInline::offsetFromContainer):
    (WebCore::RenderInline::mapLocalToContainer):
    * rendering/RenderLayer.cpp:
    (WebCore::RenderLayer::paintChildLayerIntoColumns):
    (WebCore::RenderLayer::hitTestChildLayerColumns):
    (WebCore::RenderLayer::localBoundingBox):
    (WebCore::RenderLayer::boundingBox):
    Patch painting in RenderLayers to be vertical-text-aware.
    
    * rendering/RenderObject.cpp:
    (WebCore::RenderObject::mapLocalToContainer):
    Add code to be flipped block-aware with columns.
    
    * rendering/RenderTable.cpp:
    (WebCore::RenderTable::layout):
    * rendering/RenderTableRow.cpp:
    (WebCore::RenderTableRow::layout):
    * rendering/RenderTableSection.cpp:
    (WebCore::RenderTableSection::layoutRows):
    Fix pagination to use better terminology.
    
    * rendering/RenderText.cpp:
    (WebCore::RenderText::absoluteQuads):
    (WebCore::RenderText::absoluteQuadsForRange):
    Fix a bug where vertical text wasn't taken into account.
    
    LayoutTests:
    
    * fast/multicol/break-properties-expected.txt:
    * fast/multicol/break-properties.html:
    * fast/multicol/float-truncation.html:
    * fast/multicol/vertical-lr: Added.
    * fast/multicol/vertical-lr/border-padding-pagination.html: Added.
    * fast/multicol/vertical-lr/break-properties-expected.txt: Added.
    * fast/multicol/vertical-lr/break-properties.html: Added.
    * fast/multicol/vertical-lr/column-break-with-balancing.html: Added.
    * fast/multicol/vertical-lr/column-count-with-rules.html: Added.
    * fast/multicol/vertical-lr/column-rules.html: Added.
    * fast/multicol/vertical-lr/float-avoidance.html: Added.
    * fast/multicol/vertical-lr/float-multicol.html: Added.
    * fast/multicol/vertical-lr/float-paginate-complex.html: Added.
    * fast/multicol/vertical-lr/float-paginate.html: Added.
    * fast/multicol/vertical-lr/float-truncation-expected.txt: Added.
    * fast/multicol/vertical-lr/float-truncation.html: Added.
    * fast/multicol/vertical-lr/gap-non-negative-expected.txt: Added.
    * fast/multicol/vertical-lr/gap-non-negative.html: Added.
    * fast/multicol/vertical-lr/image-inside-nested-blocks-with-border-expected.txt: Added.
    * fast/multicol/vertical-lr/image-inside-nested-blocks-with-border.html: Added.
    * fast/multicol/vertical-lr/nested-columns.html: Added.
    * fast/multicol/vertical-lr/resources: Added.
    * fast/multicol/vertical-lr/resources/blimp.png: Added.
    * fast/multicol/vertical-lr/unsplittable-inline-block.html: Added.
    * fast/multicol/vertical-rl: Added.
    * fast/multicol/vertical-rl/border-padding-pagination.html: Added.
    * fast/multicol/vertical-rl/break-properties-expected.txt: Added.
    * fast/multicol/vertical-rl/break-properties.html: Added.
    * fast/multicol/vertical-rl/column-break-with-balancing.html: Added.
    * fast/multicol/vertical-rl/column-count-with-rules.html: Added.
    * fast/multicol/vertical-rl/column-rules.html: Added.
    * fast/multicol/vertical-rl/float-avoidance.html: Added.
    * fast/multicol/vertical-rl/float-multicol.html: Added.
    * fast/multicol/vertical-rl/float-paginate-complex.html: Added.
    * fast/multicol/vertical-rl/float-paginate.html: Added.
    * fast/multicol/vertical-rl/float-truncation-expected.txt: Added.
    * fast/multicol/vertical-rl/float-truncation.html: Added.
    * fast/multicol/vertical-rl/gap-non-negative-expected.txt: Added.
    * fast/multicol/vertical-rl/gap-non-negative.html: Added.
    * fast/multicol/vertical-rl/image-inside-nested-blocks-with-border-expected.txt: Added.
    * fast/multicol/vertical-rl/image-inside-nested-blocks-with-border.html: Added.
    * fast/multicol/vertical-rl/nested-columns.html: Added.
    * fast/multicol/vertical-rl/resources: Added.
    * fast/multicol/vertical-rl/resources/blimp.png: Added.
    * fast/multicol/vertical-rl/unsplittable-inline-block.html: Added.
    * platform/mac/fast/multicol/vertical-lr: Added.
    * platform/mac/fast/multicol/vertical-lr/border-padding-pagination-expected.checksum: Added.
    * platform/mac/fast/multicol/vertical-lr/border-padding-pagination-expected.png: Added.
    * platform/mac/fast/multicol/vertical-lr/border-padding-pagination-expected.txt: Added.
    * platform/mac/fast/multicol/vertical-lr/column-break-with-balancing-expected.checksum: Added.
    * platform/mac/fast/multicol/vertical-lr/column-break-with-balancing-expected.png: Added.
    * platform/mac/fast/multicol/vertical-lr/column-break-with-balancing-expected.txt: Added.
    * platform/mac/fast/multicol/vertical-lr/column-count-with-rules-expected.checksum: Added.
    * platform/mac/fast/multicol/vertical-lr/column-count-with-rules-expected.png: Added.
    * platform/mac/fast/multicol/vertical-lr/column-count-with-rules-expected.txt: Added.
    * platform/mac/fast/multicol/vertical-lr/column-rules-expected.checksum: Added.
    * platform/mac/fast/multicol/vertical-lr/column-rules-expected.png: Added.
    * platform/mac/fast/multicol/vertical-lr/column-rules-expected.txt: Added.
    * platform/mac/fast/multicol/vertical-lr/float-avoidance-expected.checksum: Added.
    * platform/mac/fast/multicol/vertical-lr/float-avoidance-expected.png: Added.
    * platform/mac/fast/multicol/vertical-lr/float-avoidance-expected.txt: Added.
    * platform/mac/fast/multicol/vertical-lr/float-multicol-expected.checksum: Added.
    * platform/mac/fast/multicol/vertical-lr/float-multicol-expected.png: Added.
    * platform/mac/fast/multicol/vertical-lr/float-multicol-expected.txt: Added.
    * platform/mac/fast/multicol/vertical-lr/float-paginate-complex-expected.checksum: Added.
    * platform/mac/fast/multicol/vertical-lr/float-paginate-complex-expected.png: Added.
    * platform/mac/fast/multicol/vertical-lr/float-paginate-complex-expected.txt: Added.
    * platform/mac/fast/multicol/vertical-lr/float-paginate-expected.checksum: Added.
    * platform/mac/fast/multicol/vertical-lr/float-paginate-expected.png: Added.
    * platform/mac/fast/multicol/vertical-lr/float-paginate-expected.txt: Added.
    * platform/mac/fast/multicol/vertical-lr/nested-columns-expected.checksum: Added.
    * platform/mac/fast/multicol/vertical-lr/nested-columns-expected.png: Added.
    * platform/mac/fast/multicol/vertical-lr/nested-columns-expected.txt: Added.
    * platform/mac/fast/multicol/vertical-lr/unsplittable-inline-block-expected.checksum: Added.
    * platform/mac/fast/multicol/vertical-lr/unsplittable-inline-block-expected.png: Added.
    * platform/mac/fast/multicol/vertical-lr/unsplittable-inline-block-expected.txt: Added.
    * platform/mac/fast/multicol/vertical-rl: Added.
    * platform/mac/fast/multicol/vertical-rl/border-padding-pagination-expected.checksum: Added.
    * platform/mac/fast/multicol/vertical-rl/border-padding-pagination-expected.png: Added.
    * platform/mac/fast/multicol/vertical-rl/border-padding-pagination-expected.txt: Added.
    * platform/mac/fast/multicol/vertical-rl/column-break-with-balancing-expected.checksum: Added.
    * platform/mac/fast/multicol/vertical-rl/column-break-with-balancing-expected.png: Added.
    * platform/mac/fast/multicol/vertical-rl/column-break-with-balancing-expected.txt: Added.
    * platform/mac/fast/multicol/vertical-rl/column-count-with-rules-expected.checksum: Added.
    * platform/mac/fast/multicol/vertical-rl/column-count-with-rules-expected.png: Added.
    * platform/mac/fast/multicol/vertical-rl/column-count-with-rules-expected.txt: Added.
    * platform/mac/fast/multicol/vertical-rl/column-rules-expected.checksum: Added.
    * platform/mac/fast/multicol/vertical-rl/column-rules-expected.png: Added.
    * platform/mac/fast/multicol/vertical-rl/column-rules-expected.txt: Added.
    * platform/mac/fast/multicol/vertical-rl/float-avoidance-expected.checksum: Added.
    * platform/mac/fast/multicol/vertical-rl/float-avoidance-expected.png: Added.
    * platform/mac/fast/multicol/vertical-rl/float-avoidance-expected.txt: Added.
    * platform/mac/fast/multicol/vertical-rl/float-multicol-expected.checksum: Added.
    * platform/mac/fast/multicol/vertical-rl/float-multicol-expected.png: Added.
    * platform/mac/fast/multicol/vertical-rl/float-multicol-expected.txt: Added.
    * platform/mac/fast/multicol/vertical-rl/float-paginate-complex-expected.checksum: Added.
    * platform/mac/fast/multicol/vertical-rl/float-paginate-complex-expected.png: Added.
    * platform/mac/fast/multicol/vertical-rl/float-paginate-complex-expected.txt: Added.
    * platform/mac/fast/multicol/vertical-rl/float-paginate-expected.checksum: Added.
    * platform/mac/fast/multicol/vertical-rl/float-paginate-expected.png: Added.
    * platform/mac/fast/multicol/vertical-rl/float-paginate-expected.txt: Added.
    * platform/mac/fast/multicol/vertical-rl/nested-columns-expected.checksum: Added.
    * platform/mac/fast/multicol/vertical-rl/nested-columns-expected.png: Added.
    * platform/mac/fast/multicol/vertical-rl/nested-columns-expected.txt: Added.
    * platform/mac/fast/multicol/vertical-rl/unsplittable-inline-block-expected.checksum: Added.
    * platform/mac/fast/multicol/vertical-rl/unsplittable-inline-block-expected.png: Added.
    * platform/mac/fast/multicol/vertical-rl/unsplittable-inline-block-expected.txt: Added.
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@76726 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 5056bae..7aacfde 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,119 @@
+2011-01-26  Dave Hyatt  <hyatt at apple.com>
+
+        Reviewed by Dan Bernstein.
+
+        https://bugs.webkit.org/show_bug.cgi?id=46421, make multi-column layout work with vertical text.
+
+        Added new tests in fast/multicol/vertical-lr and fast/multicol/vertical-rl.
+
+        * fast/multicol/break-properties-expected.txt:
+        * fast/multicol/break-properties.html:
+        * fast/multicol/float-truncation.html:
+        * fast/multicol/vertical-lr: Added.
+        * fast/multicol/vertical-lr/border-padding-pagination.html: Added.
+        * fast/multicol/vertical-lr/break-properties-expected.txt: Added.
+        * fast/multicol/vertical-lr/break-properties.html: Added.
+        * fast/multicol/vertical-lr/column-break-with-balancing.html: Added.
+        * fast/multicol/vertical-lr/column-count-with-rules.html: Added.
+        * fast/multicol/vertical-lr/column-rules.html: Added.
+        * fast/multicol/vertical-lr/float-avoidance.html: Added.
+        * fast/multicol/vertical-lr/float-multicol.html: Added.
+        * fast/multicol/vertical-lr/float-paginate-complex.html: Added.
+        * fast/multicol/vertical-lr/float-paginate.html: Added.
+        * fast/multicol/vertical-lr/float-truncation-expected.txt: Added.
+        * fast/multicol/vertical-lr/float-truncation.html: Added.
+        * fast/multicol/vertical-lr/gap-non-negative-expected.txt: Added.
+        * fast/multicol/vertical-lr/gap-non-negative.html: Added.
+        * fast/multicol/vertical-lr/image-inside-nested-blocks-with-border-expected.txt: Added.
+        * fast/multicol/vertical-lr/image-inside-nested-blocks-with-border.html: Added.
+        * fast/multicol/vertical-lr/nested-columns.html: Added.
+        * fast/multicol/vertical-lr/resources: Added.
+        * fast/multicol/vertical-lr/resources/blimp.png: Added.
+        * fast/multicol/vertical-lr/unsplittable-inline-block.html: Added.
+        * fast/multicol/vertical-rl: Added.
+        * fast/multicol/vertical-rl/border-padding-pagination.html: Added.
+        * fast/multicol/vertical-rl/break-properties-expected.txt: Added.
+        * fast/multicol/vertical-rl/break-properties.html: Added.
+        * fast/multicol/vertical-rl/column-break-with-balancing.html: Added.
+        * fast/multicol/vertical-rl/column-count-with-rules.html: Added.
+        * fast/multicol/vertical-rl/column-rules.html: Added.
+        * fast/multicol/vertical-rl/float-avoidance.html: Added.
+        * fast/multicol/vertical-rl/float-multicol.html: Added.
+        * fast/multicol/vertical-rl/float-paginate-complex.html: Added.
+        * fast/multicol/vertical-rl/float-paginate.html: Added.
+        * fast/multicol/vertical-rl/float-truncation-expected.txt: Added.
+        * fast/multicol/vertical-rl/float-truncation.html: Added.
+        * fast/multicol/vertical-rl/gap-non-negative-expected.txt: Added.
+        * fast/multicol/vertical-rl/gap-non-negative.html: Added.
+        * fast/multicol/vertical-rl/image-inside-nested-blocks-with-border-expected.txt: Added.
+        * fast/multicol/vertical-rl/image-inside-nested-blocks-with-border.html: Added.
+        * fast/multicol/vertical-rl/nested-columns.html: Added.
+        * fast/multicol/vertical-rl/resources: Added.
+        * fast/multicol/vertical-rl/resources/blimp.png: Added.
+        * fast/multicol/vertical-rl/unsplittable-inline-block.html: Added.
+        * platform/mac/fast/multicol/vertical-lr: Added.
+        * platform/mac/fast/multicol/vertical-lr/border-padding-pagination-expected.checksum: Added.
+        * platform/mac/fast/multicol/vertical-lr/border-padding-pagination-expected.png: Added.
+        * platform/mac/fast/multicol/vertical-lr/border-padding-pagination-expected.txt: Added.
+        * platform/mac/fast/multicol/vertical-lr/column-break-with-balancing-expected.checksum: Added.
+        * platform/mac/fast/multicol/vertical-lr/column-break-with-balancing-expected.png: Added.
+        * platform/mac/fast/multicol/vertical-lr/column-break-with-balancing-expected.txt: Added.
+        * platform/mac/fast/multicol/vertical-lr/column-count-with-rules-expected.checksum: Added.
+        * platform/mac/fast/multicol/vertical-lr/column-count-with-rules-expected.png: Added.
+        * platform/mac/fast/multicol/vertical-lr/column-count-with-rules-expected.txt: Added.
+        * platform/mac/fast/multicol/vertical-lr/column-rules-expected.checksum: Added.
+        * platform/mac/fast/multicol/vertical-lr/column-rules-expected.png: Added.
+        * platform/mac/fast/multicol/vertical-lr/column-rules-expected.txt: Added.
+        * platform/mac/fast/multicol/vertical-lr/float-avoidance-expected.checksum: Added.
+        * platform/mac/fast/multicol/vertical-lr/float-avoidance-expected.png: Added.
+        * platform/mac/fast/multicol/vertical-lr/float-avoidance-expected.txt: Added.
+        * platform/mac/fast/multicol/vertical-lr/float-multicol-expected.checksum: Added.
+        * platform/mac/fast/multicol/vertical-lr/float-multicol-expected.png: Added.
+        * platform/mac/fast/multicol/vertical-lr/float-multicol-expected.txt: Added.
+        * platform/mac/fast/multicol/vertical-lr/float-paginate-complex-expected.checksum: Added.
+        * platform/mac/fast/multicol/vertical-lr/float-paginate-complex-expected.png: Added.
+        * platform/mac/fast/multicol/vertical-lr/float-paginate-complex-expected.txt: Added.
+        * platform/mac/fast/multicol/vertical-lr/float-paginate-expected.checksum: Added.
+        * platform/mac/fast/multicol/vertical-lr/float-paginate-expected.png: Added.
+        * platform/mac/fast/multicol/vertical-lr/float-paginate-expected.txt: Added.
+        * platform/mac/fast/multicol/vertical-lr/nested-columns-expected.checksum: Added.
+        * platform/mac/fast/multicol/vertical-lr/nested-columns-expected.png: Added.
+        * platform/mac/fast/multicol/vertical-lr/nested-columns-expected.txt: Added.
+        * platform/mac/fast/multicol/vertical-lr/unsplittable-inline-block-expected.checksum: Added.
+        * platform/mac/fast/multicol/vertical-lr/unsplittable-inline-block-expected.png: Added.
+        * platform/mac/fast/multicol/vertical-lr/unsplittable-inline-block-expected.txt: Added.
+        * platform/mac/fast/multicol/vertical-rl: Added.
+        * platform/mac/fast/multicol/vertical-rl/border-padding-pagination-expected.checksum: Added.
+        * platform/mac/fast/multicol/vertical-rl/border-padding-pagination-expected.png: Added.
+        * platform/mac/fast/multicol/vertical-rl/border-padding-pagination-expected.txt: Added.
+        * platform/mac/fast/multicol/vertical-rl/column-break-with-balancing-expected.checksum: Added.
+        * platform/mac/fast/multicol/vertical-rl/column-break-with-balancing-expected.png: Added.
+        * platform/mac/fast/multicol/vertical-rl/column-break-with-balancing-expected.txt: Added.
+        * platform/mac/fast/multicol/vertical-rl/column-count-with-rules-expected.checksum: Added.
+        * platform/mac/fast/multicol/vertical-rl/column-count-with-rules-expected.png: Added.
+        * platform/mac/fast/multicol/vertical-rl/column-count-with-rules-expected.txt: Added.
+        * platform/mac/fast/multicol/vertical-rl/column-rules-expected.checksum: Added.
+        * platform/mac/fast/multicol/vertical-rl/column-rules-expected.png: Added.
+        * platform/mac/fast/multicol/vertical-rl/column-rules-expected.txt: Added.
+        * platform/mac/fast/multicol/vertical-rl/float-avoidance-expected.checksum: Added.
+        * platform/mac/fast/multicol/vertical-rl/float-avoidance-expected.png: Added.
+        * platform/mac/fast/multicol/vertical-rl/float-avoidance-expected.txt: Added.
+        * platform/mac/fast/multicol/vertical-rl/float-multicol-expected.checksum: Added.
+        * platform/mac/fast/multicol/vertical-rl/float-multicol-expected.png: Added.
+        * platform/mac/fast/multicol/vertical-rl/float-multicol-expected.txt: Added.
+        * platform/mac/fast/multicol/vertical-rl/float-paginate-complex-expected.checksum: Added.
+        * platform/mac/fast/multicol/vertical-rl/float-paginate-complex-expected.png: Added.
+        * platform/mac/fast/multicol/vertical-rl/float-paginate-complex-expected.txt: Added.
+        * platform/mac/fast/multicol/vertical-rl/float-paginate-expected.checksum: Added.
+        * platform/mac/fast/multicol/vertical-rl/float-paginate-expected.png: Added.
+        * platform/mac/fast/multicol/vertical-rl/float-paginate-expected.txt: Added.
+        * platform/mac/fast/multicol/vertical-rl/nested-columns-expected.checksum: Added.
+        * platform/mac/fast/multicol/vertical-rl/nested-columns-expected.png: Added.
+        * platform/mac/fast/multicol/vertical-rl/nested-columns-expected.txt: Added.
+        * platform/mac/fast/multicol/vertical-rl/unsplittable-inline-block-expected.checksum: Added.
+        * platform/mac/fast/multicol/vertical-rl/unsplittable-inline-block-expected.png: Added.
+        * platform/mac/fast/multicol/vertical-rl/unsplittable-inline-block-expected.txt: Added.
+
 2011-01-26  Tony Chang  <tony at chromium.org>
 
         Reviewed by Ryosuke Niwa.
diff --git a/LayoutTests/fast/multicol/break-properties-expected.txt b/LayoutTests/fast/multicol/break-properties-expected.txt
index 92f4d43..9f5d55a 100644
--- a/LayoutTests/fast/multicol/break-properties-expected.txt
+++ b/LayoutTests/fast/multicol/break-properties-expected.txt
@@ -1,4 +1,3 @@
 PASS: 'break-before' is at (218, 8)
 PASS: 'after-break' is at (428, 8)
-FAIL: 'no-break' is at (428, 68) instead of (533 ,8)
 
diff --git a/LayoutTests/fast/multicol/break-properties.html b/LayoutTests/fast/multicol/break-properties.html
index aa9cf3a..e2428f7 100644
--- a/LayoutTests/fast/multicol/break-properties.html
+++ b/LayoutTests/fast/multicol/break-properties.html
@@ -32,5 +32,4 @@
 
     testBoxPosition("break-before", 218, 8);
     testBoxPosition("after-break", 428, 8);
-    testBoxPosition("no-break", 533, 8);
 </script>
diff --git a/LayoutTests/fast/multicol/float-truncation.html b/LayoutTests/fast/multicol/float-truncation.html
index c75a7b7..93d36fa 100644
--- a/LayoutTests/fast/multicol/float-truncation.html
+++ b/LayoutTests/fast/multicol/float-truncation.html
@@ -1,3 +1,5 @@
+<html>
+<head>
 <style>
     div.columns {
         width: 200px;
@@ -17,6 +19,8 @@
         color: silver;
     }
 </style>
+</head>
+<body>
 <div id="tests">
     <div class="columns" style="height: 80px;">
         one line two lines three lines
diff --git a/LayoutTests/fast/multicol/vertical-lr/border-padding-pagination.html b/LayoutTests/fast/multicol/vertical-lr/border-padding-pagination.html
new file mode 100644
index 0000000..6b02a6d
--- /dev/null
+++ b/LayoutTests/fast/multicol/vertical-lr/border-padding-pagination.html
@@ -0,0 +1,9 @@
+<html>
+<body style="-webkit-writing-mode:vertical-lr">
+<div style="-webkit-column-count:2;-moz-column-count:2; border:2px solid maroon">
+<div style="width:110px"></div>
+<div style="background-color:lime; border:2px solid black; height:375px;">
+<div style="margin: 10px 0; background-color:green; border: 2px solid blue">
+<span style="font-size:64px">In 2nd column</span>
+</div>
+</div>
diff --git a/LayoutTests/fast/multicol/vertical-lr/break-properties-expected.txt b/LayoutTests/fast/multicol/vertical-lr/break-properties-expected.txt
new file mode 100644
index 0000000..720f30d
--- /dev/null
+++ b/LayoutTests/fast/multicol/vertical-lr/break-properties-expected.txt
@@ -0,0 +1,3 @@
+PASS: 'break-before' is at (8, 218)
+PASS: 'after-break' is at (8, 428)
+
diff --git a/LayoutTests/fast/multicol/vertical-lr/break-properties.html b/LayoutTests/fast/multicol/vertical-lr/break-properties.html
new file mode 100644
index 0000000..d33ccc9
--- /dev/null
+++ b/LayoutTests/fast/multicol/vertical-lr/break-properties.html
@@ -0,0 +1,36 @@
+<style>
+    div.box { -webkit-box-sizing: border; border: solid blue; }
+    div.shorter { width: 54px; }
+    div.taller { width: 72px; }
+</style>
+<body style="-webkit-writing-mode:vertical-lr">
+<div style="width: 100px; height: 630px; -webkit-column-gap: 5px; -webkit-columns: 6;">
+    <div class="taller box"></div>
+    <div class="taller box"></div>
+    <div id="break-before" class="shorter box" style="-webkit-column-break-before: always;"></div>
+    <div class="shorter box" style="-webkit-column-break-after: always;"></div>
+    <div id="after-break" class="shorter box"></div>
+    <div id="no-break" class="shorter box" style="-webkit-column-break-inside: avoid;"></div>
+</div>
+<pre id="console"></pre>
+<script>
+    if (window.layoutTestController)
+        layoutTestController.dumpAsText();
+
+    function log(message)
+    {
+        document.getElementById("console").appendChild(document.createTextNode(message + "\n"));
+    }
+
+    function testBoxPosition(id, expectedLeft, expectedTop)
+    {
+        var rect = document.getElementById(id).getBoundingClientRect();
+        if (rect.left === expectedLeft && rect.top === expectedTop)
+            log("PASS: '" + id + "' is at (" + expectedLeft + ", " + expectedTop + ")");
+        else
+            log("FAIL: '" + id + "' is at (" + rect.left + ", " + rect.top + ") instead of (" + expectedLeft + " ," + expectedTop + ")");
+    }
+
+    testBoxPosition("break-before", 8, 218);
+    testBoxPosition("after-break", 8, 428);
+</script>
diff --git a/LayoutTests/fast/multicol/vertical-lr/column-break-with-balancing.html b/LayoutTests/fast/multicol/vertical-lr/column-break-with-balancing.html
new file mode 100644
index 0000000..1e4e259
--- /dev/null
+++ b/LayoutTests/fast/multicol/vertical-lr/column-break-with-balancing.html
@@ -0,0 +1,66 @@
+<html style="-webkit-writing-mode:vertical-lr">
+<div style="-webkit-column-count:2; border:5px solid blue">
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+
+<div style="-webkit-column-break-before: always">
+This text should be in the second column.<br>
+This text should be in the second column.<br>
+This text should be in the second column.<br>
+This text should be in the second column.<br>
+</div>
+</div>
+
+<div style="-webkit-margin-before:1em; -webkit-column-count:2; border:5px solid blue">
+
+This text should be in the first column.<br>
+This text should be in the first column.<br>
+This text should be in the first column.<br>
+This text should be in the first column.<br>
+
+<div style="-webkit-column-break-before: always">
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+</div>
diff --git a/LayoutTests/fast/multicol/vertical-lr/column-count-with-rules.html b/LayoutTests/fast/multicol/vertical-lr/column-count-with-rules.html
new file mode 100644
index 0000000..cb73f61
--- /dev/null
+++ b/LayoutTests/fast/multicol/vertical-lr/column-count-with-rules.html
@@ -0,0 +1,32 @@
+<body style="-webkit-writing-mode: vertical-lr">
+<p style="-webkit-column-count:3;-webkit-column-rule:3px solid black; width:100px;border:10px solid maroon; padding:20px;">
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+</p>
+
+<p style="-webkit-column-count:3;-webkit-column-rule:3px solid black; width:100px;border:10px solid maroon; padding:20px; direction:rtl">
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+</p>
diff --git a/LayoutTests/fast/multicol/vertical-lr/column-rules.html b/LayoutTests/fast/multicol/vertical-lr/column-rules.html
new file mode 100644
index 0000000..deb24ff
--- /dev/null
+++ b/LayoutTests/fast/multicol/vertical-lr/column-rules.html
@@ -0,0 +1,8 @@
+<body style="-webkit-writing-mode: vertical-lr">
+<div style="-webkit-columns: 3; -webkit-column-rule: 4px solid maroon; padding: 10px 0; border:5px solid black">
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nulla varius enim ac mi. Curabitur sollicitudin felis quis lectus. Quisque adipiscing rhoncus sem. Proin nulla purus, vulputate vel, varius ut, euismod et, nisi. Sed vitae felis vel orci sagittis aliquam. Cras convallis adipiscing sem. Nam nonummy enim. Nullam bibendum lobortis neque. Vestibulum velit orci, tempus euismod, pretium quis, interdum vitae, nulla. Phasellus eget ante et tortor condimentum vestibulum.
+Suspendisse hendrerit quam nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Proin bibendum justo ac enim. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Sed leo nulla, rutrum eu, dictum ut, posuere vel, arcu. Nam libero. Morbi orci. Maecenas pellentesque. Curabitur erat erat, ullamcorper at, gravida vitae, iaculis vitae, elit. Nullam quam. Quisque orci lectus, ullamcorper eu, imperdiet sed, accumsan et, ligula. Duis diam nisl, sagittis a, blandit volutpat, interdum sed, velit. Vestibulum quam.
+Nulla a purus. Phasellus semper semper lectus. Nulla porttitor, dolor dictum scelerisque luctus, velit ipsum lobortis mauris, ac pretium enim nunc vel risus. Proin gravida mi ut sem cursus mattis. Fusce laoreet, nisi quis luctus volutpat, arcu pede tincidunt enim, nec malesuada urna nisl eu enim. Vivamus varius augue ac purus. Vestibulum vestibulum. Phasellus et est vitae ante accumsan rhoncus. Morbi convallis, arcu at hendrerit gravida, sem diam dignissim risus, sed aliquet erat mi ut mi. Nunc cursus lacinia elit.
+Nunc nisi. Quisque at erat. Vestibulum dictum quam vitae nibh. Nunc vitae ante non odio interdum blandit. Curabitur leo quam, fermentum sed, feugiat in, ullamcorper id, nibh. Suspendisse ac turpis. In iaculis sollicitudin dui. Aenean vitae lectus vitae nulla pellentesque sollicitudin. Nunc gravida pharetra lectus. Etiam lacus ligula, placerat ut, dictum vitae, tempus vel, risus. Cras rhoncus. Praesent varius ultricies orci. Donec mattis, neque ut ornare fringilla, ante urna placerat eros, vel commodo nisi tortor ut mauris. Morbi magna dui, sagittis sit amet, tincidunt et, elementum eget, quam. Fusce molestie nisl vitae nisi.
+Vestibulum a sapien. Phasellus ante lacus, vehicula non, cursus a, tempor ut, magna. Suspendisse potenti. Fusce aliquet, odio viverra vulputate dictum, enim odio luctus purus, ut scelerisque quam nulla non est. Donec eros lacus, egestas vitae, lacinia quis, tempor quis, pede. Morbi orci erat, iaculis id, ornare ac, elementum at, sem. Nunc ornare sodales nisi. Morbi interdum commodo nisl. Fusce eget eros non nisi ornare facilisis. Sed placerat, est non posuere posuere, purus sem dignissim libero, a viverra tellus dolor vel lorem. Cras augue. Etiam ultricies consequat odio. Mauris ac libero. Etiam posuere, libero vitae euismod gravida, urna elit imperdiet magna, vel cursus elit felis non mauris. Donec orci erat, porta id, dignissim ut, posuere dictum, leo. Suspendisse scelerisque egestas nulla.
+</div>
diff --git a/LayoutTests/fast/multicol/vertical-lr/float-avoidance.html b/LayoutTests/fast/multicol/vertical-lr/float-avoidance.html
new file mode 100644
index 0000000..62f3e27
--- /dev/null
+++ b/LayoutTests/fast/multicol/vertical-lr/float-avoidance.html
@@ -0,0 +1,8 @@
+<body style="-webkit-writing-mode:vertical-lr">
+ <div style="float:left; width:100px; height:200px; background-color:lime"></div>
+   <div style="height:415px; -moz-column-width:200px; -webkit-column-width:200px; 
+ text-align:justify; border:10px solid black">
+<p>This technology preview of our award winning next generation browser
+    is a sign of things to come from Mozilla. Powerful yet easy to use. This
+     maintenance release provides a few updates based on user feedback - including
+     changes to the Extension System and icon improvements.
\ No newline at end of file
diff --git a/LayoutTests/fast/multicol/vertical-lr/float-multicol.html b/LayoutTests/fast/multicol/vertical-lr/float-multicol.html
new file mode 100644
index 0000000..1d15dc5
--- /dev/null
+++ b/LayoutTests/fast/multicol/vertical-lr/float-multicol.html
@@ -0,0 +1,89 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
+<html style="-webkit-writing-mode:vertical-lr">
+  <body style="-moz-column-width:24em; -moz-column-gap:2em; -webkit-column-width:24em; -webkit-column-gap:2em; height:1500px">
+    <div style="background:cyan;">
+      <div style="float:left; height:50%; background:yellow; margin:0.3em;">
+        <img src="resources/blimp.png" style="float:left;">
+        You've already downloaded a build. All you have to do is use it as your everyday browser and mail/news reader. If you downloaded a build with Talkback, please turn it on when it asks.
+    <div style="float:right; background:red;">
+      <p>Hola hola 1
+      <p>Hola hola 2
+      <p>Hola hola 3
+      <p>Hola hola 4
+      <p>Hola hola 5
+      <p>Hola hola 6
+      <p>Hola hola 7
+      <p>Hola hola 8
+      <p>Hola hola 9
+      <p>Hola hola 10
+      <p>Hola hola 11
+    </div>
+Talkback reports give us really valuable data on which crashes are the most serious, and how often people are encountering them.
+      </div>
+      <div style="float:right; background:magenta;">
+        <p>Hello Kitty 1
+        <p>Hello Kitty 2
+        <p>Hello Kitty 3
+        <p>Hello Kitty 4
+        <p>Hello Kitty 5
+        <p>Hello Kitty 6
+        <p>Hello Kitty 7
+        <p>Hello Kitty 8
+        <p>Hello Kitty 9
+      </div>
+      <h2>What Needs To Be Done?</h2>
+    </div>
+    <div style="float:left; background:gray;">
+      <p>Hola hola 1
+      <p>Hola hola 2
+      <p>Hola hola 3
+      <p>Hola hola 4
+      <p>Hola hola 5
+      <p>Hola hola 6
+      <p>Hola hola 7
+      <p>Hola hola 8
+      <p>Hola hola 9
+      <p>Hola hola 10
+      <p>Hola hola 11
+    </div>
+
+    <dl class="tasklist">
+      <dt>Report Bugs</dt>
+      <dd>
+	<p>You've already downloaded a build. All you have to do is use it   as
+	  your everyday browser and mail/news reader. If you downloaded a build with
+	  Talkback, <em>please   turn it on</em> when it asks. Talkback reports give
+	  us really valuable data   on which crashes are the most serious, and how
+	  often people are encountering   them. And all you have to do is click "OK".
+	  If you find something you think is a bug, check to see if it's not already 
+<a href="http://bugzilla.mozilla.org/duplicates.cgi">known about</a>, and then please 
+	  follow the <a href="http://bugzilla.mozilla.org/enter_bug.cgi?format=guided">bug submission procedure</a>.
+	  
+	</p>
+      </dd>
+    <div style="float:left; background:green;">
+      <p>Hola hola 1
+      <p>Hola hola 2
+      <p>Hola hola 3
+      <p>Hola hola 4
+      <p>Hola hola 5
+      <p>Hola hola 6
+      <p>Hola hola 7
+      <p>Hola hola 8
+      <p>Hola hola 9
+      <p>Hola hola 10
+      <p>Hola hola 11
+    </div>
+      <dt>Quality Assurance</dt>
+      <dd>
+        <p><a href="../quality/">Mozilla QA</a>
+	  has a <a href="../quality/help/">page</a>
+	  dedicated to ways to get involved with helping. This doesn't involve
+	  knowing how to code, although a little knowledge of HTML is helpful. Being 
+	  involved with QA is   good for people wanting to get more familiar with 
+	  Mozilla, and there's a strong community. A particularly good way to get involved 
+	  is to join the <a href="../newlayout/bugathon.html">BugAThon</a>.</p>
+      </dd>
+    </dl>
+  </body>
+</html>
diff --git a/LayoutTests/fast/multicol/vertical-lr/float-paginate-complex.html b/LayoutTests/fast/multicol/vertical-lr/float-paginate-complex.html
new file mode 100644
index 0000000..5dd5033
--- /dev/null
+++ b/LayoutTests/fast/multicol/vertical-lr/float-paginate-complex.html
@@ -0,0 +1,49 @@
+<body style="-webkit-writing-mode:vertical-lr; height:1200px">
+<div style="-webkit-column-width:300px;-moz-column-width:300px; border:2px solid black; width:400px">
+This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>
+<p><span style="float:left;font-size:128px;">T</span>
+his is some text.<br>
+This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br></p>
+</div>
+
+<div style="-webkit-margin-before:1em; -webkit-column-width:300px;-moz-column-width:300px; border:2px solid black; width:400px">
+This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>
+<p><img style="float:left;width:100px;height:100px;background-color:green"><img style="float:right;width:200px;height:100px;background-color:green">
+This is some text<br>
+This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br></p>
+</div>
+
+<div style="-webkit-margin-before:1em; -webkit-column-width:300px;-moz-column-width:300px; border:2px solid black; width:400px">
+<img style="float:left;background-color:green; height:300px;width:390px">
+Longer text designed to test float and wrapping behavior. Longer text designed to test float and wrapping behavior.
+Longer text designed to test float and wrapping behavior.
+Longer text designed to test float and wrapping behavior.
+Longer text designed to test float and wrapping behavior.
+</div>
+
+<div style="-webkit-margin-before:1em; -webkit-column-width:300px;-moz-column-width:300px; border:2px solid black; width:400px">
+<img style="float:left;background-color:blue; height:100%;width:380px">
+<span style="font-size:24px"><img style="float:left;background-color:green;width:20px;height:100px">
+
+Longer text designed <img style="float:right;background-color:green;width:20px;height:100px">to test float and wrapping behavior. Longer text designed to test float and wrapping behavior.
+Longer text designed to test float and wrapping behavior.
+Longer text designed to test float and wrapping behavior.
+Longer text designed to test float and wrapping behavior.
+</span>
+</div>
diff --git a/LayoutTests/fast/multicol/vertical-lr/float-paginate.html b/LayoutTests/fast/multicol/vertical-lr/float-paginate.html
new file mode 100644
index 0000000..24aeda4
--- /dev/null
+++ b/LayoutTests/fast/multicol/vertical-lr/float-paginate.html
@@ -0,0 +1,13 @@
+<body style="-webkit-writing-mode:vertical-lr; height:1200px">
+<div style="-webkit-column-width:300px;-moz-column-width:300px; border:2px solid black; width:400px">
+This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>
+<img style="float:left;width:300px;height:250px;background-color:green;display:block">
+This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>
diff --git a/LayoutTests/fast/multicol/float-truncation-expected.txt b/LayoutTests/fast/multicol/vertical-lr/float-truncation-expected.txt
similarity index 100%
copy from LayoutTests/fast/multicol/float-truncation-expected.txt
copy to LayoutTests/fast/multicol/vertical-lr/float-truncation-expected.txt
diff --git a/LayoutTests/fast/multicol/vertical-lr/float-truncation.html b/LayoutTests/fast/multicol/vertical-lr/float-truncation.html
new file mode 100644
index 0000000..0633ac8
--- /dev/null
+++ b/LayoutTests/fast/multicol/vertical-lr/float-truncation.html
@@ -0,0 +1,103 @@
+<html style="-webkit-writing-mode:vertical-lr">
+<style>
+    div.columns {
+        height: 200px;
+        -webkit-columns: 2;
+        -webkit-column-gap: 0;
+        outline: 1px solid blue;
+        font-family: ahem;
+        font-size: 10px;
+        margin: 5px;
+        overflow: hidden;
+    }
+
+    div.float {
+        float: left;
+        height: 50px;
+        -webkit-margin-before: 5px;
+        color: silver;
+    }
+</style>
+<div id="tests">
+    <div class="columns" style="width: 80px;">
+        one line two lines three lines
+        <div class="float" id="f1">
+            three line float
+        </div>
+        text runs here next to the float
+    </div>
+    <!-- In this case, the float fits, but then the main content causes the break
+         to occur earlier and the float gets split. -->
+    <div class="columns" style="width: 75px;">
+        one line two lines three lines
+        <div class="float" id="f2">
+            three line float
+        </div>
+        text runs here next to the float
+    </div>
+    <!-- In this case, the float paginates after its second line. -->
+    <div class="columns" style="width: 70px;">
+        one line two lines three lines
+        <div class="float" id="f3">
+            three line float
+        </div>
+        text runs here next to the float
+    </div>
+    <!-- In this case, the float paginates after its first line. -->
+    <div class="columns" style="width: 70px;">
+        one line two lines three lines and some more
+        <div class="float" id="f4">
+            three line float
+        </div>
+        text runs here next to the float
+    </div>
+    <!-- In this case, the float paginates after its third line. -->
+    <div class="columns" style="width: 45px;">
+        one line
+        <div class="float" id="f5">
+            and one five line float
+        </div>
+        text runs here next to the float
+    </div>
+</div>
+<pre id="result"></pre>
+<script>
+    function floatOffset(float)
+    {
+        var range = document.createRange();
+        range.setStart(float, 0);
+        range.setEnd(float, 0);
+        range.expand("word");
+        var rect = range.getBoundingClientRect();
+        var parentRect = float.parentNode.getBoundingClientRect();
+        return { width: rect.left - parentRect.left, height: rect.top - parentRect.top  };
+    }
+
+    var tests = [
+        ["f1", 45, 0],
+        ["f2", 45, 0],
+        ["f3", 45, 0],
+        ["f4", 55, 0],
+        ["f5", 15, 0]
+    ];
+
+    var test;
+    var failures = 0;
+    while (test = tests.shift()) {
+        var float = document.getElementById(test[0]);
+        var result = floatOffset(float);
+        var passed = result.width === test[1] && result.height === test[2]
+        float.style.color = passed ? "green" : "red";
+        if (!passed) {
+            failures++
+            alert(result.width + " " + result.height)
+        }
+    }
+
+    if (window.layoutTestController) {
+        layoutTestController.dumpAsText();
+        document.getElementById("tests").style.display = "none";
+    }
+
+    document.getElementById("result").innerText = failures ? "FAIL: " + failures + " cases failed" : "PASS";
+</script>
diff --git a/LayoutTests/fast/multicol/gap-non-negative-expected.txt b/LayoutTests/fast/multicol/vertical-lr/gap-non-negative-expected.txt
similarity index 100%
copy from LayoutTests/fast/multicol/gap-non-negative-expected.txt
copy to LayoutTests/fast/multicol/vertical-lr/gap-non-negative-expected.txt
diff --git a/LayoutTests/fast/multicol/vertical-lr/gap-non-negative.html b/LayoutTests/fast/multicol/vertical-lr/gap-non-negative.html
new file mode 100644
index 0000000..b0d866c
--- /dev/null
+++ b/LayoutTests/fast/multicol/vertical-lr/gap-non-negative.html
@@ -0,0 +1,17 @@
+<body style="-webkit-writing-mode:vertical-lr">
+<p>
+    Test for <i><a href="rdar://problem/5962118">rdar://problem/5962118</a> Crash in RenderBlock::calcColumnWidth()</i>.
+</p>
+<p>
+    This tests that the <tt>column-gap</tt> property does not allow negative values.
+</p>
+<p id = "result"></p>
+<div id="target" style="-webkit-column-count: 4; -webkit-column-gap: -10px;"></div>
+<script>
+    if (window.layoutTestController)
+        layoutTestController.dumpAsText();
+
+    var style = getComputedStyle(document.getElementById("target"));
+    var columnGap = style.getPropertyValue("-webkit-column-gap");
+    document.getElementById("result").innerText = (columnGap == "0" || columnGap == "normal") ? "PASS" : "FAIL: column-gap is " + columnGap;
+</script>
diff --git a/LayoutTests/fast/multicol/image-inside-nested-blocks-with-border-expected.txt b/LayoutTests/fast/multicol/vertical-lr/image-inside-nested-blocks-with-border-expected.txt
similarity index 100%
copy from LayoutTests/fast/multicol/image-inside-nested-blocks-with-border-expected.txt
copy to LayoutTests/fast/multicol/vertical-lr/image-inside-nested-blocks-with-border-expected.txt
diff --git a/LayoutTests/fast/multicol/vertical-lr/image-inside-nested-blocks-with-border.html b/LayoutTests/fast/multicol/vertical-lr/image-inside-nested-blocks-with-border.html
new file mode 100644
index 0000000..afa20ab
--- /dev/null
+++ b/LayoutTests/fast/multicol/vertical-lr/image-inside-nested-blocks-with-border.html
@@ -0,0 +1,44 @@
+<html>
+<body style="-webkit-writing-mode: vertical-lr">
+<div id="tests" style="-webkit-column-count:2; width:300px; height:600px; -webkit-column-gap:0">
+<div style="width:280px"></div>
+<div id="f1" style="border:5px solid black; float:left">
+<img style="display:block;height:140px;width:80px;">
+</div>
+</div>
+<div id="result"></div>
+<script>
+    function floatOffset(float)
+    {
+        var parentRect = document.getElementById('tests').getBoundingClientRect();
+        var rect = float.getBoundingClientRect();
+        return { width: rect.left - parentRect.left, height: rect.top - parentRect.top  };
+    }
+
+    var tests = [
+        ["f1", 0, 300]
+    ];
+
+    var test;
+    var failures = 0;
+    while (test = tests.shift()) {
+        var float = document.getElementById(test[0]);
+        var result = floatOffset(float);
+        var passed = result.width === test[1] && result.height === test[2]
+        float.style.backgroundColor = passed ? "green" : "red";
+        if (!passed)
+            failures++
+    }
+
+    if (window.layoutTestController) {
+        layoutTestController.dumpAsText();
+        document.getElementById("tests").style.display = "none";
+    }
+
+    document.getElementById("result").innerText = failures ? "FAIL: " + failures + " cases failed" : "PASS";
+</script>
+
+
+
+</body>
+</html>
diff --git a/LayoutTests/fast/multicol/vertical-lr/nested-columns.html b/LayoutTests/fast/multicol/vertical-lr/nested-columns.html
new file mode 100644
index 0000000..57f94b5
--- /dev/null
+++ b/LayoutTests/fast/multicol/vertical-lr/nested-columns.html
@@ -0,0 +1,18 @@
+<html>
+<body style="-webkit-column-count:2; height:750px;width:500px; -webkit-writing-mode:vertical-lr">
+
+<h1>Header One</h1>
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nulla varius enim ac mi. Curabitur sollicitudin felis quis lectus. Quisque adipiscing rhoncus sem. Proin nulla purus, vulputate vel, varius ut, euismod et, nisi. Sed vitae felis vel orci sagittis aliquam. Cras convallis adipiscing sem. Nam nonummy enim. Nullam bibendum lobortis neque. Vestibulum velit orci, tempus euismod, pretium quis, interdum vitae, nulla. Phasellus eget ante et tortor condimentum vestibulum.
+Suspendisse hendrerit quam nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+<h1>Header Two</h1>
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nulla varius enim ac mi. Curabitur sollicitudin felis quis lectus. Quisque adipiscing rhoncus sem. Proin nulla purus, vulputate vel, varius ut, euismod et, nisi. Sed vitae felis vel orci sagittis aliquam. Cras convallis adipiscing sem. Nam nonummy enim. Nullam bibendum lobortis neque. Vestibulum velit orci, tempus euismod, pretium quis, interdum vitae, nulla. Phasellus eget ante et tortor condimentum vestibulum.
+Suspendisse hendrerit quam nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+<h1>Header Three</h1>
+<div style="-webkit-column-count:2">
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nulla varius enim ac mi. Curabitur sollicitudin felis quis lectus. Quisque adipiscing rhoncus sem. Proin nulla purus, vulputate vel, varius ut, euismod et, nisi. Sed vitae felis vel orci sagittis aliquam. Cras convallis adipiscing sem. Nam nonummy enim. Nullam bibendum lobortis neque. Vestibulum velit orci, tempus euismod, pretium quis, interdum vitae, nulla. Phasellus eget ante et tortor condimentum vestibulum.
+Suspendisse hendrerit quam nec felis. Sed varius turpis vitae pede. <span style="position:relative; opacity:0.5">Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</span>
+</div>
+<h1>Header Four</h1>
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nulla varius enim ac mi.
+</body>
+</html>
diff --git a/LayoutTests/fast/multicol/vertical-lr/unsplittable-inline-block.html b/LayoutTests/fast/multicol/vertical-lr/unsplittable-inline-block.html
new file mode 100644
index 0000000..bd8e184
--- /dev/null
+++ b/LayoutTests/fast/multicol/vertical-lr/unsplittable-inline-block.html
@@ -0,0 +1,20 @@
+<body style="-webkit-writing-mode:vertical-lr">
+<div style="height:750px; -webkit-column-count:2; border:5px solid black; padding:5px;width:300px; -webkit-column-rule: 2px solid grey">
+<div style="width:250px"></div>
+<div style="display:inline-block; border:2px solid green">
+All of this text should be in the second column.<br>
+All of this text should be in the second column.<br>
+All of this text should be in the second column.<br>
+All of this text should be in the second column.<br>
+All of this text should be in the second column.<br>
+All of this text should be in the second column.<br>
+All of this text should be in the second column.<br>
+All of this text should be in the second column.<br>
+All of this text should be in the second column.<br>
+All of this text should be in the second column.<br>
+All of this text should be in the second column.<br>
+</div>
+
+</div>
+
+
diff --git a/LayoutTests/fast/multicol/vertical-rl/border-padding-pagination.html b/LayoutTests/fast/multicol/vertical-rl/border-padding-pagination.html
new file mode 100644
index 0000000..f56925e
--- /dev/null
+++ b/LayoutTests/fast/multicol/vertical-rl/border-padding-pagination.html
@@ -0,0 +1,9 @@
+<html>
+<body style="-webkit-writing-mode:vertical-rl">
+<div style="-webkit-column-count:2;-moz-column-count:2; border:2px solid maroon">
+<div style="width:110px"></div>
+<div style="background-color:lime; border:2px solid black; height:375px;">
+<div style="margin: 10px 0; background-color:green; border: 2px solid blue">
+<span style="font-size:64px">In 2nd column</span>
+</div>
+</div>
diff --git a/LayoutTests/fast/multicol/vertical-rl/break-properties-expected.txt b/LayoutTests/fast/multicol/vertical-rl/break-properties-expected.txt
new file mode 100644
index 0000000..be1ea30
--- /dev/null
+++ b/LayoutTests/fast/multicol/vertical-rl/break-properties-expected.txt
@@ -0,0 +1,3 @@
+PASS: 'break-before' is at (748, 218)
+PASS: 'after-break' is at (748, 428)
+
diff --git a/LayoutTests/fast/multicol/vertical-rl/break-properties.html b/LayoutTests/fast/multicol/vertical-rl/break-properties.html
new file mode 100644
index 0000000..0bd6628
--- /dev/null
+++ b/LayoutTests/fast/multicol/vertical-rl/break-properties.html
@@ -0,0 +1,39 @@
+<html style="-webkit-writing-mode:horizontal-tb">
+<head>
+<style>
+    div.box { -webkit-box-sizing: border; border: solid blue; }
+    div.shorter { width: 54px; }
+    div.taller { width: 72px; }
+</style>
+</head>
+<body style="-webkit-writing-mode:vertical-rl; width:800px;">
+<div style="width: 100px; height: 630px; -webkit-column-gap: 5px; -webkit-columns: 6;">
+    <div class="taller box"></div>
+    <div class="taller box"></div>
+    <div id="break-before" class="shorter box" style="-webkit-column-break-before: always;"></div>
+    <div class="shorter box" style="-webkit-column-break-after: always;"></div>
+    <div id="after-break" class="shorter box"></div>
+    <div id="no-break" class="shorter box" style="-webkit-column-break-inside: avoid;"></div>
+</div>
+<pre id="console"></pre>
+<script>
+    if (window.layoutTestController)
+        layoutTestController.dumpAsText();
+
+    function log(message)
+    {
+        document.getElementById("console").appendChild(document.createTextNode(message + "\n"));
+    }
+
+    function testBoxPosition(id, expectedLeft, expectedTop)
+    {
+        var rect = document.getElementById(id).getBoundingClientRect();
+        if (rect.left === expectedLeft && rect.top === expectedTop)
+            log("PASS: '" + id + "' is at (" + expectedLeft + ", " + expectedTop + ")");
+        else
+            log("FAIL: '" + id + "' is at (" + rect.left + ", " + rect.top + ") instead of (" + expectedLeft + " ," + expectedTop + ")");
+    }
+
+    testBoxPosition("break-before", 748, 218);
+    testBoxPosition("after-break", 748, 428);
+</script>
diff --git a/LayoutTests/fast/multicol/vertical-rl/column-break-with-balancing.html b/LayoutTests/fast/multicol/vertical-rl/column-break-with-balancing.html
new file mode 100644
index 0000000..e31cfd9
--- /dev/null
+++ b/LayoutTests/fast/multicol/vertical-rl/column-break-with-balancing.html
@@ -0,0 +1,66 @@
+<html style="-webkit-writing-mode:vertical-rl">
+<div style="-webkit-column-count:2; border:5px solid blue">
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+
+<div style="-webkit-column-break-before: always">
+This text should be in the second column.<br>
+This text should be in the second column.<br>
+This text should be in the second column.<br>
+This text should be in the second column.<br>
+</div>
+</div>
+
+<div style="-webkit-margin-before:1em; -webkit-column-count:2; border:5px solid blue">
+
+This text should be in the first column.<br>
+This text should be in the first column.<br>
+This text should be in the first column.<br>
+This text should be in the first column.<br>
+
+<div style="-webkit-column-break-before: always">
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+This is some text.<br>
+</div>
diff --git a/LayoutTests/fast/multicol/vertical-rl/column-count-with-rules.html b/LayoutTests/fast/multicol/vertical-rl/column-count-with-rules.html
new file mode 100644
index 0000000..fffdbba
--- /dev/null
+++ b/LayoutTests/fast/multicol/vertical-rl/column-count-with-rules.html
@@ -0,0 +1,32 @@
+<body style="-webkit-writing-mode: vertical-rl">
+<p style="-webkit-column-count:3;-webkit-column-rule:3px solid black; width:100px;border:10px solid maroon; padding:20px;">
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+</p>
+
+<p style="-webkit-column-count:3;-webkit-column-rule:3px solid black; width:100px;border:10px solid maroon; padding:20px; direction:rtl">
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+This is some column text.<br>
+</p>
diff --git a/LayoutTests/fast/multicol/vertical-rl/column-rules.html b/LayoutTests/fast/multicol/vertical-rl/column-rules.html
new file mode 100644
index 0000000..802e048
--- /dev/null
+++ b/LayoutTests/fast/multicol/vertical-rl/column-rules.html
@@ -0,0 +1,8 @@
+<body style="-webkit-writing-mode: vertical-rl">
+<div style="-webkit-columns: 3; -webkit-column-rule: 4px solid maroon; padding: 10px 0; border:5px solid black">
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nulla varius enim ac mi. Curabitur sollicitudin felis quis lectus. Quisque adipiscing rhoncus sem. Proin nulla purus, vulputate vel, varius ut, euismod et, nisi. Sed vitae felis vel orci sagittis aliquam. Cras convallis adipiscing sem. Nam nonummy enim. Nullam bibendum lobortis neque. Vestibulum velit orci, tempus euismod, pretium quis, interdum vitae, nulla. Phasellus eget ante et tortor condimentum vestibulum.
+Suspendisse hendrerit quam nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Proin bibendum justo ac enim. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Sed leo nulla, rutrum eu, dictum ut, posuere vel, arcu. Nam libero. Morbi orci. Maecenas pellentesque. Curabitur erat erat, ullamcorper at, gravida vitae, iaculis vitae, elit. Nullam quam. Quisque orci lectus, ullamcorper eu, imperdiet sed, accumsan et, ligula. Duis diam nisl, sagittis a, blandit volutpat, interdum sed, velit. Vestibulum quam.
+Nulla a purus. Phasellus semper semper lectus. Nulla porttitor, dolor dictum scelerisque luctus, velit ipsum lobortis mauris, ac pretium enim nunc vel risus. Proin gravida mi ut sem cursus mattis. Fusce laoreet, nisi quis luctus volutpat, arcu pede tincidunt enim, nec malesuada urna nisl eu enim. Vivamus varius augue ac purus. Vestibulum vestibulum. Phasellus et est vitae ante accumsan rhoncus. Morbi convallis, arcu at hendrerit gravida, sem diam dignissim risus, sed aliquet erat mi ut mi. Nunc cursus lacinia elit.
+Nunc nisi. Quisque at erat. Vestibulum dictum quam vitae nibh. Nunc vitae ante non odio interdum blandit. Curabitur leo quam, fermentum sed, feugiat in, ullamcorper id, nibh. Suspendisse ac turpis. In iaculis sollicitudin dui. Aenean vitae lectus vitae nulla pellentesque sollicitudin. Nunc gravida pharetra lectus. Etiam lacus ligula, placerat ut, dictum vitae, tempus vel, risus. Cras rhoncus. Praesent varius ultricies orci. Donec mattis, neque ut ornare fringilla, ante urna placerat eros, vel commodo nisi tortor ut mauris. Morbi magna dui, sagittis sit amet, tincidunt et, elementum eget, quam. Fusce molestie nisl vitae nisi.
+Vestibulum a sapien. Phasellus ante lacus, vehicula non, cursus a, tempor ut, magna. Suspendisse potenti. Fusce aliquet, odio viverra vulputate dictum, enim odio luctus purus, ut scelerisque quam nulla non est. Donec eros lacus, egestas vitae, lacinia quis, tempor quis, pede. Morbi orci erat, iaculis id, ornare ac, elementum at, sem. Nunc ornare sodales nisi. Morbi interdum commodo nisl. Fusce eget eros non nisi ornare facilisis. Sed placerat, est non posuere posuere, purus sem dignissim libero, a viverra tellus dolor vel lorem. Cras augue. Etiam ultricies consequat odio. Mauris ac libero. Etiam posuere, libero vitae euismod gravida, urna elit imperdiet magna, vel cursus elit felis non mauris. Donec orci erat, porta id, dignissim ut, posuere dictum, leo. Suspendisse scelerisque egestas nulla.
+</div>
diff --git a/LayoutTests/fast/multicol/vertical-rl/float-avoidance.html b/LayoutTests/fast/multicol/vertical-rl/float-avoidance.html
new file mode 100644
index 0000000..0a349ed
--- /dev/null
+++ b/LayoutTests/fast/multicol/vertical-rl/float-avoidance.html
@@ -0,0 +1,8 @@
+<body style="-webkit-writing-mode:vertical-rl">
+ <div style="float:left; width:100px; height:200px; background-color:lime"></div>
+   <div style="height:415px; -moz-column-width:200px; -webkit-column-width:200px; 
+ text-align:justify; border:10px solid black">
+<p>This technology preview of our award winning next generation browser
+    is a sign of things to come from Mozilla. Powerful yet easy to use. This
+     maintenance release provides a few updates based on user feedback - including
+     changes to the Extension System and icon improvements.
\ No newline at end of file
diff --git a/LayoutTests/fast/multicol/vertical-rl/float-multicol.html b/LayoutTests/fast/multicol/vertical-rl/float-multicol.html
new file mode 100644
index 0000000..1ff1216
--- /dev/null
+++ b/LayoutTests/fast/multicol/vertical-rl/float-multicol.html
@@ -0,0 +1,89 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
+<html style="-webkit-writing-mode:vertical-rl">
+  <body style="-moz-column-width:24em; -moz-column-gap:2em; -webkit-column-width:24em; -webkit-column-gap:2em; height:1500px">
+    <div style="background:cyan;">
+      <div style="float:left; height:50%; background:yellow; margin:0.3em;">
+        <img src="resources/blimp.png" style="float:left;">
+        You've already downloaded a build. All you have to do is use it as your everyday browser and mail/news reader. If you downloaded a build with Talkback, please turn it on when it asks.
+    <div style="float:right; background:red;">
+      <p>Hola hola 1
+      <p>Hola hola 2
+      <p>Hola hola 3
+      <p>Hola hola 4
+      <p>Hola hola 5
+      <p>Hola hola 6
+      <p>Hola hola 7
+      <p>Hola hola 8
+      <p>Hola hola 9
+      <p>Hola hola 10
+      <p>Hola hola 11
+    </div>
+Talkback reports give us really valuable data on which crashes are the most serious, and how often people are encountering them.
+      </div>
+      <div style="float:right; background:magenta;">
+        <p>Hello Kitty 1
+        <p>Hello Kitty 2
+        <p>Hello Kitty 3
+        <p>Hello Kitty 4
+        <p>Hello Kitty 5
+        <p>Hello Kitty 6
+        <p>Hello Kitty 7
+        <p>Hello Kitty 8
+        <p>Hello Kitty 9
+      </div>
+      <h2>What Needs To Be Done?</h2>
+    </div>
+    <div style="float:left; background:gray;">
+      <p>Hola hola 1
+      <p>Hola hola 2
+      <p>Hola hola 3
+      <p>Hola hola 4
+      <p>Hola hola 5
+      <p>Hola hola 6
+      <p>Hola hola 7
+      <p>Hola hola 8
+      <p>Hola hola 9
+      <p>Hola hola 10
+      <p>Hola hola 11
+    </div>
+
+    <dl class="tasklist">
+      <dt>Report Bugs</dt>
+      <dd>
+	<p>You've already downloaded a build. All you have to do is use it   as
+	  your everyday browser and mail/news reader. If you downloaded a build with
+	  Talkback, <em>please   turn it on</em> when it asks. Talkback reports give
+	  us really valuable data   on which crashes are the most serious, and how
+	  often people are encountering   them. And all you have to do is click "OK".
+	  If you find something you think is a bug, check to see if it's not already 
+<a href="http://bugzilla.mozilla.org/duplicates.cgi">known about</a>, and then please 
+	  follow the <a href="http://bugzilla.mozilla.org/enter_bug.cgi?format=guided">bug submission procedure</a>.
+	  
+	</p>
+      </dd>
+    <div style="float:left; background:green;">
+      <p>Hola hola 1
+      <p>Hola hola 2
+      <p>Hola hola 3
+      <p>Hola hola 4
+      <p>Hola hola 5
+      <p>Hola hola 6
+      <p>Hola hola 7
+      <p>Hola hola 8
+      <p>Hola hola 9
+      <p>Hola hola 10
+      <p>Hola hola 11
+    </div>
+      <dt>Quality Assurance</dt>
+      <dd>
+        <p><a href="../quality/">Mozilla QA</a>
+	  has a <a href="../quality/help/">page</a>
+	  dedicated to ways to get involved with helping. This doesn't involve
+	  knowing how to code, although a little knowledge of HTML is helpful. Being 
+	  involved with QA is   good for people wanting to get more familiar with 
+	  Mozilla, and there's a strong community. A particularly good way to get involved 
+	  is to join the <a href="../newlayout/bugathon.html">BugAThon</a>.</p>
+      </dd>
+    </dl>
+  </body>
+</html>
diff --git a/LayoutTests/fast/multicol/vertical-rl/float-paginate-complex.html b/LayoutTests/fast/multicol/vertical-rl/float-paginate-complex.html
new file mode 100644
index 0000000..601c7a7
--- /dev/null
+++ b/LayoutTests/fast/multicol/vertical-rl/float-paginate-complex.html
@@ -0,0 +1,49 @@
+<body style="-webkit-writing-mode:vertical-rl; height:1200px">
+<div style="-webkit-column-width:300px;-moz-column-width:300px; border:2px solid black; width:400px">
+This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>
+<p><span style="float:left;font-size:128px;">T</span>
+his is some text.<br>
+This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br></p>
+</div>
+
+<div style="-webkit-margin-before:1em; -webkit-column-width:300px;-moz-column-width:300px; border:2px solid black; width:400px">
+This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>
+<p><img style="float:left;width:100px;height:100px;background-color:green"><img style="float:right;width:200px;height:100px;background-color:green">
+This is some text<br>
+This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br></p>
+</div>
+
+<div style="-webkit-margin-before:1em; -webkit-column-width:300px;-moz-column-width:300px; border:2px solid black; width:400px">
+<img style="float:left;background-color:green; height:300px;width:390px">
+Longer text designed to test float and wrapping behavior. Longer text designed to test float and wrapping behavior.
+Longer text designed to test float and wrapping behavior.
+Longer text designed to test float and wrapping behavior.
+Longer text designed to test float and wrapping behavior.
+</div>
+
+<div style="-webkit-margin-before:1em; -webkit-column-width:300px;-moz-column-width:300px; border:2px solid black; width:400px">
+<img style="float:left;background-color:blue; height:100%;width:380px">
+<span style="font-size:24px"><img style="float:left;background-color:green;width:20px;height:100px">
+
+Longer text designed <img style="float:right;background-color:green;width:20px;height:100px">to test float and wrapping behavior. Longer text designed to test float and wrapping behavior.
+Longer text designed to test float and wrapping behavior.
+Longer text designed to test float and wrapping behavior.
+Longer text designed to test float and wrapping behavior.
+</span>
+</div>
diff --git a/LayoutTests/fast/multicol/vertical-rl/float-paginate.html b/LayoutTests/fast/multicol/vertical-rl/float-paginate.html
new file mode 100644
index 0000000..06a9815
--- /dev/null
+++ b/LayoutTests/fast/multicol/vertical-rl/float-paginate.html
@@ -0,0 +1,13 @@
+<body style="-webkit-writing-mode:vertical-rl; height:1200px">
+<div style="-webkit-column-width:300px;-moz-column-width:300px; border:2px solid black; width:400px">
+This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>
+<img style="float:left;width:300px;height:250px;background-color:green;display:block">
+This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>This is some text.<br>
+This is some text.<br>This is some text.<br>This is some text.<br>
diff --git a/LayoutTests/fast/multicol/float-truncation-expected.txt b/LayoutTests/fast/multicol/vertical-rl/float-truncation-expected.txt
similarity index 100%
copy from LayoutTests/fast/multicol/float-truncation-expected.txt
copy to LayoutTests/fast/multicol/vertical-rl/float-truncation-expected.txt
diff --git a/LayoutTests/fast/multicol/vertical-rl/float-truncation.html b/LayoutTests/fast/multicol/vertical-rl/float-truncation.html
new file mode 100644
index 0000000..8f28294
--- /dev/null
+++ b/LayoutTests/fast/multicol/vertical-rl/float-truncation.html
@@ -0,0 +1,106 @@
+<html style="-webkit-writing-mode:horizontal-tb;">
+<head>
+<style>
+    div.columns {
+        height: 200px;
+        -webkit-columns: 2;
+        -webkit-column-gap: 0;
+        outline: 1px solid blue;
+        font-family: ahem;
+        font-size: 10px;
+        margin: 5px;
+        overflow: hidden;
+    }
+
+    div.float {
+        float: left;
+        height: 50px;
+        -webkit-margin-before: 5px;
+        color: silver;
+    }
+</style>
+</head>
+<body style="-webkit-writing-mode:vertical-rl; width:800px">
+<div id="tests">
+    <div class="columns" style="width: 80px;">
+        one line two lines three lines
+        <div class="float" id="f1">
+            three line float
+        </div>
+        text runs here next to the float
+    </div>
+    <!-- In this case, the float fits, but then the main content causes the break
+         to occur earlier and the float gets split. -->
+    <div class="columns" style="width: 75px;">
+        one line two lines three lines
+        <div class="float" id="f2">
+            three line float
+        </div>
+        text runs here next to the float
+    </div>
+    <!-- In this case, the float paginates after its second line. -->
+    <div class="columns" style="width: 70px;">
+        one line two lines three lines
+        <div class="float" id="f3">
+            three line float
+        </div>
+        text runs here next to the float
+    </div>
+    <!-- In this case, the float paginates after its first line. -->
+    <div class="columns" style="width: 70px;">
+        one line two lines three lines and some more
+        <div class="float" id="f4">
+            three line float
+        </div>
+        text runs here next to the float
+    </div>
+    <!-- In this case, the float paginates after its third line. -->
+    <div class="columns" style="width: 45px;">
+        one line
+        <div class="float" id="f5">
+            and one five line float
+        </div>
+        text runs here next to the float
+    </div>
+</div>
+<pre id="result"></pre>
+<script>
+    function floatOffset(float)
+    {
+        var range = document.createRange();
+        range.setStart(float, 0);
+        range.setEnd(float, 0);
+        range.expand("word");
+        var rect = range.getBoundingClientRect();
+        var parentRect = float.parentNode.getBoundingClientRect();
+        return { width: rect.left - parentRect.left, height: rect.top - parentRect.top  };
+    }
+
+    var tests = [
+        ["f1", 25, 0],
+        ["f2", 20, 0],
+        ["f3", 15, 0],
+        ["f4", 5, 0],
+        ["f5", 20, 0]
+    ];
+
+    var test;
+    var failures = 0;
+    while (test = tests.shift()) {
+        var float = document.getElementById(test[0]);
+        var result = floatOffset(float);
+        var passed = result.width === test[1] && result.height === test[2]
+        float.style.color = passed ? "green" : "red";
+        if (!passed) {
+            failures++
+            alert(result.width + " " + result.height);
+        }
+    }
+
+    if (window.layoutTestController) {
+        layoutTestController.dumpAsText();
+        document.getElementById("tests").style.display = "none";
+    }
+
+    document.getElementById("result").innerText = failures ? "FAIL: " + failures + " cases failed" : "PASS";
+</script>
diff --git a/LayoutTests/fast/multicol/gap-non-negative-expected.txt b/LayoutTests/fast/multicol/vertical-rl/gap-non-negative-expected.txt
similarity index 100%
copy from LayoutTests/fast/multicol/gap-non-negative-expected.txt
copy to LayoutTests/fast/multicol/vertical-rl/gap-non-negative-expected.txt
diff --git a/LayoutTests/fast/multicol/vertical-rl/gap-non-negative.html b/LayoutTests/fast/multicol/vertical-rl/gap-non-negative.html
new file mode 100644
index 0000000..d232f66
--- /dev/null
+++ b/LayoutTests/fast/multicol/vertical-rl/gap-non-negative.html
@@ -0,0 +1,17 @@
+<body style="-webkit-writing-mode:vertical-rl">
+<p>
+    Test for <i><a href="rdar://problem/5962118">rdar://problem/5962118</a> Crash in RenderBlock::calcColumnWidth()</i>.
+</p>
+<p>
+    This tests that the <tt>column-gap</tt> property does not allow negative values.
+</p>
+<p id = "result"></p>
+<div id="target" style="-webkit-column-count: 4; -webkit-column-gap: -10px;"></div>
+<script>
+    if (window.layoutTestController)
+        layoutTestController.dumpAsText();
+
+    var style = getComputedStyle(document.getElementById("target"));
+    var columnGap = style.getPropertyValue("-webkit-column-gap");
+    document.getElementById("result").innerText = (columnGap == "0" || columnGap == "normal") ? "PASS" : "FAIL: column-gap is " + columnGap;
+</script>
diff --git a/LayoutTests/fast/multicol/vertical-rl/image-inside-nested-blocks-with-border-expected.txt b/LayoutTests/fast/multicol/vertical-rl/image-inside-nested-blocks-with-border-expected.txt
new file mode 100644
index 0000000..aff6534
--- /dev/null
+++ b/LayoutTests/fast/multicol/vertical-rl/image-inside-nested-blocks-with-border-expected.txt
@@ -0,0 +1,2 @@
+ALERT: 210 300
+FAIL: 1 cases failed
diff --git a/LayoutTests/fast/multicol/vertical-rl/image-inside-nested-blocks-with-border.html b/LayoutTests/fast/multicol/vertical-rl/image-inside-nested-blocks-with-border.html
new file mode 100644
index 0000000..1042bb6
--- /dev/null
+++ b/LayoutTests/fast/multicol/vertical-rl/image-inside-nested-blocks-with-border.html
@@ -0,0 +1,46 @@
+<html>
+<body style="-webkit-writing-mode: vertical-rl">
+<div id="tests" style="-webkit-column-count:2; width:300px; height:600px; -webkit-column-gap:0">
+<div style="width:280px"></div>
+<div id="f1" style="border:5px solid black; float:left">
+<img style="display:block;height:140px;width:80px;">
+</div>
+</div>
+<div id="result"></div>
+<script>
+    function floatOffset(float)
+    {
+        var parentRect = document.getElementById('tests').getBoundingClientRect();
+        var rect = float.getBoundingClientRect();
+        return { width: rect.left - parentRect.left, height: rect.top - parentRect.top  };
+    }
+
+    var tests = [
+        ["f1", 0, 300]
+    ];
+
+    var test;
+    var failures = 0;
+    while (test = tests.shift()) {
+        var float = document.getElementById(test[0]);
+        var result = floatOffset(float);
+        var passed = result.width === test[1] && result.height === test[2]
+        float.style.backgroundColor = passed ? "green" : "red";
+        if (!passed) {
+            failures++
+            alert(result.width + " " + result.height)
+        }
+    }
+
+    if (window.layoutTestController) {
+        layoutTestController.dumpAsText();
+        document.getElementById("tests").style.display = "none";
+    }
+
+    document.getElementById("result").innerText = failures ? "FAIL: " + failures + " cases failed" : "PASS";
+</script>
+
+
+
+</body>
+</html>
diff --git a/LayoutTests/fast/multicol/vertical-rl/nested-columns.html b/LayoutTests/fast/multicol/vertical-rl/nested-columns.html
new file mode 100644
index 0000000..ab67034
--- /dev/null
+++ b/LayoutTests/fast/multicol/vertical-rl/nested-columns.html
@@ -0,0 +1,18 @@
+<html>
+<body style="-webkit-column-count:2; height:750px;width:500px; -webkit-writing-mode:vertical-rl">
+
+<h1>Header One</h1>
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nulla varius enim ac mi. Curabitur sollicitudin felis quis lectus. Quisque adipiscing rhoncus sem. Proin nulla purus, vulputate vel, varius ut, euismod et, nisi. Sed vitae felis vel orci sagittis aliquam. Cras convallis adipiscing sem. Nam nonummy enim. Nullam bibendum lobortis neque. Vestibulum velit orci, tempus euismod, pretium quis, interdum vitae, nulla. Phasellus eget ante et tortor condimentum vestibulum.
+Suspendisse hendrerit quam nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+<h1>Header Two</h1>
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nulla varius enim ac mi. Curabitur sollicitudin felis quis lectus. Quisque adipiscing rhoncus sem. Proin nulla purus, vulputate vel, varius ut, euismod et, nisi. Sed vitae felis vel orci sagittis aliquam. Cras convallis adipiscing sem. Nam nonummy enim. Nullam bibendum lobortis neque. Vestibulum velit orci, tempus euismod, pretium quis, interdum vitae, nulla. Phasellus eget ante et tortor condimentum vestibulum.
+Suspendisse hendrerit quam nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+<h1>Header Three</h1>
+<div style="-webkit-column-count:2">
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nulla varius enim ac mi. Curabitur sollicitudin felis quis lectus. Quisque adipiscing rhoncus sem. Proin nulla purus, vulputate vel, varius ut, euismod et, nisi. Sed vitae felis vel orci sagittis aliquam. Cras convallis adipiscing sem. Nam nonummy enim. Nullam bibendum lobortis neque. Vestibulum velit orci, tempus euismod, pretium quis, interdum vitae, nulla. Phasellus eget ante et tortor condimentum vestibulum.
+Suspendisse hendrerit quam nec felis. Sed varius turpis vitae pede. <span style="position:relative; opacity:0.5">Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</span>
+</div>
+<h1>Header Four</h1>
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nulla varius enim ac mi.
+</body>
+</html>
diff --git a/LayoutTests/fast/multicol/vertical-rl/unsplittable-inline-block.html b/LayoutTests/fast/multicol/vertical-rl/unsplittable-inline-block.html
new file mode 100644
index 0000000..d9f19f1
--- /dev/null
+++ b/LayoutTests/fast/multicol/vertical-rl/unsplittable-inline-block.html
@@ -0,0 +1,20 @@
+<body style="-webkit-writing-mode:vertical-rl">
+<div style="height:750px; -webkit-column-count:2; border:5px solid black; padding:5px;width:300px; -webkit-column-rule: 2px solid grey">
+<div style="width:250px"></div>
+<div style="display:inline-block; border:2px solid green">
+All of this text should be in the second column.<br>
+All of this text should be in the second column.<br>
+All of this text should be in the second column.<br>
+All of this text should be in the second column.<br>
+All of this text should be in the second column.<br>
+All of this text should be in the second column.<br>
+All of this text should be in the second column.<br>
+All of this text should be in the second column.<br>
+All of this text should be in the second column.<br>
+All of this text should be in the second column.<br>
+All of this text should be in the second column.<br>
+</div>
+
+</div>
+
+
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-lr/border-padding-pagination-expected.checksum b/LayoutTests/platform/mac/fast/multicol/vertical-lr/border-padding-pagination-expected.checksum
new file mode 100644
index 0000000..648d150
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-lr/border-padding-pagination-expected.checksum
@@ -0,0 +1 @@
+d62fd7be61daf912a96670f6ce1ffe48
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-lr/border-padding-pagination-expected.png b/LayoutTests/platform/mac/fast/multicol/vertical-lr/border-padding-pagination-expected.png
new file mode 100644
index 0000000..be0c379
Binary files /dev/null and b/LayoutTests/platform/mac/fast/multicol/vertical-lr/border-padding-pagination-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-lr/border-padding-pagination-expected.txt b/LayoutTests/platform/mac/fast/multicol/vertical-lr/border-padding-pagination-expected.txt
new file mode 100644
index 0000000..b91c0d1
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-lr/border-padding-pagination-expected.txt
@@ -0,0 +1,15 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x584
+layer at (8,8) size 176x584
+  RenderBlock {DIV} at (0,0) size 176x584 [border: (2px solid #800000)]
+    RenderBlock {DIV} at (2,2) size 110x282
+    RenderBlock {DIV} at (174,2) size 156x379 [bgcolor=#00FF00] [border: (2px solid #000000)]
+      RenderBlock {DIV} at (2,12) size 152x355 [bgcolor=#008000] [border: (2px solid #0000FF)]
+        RenderInline {SPAN} at (0,0) size 148x192
+          RenderText {#text} at (2,2) size 148x192
+            text run at (2,2) width 165: "In 2nd"
+            text run at (76,2) width 192: "column"
+        RenderText {#text} at (0,0) size 0x0
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-lr/column-break-with-balancing-expected.checksum b/LayoutTests/platform/mac/fast/multicol/vertical-lr/column-break-with-balancing-expected.checksum
new file mode 100644
index 0000000..57788b4
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-lr/column-break-with-balancing-expected.checksum
@@ -0,0 +1 @@
+61c7fb609e532ba71b77a08ed6bec832
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-lr/column-break-with-balancing-expected.png b/LayoutTests/platform/mac/fast/multicol/vertical-lr/column-break-with-balancing-expected.png
new file mode 100644
index 0000000..6850b80
Binary files /dev/null and b/LayoutTests/platform/mac/fast/multicol/vertical-lr/column-break-with-balancing-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-lr/column-break-with-balancing-expected.txt b/LayoutTests/platform/mac/fast/multicol/vertical-lr/column-break-with-balancing-expected.txt
new file mode 100644
index 0000000..4cd70b4
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-lr/column-break-with-balancing-expected.txt
@@ -0,0 +1,163 @@
+layer at (0,0) size 808x585
+  RenderView at (0,0) size 800x585
+layer at (0,0) size 808x585
+  RenderBlock {HTML} at (0,0) size 808x585
+    RenderBody {BODY} at (8,8) size 792x569
+layer at (8,8) size 388x569
+  RenderBlock {DIV} at (0,0) size 388x569 [border: (5px solid #0000FF)]
+    RenderBlock (anonymous) at (5,5) size 378x271
+      RenderText {#text} at (0,0) size 18x110
+        text run at (0,0) width 110: "This is some text."
+      RenderBR {BR} at (4,110) size 0x0
+      RenderText {#text} at (18,0) size 18x110
+        text run at (18,0) width 110: "This is some text."
+      RenderBR {BR} at (22,110) size 0x0
+      RenderText {#text} at (36,0) size 18x110
+        text run at (36,0) width 110: "This is some text."
+      RenderBR {BR} at (40,110) size 0x0
+      RenderText {#text} at (54,0) size 18x110
+        text run at (54,0) width 110: "This is some text."
+      RenderBR {BR} at (58,110) size 0x0
+      RenderText {#text} at (72,0) size 18x110
+        text run at (72,0) width 110: "This is some text."
+      RenderBR {BR} at (76,110) size 0x0
+      RenderText {#text} at (90,0) size 18x110
+        text run at (90,0) width 110: "This is some text."
+      RenderBR {BR} at (94,110) size 0x0
+      RenderText {#text} at (108,0) size 18x110
+        text run at (108,0) width 110: "This is some text."
+      RenderBR {BR} at (112,110) size 0x0
+      RenderText {#text} at (126,0) size 18x110
+        text run at (126,0) width 110: "This is some text."
+      RenderBR {BR} at (130,110) size 0x0
+      RenderText {#text} at (144,0) size 18x110
+        text run at (144,0) width 110: "This is some text."
+      RenderBR {BR} at (148,110) size 0x0
+      RenderText {#text} at (162,0) size 18x110
+        text run at (162,0) width 110: "This is some text."
+      RenderBR {BR} at (166,110) size 0x0
+      RenderText {#text} at (180,0) size 18x110
+        text run at (180,0) width 110: "This is some text."
+      RenderBR {BR} at (184,110) size 0x0
+      RenderText {#text} at (198,0) size 18x110
+        text run at (198,0) width 110: "This is some text."
+      RenderBR {BR} at (202,110) size 0x0
+      RenderText {#text} at (216,0) size 18x110
+        text run at (216,0) width 110: "This is some text."
+      RenderBR {BR} at (220,110) size 0x0
+      RenderText {#text} at (234,0) size 18x110
+        text run at (234,0) width 110: "This is some text."
+      RenderBR {BR} at (238,110) size 0x0
+      RenderText {#text} at (252,0) size 18x110
+        text run at (252,0) width 110: "This is some text."
+      RenderBR {BR} at (256,110) size 0x0
+      RenderText {#text} at (270,0) size 18x110
+        text run at (270,0) width 110: "This is some text."
+      RenderBR {BR} at (274,110) size 0x0
+      RenderText {#text} at (288,0) size 18x110
+        text run at (288,0) width 110: "This is some text."
+      RenderBR {BR} at (292,110) size 0x0
+      RenderText {#text} at (306,0) size 18x110
+        text run at (306,0) width 110: "This is some text."
+      RenderBR {BR} at (310,110) size 0x0
+      RenderText {#text} at (324,0) size 18x110
+        text run at (324,0) width 110: "This is some text."
+      RenderBR {BR} at (328,110) size 0x0
+      RenderText {#text} at (342,0) size 18x110
+        text run at (342,0) width 110: "This is some text."
+      RenderBR {BR} at (346,110) size 0x0
+      RenderText {#text} at (360,0) size 18x110
+        text run at (360,0) width 110: "This is some text."
+      RenderBR {BR} at (364,110) size 0x0
+    RenderBlock {DIV} at (383,5) size 72x271
+      RenderText {#text} at (0,0) size 18x262
+        text run at (0,0) width 262: "This text should be in the second column."
+      RenderBR {BR} at (4,262) size 0x0
+      RenderText {#text} at (18,0) size 18x262
+        text run at (18,0) width 262: "This text should be in the second column."
+      RenderBR {BR} at (22,262) size 0x0
+      RenderText {#text} at (36,0) size 18x262
+        text run at (36,0) width 262: "This text should be in the second column."
+      RenderBR {BR} at (40,262) size 0x0
+      RenderText {#text} at (54,0) size 18x262
+        text run at (54,0) width 262: "This text should be in the second column."
+      RenderBR {BR} at (58,262) size 0x0
+layer at (412,8) size 388x569
+  RenderBlock {DIV} at (404,0) size 388x569 [border: (5px solid #0000FF)]
+    RenderBlock (anonymous) at (5,5) size 72x271
+      RenderText {#text} at (0,0) size 18x242
+        text run at (0,0) width 242: "This text should be in the first column."
+      RenderBR {BR} at (4,242) size 0x0
+      RenderText {#text} at (18,0) size 18x242
+        text run at (18,0) width 242: "This text should be in the first column."
+      RenderBR {BR} at (22,242) size 0x0
+      RenderText {#text} at (36,0) size 18x242
+        text run at (36,0) width 242: "This text should be in the first column."
+      RenderBR {BR} at (40,242) size 0x0
+      RenderText {#text} at (54,0) size 18x242
+        text run at (54,0) width 242: "This text should be in the first column."
+      RenderBR {BR} at (58,242) size 0x0
+    RenderBlock {DIV} at (383,5) size 378x271
+      RenderText {#text} at (0,0) size 18x110
+        text run at (0,0) width 110: "This is some text."
+      RenderBR {BR} at (4,110) size 0x0
+      RenderText {#text} at (18,0) size 18x110
+        text run at (18,0) width 110: "This is some text."
+      RenderBR {BR} at (22,110) size 0x0
+      RenderText {#text} at (36,0) size 18x110
+        text run at (36,0) width 110: "This is some text."
+      RenderBR {BR} at (40,110) size 0x0
+      RenderText {#text} at (54,0) size 18x110
+        text run at (54,0) width 110: "This is some text."
+      RenderBR {BR} at (58,110) size 0x0
+      RenderText {#text} at (72,0) size 18x110
+        text run at (72,0) width 110: "This is some text."
+      RenderBR {BR} at (76,110) size 0x0
+      RenderText {#text} at (90,0) size 18x110
+        text run at (90,0) width 110: "This is some text."
+      RenderBR {BR} at (94,110) size 0x0
+      RenderText {#text} at (108,0) size 18x110
+        text run at (108,0) width 110: "This is some text."
+      RenderBR {BR} at (112,110) size 0x0
+      RenderText {#text} at (126,0) size 18x110
+        text run at (126,0) width 110: "This is some text."
+      RenderBR {BR} at (130,110) size 0x0
+      RenderText {#text} at (144,0) size 18x110
+        text run at (144,0) width 110: "This is some text."
+      RenderBR {BR} at (148,110) size 0x0
+      RenderText {#text} at (162,0) size 18x110
+        text run at (162,0) width 110: "This is some text."
+      RenderBR {BR} at (166,110) size 0x0
+      RenderText {#text} at (180,0) size 18x110
+        text run at (180,0) width 110: "This is some text."
+      RenderBR {BR} at (184,110) size 0x0
+      RenderText {#text} at (198,0) size 18x110
+        text run at (198,0) width 110: "This is some text."
+      RenderBR {BR} at (202,110) size 0x0
+      RenderText {#text} at (216,0) size 18x110
+        text run at (216,0) width 110: "This is some text."
+      RenderBR {BR} at (220,110) size 0x0
+      RenderText {#text} at (234,0) size 18x110
+        text run at (234,0) width 110: "This is some text."
+      RenderBR {BR} at (238,110) size 0x0
+      RenderText {#text} at (252,0) size 18x110
+        text run at (252,0) width 110: "This is some text."
+      RenderBR {BR} at (256,110) size 0x0
+      RenderText {#text} at (270,0) size 18x110
+        text run at (270,0) width 110: "This is some text."
+      RenderBR {BR} at (274,110) size 0x0
+      RenderText {#text} at (288,0) size 18x110
+        text run at (288,0) width 110: "This is some text."
+      RenderBR {BR} at (292,110) size 0x0
+      RenderText {#text} at (306,0) size 18x110
+        text run at (306,0) width 110: "This is some text."
+      RenderBR {BR} at (310,110) size 0x0
+      RenderText {#text} at (324,0) size 18x110
+        text run at (324,0) width 110: "This is some text."
+      RenderBR {BR} at (328,110) size 0x0
+      RenderText {#text} at (342,0) size 18x110
+        text run at (342,0) width 110: "This is some text."
+      RenderBR {BR} at (346,110) size 0x0
+      RenderText {#text} at (360,0) size 18x110
+        text run at (360,0) width 110: "This is some text."
+      RenderBR {BR} at (364,110) size 0x0
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-lr/column-count-with-rules-expected.checksum b/LayoutTests/platform/mac/fast/multicol/vertical-lr/column-count-with-rules-expected.checksum
new file mode 100644
index 0000000..b3dc667
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-lr/column-count-with-rules-expected.checksum
@@ -0,0 +1 @@
+27a46d5fab5b463cfcf442c37f8dadc8
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-lr/column-count-with-rules-expected.png b/LayoutTests/platform/mac/fast/multicol/vertical-lr/column-count-with-rules-expected.png
new file mode 100644
index 0000000..3b10f8e
Binary files /dev/null and b/LayoutTests/platform/mac/fast/multicol/vertical-lr/column-count-with-rules-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-lr/column-count-with-rules-expected.txt b/LayoutTests/platform/mac/fast/multicol/vertical-lr/column-count-with-rules-expected.txt
new file mode 100644
index 0000000..f96cfa9
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-lr/column-count-with-rules-expected.txt
@@ -0,0 +1,100 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 776x584
+layer at (8,8) size 160x584
+  RenderBlock {P} at (0,0) size 160x584 [border: (10px solid #800000)]
+    RenderText {#text} at (30,30) size 18x161
+      text run at (30,30) width 161: "This is some column text."
+    RenderBR {BR} at (34,191) size 0x0
+    RenderText {#text} at (48,30) size 18x161
+      text run at (48,30) width 161: "This is some column text."
+    RenderBR {BR} at (52,191) size 0x0
+    RenderText {#text} at (66,30) size 18x161
+      text run at (66,30) width 161: "This is some column text."
+    RenderBR {BR} at (70,191) size 0x0
+    RenderText {#text} at (84,30) size 18x161
+      text run at (84,30) width 161: "This is some column text."
+    RenderBR {BR} at (88,191) size 0x0
+    RenderText {#text} at (102,30) size 18x161
+      text run at (102,30) width 161: "This is some column text."
+    RenderBR {BR} at (106,191) size 0x0
+    RenderText {#text} at (130,30) size 18x161
+      text run at (130,30) width 161: "This is some column text."
+    RenderBR {BR} at (134,191) size 0x0
+    RenderText {#text} at (148,30) size 18x161
+      text run at (148,30) width 161: "This is some column text."
+    RenderBR {BR} at (152,191) size 0x0
+    RenderText {#text} at (166,30) size 18x161
+      text run at (166,30) width 161: "This is some column text."
+    RenderBR {BR} at (170,191) size 0x0
+    RenderText {#text} at (184,30) size 18x161
+      text run at (184,30) width 161: "This is some column text."
+    RenderBR {BR} at (188,191) size 0x0
+    RenderText {#text} at (202,30) size 18x161
+      text run at (202,30) width 161: "This is some column text."
+    RenderBR {BR} at (206,191) size 0x0
+    RenderText {#text} at (230,30) size 18x161
+      text run at (230,30) width 161: "This is some column text."
+    RenderBR {BR} at (234,191) size 0x0
+    RenderText {#text} at (248,30) size 18x161
+      text run at (248,30) width 161: "This is some column text."
+    RenderBR {BR} at (252,191) size 0x0
+    RenderText {#text} at (266,30) size 18x161
+      text run at (266,30) width 161: "This is some column text."
+    RenderBR {BR} at (270,191) size 0x0
+layer at (184,8) size 160x584
+  RenderBlock {P} at (176,0) size 160x584 [border: (10px solid #800000)]
+    RenderText {#text} at (30,33) size 18x161
+      text run at (30,33) width 4 RTL: "."
+      text run at (30,37) width 157: "This is some column text"
+    RenderBR {BR} at (34,33) size 0x0
+    RenderText {#text} at (48,33) size 18x161
+      text run at (48,33) width 4 RTL: "."
+      text run at (48,37) width 157: "This is some column text"
+    RenderBR {BR} at (52,33) size 0x0
+    RenderText {#text} at (66,33) size 18x161
+      text run at (66,33) width 4 RTL: "."
+      text run at (66,37) width 157: "This is some column text"
+    RenderBR {BR} at (70,33) size 0x0
+    RenderText {#text} at (84,33) size 18x161
+      text run at (84,33) width 4 RTL: "."
+      text run at (84,37) width 157: "This is some column text"
+    RenderBR {BR} at (88,33) size 0x0
+    RenderText {#text} at (102,33) size 18x161
+      text run at (102,33) width 4 RTL: "."
+      text run at (102,37) width 157: "This is some column text"
+    RenderBR {BR} at (106,33) size 0x0
+    RenderText {#text} at (130,33) size 18x161
+      text run at (130,33) width 4 RTL: "."
+      text run at (130,37) width 157: "This is some column text"
+    RenderBR {BR} at (134,33) size 0x0
+    RenderText {#text} at (148,33) size 18x161
+      text run at (148,33) width 4 RTL: "."
+      text run at (148,37) width 157: "This is some column text"
+    RenderBR {BR} at (152,33) size 0x0
+    RenderText {#text} at (166,33) size 18x161
+      text run at (166,33) width 4 RTL: "."
+      text run at (166,37) width 157: "This is some column text"
+    RenderBR {BR} at (170,33) size 0x0
+    RenderText {#text} at (184,33) size 18x161
+      text run at (184,33) width 4 RTL: "."
+      text run at (184,37) width 157: "This is some column text"
+    RenderBR {BR} at (188,33) size 0x0
+    RenderText {#text} at (202,33) size 18x161
+      text run at (202,33) width 4 RTL: "."
+      text run at (202,37) width 157: "This is some column text"
+    RenderBR {BR} at (206,33) size 0x0
+    RenderText {#text} at (230,33) size 18x161
+      text run at (230,33) width 4 RTL: "."
+      text run at (230,37) width 157: "This is some column text"
+    RenderBR {BR} at (234,33) size 0x0
+    RenderText {#text} at (248,33) size 18x161
+      text run at (248,33) width 4 RTL: "."
+      text run at (248,37) width 157: "This is some column text"
+    RenderBR {BR} at (252,33) size 0x0
+    RenderText {#text} at (266,33) size 18x161
+      text run at (266,33) width 4 RTL: "."
+      text run at (266,37) width 157: "This is some column text"
+    RenderBR {BR} at (270,33) size 0x0
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-lr/column-rules-expected.checksum b/LayoutTests/platform/mac/fast/multicol/vertical-lr/column-rules-expected.checksum
new file mode 100644
index 0000000..a26d7d2
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-lr/column-rules-expected.checksum
@@ -0,0 +1 @@
+ec7c6b6d67e4574f6e091aecdfb73c27
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-lr/column-rules-expected.png b/LayoutTests/platform/mac/fast/multicol/vertical-lr/column-rules-expected.png
new file mode 100644
index 0000000..01d9a89
Binary files /dev/null and b/LayoutTests/platform/mac/fast/multicol/vertical-lr/column-rules-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-lr/column-rules-expected.txt b/LayoutTests/platform/mac/fast/multicol/vertical-lr/column-rules-expected.txt
new file mode 100644
index 0000000..4e82386
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-lr/column-rules-expected.txt
@@ -0,0 +1,130 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x584
+layer at (8,8) size 754x584
+  RenderBlock {DIV} at (0,0) size 754x584 [border: (5px solid #000000)]
+    RenderText {#text} at (5,15) size 2208x174
+      text run at (5,15) width 139: "Lorem ipsum dolor sit"
+      text run at (23,15) width 116: "amet, consectetuer"
+      text run at (41,15) width 172: "adipiscing elit. Nulla varius"
+      text run at (59,15) width 137: "enim ac mi. Curabitur"
+      text run at (77,15) width 173: "sollicitudin felis quis lectus."
+      text run at (95,15) width 121: "Quisque adipiscing"
+      text run at (113,15) width 156: "rhoncus sem. Proin nulla"
+      text run at (131,15) width 170: "purus, vulputate vel, varius"
+      text run at (149,15) width 150: "ut, euismod et, nisi. Sed"
+      text run at (167,15) width 158: "vitae felis vel orci sagittis"
+      text run at (185,15) width 147: "aliquam. Cras convallis"
+      text run at (203,15) width 132: "adipiscing sem. Nam"
+      text run at (221,15) width 154: "nonummy enim. Nullam"
+      text run at (239,15) width 160: "bibendum lobortis neque."
+      text run at (257,15) width 136: "Vestibulum velit orci,"
+      text run at (275,15) width 158: "tempus euismod, pretium"
+      text run at (293,15) width 167: "quis, interdum vitae, nulla."
+      text run at (311,15) width 172: "Phasellus eget ante et tortor"
+      text run at (329,15) width 163: "condimentum vestibulum."
+      text run at (347,15) width 137: "Suspendisse hendrerit"
+      text run at (365,15) width 165: "quam nec felis. Sed varius"
+      text run at (383,15) width 153: "turpis vitae pede. Lorem"
+      text run at (401,15) width 131: "ipsum dolor sit amet,"
+      text run at (419,15) width 173: "consectetuer adipiscing elit."
+      text run at (437,15) width 153: "Proin bibendum justo ac"
+      text run at (455,15) width 149: "enim. Class aptent taciti"
+      text run at (473,15) width 166: "sociosqu ad litora torquent"
+      text run at (491,15) width 144: "per conubia nostra, per"
+      text run at (509,15) width 159: "inceptos hymenaeos. Sed"
+      text run at (527,15) width 174: "leo nulla, rutrum eu, dictum"
+      text run at (545,15) width 166: "ut, posuere vel, arcu. Nam"
+      text run at (563,15) width 115: "libero. Morbi orci."
+      text run at (581,15) width 149: "Maecenas pellentesque."
+      text run at (599,15) width 118: "Curabitur erat erat,"
+      text run at (617,15) width 145: "ullamcorper at, gravida"
+      text run at (635,15) width 143: "vitae, iaculis vitae, elit."
+      text run at (653,15) width 147: "Nullam quam. Quisque"
+      text run at (671,15) width 170: "orci lectus, ullamcorper eu,"
+      text run at (689,15) width 173: "imperdiet sed, accumsan et,"
+      text run at (707,15) width 138: "ligula. Duis diam nisl,"
+      text run at (725,15) width 164: "sagittis a, blandit volutpat,"
+      text run at (749,15) width 120: "interdum sed, velit."
+      text run at (767,15) width 166: "Vestibulum quam. Nulla a"
+      text run at (785,15) width 151: "purus. Phasellus semper"
+      text run at (803,15) width 128: "semper lectus. Nulla"
+      text run at (821,15) width 138: "porttitor, dolor dictum"
+      text run at (839,15) width 145: "scelerisque luctus, velit"
+      text run at (857,15) width 157: "ipsum lobortis mauris, ac"
+      text run at (875,15) width 141: "pretium enim nunc vel"
+      text run at (893,15) width 158: "risus. Proin gravida mi ut"
+      text run at (911,15) width 155: "sem cursus mattis. Fusce"
+      text run at (929,15) width 143: "laoreet, nisi quis luctus"
+      text run at (947,15) width 120: "volutpat, arcu pede"
+      text run at (965,15) width 120: "tincidunt enim, nec"
+      text run at (983,15) width 143: "malesuada urna nisl eu"
+      text run at (1001,15) width 138: "enim. Vivamus varius"
+      text run at (1019,15) width 99: "augue ac purus."
+      text run at (1037,15) width 150: "Vestibulum vestibulum."
+      text run at (1055,15) width 159: "Phasellus et est vitae ante"
+      text run at (1073,15) width 163: "accumsan rhoncus. Morbi"
+      text run at (1091,15) width 166: "convallis, arcu at hendrerit"
+      text run at (1109,15) width 115: "gravida, sem diam"
+      text run at (1127,15) width 168: "dignissim risus, sed aliquet"
+      text run at (1145,15) width 166: "erat mi ut mi. Nunc cursus"
+      text run at (1163,15) width 137: "lacinia elit. Nunc nisi."
+      text run at (1181,15) width 99: "Quisque at erat."
+      text run at (1199,15) width 159: "Vestibulum dictum quam"
+      text run at (1217,15) width 169: "vitae nibh. Nunc vitae ante"
+      text run at (1235,15) width 167: "non odio interdum blandit."
+      text run at (1253,15) width 126: "Curabitur leo quam,"
+      text run at (1271,15) width 164: "fermentum sed, feugiat in,"
+      text run at (1289,15) width 131: "ullamcorper id, nibh."
+      text run at (1307,15) width 155: "Suspendisse ac turpis. In"
+      text run at (1325,15) width 141: "iaculis sollicitudin dui."
+      text run at (1343,15) width 157: "Aenean vitae lectus vitae"
+      text run at (1361,15) width 113: "nulla pellentesque"
+      text run at (1379,15) width 163: "sollicitudin. Nunc gravida"
+      text run at (1397,15) width 172: "pharetra lectus. Etiam lacus"
+      text run at (1415,15) width 159: "ligula, placerat ut, dictum"
+      text run at (1433,15) width 147: "vitae, tempus vel, risus."
+      text run at (1451,15) width 144: "Cras rhoncus. Praesent"
+      text run at (1469,15) width 169: "varius ultricies orci. Donec"
+      text run at (1493,15) width 143: "mattis, neque ut ornare"
+      text run at (1511,15) width 168: "fringilla, ante urna placerat"
+      text run at (1529,15) width 146: "eros, vel commodo nisi"
+      text run at (1547,15) width 143: "tortor ut mauris. Morbi"
+      text run at (1565,15) width 173: "magna dui, sagittis sit amet,"
+      text run at (1583,15) width 147: "tincidunt et, elementum"
+      text run at (1601,15) width 170: "eget, quam. Fusce molestie"
+      text run at (1619,15) width 174: "nisl vitae nisi. Vestibulum a"
+      text run at (1637,15) width 137: "sapien. Phasellus ante"
+      text run at (1655,15) width 169: "lacus, vehicula non, cursus"
+      text run at (1673,15) width 129: "a, tempor ut, magna."
+      text run at (1691,15) width 169: "Suspendisse potenti. Fusce"
+      text run at (1709,15) width 126: "aliquet, odio viverra"
+      text run at (1727,15) width 144: "vulputate dictum, enim"
+      text run at (1745,15) width 128: "odio luctus purus, ut"
+      text run at (1763,15) width 171: "scelerisque quam nulla non"
+      text run at (1781,15) width 137: "est. Donec eros lacus,"
+      text run at (1799,15) width 162: "egestas vitae, lacinia quis,"
+      text run at (1817,15) width 159: "tempor quis, pede. Morbi"
+      text run at (1835,15) width 163: "orci erat, iaculis id, ornare"
+      text run at (1853,15) width 143: "ac, elementum at, sem."
+      text run at (1871,15) width 159: "Nunc ornare sodales nisi."
+      text run at (1889,15) width 166: "Morbi interdum commodo"
+      text run at (1907,15) width 155: "nisl. Fusce eget eros non"
+      text run at (1925,15) width 149: "nisi ornare facilisis. Sed"
+      text run at (1943,15) width 155: "placerat, est non posuere"
+      text run at (1961,15) width 121: "posuere, purus sem"
+      text run at (1979,15) width 163: "dignissim libero, a viverra"
+      text run at (1997,15) width 170: "tellus dolor vel lorem. Cras"
+      text run at (2015,15) width 136: "augue. Etiam ultricies"
+      text run at (2033,15) width 165: "consequat odio. Mauris ac"
+      text run at (2051,15) width 138: "libero. Etiam posuere,"
+      text run at (2069,15) width 127: "libero vitae euismod"
+      text run at (2087,15) width 169: "gravida, urna elit imperdiet"
+      text run at (2105,15) width 166: "magna, vel cursus elit felis"
+      text run at (2123,15) width 148: "non mauris. Donec orci"
+      text run at (2141,15) width 167: "erat, porta id, dignissim ut,"
+      text run at (2159,15) width 127: "posuere dictum, leo."
+      text run at (2177,15) width 150: "Suspendisse scelerisque"
+      text run at (2195,15) width 84: "egestas nulla."
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-avoidance-expected.checksum b/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-avoidance-expected.checksum
new file mode 100644
index 0000000..ab4427a
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-avoidance-expected.checksum
@@ -0,0 +1 @@
+01defce90c3800fcfeb968457251f6ee
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-avoidance-expected.png b/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-avoidance-expected.png
new file mode 100644
index 0000000..769fa82
Binary files /dev/null and b/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-avoidance-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-avoidance-expected.txt b/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-avoidance-expected.txt
new file mode 100644
index 0000000..0e5fd69
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-avoidance-expected.txt
@@ -0,0 +1,18 @@
+layer at (0,0) size 785x643
+  RenderView at (0,0) size 785x600
+layer at (0,0) size 785x600
+  RenderBlock {HTML} at (0,0) size 785x600
+    RenderBody {BODY} at (8,8) size 769x584
+      RenderBlock (floating) {DIV} at (0,0) size 100x200 [bgcolor=#00FF00]
+layer at (8,208) size 126x435
+  RenderBlock {DIV} at (0,200) size 126x435 [border: (10px solid #000000)]
+    RenderBlock {P} at (10,10) size 90x415
+      RenderText {#text} at (0,0) size 90x415
+        text run at (0,0) width 415: "This technology preview of our award winning next generation"
+        text run at (18,0) width 56: "browser "
+        text run at (18,56) width 359: "is a sign of things to come from Mozilla. Powerful yet"
+        text run at (36,0) width 122: "easy to use. This "
+        text run at (36,122) width 293: "maintenance release provides a few updates"
+        text run at (54,0) width 246: "based on user feedback - including "
+        text run at (54,246) width 169: "changes to the Extension"
+        text run at (72,0) width 201: "System and icon improvements."
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-multicol-expected.checksum b/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-multicol-expected.checksum
new file mode 100644
index 0000000..376c88b
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-multicol-expected.checksum
@@ -0,0 +1 @@
+093f74048574506db208405aaac3c977
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-multicol-expected.png b/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-multicol-expected.png
new file mode 100644
index 0000000..2835b39
Binary files /dev/null and b/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-multicol-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-multicol-expected.txt b/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-multicol-expected.txt
new file mode 100644
index 0000000..1c570a6
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-multicol-expected.txt
@@ -0,0 +1,238 @@
+layer at (0,0) size 785x1508
+  RenderView at (0,0) size 785x600
+layer at (0,0) size 375x600
+  RenderBlock {HTML} at (0,0) size 375x600
+layer at (19,8) size 340x1500
+  RenderBody {BODY} at (19,8) size 340x1500
+    RenderBlock {DIV} at (0,0) size 56x478 [bgcolor=#00FFFF]
+      RenderBlock (floating) {DIV} at (4,4) size 540x239 [bgcolor=#FFFF00]
+        RenderImage {IMG} at (0,0) size 133x70
+        RenderText {#text} at (0,70) size 144x167
+          text run at (0,70) width 96: "You've already"
+          text run at (18,70) width 153: "downloaded a build. All"
+          text run at (36,70) width 162: "you have to do is use it as"
+          text run at (54,70) width 146: "your everyday browser"
+          text run at (72,70) width 152: "and mail/news reader. If"
+          text run at (90,70) width 153: "you downloaded a build"
+          text run at (108,70) width 167: "with Talkback, please turn"
+          text run at (126,70) width 114: "it on when it asks."
+        RenderBlock (floating) {DIV} at (144,157) size 396x82 [bgcolor=#FF0000]
+          RenderBlock {P} at (16,0) size 18x82
+            RenderText {#text} at (0,0) size 18x74
+              text run at (0,0) width 74: "Hola hola 1"
+          RenderBlock {P} at (50,0) size 18x82
+            RenderText {#text} at (0,0) size 18x74
+              text run at (0,0) width 74: "Hola hola 2"
+          RenderBlock {P} at (84,0) size 18x82
+            RenderText {#text} at (0,0) size 18x74
+              text run at (0,0) width 74: "Hola hola 3"
+          RenderBlock {P} at (118,0) size 18x82
+            RenderText {#text} at (0,0) size 18x74
+              text run at (0,0) width 74: "Hola hola 4"
+          RenderBlock {P} at (152,0) size 18x82
+            RenderText {#text} at (0,0) size 18x74
+              text run at (0,0) width 74: "Hola hola 5"
+          RenderBlock {P} at (192,0) size 18x82
+            RenderText {#text} at (0,0) size 18x74
+              text run at (0,0) width 74: "Hola hola 6"
+          RenderBlock {P} at (226,0) size 18x82
+            RenderText {#text} at (0,0) size 18x74
+              text run at (0,0) width 74: "Hola hola 7"
+          RenderBlock {P} at (260,0) size 18x82
+            RenderText {#text} at (0,0) size 18x74
+              text run at (0,0) width 74: "Hola hola 8"
+          RenderBlock {P} at (294,0) size 18x82
+            RenderText {#text} at (0,0) size 18x74
+              text run at (0,0) width 74: "Hola hola 9"
+          RenderBlock {P} at (328,0) size 18x82
+            RenderText {#text} at (0,0) size 18x82
+              text run at (0,0) width 82: "Hola hola 10"
+          RenderBlock {P} at (362,0) size 18x82
+            RenderText {#text} at (0,0) size 18x82
+              text run at (0,0) width 82: "Hola hola 11"
+        RenderText {#text} at (144,0) size 108x155
+          text run at (144,0) width 155: "Talkback reports give us"
+          text run at (162,0) width 142: "really valuable data on"
+          text run at (180,0) width 135: "which crashes are the"
+          text run at (198,0) width 141: "most serious, and how"
+          text run at (216,0) width 101: "often people are"
+          text run at (234,0) width 121: "encountering them."
+      RenderBlock (floating) {DIV} at (0,395) size 306x83 [bgcolor=#FF00FF]
+        RenderBlock {P} at (0,0) size 18x83
+          RenderText {#text} at (0,0) size 18x83
+            text run at (0,0) width 83: "Hello Kitty 1"
+        RenderBlock {P} at (34,0) size 18x83
+          RenderText {#text} at (0,0) size 18x83
+            text run at (0,0) width 83: "Hello Kitty 2"
+        RenderBlock {P} at (68,0) size 18x83
+          RenderText {#text} at (0,0) size 18x83
+            text run at (0,0) width 83: "Hello Kitty 3"
+        RenderBlock {P} at (102,0) size 18x83
+          RenderText {#text} at (0,0) size 18x83
+            text run at (0,0) width 83: "Hello Kitty 4"
+        RenderBlock {P} at (136,0) size 18x83
+          RenderText {#text} at (0,0) size 18x83
+            text run at (0,0) width 83: "Hello Kitty 5"
+        RenderBlock {P} at (170,0) size 18x83
+          RenderText {#text} at (0,0) size 18x83
+            text run at (0,0) width 83: "Hello Kitty 6"
+        RenderBlock {P} at (204,0) size 18x83
+          RenderText {#text} at (0,0) size 18x83
+            text run at (0,0) width 83: "Hello Kitty 7"
+        RenderBlock {P} at (238,0) size 18x83
+          RenderText {#text} at (0,0) size 18x83
+            text run at (0,0) width 83: "Hello Kitty 8"
+        RenderBlock {P} at (272,0) size 18x83
+          RenderText {#text} at (0,0) size 18x83
+            text run at (0,0) width 83: "Hello Kitty 9"
+      RenderBlock {H2} at (0,0) size 56x478
+        RenderText {#text} at (0,247) size 56x132
+          text run at (0,247) width 124: "What Needs"
+          text run at (28,247) width 132: "To Be Done?"
+    RenderBlock (floating) {DIV} at (75,247) size 401x82 [bgcolor=#808080]
+      RenderBlock {P} at (16,0) size 18x82
+        RenderText {#text} at (0,0) size 18x74
+          text run at (0,0) width 74: "Hola hola 1"
+      RenderBlock {P} at (50,0) size 18x82
+        RenderText {#text} at (0,0) size 18x74
+          text run at (0,0) width 74: "Hola hola 2"
+      RenderBlock {P} at (84,0) size 18x82
+        RenderText {#text} at (0,0) size 18x74
+          text run at (0,0) width 74: "Hola hola 3"
+      RenderBlock {P} at (118,0) size 18x82
+        RenderText {#text} at (0,0) size 18x74
+          text run at (0,0) width 74: "Hola hola 4"
+      RenderBlock {P} at (152,0) size 18x82
+        RenderText {#text} at (0,0) size 18x74
+          text run at (0,0) width 74: "Hola hola 5"
+      RenderBlock {P} at (186,0) size 18x82
+        RenderText {#text} at (0,0) size 18x74
+          text run at (0,0) width 74: "Hola hola 6"
+      RenderBlock {P} at (220,0) size 18x82
+        RenderText {#text} at (0,0) size 18x74
+          text run at (0,0) width 74: "Hola hola 7"
+      RenderBlock {P} at (265,0) size 18x82
+        RenderText {#text} at (0,0) size 18x74
+          text run at (0,0) width 74: "Hola hola 8"
+      RenderBlock {P} at (299,0) size 18x82
+        RenderText {#text} at (0,0) size 18x74
+          text run at (0,0) width 74: "Hola hola 9"
+      RenderBlock {P} at (333,0) size 18x82
+        RenderText {#text} at (0,0) size 18x82
+          text run at (0,0) width 82: "Hola hola 10"
+      RenderBlock {P} at (367,0) size 18x82
+        RenderText {#text} at (0,0) size 18x82
+          text run at (0,0) width 82: "Hola hola 11"
+    RenderBlock {DL} at (75,0) size 695x478
+      RenderBlock {DT} at (0,0) size 36x478
+        RenderText {#text} at (0,329) size 36x43
+          text run at (0,329) width 43: "Report"
+          text run at (18,329) width 33: "Bugs"
+      RenderBlock {DD} at (52,40) size 483x438
+        RenderBlock {P} at (0,0) size 483x438
+          RenderText {#text} at (0,289) size 321x146
+            text run at (0,289) width 46: "You've"
+            text run at (18,289) width 46: "already"
+            text run at (179,289) width 129: "downloaded a build."
+            text run at (213,289) width 132: "All you have to do is"
+            text run at (231,289) width 37: "use it "
+            text run at (231,326) width 17: "as "
+            text run at (231,343) width 91: "your everyday"
+            text run at (249,289) width 146: "browser and mail/news"
+            text run at (267,289) width 85: "reader. If you"
+            text run at (285,289) width 125: "downloaded a build"
+            text run at (303,289) width 32: "with "
+            text run at (303,321) width 67: "Talkback, "
+          RenderInline {EM} at (0,0) size 36x139
+            RenderText {#text} at (303,388) size 36x139
+              text run at (303,388) width 40: "please"
+              text run at (321,289) width 58: "turn it on"
+          RenderText {#text} at (321,347) size 144x433
+            text run at (321,347) width 86: " when it asks."
+            text run at (339,289) width 137: "Talkback reports give"
+            text run at (357,207) width 144: "us really valuable data "
+            text run at (357,351) width 59: "on which"
+            text run at (375,207) width 205: "crashes are the most serious, and"
+            text run at (393,207) width 32: "how "
+            text run at (393,239) width 187: "often people are encountering"
+            text run at (411,207) width 198: "them. And all you have to do is"
+            text run at (429,0) width 80: "click \"OK\". "
+            text run at (429,80) width 351: "If you find something you think is a bug, check to see if"
+            text run at (447,0) width 95: "it's not already "
+          RenderInline {A} at (0,0) size 18x83 [color=#0000EE]
+            RenderText {#text} at (447,95) size 18x83
+              text run at (447,95) width 83: "known about"
+          RenderText {#text} at (447,178) size 18x177
+            text run at (447,178) width 109: ", and then please "
+            text run at (447,287) width 68: "follow the "
+          RenderInline {A} at (0,0) size 36x379 [color=#0000EE]
+            RenderText {#text} at (447,355) size 36x379
+              text run at (447,355) width 24: "bug"
+              text run at (465,0) width 137: "submission procedure"
+          RenderText {#text} at (465,137) size 18x4
+            text run at (465,137) width 4: "."
+      RenderBlock (floating) {DIV} at (551,0) size 394x82 [bgcolor=#008000]
+        RenderBlock {P} at (16,0) size 18x82
+          RenderText {#text} at (0,0) size 18x74
+            text run at (0,0) width 74: "Hola hola 1"
+        RenderBlock {P} at (54,0) size 18x82
+          RenderText {#text} at (0,0) size 18x74
+            text run at (0,0) width 74: "Hola hola 2"
+        RenderBlock {P} at (88,0) size 18x82
+          RenderText {#text} at (0,0) size 18x74
+            text run at (0,0) width 74: "Hola hola 3"
+        RenderBlock {P} at (122,0) size 18x82
+          RenderText {#text} at (0,0) size 18x74
+            text run at (0,0) width 74: "Hola hola 4"
+        RenderBlock {P} at (156,0) size 18x82
+          RenderText {#text} at (0,0) size 18x74
+            text run at (0,0) width 74: "Hola hola 5"
+        RenderBlock {P} at (190,0) size 18x82
+          RenderText {#text} at (0,0) size 18x74
+            text run at (0,0) width 74: "Hola hola 6"
+        RenderBlock {P} at (224,0) size 18x82
+          RenderText {#text} at (0,0) size 18x74
+            text run at (0,0) width 74: "Hola hola 7"
+        RenderBlock {P} at (258,0) size 18x82
+          RenderText {#text} at (0,0) size 18x74
+            text run at (0,0) width 74: "Hola hola 8"
+        RenderBlock {P} at (292,0) size 18x82
+          RenderText {#text} at (0,0) size 18x74
+            text run at (0,0) width 74: "Hola hola 9"
+        RenderBlock {P} at (326,0) size 18x82
+          RenderText {#text} at (0,0) size 18x82
+            text run at (0,0) width 82: "Hola hola 10"
+        RenderBlock {P} at (360,0) size 18x82
+          RenderText {#text} at (0,0) size 18x82
+            text run at (0,0) width 82: "Hola hola 11"
+      RenderBlock {DT} at (551,0) size 18x478
+        RenderText {#text} at (0,82) size 18x117
+          text run at (0,82) width 117: "Quality Assurance"
+      RenderBlock {DD} at (585,40) size 110x438
+        RenderBlock {P} at (0,0) size 110x438
+          RenderInline {A} at (0,0) size 18x76 [color=#0000EE]
+            RenderText {#text} at (0,42) size 18x76
+              text run at (0,42) width 76: "Mozilla QA"
+          RenderText {#text} at (0,118) size 18x40
+            text run at (0,118) width 4: " "
+            text run at (0,122) width 36: "has a "
+          RenderInline {A} at (0,0) size 18x30 [color=#0000EE]
+            RenderText {#text} at (0,158) size 18x30
+              text run at (0,158) width 30: "page"
+          RenderText {#text} at (0,188) size 110x393
+            text run at (0,188) width 4: " "
+            text run at (0,192) width 243: "dedicated to ways to get involved with"
+            text run at (20,42) width 186: "helping. This doesn't involve "
+            text run at (20,228) width 201: "knowing how to code, although"
+            text run at (38,42) width 291: "a little knowledge of HTML is helpful. Being "
+            text run at (38,333) width 87: "involved with"
+            text run at (56,42) width 42: "QA is "
+            text run at (56,84) width 314: "good for people wanting to get more familiar with"
+            text run at (74,42) width 383: "Mozilla, and there's a strong community. A particularly good"
+            text run at (92,42) width 129: "way to get involved "
+            text run at (92,171) width 81: "is to join the "
+          RenderInline {A} at (0,0) size 18x73 [color=#0000EE]
+            RenderText {#text} at (92,252) size 18x73
+              text run at (92,252) width 73: "BugAThon"
+          RenderText {#text} at (92,325) size 18x4
+            text run at (92,325) width 4: "."
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-paginate-complex-expected.checksum b/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-paginate-complex-expected.checksum
new file mode 100644
index 0000000..199bff3
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-paginate-complex-expected.checksum
@@ -0,0 +1 @@
+f5e2c90e4b5d810d2d540b44e4f924ae
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-paginate-complex-expected.png b/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-paginate-complex-expected.png
new file mode 100644
index 0000000..4cb02c8
Binary files /dev/null and b/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-paginate-complex-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-paginate-complex-expected.txt b/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-paginate-complex-expected.txt
new file mode 100644
index 0000000..e831bf3
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-paginate-complex-expected.txt
@@ -0,0 +1,304 @@
+layer at (0,0) size 1680x1208
+  RenderView at (0,0) size 785x585
+layer at (0,0) size 1680x585
+  RenderBlock {HTML} at (0,0) size 1680x585
+    RenderBody {BODY} at (8,8) size 1664x1200
+layer at (8,8) size 404x1200
+  RenderBlock {DIV} at (0,0) size 404x1200 [border: (2px solid #000000)]
+    RenderBlock (anonymous) at (2,2) size 252x388
+      RenderText {#text} at (0,0) size 18x110
+        text run at (0,0) width 110: "This is some text."
+      RenderBR {BR} at (4,110) size 0x0
+      RenderText {#text} at (18,0) size 18x110
+        text run at (18,0) width 110: "This is some text."
+      RenderBR {BR} at (22,110) size 0x0
+      RenderText {#text} at (36,0) size 18x110
+        text run at (36,0) width 110: "This is some text."
+      RenderBR {BR} at (40,110) size 0x0
+      RenderText {#text} at (54,0) size 18x110
+        text run at (54,0) width 110: "This is some text."
+      RenderBR {BR} at (58,110) size 0x0
+      RenderText {#text} at (72,0) size 18x110
+        text run at (72,0) width 110: "This is some text."
+      RenderBR {BR} at (76,110) size 0x0
+      RenderText {#text} at (90,0) size 18x110
+        text run at (90,0) width 110: "This is some text."
+      RenderBR {BR} at (94,110) size 0x0
+      RenderText {#text} at (108,0) size 18x110
+        text run at (108,0) width 110: "This is some text."
+      RenderBR {BR} at (112,110) size 0x0
+      RenderText {#text} at (126,0) size 18x110
+        text run at (126,0) width 110: "This is some text."
+      RenderBR {BR} at (130,110) size 0x0
+      RenderText {#text} at (144,0) size 18x110
+        text run at (144,0) width 110: "This is some text."
+      RenderBR {BR} at (148,110) size 0x0
+      RenderText {#text} at (162,0) size 18x110
+        text run at (162,0) width 110: "This is some text."
+      RenderBR {BR} at (166,110) size 0x0
+      RenderText {#text} at (180,0) size 18x110
+        text run at (180,0) width 110: "This is some text."
+      RenderBR {BR} at (184,110) size 0x0
+      RenderText {#text} at (198,0) size 18x110
+        text run at (198,0) width 110: "This is some text."
+      RenderBR {BR} at (202,110) size 0x0
+      RenderText {#text} at (216,0) size 18x110
+        text run at (216,0) width 110: "This is some text."
+      RenderBR {BR} at (220,110) size 0x0
+      RenderText {#text} at (234,0) size 18x110
+        text run at (234,0) width 110: "This is some text."
+      RenderBR {BR} at (238,110) size 0x0
+    RenderBlock {P} at (270,2) size 604x388
+      RenderBlock (floating) {SPAN} at (132,0) size 147x78
+        RenderText {#text} at (0,0) size 147x78
+          text run at (0,0) width 78: "T"
+      RenderText {#text} at (132,78) size 18x100
+        text run at (132,78) width 100: "his is some text."
+      RenderBR {BR} at (136,178) size 0x0
+      RenderText {#text} at (150,78) size 18x110
+        text run at (150,78) width 110: "This is some text."
+      RenderBR {BR} at (154,188) size 0x0
+      RenderText {#text} at (168,78) size 18x110
+        text run at (168,78) width 110: "This is some text."
+      RenderBR {BR} at (172,188) size 0x0
+      RenderText {#text} at (186,78) size 18x110
+        text run at (186,78) width 110: "This is some text."
+      RenderBR {BR} at (190,188) size 0x0
+      RenderText {#text} at (204,78) size 18x110
+        text run at (204,78) width 110: "This is some text."
+      RenderBR {BR} at (208,188) size 0x0
+      RenderText {#text} at (222,78) size 18x110
+        text run at (222,78) width 110: "This is some text."
+      RenderBR {BR} at (226,188) size 0x0
+      RenderText {#text} at (240,78) size 18x110
+        text run at (240,78) width 110: "This is some text."
+      RenderBR {BR} at (244,188) size 0x0
+      RenderText {#text} at (258,78) size 18x110
+        text run at (258,78) width 110: "This is some text."
+      RenderBR {BR} at (262,188) size 0x0
+      RenderText {#text} at (276,78) size 18x110
+        text run at (276,78) width 110: "This is some text."
+      RenderBR {BR} at (280,188) size 0x0
+      RenderText {#text} at (294,0) size 18x110
+        text run at (294,0) width 110: "This is some text."
+      RenderBR {BR} at (298,110) size 0x0
+      RenderText {#text} at (312,0) size 18x110
+        text run at (312,0) width 110: "This is some text."
+      RenderBR {BR} at (316,110) size 0x0
+      RenderText {#text} at (330,0) size 18x110
+        text run at (330,0) width 110: "This is some text."
+      RenderBR {BR} at (334,110) size 0x0
+      RenderText {#text} at (348,0) size 18x110
+        text run at (348,0) width 110: "This is some text."
+      RenderBR {BR} at (352,110) size 0x0
+      RenderText {#text} at (366,0) size 18x110
+        text run at (366,0) width 110: "This is some text."
+      RenderBR {BR} at (370,110) size 0x0
+      RenderText {#text} at (384,0) size 18x110
+        text run at (384,0) width 110: "This is some text."
+      RenderBR {BR} at (388,110) size 0x0
+      RenderText {#text} at (402,0) size 18x110
+        text run at (402,0) width 110: "This is some text."
+      RenderBR {BR} at (406,110) size 0x0
+      RenderText {#text} at (420,0) size 18x110
+        text run at (420,0) width 110: "This is some text."
+      RenderBR {BR} at (424,110) size 0x0
+      RenderText {#text} at (438,0) size 18x110
+        text run at (438,0) width 110: "This is some text."
+      RenderBR {BR} at (442,110) size 0x0
+      RenderText {#text} at (456,0) size 18x110
+        text run at (456,0) width 110: "This is some text."
+      RenderBR {BR} at (460,110) size 0x0
+      RenderText {#text} at (474,0) size 18x110
+        text run at (474,0) width 110: "This is some text."
+      RenderBR {BR} at (478,110) size 0x0
+      RenderText {#text} at (492,0) size 18x110
+        text run at (492,0) width 110: "This is some text."
+      RenderBR {BR} at (496,110) size 0x0
+      RenderText {#text} at (510,0) size 18x110
+        text run at (510,0) width 110: "This is some text."
+      RenderBR {BR} at (514,110) size 0x0
+      RenderText {#text} at (532,0) size 18x110
+        text run at (532,0) width 110: "This is some text."
+      RenderBR {BR} at (536,110) size 0x0
+      RenderText {#text} at (550,0) size 18x110
+        text run at (550,0) width 110: "This is some text."
+      RenderBR {BR} at (554,110) size 0x0
+      RenderText {#text} at (568,0) size 18x110
+        text run at (568,0) width 110: "This is some text."
+      RenderBR {BR} at (572,110) size 0x0
+      RenderText {#text} at (586,0) size 18x110
+        text run at (586,0) width 110: "This is some text."
+      RenderBR {BR} at (590,110) size 0x0
+layer at (428,8) size 404x1200
+  RenderBlock {DIV} at (420,0) size 404x1200 [border: (2px solid #000000)]
+    RenderBlock (anonymous) at (2,2) size 252x388
+      RenderText {#text} at (0,0) size 18x110
+        text run at (0,0) width 110: "This is some text."
+      RenderBR {BR} at (4,110) size 0x0
+      RenderText {#text} at (18,0) size 18x110
+        text run at (18,0) width 110: "This is some text."
+      RenderBR {BR} at (22,110) size 0x0
+      RenderText {#text} at (36,0) size 18x110
+        text run at (36,0) width 110: "This is some text."
+      RenderBR {BR} at (40,110) size 0x0
+      RenderText {#text} at (54,0) size 18x110
+        text run at (54,0) width 110: "This is some text."
+      RenderBR {BR} at (58,110) size 0x0
+      RenderText {#text} at (72,0) size 18x110
+        text run at (72,0) width 110: "This is some text."
+      RenderBR {BR} at (76,110) size 0x0
+      RenderText {#text} at (90,0) size 18x110
+        text run at (90,0) width 110: "This is some text."
+      RenderBR {BR} at (94,110) size 0x0
+      RenderText {#text} at (108,0) size 18x110
+        text run at (108,0) width 110: "This is some text."
+      RenderBR {BR} at (112,110) size 0x0
+      RenderText {#text} at (126,0) size 18x110
+        text run at (126,0) width 110: "This is some text."
+      RenderBR {BR} at (130,110) size 0x0
+      RenderText {#text} at (144,0) size 18x110
+        text run at (144,0) width 110: "This is some text."
+      RenderBR {BR} at (148,110) size 0x0
+      RenderText {#text} at (162,0) size 18x110
+        text run at (162,0) width 110: "This is some text."
+      RenderBR {BR} at (166,110) size 0x0
+      RenderText {#text} at (180,0) size 18x110
+        text run at (180,0) width 110: "This is some text."
+      RenderBR {BR} at (184,110) size 0x0
+      RenderText {#text} at (198,0) size 18x110
+        text run at (198,0) width 110: "This is some text."
+      RenderBR {BR} at (202,110) size 0x0
+      RenderText {#text} at (216,0) size 18x110
+        text run at (216,0) width 110: "This is some text."
+      RenderBR {BR} at (220,110) size 0x0
+      RenderText {#text} at (234,0) size 18x110
+        text run at (234,0) width 110: "This is some text."
+      RenderBR {BR} at (238,110) size 0x0
+    RenderBlock {P} at (270,2) size 604x388
+      RenderImage {IMG} at (132,0) size 100x100 [bgcolor=#008000]
+      RenderImage {IMG} at (132,288) size 200x100 [bgcolor=#008000]
+      RenderText {#text} at (132,100) size 18x106
+        text run at (132,100) width 106: "This is some text"
+      RenderBR {BR} at (136,206) size 0x0
+      RenderText {#text} at (150,100) size 18x110
+        text run at (150,100) width 110: "This is some text."
+      RenderBR {BR} at (154,210) size 0x0
+      RenderText {#text} at (168,100) size 18x110
+        text run at (168,100) width 110: "This is some text."
+      RenderBR {BR} at (172,210) size 0x0
+      RenderText {#text} at (186,100) size 18x110
+        text run at (186,100) width 110: "This is some text."
+      RenderBR {BR} at (190,210) size 0x0
+      RenderText {#text} at (204,100) size 18x110
+        text run at (204,100) width 110: "This is some text."
+      RenderBR {BR} at (208,210) size 0x0
+      RenderText {#text} at (222,100) size 18x110
+        text run at (222,100) width 110: "This is some text."
+      RenderBR {BR} at (226,210) size 0x0
+      RenderText {#text} at (240,0) size 18x110
+        text run at (240,0) width 110: "This is some text."
+      RenderBR {BR} at (244,110) size 0x0
+      RenderText {#text} at (258,0) size 18x110
+        text run at (258,0) width 110: "This is some text."
+      RenderBR {BR} at (262,110) size 0x0
+      RenderText {#text} at (276,0) size 18x110
+        text run at (276,0) width 110: "This is some text."
+      RenderBR {BR} at (280,110) size 0x0
+      RenderText {#text} at (294,0) size 18x110
+        text run at (294,0) width 110: "This is some text."
+      RenderBR {BR} at (298,110) size 0x0
+      RenderText {#text} at (312,0) size 18x110
+        text run at (312,0) width 110: "This is some text."
+      RenderBR {BR} at (316,110) size 0x0
+      RenderText {#text} at (330,0) size 18x110
+        text run at (330,0) width 110: "This is some text."
+      RenderBR {BR} at (334,110) size 0x0
+      RenderText {#text} at (348,0) size 18x110
+        text run at (348,0) width 110: "This is some text."
+      RenderBR {BR} at (352,110) size 0x0
+      RenderText {#text} at (366,0) size 18x110
+        text run at (366,0) width 110: "This is some text."
+      RenderBR {BR} at (370,110) size 0x0
+      RenderText {#text} at (384,0) size 18x110
+        text run at (384,0) width 110: "This is some text."
+      RenderBR {BR} at (388,110) size 0x0
+      RenderText {#text} at (402,0) size 18x110
+        text run at (402,0) width 110: "This is some text."
+      RenderBR {BR} at (406,110) size 0x0
+      RenderText {#text} at (420,0) size 18x110
+        text run at (420,0) width 110: "This is some text."
+      RenderBR {BR} at (424,110) size 0x0
+      RenderText {#text} at (438,0) size 18x110
+        text run at (438,0) width 110: "This is some text."
+      RenderBR {BR} at (442,110) size 0x0
+      RenderText {#text} at (456,0) size 18x110
+        text run at (456,0) width 110: "This is some text."
+      RenderBR {BR} at (460,110) size 0x0
+      RenderText {#text} at (474,0) size 18x110
+        text run at (474,0) width 110: "This is some text."
+      RenderBR {BR} at (478,110) size 0x0
+      RenderText {#text} at (492,0) size 18x110
+        text run at (492,0) width 110: "This is some text."
+      RenderBR {BR} at (496,110) size 0x0
+      RenderText {#text} at (510,0) size 18x110
+        text run at (510,0) width 110: "This is some text."
+      RenderBR {BR} at (514,110) size 0x0
+      RenderText {#text} at (532,0) size 18x110
+        text run at (532,0) width 110: "This is some text."
+      RenderBR {BR} at (536,110) size 0x0
+      RenderText {#text} at (550,0) size 18x110
+        text run at (550,0) width 110: "This is some text."
+      RenderBR {BR} at (554,110) size 0x0
+      RenderText {#text} at (568,0) size 18x110
+        text run at (568,0) width 110: "This is some text."
+      RenderBR {BR} at (572,110) size 0x0
+      RenderText {#text} at (586,0) size 18x110
+        text run at (586,0) width 110: "This is some text."
+      RenderBR {BR} at (590,110) size 0x0
+layer at (848,8) size 404x1200
+  RenderBlock {DIV} at (840,0) size 404x1200 [border: (2px solid #000000)]
+    RenderImage {IMG} at (2,2) size 390x300 [bgcolor=#008000]
+    RenderText {#text} at (2,302) size 418x380
+      text run at (2,302) width 73: "Longer text"
+      text run at (20,302) width 72: "designed to"
+      text run at (38,302) width 80: "test float and"
+      text run at (56,302) width 60: "wrapping"
+      text run at (74,302) width 59: "behavior."
+      text run at (92,302) width 73: "Longer text"
+      text run at (110,302) width 72: "designed to"
+      text run at (128,302) width 80: "test float and"
+      text run at (146,302) width 60: "wrapping"
+      text run at (164,302) width 59: "behavior."
+      text run at (182,302) width 73: "Longer text"
+      text run at (200,302) width 72: "designed to"
+      text run at (218,302) width 80: "test float and"
+      text run at (236,302) width 60: "wrapping"
+      text run at (254,302) width 59: "behavior."
+      text run at (272,302) width 73: "Longer text"
+      text run at (290,302) width 72: "designed to"
+      text run at (308,302) width 80: "test float and"
+      text run at (326,302) width 60: "wrapping"
+      text run at (344,302) width 59: "behavior."
+      text run at (362,302) width 73: "Longer text"
+      text run at (380,302) width 72: "designed to"
+      text run at (402,2) width 207: "test float and wrapping behavior."
+layer at (1268,8) size 404x1200
+  RenderBlock {DIV} at (1260,0) size 404x1200 [border: (2px solid #000000)]
+    RenderImage {IMG} at (2,2) size 380x388 [bgcolor=#0000FF]
+    RenderInline {SPAN} at (0,0) size 252x383
+      RenderImage {IMG} at (402,2) size 20x100 [bgcolor=#008000]
+      RenderText {#text} at (402,102) size 28x211
+        text run at (402,102) width 211: "Longer text designed "
+      RenderImage {IMG} at (430,290) size 20x100 [bgcolor=#008000]
+      RenderText {#text} at (402,313) size 252x383
+        text run at (402,313) width 59: "to test"
+        text run at (430,2) width 280: "float and wrapping behavior."
+        text run at (458,2) width 362: "Longer text designed to test float and"
+        text run at (486,2) width 307: "wrapping behavior. Longer text"
+        text run at (514,2) width 340: "designed to test float and wrapping"
+        text run at (542,2) width 367: "behavior. Longer text designed to test"
+        text run at (570,2) width 356: "float and wrapping behavior. Longer"
+        text run at (598,2) width 383: "text designed to test float and wrapping"
+        text run at (626,2) width 91: "behavior."
+    RenderText {#text} at (0,0) size 0x0
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-paginate-expected.checksum b/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-paginate-expected.checksum
new file mode 100644
index 0000000..4eb14aa
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-paginate-expected.checksum
@@ -0,0 +1 @@
+b550f2fd1d3faec2cac10c52472b3bb0
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-paginate-expected.png b/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-paginate-expected.png
new file mode 100644
index 0000000..aea8b0f
Binary files /dev/null and b/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-paginate-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-paginate-expected.txt b/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-paginate-expected.txt
new file mode 100644
index 0000000..c4720c8
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-lr/float-paginate-expected.txt
@@ -0,0 +1,128 @@
+layer at (0,0) size 785x1208
+  RenderView at (0,0) size 785x600
+layer at (0,0) size 785x600
+  RenderBlock {HTML} at (0,0) size 785x600
+    RenderBody {BODY} at (8,8) size 769x1200
+layer at (8,8) size 404x1200
+  RenderBlock {DIV} at (0,0) size 404x1200 [border: (2px solid #000000)]
+    RenderText {#text} at (2,2) size 18x110
+      text run at (2,2) width 110: "This is some text."
+    RenderBR {BR} at (6,112) size 0x0
+    RenderText {#text} at (20,2) size 18x110
+      text run at (20,2) width 110: "This is some text."
+    RenderBR {BR} at (24,112) size 0x0
+    RenderText {#text} at (38,2) size 18x110
+      text run at (38,2) width 110: "This is some text."
+    RenderBR {BR} at (42,112) size 0x0
+    RenderText {#text} at (56,2) size 18x110
+      text run at (56,2) width 110: "This is some text."
+    RenderBR {BR} at (60,112) size 0x0
+    RenderText {#text} at (74,2) size 18x110
+      text run at (74,2) width 110: "This is some text."
+    RenderBR {BR} at (78,112) size 0x0
+    RenderText {#text} at (92,2) size 18x110
+      text run at (92,2) width 110: "This is some text."
+    RenderBR {BR} at (96,112) size 0x0
+    RenderText {#text} at (110,2) size 18x110
+      text run at (110,2) width 110: "This is some text."
+    RenderBR {BR} at (114,112) size 0x0
+    RenderText {#text} at (128,2) size 18x110
+      text run at (128,2) width 110: "This is some text."
+    RenderBR {BR} at (132,112) size 0x0
+    RenderText {#text} at (146,2) size 18x110
+      text run at (146,2) width 110: "This is some text."
+    RenderBR {BR} at (150,112) size 0x0
+    RenderText {#text} at (164,2) size 18x110
+      text run at (164,2) width 110: "This is some text."
+    RenderBR {BR} at (168,112) size 0x0
+    RenderImage {IMG} at (402,2) size 300x250 [bgcolor=#008000]
+    RenderText {#text} at (402,252) size 18x110
+      text run at (402,252) width 110: "This is some text."
+    RenderBR {BR} at (406,362) size 0x0
+    RenderText {#text} at (420,252) size 18x110
+      text run at (420,252) width 110: "This is some text."
+    RenderBR {BR} at (424,362) size 0x0
+    RenderText {#text} at (438,252) size 18x110
+      text run at (438,252) width 110: "This is some text."
+    RenderBR {BR} at (442,362) size 0x0
+    RenderText {#text} at (456,252) size 18x110
+      text run at (456,252) width 110: "This is some text."
+    RenderBR {BR} at (460,362) size 0x0
+    RenderText {#text} at (474,252) size 18x110
+      text run at (474,252) width 110: "This is some text."
+    RenderBR {BR} at (478,362) size 0x0
+    RenderText {#text} at (492,252) size 18x110
+      text run at (492,252) width 110: "This is some text."
+    RenderBR {BR} at (496,362) size 0x0
+    RenderText {#text} at (510,252) size 18x110
+      text run at (510,252) width 110: "This is some text."
+    RenderBR {BR} at (514,362) size 0x0
+    RenderText {#text} at (528,252) size 18x110
+      text run at (528,252) width 110: "This is some text."
+    RenderBR {BR} at (532,362) size 0x0
+    RenderText {#text} at (546,252) size 18x110
+      text run at (546,252) width 110: "This is some text."
+    RenderBR {BR} at (550,362) size 0x0
+    RenderText {#text} at (564,252) size 18x110
+      text run at (564,252) width 110: "This is some text."
+    RenderBR {BR} at (568,362) size 0x0
+    RenderText {#text} at (582,252) size 18x110
+      text run at (582,252) width 110: "This is some text."
+    RenderBR {BR} at (586,362) size 0x0
+    RenderText {#text} at (600,252) size 18x110
+      text run at (600,252) width 110: "This is some text."
+    RenderBR {BR} at (604,362) size 0x0
+    RenderText {#text} at (618,252) size 18x110
+      text run at (618,252) width 110: "This is some text."
+    RenderBR {BR} at (622,362) size 0x0
+    RenderText {#text} at (636,252) size 18x110
+      text run at (636,252) width 110: "This is some text."
+    RenderBR {BR} at (640,362) size 0x0
+    RenderText {#text} at (654,252) size 18x110
+      text run at (654,252) width 110: "This is some text."
+    RenderBR {BR} at (658,362) size 0x0
+    RenderText {#text} at (672,252) size 18x110
+      text run at (672,252) width 110: "This is some text."
+    RenderBR {BR} at (676,362) size 0x0
+    RenderText {#text} at (690,252) size 18x110
+      text run at (690,252) width 110: "This is some text."
+    RenderBR {BR} at (694,362) size 0x0
+    RenderText {#text} at (708,2) size 18x110
+      text run at (708,2) width 110: "This is some text."
+    RenderBR {BR} at (712,112) size 0x0
+    RenderText {#text} at (726,2) size 18x110
+      text run at (726,2) width 110: "This is some text."
+    RenderBR {BR} at (730,112) size 0x0
+    RenderText {#text} at (744,2) size 18x110
+      text run at (744,2) width 110: "This is some text."
+    RenderBR {BR} at (748,112) size 0x0
+    RenderText {#text} at (762,2) size 18x110
+      text run at (762,2) width 110: "This is some text."
+    RenderBR {BR} at (766,112) size 0x0
+    RenderText {#text} at (780,2) size 18x110
+      text run at (780,2) width 110: "This is some text."
+    RenderBR {BR} at (784,112) size 0x0
+    RenderText {#text} at (802,2) size 18x110
+      text run at (802,2) width 110: "This is some text."
+    RenderBR {BR} at (806,112) size 0x0
+    RenderText {#text} at (820,2) size 18x110
+      text run at (820,2) width 110: "This is some text."
+    RenderBR {BR} at (824,112) size 0x0
+    RenderText {#text} at (838,2) size 18x110
+      text run at (838,2) width 110: "This is some text."
+    RenderBR {BR} at (842,112) size 0x0
+    RenderText {#text} at (856,2) size 18x110
+      text run at (856,2) width 110: "This is some text."
+    RenderBR {BR} at (860,112) size 0x0
+    RenderText {#text} at (874,2) size 18x110
+      text run at (874,2) width 110: "This is some text."
+    RenderBR {BR} at (878,112) size 0x0
+    RenderText {#text} at (892,2) size 18x110
+      text run at (892,2) width 110: "This is some text."
+    RenderBR {BR} at (896,112) size 0x0
+    RenderText {#text} at (910,2) size 18x110
+      text run at (910,2) width 110: "This is some text."
+    RenderBR {BR} at (914,112) size 0x0
+    RenderText {#text} at (928,2) size 18x110
+      text run at (928,2) width 110: "This is some text."
+    RenderBR {BR} at (932,112) size 0x0
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-lr/nested-columns-expected.checksum b/LayoutTests/platform/mac/fast/multicol/vertical-lr/nested-columns-expected.checksum
new file mode 100644
index 0000000..924484b
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-lr/nested-columns-expected.checksum
@@ -0,0 +1 @@
+669f85374fc63ef7c51b60750aca7f78
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-lr/nested-columns-expected.png b/LayoutTests/platform/mac/fast/multicol/vertical-lr/nested-columns-expected.png
new file mode 100644
index 0000000..ff30b00
Binary files /dev/null and b/LayoutTests/platform/mac/fast/multicol/vertical-lr/nested-columns-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-lr/nested-columns-expected.txt b/LayoutTests/platform/mac/fast/multicol/vertical-lr/nested-columns-expected.txt
new file mode 100644
index 0000000..6dd20be
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-lr/nested-columns-expected.txt
@@ -0,0 +1,74 @@
+layer at (0,0) size 785x758
+  RenderView at (0,0) size 785x600
+layer at (0,0) size 785x600
+  RenderBlock {HTML} at (0,0) size 785x600
+layer at (8,8) size 500x750
+  RenderBody {BODY} at (8,8) size 500x750
+    RenderBlock {H1} at (0,0) size 37x367
+      RenderText {#text} at (0,0) size 37x166
+        text run at (0,0) width 166: "Header One"
+    RenderBlock (anonymous) at (58,0) size 198x367
+      RenderText {#text} at (0,0) size 198x362
+        text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
+        text run at (18,0) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
+        text run at (36,0) width 325: "lectus. Quisque adipiscing rhoncus sem. Proin nulla"
+        text run at (54,0) width 358: "purus, vulputate vel, varius ut, euismod et, nisi. Sed vitae"
+        text run at (72,0) width 343: "felis vel orci sagittis aliquam. Cras convallis adipiscing"
+        text run at (90,0) width 340: "sem. Nam nonummy enim. Nullam bibendum lobortis"
+        text run at (108,0) width 344: "neque. Vestibulum velit orci, tempus euismod, pretium"
+        text run at (126,0) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
+        text run at (144,0) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
+        text run at (162,0) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
+        text run at (180,0) width 229: "sit amet, consectetuer adipiscing elit."
+    RenderBlock {H1} at (277,0) size 37x367
+      RenderText {#text} at (0,0) size 37x169
+        text run at (0,0) width 169: "Header Two"
+    RenderBlock (anonymous) at (335,0) size 201x367
+      RenderText {#text} at (0,0) size 201x362
+        text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
+        text run at (18,0) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
+        text run at (36,0) width 325: "lectus. Quisque adipiscing rhoncus sem. Proin nulla"
+        text run at (54,0) width 358: "purus, vulputate vel, varius ut, euismod et, nisi. Sed vitae"
+        text run at (72,0) width 343: "felis vel orci sagittis aliquam. Cras convallis adipiscing"
+        text run at (90,0) width 340: "sem. Nam nonummy enim. Nullam bibendum lobortis"
+        text run at (108,0) width 344: "neque. Vestibulum velit orci, tempus euismod, pretium"
+        text run at (126,0) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
+        text run at (144,0) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
+        text run at (165,0) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
+        text run at (183,0) width 229: "sit amet, consectetuer adipiscing elit."
+    RenderBlock {H1} at (557,0) size 37x367
+      RenderText {#text} at (0,0) size 37x190
+        text run at (0,0) width 190: "Header Three"
+    RenderBlock {H1} at (852,0) size 37x367
+      RenderText {#text} at (0,0) size 37x177
+        text run at (0,0) width 177: "Header Four"
+    RenderBlock (anonymous) at (910,0) size 36x367
+      RenderText {#text} at (0,0) size 36x354
+        text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
+        text run at (18,0) width 154: "Nulla varius enim ac mi."
+layer at (623,8) size 216x367 backgroundClip at (0,0) size 785x758 clip at (0,0) size 785x758 outlineClip at (0,0) size 785x758
+  RenderBlock {DIV} at (615,0) size 216x367
+    RenderText {#text} at (0,0) size 396x175
+      text run at (0,0) width 139: "Lorem ipsum dolor sit"
+      text run at (18,0) width 116: "amet, consectetuer"
+      text run at (36,0) width 172: "adipiscing elit. Nulla varius"
+      text run at (54,0) width 137: "enim ac mi. Curabitur"
+      text run at (72,0) width 173: "sollicitudin felis quis lectus."
+      text run at (90,0) width 175: "Quisque adipiscing rhoncus"
+      text run at (108,0) width 145: "sem. Proin nulla purus,"
+      text run at (126,0) width 147: "vulputate vel, varius ut,"
+      text run at (144,0) width 164: "euismod et, nisi. Sed vitae"
+      text run at (162,0) width 124: "felis vel orci sagittis"
+      text run at (180,0) width 147: "aliquam. Cras convallis"
+      text run at (198,0) width 132: "adipiscing sem. Nam"
+      text run at (216,0) width 154: "nonummy enim. Nullam"
+      text run at (234,0) width 160: "bibendum lobortis neque."
+      text run at (252,0) width 136: "Vestibulum velit orci,"
+      text run at (270,0) width 158: "tempus euismod, pretium"
+      text run at (288,0) width 167: "quis, interdum vitae, nulla."
+      text run at (306,0) width 172: "Phasellus eget ante et tortor"
+      text run at (324,0) width 163: "condimentum vestibulum."
+      text run at (342,0) width 137: "Suspendisse hendrerit"
+      text run at (360,0) width 165: "quam nec felis. Sed varius"
+      text run at (378,0) width 111: "turpis vitae pede. "
+    RenderText {#text} at (0,0) size 0x0
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-lr/unsplittable-inline-block-expected.checksum b/LayoutTests/platform/mac/fast/multicol/vertical-lr/unsplittable-inline-block-expected.checksum
new file mode 100644
index 0000000..8a85393
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-lr/unsplittable-inline-block-expected.checksum
@@ -0,0 +1 @@
+2d13602d5d2cbf5df681cad9b9b673ca
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-lr/unsplittable-inline-block-expected.png b/LayoutTests/platform/mac/fast/multicol/vertical-lr/unsplittable-inline-block-expected.png
new file mode 100644
index 0000000..9aaaf85
Binary files /dev/null and b/LayoutTests/platform/mac/fast/multicol/vertical-lr/unsplittable-inline-block-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-lr/unsplittable-inline-block-expected.txt b/LayoutTests/platform/mac/fast/multicol/vertical-lr/unsplittable-inline-block-expected.txt
new file mode 100644
index 0000000..352da6d
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-lr/unsplittable-inline-block-expected.txt
@@ -0,0 +1,44 @@
+layer at (0,0) size 785x778
+  RenderView at (0,0) size 785x600
+layer at (0,0) size 785x600
+  RenderBlock {HTML} at (0,0) size 785x600
+    RenderBody {BODY} at (8,8) size 769x584
+layer at (8,8) size 320x770
+  RenderBlock {DIV} at (0,0) size 320x770 [border: (5px solid #000000)]
+    RenderBlock {DIV} at (10,10) size 250x367
+    RenderBlock (anonymous) at (310,10) size 202x367
+      RenderBlock {DIV} at (0,0) size 202x301 [border: (2px solid #008000)]
+        RenderText {#text} at (2,2) size 18x297
+          text run at (2,2) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (6,299) size 0x0
+        RenderText {#text} at (20,2) size 18x297
+          text run at (20,2) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (24,299) size 0x0
+        RenderText {#text} at (38,2) size 18x297
+          text run at (38,2) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (42,299) size 0x0
+        RenderText {#text} at (56,2) size 18x297
+          text run at (56,2) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (60,299) size 0x0
+        RenderText {#text} at (74,2) size 18x297
+          text run at (74,2) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (78,299) size 0x0
+        RenderText {#text} at (92,2) size 18x297
+          text run at (92,2) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (96,299) size 0x0
+        RenderText {#text} at (110,2) size 18x297
+          text run at (110,2) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (114,299) size 0x0
+        RenderText {#text} at (128,2) size 18x297
+          text run at (128,2) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (132,299) size 0x0
+        RenderText {#text} at (146,2) size 18x297
+          text run at (146,2) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (150,299) size 0x0
+        RenderText {#text} at (164,2) size 18x297
+          text run at (164,2) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (168,299) size 0x0
+        RenderText {#text} at (182,2) size 18x297
+          text run at (182,2) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (186,299) size 0x0
+      RenderText {#text} at (0,0) size 0x0
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-rl/border-padding-pagination-expected.checksum b/LayoutTests/platform/mac/fast/multicol/vertical-rl/border-padding-pagination-expected.checksum
new file mode 100644
index 0000000..457302c
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-rl/border-padding-pagination-expected.checksum
@@ -0,0 +1 @@
+4143971a5bc8452a5618482952288115
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-rl/border-padding-pagination-expected.png b/LayoutTests/platform/mac/fast/multicol/vertical-rl/border-padding-pagination-expected.png
new file mode 100644
index 0000000..2ca9bb1
Binary files /dev/null and b/LayoutTests/platform/mac/fast/multicol/vertical-rl/border-padding-pagination-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-rl/border-padding-pagination-expected.txt b/LayoutTests/platform/mac/fast/multicol/vertical-rl/border-padding-pagination-expected.txt
new file mode 100644
index 0000000..d49ab00
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-rl/border-padding-pagination-expected.txt
@@ -0,0 +1,15 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x584
+layer at (616,8) size 176x584
+  RenderBlock {DIV} at (0,0) size 176x584 [border: (2px solid #800000)]
+    RenderBlock {DIV} at (2,2) size 110x282
+    RenderBlock {DIV} at (174,2) size 156x379 [bgcolor=#00FF00] [border: (2px solid #000000)]
+      RenderBlock {DIV} at (2,12) size 152x355 [bgcolor=#008000] [border: (2px solid #0000FF)]
+        RenderInline {SPAN} at (0,0) size 148x192
+          RenderText {#text} at (2,2) size 148x192
+            text run at (2,2) width 165: "In 2nd"
+            text run at (76,2) width 192: "column"
+        RenderText {#text} at (0,0) size 0x0
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-rl/column-break-with-balancing-expected.checksum b/LayoutTests/platform/mac/fast/multicol/vertical-rl/column-break-with-balancing-expected.checksum
new file mode 100644
index 0000000..0ca0941
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-rl/column-break-with-balancing-expected.checksum
@@ -0,0 +1 @@
+4059d4dbd11823c2faadcbc379d483d5
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-rl/column-break-with-balancing-expected.png b/LayoutTests/platform/mac/fast/multicol/vertical-rl/column-break-with-balancing-expected.png
new file mode 100644
index 0000000..7486724
Binary files /dev/null and b/LayoutTests/platform/mac/fast/multicol/vertical-rl/column-break-with-balancing-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-rl/column-break-with-balancing-expected.txt b/LayoutTests/platform/mac/fast/multicol/vertical-rl/column-break-with-balancing-expected.txt
new file mode 100644
index 0000000..81300a3
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-rl/column-break-with-balancing-expected.txt
@@ -0,0 +1,164 @@
+layer at (0,0) size 808x585
+  RenderView at (0,0) size 800x585
+layer at (-8,0) size 808x585 backgroundClip at (0,0) size 808x585 clip at (0,0) size 808x585 outlineClip at (0,0) size 808x585
+  RenderBlock {HTML} at (0,0) size 808x585
+    RenderBody {BODY} at (8,8) size 792x569
+layer at (404,8) size 388x569
+  RenderBlock {DIV} at (0,0) size 388x569 [border: (5px solid #0000FF)]
+    RenderBlock (anonymous) at (5,5) size 378x271
+      RenderText {#text} at (0,0) size 18x110
+        text run at (0,0) width 110: "This is some text."
+      RenderBR {BR} at (14,110) size 0x0
+      RenderText {#text} at (18,0) size 18x110
+        text run at (18,0) width 110: "This is some text."
+      RenderBR {BR} at (32,110) size 0x0
+      RenderText {#text} at (36,0) size 18x110
+        text run at (36,0) width 110: "This is some text."
+      RenderBR {BR} at (50,110) size 0x0
+      RenderText {#text} at (54,0) size 18x110
+        text run at (54,0) width 110: "This is some text."
+      RenderBR {BR} at (68,110) size 0x0
+      RenderText {#text} at (72,0) size 18x110
+        text run at (72,0) width 110: "This is some text."
+      RenderBR {BR} at (86,110) size 0x0
+      RenderText {#text} at (90,0) size 18x110
+        text run at (90,0) width 110: "This is some text."
+      RenderBR {BR} at (104,110) size 0x0
+      RenderText {#text} at (108,0) size 18x110
+        text run at (108,0) width 110: "This is some text."
+      RenderBR {BR} at (122,110) size 0x0
+      RenderText {#text} at (126,0) size 18x110
+        text run at (126,0) width 110: "This is some text."
+      RenderBR {BR} at (140,110) size 0x0
+      RenderText {#text} at (144,0) size 18x110
+        text run at (144,0) width 110: "This is some text."
+      RenderBR {BR} at (158,110) size 0x0
+      RenderText {#text} at (162,0) size 18x110
+        text run at (162,0) width 110: "This is some text."
+      RenderBR {BR} at (176,110) size 0x0
+      RenderText {#text} at (180,0) size 18x110
+        text run at (180,0) width 110: "This is some text."
+      RenderBR {BR} at (194,110) size 0x0
+      RenderText {#text} at (198,0) size 18x110
+        text run at (198,0) width 110: "This is some text."
+      RenderBR {BR} at (212,110) size 0x0
+      RenderText {#text} at (216,0) size 18x110
+        text run at (216,0) width 110: "This is some text."
+      RenderBR {BR} at (230,110) size 0x0
+      RenderText {#text} at (234,0) size 18x110
+        text run at (234,0) width 110: "This is some text."
+      RenderBR {BR} at (248,110) size 0x0
+      RenderText {#text} at (252,0) size 18x110
+        text run at (252,0) width 110: "This is some text."
+      RenderBR {BR} at (266,110) size 0x0
+      RenderText {#text} at (270,0) size 18x110
+        text run at (270,0) width 110: "This is some text."
+      RenderBR {BR} at (284,110) size 0x0
+      RenderText {#text} at (288,0) size 18x110
+        text run at (288,0) width 110: "This is some text."
+      RenderBR {BR} at (302,110) size 0x0
+      RenderText {#text} at (306,0) size 18x110
+        text run at (306,0) width 110: "This is some text."
+      RenderBR {BR} at (320,110) size 0x0
+      RenderText {#text} at (324,0) size 18x110
+        text run at (324,0) width 110: "This is some text."
+      RenderBR {BR} at (338,110) size 0x0
+      RenderText {#text} at (342,0) size 18x110
+        text run at (342,0) width 110: "This is some text."
+      RenderBR {BR} at (356,110) size 0x0
+      RenderText {#text} at (360,0) size 18x110
+        text run at (360,0) width 110: "This is some text."
+      RenderBR {BR} at (374,110) size 0x0
+    RenderBlock {DIV} at (383,5) size 72x271
+      RenderText {#text} at (0,0) size 18x262
+        text run at (0,0) width 262: "This text should be in the second column."
+      RenderBR {BR} at (14,262) size 0x0
+      RenderText {#text} at (18,0) size 18x262
+        text run at (18,0) width 262: "This text should be in the second column."
+      RenderBR {BR} at (32,262) size 0x0
+      RenderText {#text} at (36,0) size 18x262
+        text run at (36,0) width 262: "This text should be in the second column."
+      RenderBR {BR} at (50,262) size 0x0
+      RenderText {#text} at (54,0) size 18x262
+        text run at (54,0) width 262: "This text should be in the second column."
+      RenderBR {BR} at (68,262) size 0x0
+layer at (0,8) size 388x569
+  RenderBlock {DIV} at (404,0) size 388x569 [border: (5px solid #0000FF)]
+    RenderBlock (anonymous) at (5,5) size 72x271
+      RenderText {#text} at (0,0) size 18x242
+        text run at (0,0) width 242: "This text should be in the first column."
+      RenderBR {BR} at (14,242) size 0x0
+      RenderText {#text} at (18,0) size 18x242
+        text run at (18,0) width 242: "This text should be in the first column."
+      RenderBR {BR} at (32,242) size 0x0
+      RenderText {#text} at (36,0) size 18x242
+        text run at (36,0) width 242: "This text should be in the first column."
+      RenderBR {BR} at (50,242) size 0x0
+      RenderText {#text} at (54,0) size 18x242
+        text run at (54,0) width 242: "This text should be in the first column."
+      RenderBR {BR} at (68,242) size 0x0
+    RenderBlock {DIV} at (383,5) size 378x271
+      RenderText {#text} at (0,0) size 18x110
+        text run at (0,0) width 110: "This is some text."
+      RenderBR {BR} at (14,110) size 0x0
+      RenderText {#text} at (18,0) size 18x110
+        text run at (18,0) width 110: "This is some text."
+      RenderBR {BR} at (32,110) size 0x0
+      RenderText {#text} at (36,0) size 18x110
+        text run at (36,0) width 110: "This is some text."
+      RenderBR {BR} at (50,110) size 0x0
+      RenderText {#text} at (54,0) size 18x110
+        text run at (54,0) width 110: "This is some text."
+      RenderBR {BR} at (68,110) size 0x0
+      RenderText {#text} at (72,0) size 18x110
+        text run at (72,0) width 110: "This is some text."
+      RenderBR {BR} at (86,110) size 0x0
+      RenderText {#text} at (90,0) size 18x110
+        text run at (90,0) width 110: "This is some text."
+      RenderBR {BR} at (104,110) size 0x0
+      RenderText {#text} at (108,0) size 18x110
+        text run at (108,0) width 110: "This is some text."
+      RenderBR {BR} at (122,110) size 0x0
+      RenderText {#text} at (126,0) size 18x110
+        text run at (126,0) width 110: "This is some text."
+      RenderBR {BR} at (140,110) size 0x0
+      RenderText {#text} at (144,0) size 18x110
+        text run at (144,0) width 110: "This is some text."
+      RenderBR {BR} at (158,110) size 0x0
+      RenderText {#text} at (162,0) size 18x110
+        text run at (162,0) width 110: "This is some text."
+      RenderBR {BR} at (176,110) size 0x0
+      RenderText {#text} at (180,0) size 18x110
+        text run at (180,0) width 110: "This is some text."
+      RenderBR {BR} at (194,110) size 0x0
+      RenderText {#text} at (198,0) size 18x110
+        text run at (198,0) width 110: "This is some text."
+      RenderBR {BR} at (212,110) size 0x0
+      RenderText {#text} at (216,0) size 18x110
+        text run at (216,0) width 110: "This is some text."
+      RenderBR {BR} at (230,110) size 0x0
+      RenderText {#text} at (234,0) size 18x110
+        text run at (234,0) width 110: "This is some text."
+      RenderBR {BR} at (248,110) size 0x0
+      RenderText {#text} at (252,0) size 18x110
+        text run at (252,0) width 110: "This is some text."
+      RenderBR {BR} at (266,110) size 0x0
+      RenderText {#text} at (270,0) size 18x110
+        text run at (270,0) width 110: "This is some text."
+      RenderBR {BR} at (284,110) size 0x0
+      RenderText {#text} at (288,0) size 18x110
+        text run at (288,0) width 110: "This is some text."
+      RenderBR {BR} at (302,110) size 0x0
+      RenderText {#text} at (306,0) size 18x110
+        text run at (306,0) width 110: "This is some text."
+      RenderBR {BR} at (320,110) size 0x0
+      RenderText {#text} at (324,0) size 18x110
+        text run at (324,0) width 110: "This is some text."
+      RenderBR {BR} at (338,110) size 0x0
+      RenderText {#text} at (342,0) size 18x110
+        text run at (342,0) width 110: "This is some text."
+      RenderBR {BR} at (356,110) size 0x0
+      RenderText {#text} at (360,0) size 18x110
+        text run at (360,0) width 110: "This is some text."
+      RenderBR {BR} at (374,110) size 0x0
+scrolled to 8,0
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-rl/column-count-with-rules-expected.checksum b/LayoutTests/platform/mac/fast/multicol/vertical-rl/column-count-with-rules-expected.checksum
new file mode 100644
index 0000000..f19ce0a
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-rl/column-count-with-rules-expected.checksum
@@ -0,0 +1 @@
+7149d60fc150a909e53f189e972e1e6e
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-rl/column-count-with-rules-expected.png b/LayoutTests/platform/mac/fast/multicol/vertical-rl/column-count-with-rules-expected.png
new file mode 100644
index 0000000..691c644
Binary files /dev/null and b/LayoutTests/platform/mac/fast/multicol/vertical-rl/column-count-with-rules-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-rl/column-count-with-rules-expected.txt b/LayoutTests/platform/mac/fast/multicol/vertical-rl/column-count-with-rules-expected.txt
new file mode 100644
index 0000000..ece27b2
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-rl/column-count-with-rules-expected.txt
@@ -0,0 +1,100 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 776x584
+layer at (632,8) size 160x584
+  RenderBlock {P} at (0,0) size 160x584 [border: (10px solid #800000)]
+    RenderText {#text} at (30,30) size 18x161
+      text run at (30,30) width 161: "This is some column text."
+    RenderBR {BR} at (44,191) size 0x0
+    RenderText {#text} at (48,30) size 18x161
+      text run at (48,30) width 161: "This is some column text."
+    RenderBR {BR} at (62,191) size 0x0
+    RenderText {#text} at (66,30) size 18x161
+      text run at (66,30) width 161: "This is some column text."
+    RenderBR {BR} at (80,191) size 0x0
+    RenderText {#text} at (84,30) size 18x161
+      text run at (84,30) width 161: "This is some column text."
+    RenderBR {BR} at (98,191) size 0x0
+    RenderText {#text} at (102,30) size 18x161
+      text run at (102,30) width 161: "This is some column text."
+    RenderBR {BR} at (116,191) size 0x0
+    RenderText {#text} at (130,30) size 18x161
+      text run at (130,30) width 161: "This is some column text."
+    RenderBR {BR} at (144,191) size 0x0
+    RenderText {#text} at (148,30) size 18x161
+      text run at (148,30) width 161: "This is some column text."
+    RenderBR {BR} at (162,191) size 0x0
+    RenderText {#text} at (166,30) size 18x161
+      text run at (166,30) width 161: "This is some column text."
+    RenderBR {BR} at (180,191) size 0x0
+    RenderText {#text} at (184,30) size 18x161
+      text run at (184,30) width 161: "This is some column text."
+    RenderBR {BR} at (198,191) size 0x0
+    RenderText {#text} at (202,30) size 18x161
+      text run at (202,30) width 161: "This is some column text."
+    RenderBR {BR} at (216,191) size 0x0
+    RenderText {#text} at (230,30) size 18x161
+      text run at (230,30) width 161: "This is some column text."
+    RenderBR {BR} at (244,191) size 0x0
+    RenderText {#text} at (248,30) size 18x161
+      text run at (248,30) width 161: "This is some column text."
+    RenderBR {BR} at (262,191) size 0x0
+    RenderText {#text} at (266,30) size 18x161
+      text run at (266,30) width 161: "This is some column text."
+    RenderBR {BR} at (280,191) size 0x0
+layer at (456,8) size 160x584
+  RenderBlock {P} at (176,0) size 160x584 [border: (10px solid #800000)]
+    RenderText {#text} at (30,33) size 18x161
+      text run at (30,33) width 4 RTL: "."
+      text run at (30,37) width 157: "This is some column text"
+    RenderBR {BR} at (44,33) size 0x0
+    RenderText {#text} at (48,33) size 18x161
+      text run at (48,33) width 4 RTL: "."
+      text run at (48,37) width 157: "This is some column text"
+    RenderBR {BR} at (62,33) size 0x0
+    RenderText {#text} at (66,33) size 18x161
+      text run at (66,33) width 4 RTL: "."
+      text run at (66,37) width 157: "This is some column text"
+    RenderBR {BR} at (80,33) size 0x0
+    RenderText {#text} at (84,33) size 18x161
+      text run at (84,33) width 4 RTL: "."
+      text run at (84,37) width 157: "This is some column text"
+    RenderBR {BR} at (98,33) size 0x0
+    RenderText {#text} at (102,33) size 18x161
+      text run at (102,33) width 4 RTL: "."
+      text run at (102,37) width 157: "This is some column text"
+    RenderBR {BR} at (116,33) size 0x0
+    RenderText {#text} at (130,33) size 18x161
+      text run at (130,33) width 4 RTL: "."
+      text run at (130,37) width 157: "This is some column text"
+    RenderBR {BR} at (144,33) size 0x0
+    RenderText {#text} at (148,33) size 18x161
+      text run at (148,33) width 4 RTL: "."
+      text run at (148,37) width 157: "This is some column text"
+    RenderBR {BR} at (162,33) size 0x0
+    RenderText {#text} at (166,33) size 18x161
+      text run at (166,33) width 4 RTL: "."
+      text run at (166,37) width 157: "This is some column text"
+    RenderBR {BR} at (180,33) size 0x0
+    RenderText {#text} at (184,33) size 18x161
+      text run at (184,33) width 4 RTL: "."
+      text run at (184,37) width 157: "This is some column text"
+    RenderBR {BR} at (198,33) size 0x0
+    RenderText {#text} at (202,33) size 18x161
+      text run at (202,33) width 4 RTL: "."
+      text run at (202,37) width 157: "This is some column text"
+    RenderBR {BR} at (216,33) size 0x0
+    RenderText {#text} at (230,33) size 18x161
+      text run at (230,33) width 4 RTL: "."
+      text run at (230,37) width 157: "This is some column text"
+    RenderBR {BR} at (244,33) size 0x0
+    RenderText {#text} at (248,33) size 18x161
+      text run at (248,33) width 4 RTL: "."
+      text run at (248,37) width 157: "This is some column text"
+    RenderBR {BR} at (262,33) size 0x0
+    RenderText {#text} at (266,33) size 18x161
+      text run at (266,33) width 4 RTL: "."
+      text run at (266,37) width 157: "This is some column text"
+    RenderBR {BR} at (280,33) size 0x0
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-rl/column-rules-expected.checksum b/LayoutTests/platform/mac/fast/multicol/vertical-rl/column-rules-expected.checksum
new file mode 100644
index 0000000..e220677
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-rl/column-rules-expected.checksum
@@ -0,0 +1 @@
+cec06df414f34919a255245fc5ae2817
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-rl/column-rules-expected.png b/LayoutTests/platform/mac/fast/multicol/vertical-rl/column-rules-expected.png
new file mode 100644
index 0000000..447a4fc
Binary files /dev/null and b/LayoutTests/platform/mac/fast/multicol/vertical-rl/column-rules-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-rl/column-rules-expected.txt b/LayoutTests/platform/mac/fast/multicol/vertical-rl/column-rules-expected.txt
new file mode 100644
index 0000000..8d67e4b
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-rl/column-rules-expected.txt
@@ -0,0 +1,130 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x584
+layer at (38,8) size 754x584
+  RenderBlock {DIV} at (0,0) size 754x584 [border: (5px solid #000000)]
+    RenderText {#text} at (5,15) size 2208x174
+      text run at (5,15) width 139: "Lorem ipsum dolor sit"
+      text run at (23,15) width 116: "amet, consectetuer"
+      text run at (41,15) width 172: "adipiscing elit. Nulla varius"
+      text run at (59,15) width 137: "enim ac mi. Curabitur"
+      text run at (77,15) width 173: "sollicitudin felis quis lectus."
+      text run at (95,15) width 121: "Quisque adipiscing"
+      text run at (113,15) width 156: "rhoncus sem. Proin nulla"
+      text run at (131,15) width 170: "purus, vulputate vel, varius"
+      text run at (149,15) width 150: "ut, euismod et, nisi. Sed"
+      text run at (167,15) width 158: "vitae felis vel orci sagittis"
+      text run at (185,15) width 147: "aliquam. Cras convallis"
+      text run at (203,15) width 132: "adipiscing sem. Nam"
+      text run at (221,15) width 154: "nonummy enim. Nullam"
+      text run at (239,15) width 160: "bibendum lobortis neque."
+      text run at (257,15) width 136: "Vestibulum velit orci,"
+      text run at (275,15) width 158: "tempus euismod, pretium"
+      text run at (293,15) width 167: "quis, interdum vitae, nulla."
+      text run at (311,15) width 172: "Phasellus eget ante et tortor"
+      text run at (329,15) width 163: "condimentum vestibulum."
+      text run at (347,15) width 137: "Suspendisse hendrerit"
+      text run at (365,15) width 165: "quam nec felis. Sed varius"
+      text run at (383,15) width 153: "turpis vitae pede. Lorem"
+      text run at (401,15) width 131: "ipsum dolor sit amet,"
+      text run at (419,15) width 173: "consectetuer adipiscing elit."
+      text run at (437,15) width 153: "Proin bibendum justo ac"
+      text run at (455,15) width 149: "enim. Class aptent taciti"
+      text run at (473,15) width 166: "sociosqu ad litora torquent"
+      text run at (491,15) width 144: "per conubia nostra, per"
+      text run at (509,15) width 159: "inceptos hymenaeos. Sed"
+      text run at (527,15) width 174: "leo nulla, rutrum eu, dictum"
+      text run at (545,15) width 166: "ut, posuere vel, arcu. Nam"
+      text run at (563,15) width 115: "libero. Morbi orci."
+      text run at (581,15) width 149: "Maecenas pellentesque."
+      text run at (599,15) width 118: "Curabitur erat erat,"
+      text run at (617,15) width 145: "ullamcorper at, gravida"
+      text run at (635,15) width 143: "vitae, iaculis vitae, elit."
+      text run at (653,15) width 147: "Nullam quam. Quisque"
+      text run at (671,15) width 170: "orci lectus, ullamcorper eu,"
+      text run at (689,15) width 173: "imperdiet sed, accumsan et,"
+      text run at (707,15) width 138: "ligula. Duis diam nisl,"
+      text run at (725,15) width 164: "sagittis a, blandit volutpat,"
+      text run at (749,15) width 120: "interdum sed, velit."
+      text run at (767,15) width 166: "Vestibulum quam. Nulla a"
+      text run at (785,15) width 151: "purus. Phasellus semper"
+      text run at (803,15) width 128: "semper lectus. Nulla"
+      text run at (821,15) width 138: "porttitor, dolor dictum"
+      text run at (839,15) width 145: "scelerisque luctus, velit"
+      text run at (857,15) width 157: "ipsum lobortis mauris, ac"
+      text run at (875,15) width 141: "pretium enim nunc vel"
+      text run at (893,15) width 158: "risus. Proin gravida mi ut"
+      text run at (911,15) width 155: "sem cursus mattis. Fusce"
+      text run at (929,15) width 143: "laoreet, nisi quis luctus"
+      text run at (947,15) width 120: "volutpat, arcu pede"
+      text run at (965,15) width 120: "tincidunt enim, nec"
+      text run at (983,15) width 143: "malesuada urna nisl eu"
+      text run at (1001,15) width 138: "enim. Vivamus varius"
+      text run at (1019,15) width 99: "augue ac purus."
+      text run at (1037,15) width 150: "Vestibulum vestibulum."
+      text run at (1055,15) width 159: "Phasellus et est vitae ante"
+      text run at (1073,15) width 163: "accumsan rhoncus. Morbi"
+      text run at (1091,15) width 166: "convallis, arcu at hendrerit"
+      text run at (1109,15) width 115: "gravida, sem diam"
+      text run at (1127,15) width 168: "dignissim risus, sed aliquet"
+      text run at (1145,15) width 166: "erat mi ut mi. Nunc cursus"
+      text run at (1163,15) width 137: "lacinia elit. Nunc nisi."
+      text run at (1181,15) width 99: "Quisque at erat."
+      text run at (1199,15) width 159: "Vestibulum dictum quam"
+      text run at (1217,15) width 169: "vitae nibh. Nunc vitae ante"
+      text run at (1235,15) width 167: "non odio interdum blandit."
+      text run at (1253,15) width 126: "Curabitur leo quam,"
+      text run at (1271,15) width 164: "fermentum sed, feugiat in,"
+      text run at (1289,15) width 131: "ullamcorper id, nibh."
+      text run at (1307,15) width 155: "Suspendisse ac turpis. In"
+      text run at (1325,15) width 141: "iaculis sollicitudin dui."
+      text run at (1343,15) width 157: "Aenean vitae lectus vitae"
+      text run at (1361,15) width 113: "nulla pellentesque"
+      text run at (1379,15) width 163: "sollicitudin. Nunc gravida"
+      text run at (1397,15) width 172: "pharetra lectus. Etiam lacus"
+      text run at (1415,15) width 159: "ligula, placerat ut, dictum"
+      text run at (1433,15) width 147: "vitae, tempus vel, risus."
+      text run at (1451,15) width 144: "Cras rhoncus. Praesent"
+      text run at (1469,15) width 169: "varius ultricies orci. Donec"
+      text run at (1493,15) width 143: "mattis, neque ut ornare"
+      text run at (1511,15) width 168: "fringilla, ante urna placerat"
+      text run at (1529,15) width 146: "eros, vel commodo nisi"
+      text run at (1547,15) width 143: "tortor ut mauris. Morbi"
+      text run at (1565,15) width 173: "magna dui, sagittis sit amet,"
+      text run at (1583,15) width 147: "tincidunt et, elementum"
+      text run at (1601,15) width 170: "eget, quam. Fusce molestie"
+      text run at (1619,15) width 174: "nisl vitae nisi. Vestibulum a"
+      text run at (1637,15) width 137: "sapien. Phasellus ante"
+      text run at (1655,15) width 169: "lacus, vehicula non, cursus"
+      text run at (1673,15) width 129: "a, tempor ut, magna."
+      text run at (1691,15) width 169: "Suspendisse potenti. Fusce"
+      text run at (1709,15) width 126: "aliquet, odio viverra"
+      text run at (1727,15) width 144: "vulputate dictum, enim"
+      text run at (1745,15) width 128: "odio luctus purus, ut"
+      text run at (1763,15) width 171: "scelerisque quam nulla non"
+      text run at (1781,15) width 137: "est. Donec eros lacus,"
+      text run at (1799,15) width 162: "egestas vitae, lacinia quis,"
+      text run at (1817,15) width 159: "tempor quis, pede. Morbi"
+      text run at (1835,15) width 163: "orci erat, iaculis id, ornare"
+      text run at (1853,15) width 143: "ac, elementum at, sem."
+      text run at (1871,15) width 159: "Nunc ornare sodales nisi."
+      text run at (1889,15) width 166: "Morbi interdum commodo"
+      text run at (1907,15) width 155: "nisl. Fusce eget eros non"
+      text run at (1925,15) width 149: "nisi ornare facilisis. Sed"
+      text run at (1943,15) width 155: "placerat, est non posuere"
+      text run at (1961,15) width 121: "posuere, purus sem"
+      text run at (1979,15) width 163: "dignissim libero, a viverra"
+      text run at (1997,15) width 170: "tellus dolor vel lorem. Cras"
+      text run at (2015,15) width 136: "augue. Etiam ultricies"
+      text run at (2033,15) width 165: "consequat odio. Mauris ac"
+      text run at (2051,15) width 138: "libero. Etiam posuere,"
+      text run at (2069,15) width 127: "libero vitae euismod"
+      text run at (2087,15) width 169: "gravida, urna elit imperdiet"
+      text run at (2105,15) width 166: "magna, vel cursus elit felis"
+      text run at (2123,15) width 148: "non mauris. Donec orci"
+      text run at (2141,15) width 167: "erat, porta id, dignissim ut,"
+      text run at (2159,15) width 127: "posuere dictum, leo."
+      text run at (2177,15) width 150: "Suspendisse scelerisque"
+      text run at (2195,15) width 84: "egestas nulla."
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-avoidance-expected.checksum b/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-avoidance-expected.checksum
new file mode 100644
index 0000000..ca39255
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-avoidance-expected.checksum
@@ -0,0 +1 @@
+60a432fa76ed1ab2f92474bdd8cce253
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-avoidance-expected.png b/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-avoidance-expected.png
new file mode 100644
index 0000000..0d8a5ce
Binary files /dev/null and b/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-avoidance-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-avoidance-expected.txt b/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-avoidance-expected.txt
new file mode 100644
index 0000000..3450d69
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-avoidance-expected.txt
@@ -0,0 +1,18 @@
+layer at (0,0) size 785x643
+  RenderView at (0,0) size 785x600
+layer at (0,0) size 785x600
+  RenderBlock {HTML} at (0,0) size 785x600
+    RenderBody {BODY} at (8,8) size 769x584
+      RenderBlock (floating) {DIV} at (0,0) size 100x200 [bgcolor=#00FF00]
+layer at (651,208) size 126x435
+  RenderBlock {DIV} at (0,200) size 126x435 [border: (10px solid #000000)]
+    RenderBlock {P} at (10,10) size 90x415
+      RenderText {#text} at (0,0) size 90x415
+        text run at (0,0) width 415: "This technology preview of our award winning next generation"
+        text run at (18,0) width 56: "browser "
+        text run at (18,56) width 359: "is a sign of things to come from Mozilla. Powerful yet"
+        text run at (36,0) width 122: "easy to use. This "
+        text run at (36,122) width 293: "maintenance release provides a few updates"
+        text run at (54,0) width 246: "based on user feedback - including "
+        text run at (54,246) width 169: "changes to the Extension"
+        text run at (72,0) width 201: "System and icon improvements."
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-multicol-expected.checksum b/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-multicol-expected.checksum
new file mode 100644
index 0000000..d6e15f4
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-multicol-expected.checksum
@@ -0,0 +1 @@
+be0676727c57793c0c390d071f8e7abf
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-multicol-expected.png b/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-multicol-expected.png
new file mode 100644
index 0000000..34b36a0
Binary files /dev/null and b/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-multicol-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-multicol-expected.txt b/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-multicol-expected.txt
new file mode 100644
index 0000000..1d32cbf
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-multicol-expected.txt
@@ -0,0 +1,238 @@
+layer at (0,0) size 785x1508
+  RenderView at (0,0) size 785x600
+layer at (410,0) size 375x600
+  RenderBlock {HTML} at (0,0) size 375x600
+layer at (426,8) size 340x1500
+  RenderBody {BODY} at (19,8) size 340x1500
+    RenderBlock {DIV} at (0,0) size 56x478 [bgcolor=#00FFFF]
+      RenderBlock (floating) {DIV} at (4,4) size 540x239 [bgcolor=#FFFF00]
+        RenderImage {IMG} at (0,0) size 133x70
+        RenderText {#text} at (0,70) size 144x167
+          text run at (0,70) width 96: "You've already"
+          text run at (18,70) width 153: "downloaded a build. All"
+          text run at (36,70) width 162: "you have to do is use it as"
+          text run at (54,70) width 146: "your everyday browser"
+          text run at (72,70) width 152: "and mail/news reader. If"
+          text run at (90,70) width 153: "you downloaded a build"
+          text run at (108,70) width 167: "with Talkback, please turn"
+          text run at (126,70) width 114: "it on when it asks."
+        RenderBlock (floating) {DIV} at (144,157) size 396x82 [bgcolor=#FF0000]
+          RenderBlock {P} at (16,0) size 18x82
+            RenderText {#text} at (0,0) size 18x74
+              text run at (0,0) width 74: "Hola hola 1"
+          RenderBlock {P} at (50,0) size 18x82
+            RenderText {#text} at (0,0) size 18x74
+              text run at (0,0) width 74: "Hola hola 2"
+          RenderBlock {P} at (84,0) size 18x82
+            RenderText {#text} at (0,0) size 18x74
+              text run at (0,0) width 74: "Hola hola 3"
+          RenderBlock {P} at (118,0) size 18x82
+            RenderText {#text} at (0,0) size 18x74
+              text run at (0,0) width 74: "Hola hola 4"
+          RenderBlock {P} at (152,0) size 18x82
+            RenderText {#text} at (0,0) size 18x74
+              text run at (0,0) width 74: "Hola hola 5"
+          RenderBlock {P} at (192,0) size 18x82
+            RenderText {#text} at (0,0) size 18x74
+              text run at (0,0) width 74: "Hola hola 6"
+          RenderBlock {P} at (226,0) size 18x82
+            RenderText {#text} at (0,0) size 18x74
+              text run at (0,0) width 74: "Hola hola 7"
+          RenderBlock {P} at (260,0) size 18x82
+            RenderText {#text} at (0,0) size 18x74
+              text run at (0,0) width 74: "Hola hola 8"
+          RenderBlock {P} at (294,0) size 18x82
+            RenderText {#text} at (0,0) size 18x74
+              text run at (0,0) width 74: "Hola hola 9"
+          RenderBlock {P} at (328,0) size 18x82
+            RenderText {#text} at (0,0) size 18x82
+              text run at (0,0) width 82: "Hola hola 10"
+          RenderBlock {P} at (362,0) size 18x82
+            RenderText {#text} at (0,0) size 18x82
+              text run at (0,0) width 82: "Hola hola 11"
+        RenderText {#text} at (144,0) size 108x155
+          text run at (144,0) width 155: "Talkback reports give us"
+          text run at (162,0) width 142: "really valuable data on"
+          text run at (180,0) width 135: "which crashes are the"
+          text run at (198,0) width 141: "most serious, and how"
+          text run at (216,0) width 101: "often people are"
+          text run at (234,0) width 121: "encountering them."
+      RenderBlock (floating) {DIV} at (0,395) size 306x83 [bgcolor=#FF00FF]
+        RenderBlock {P} at (0,0) size 18x83
+          RenderText {#text} at (0,0) size 18x83
+            text run at (0,0) width 83: "Hello Kitty 1"
+        RenderBlock {P} at (34,0) size 18x83
+          RenderText {#text} at (0,0) size 18x83
+            text run at (0,0) width 83: "Hello Kitty 2"
+        RenderBlock {P} at (68,0) size 18x83
+          RenderText {#text} at (0,0) size 18x83
+            text run at (0,0) width 83: "Hello Kitty 3"
+        RenderBlock {P} at (102,0) size 18x83
+          RenderText {#text} at (0,0) size 18x83
+            text run at (0,0) width 83: "Hello Kitty 4"
+        RenderBlock {P} at (136,0) size 18x83
+          RenderText {#text} at (0,0) size 18x83
+            text run at (0,0) width 83: "Hello Kitty 5"
+        RenderBlock {P} at (170,0) size 18x83
+          RenderText {#text} at (0,0) size 18x83
+            text run at (0,0) width 83: "Hello Kitty 6"
+        RenderBlock {P} at (204,0) size 18x83
+          RenderText {#text} at (0,0) size 18x83
+            text run at (0,0) width 83: "Hello Kitty 7"
+        RenderBlock {P} at (238,0) size 18x83
+          RenderText {#text} at (0,0) size 18x83
+            text run at (0,0) width 83: "Hello Kitty 8"
+        RenderBlock {P} at (272,0) size 18x83
+          RenderText {#text} at (0,0) size 18x83
+            text run at (0,0) width 83: "Hello Kitty 9"
+      RenderBlock {H2} at (0,0) size 56x478
+        RenderText {#text} at (0,247) size 56x132
+          text run at (0,247) width 124: "What Needs"
+          text run at (28,247) width 132: "To Be Done?"
+    RenderBlock (floating) {DIV} at (75,247) size 401x82 [bgcolor=#808080]
+      RenderBlock {P} at (16,0) size 18x82
+        RenderText {#text} at (0,0) size 18x74
+          text run at (0,0) width 74: "Hola hola 1"
+      RenderBlock {P} at (50,0) size 18x82
+        RenderText {#text} at (0,0) size 18x74
+          text run at (0,0) width 74: "Hola hola 2"
+      RenderBlock {P} at (84,0) size 18x82
+        RenderText {#text} at (0,0) size 18x74
+          text run at (0,0) width 74: "Hola hola 3"
+      RenderBlock {P} at (118,0) size 18x82
+        RenderText {#text} at (0,0) size 18x74
+          text run at (0,0) width 74: "Hola hola 4"
+      RenderBlock {P} at (152,0) size 18x82
+        RenderText {#text} at (0,0) size 18x74
+          text run at (0,0) width 74: "Hola hola 5"
+      RenderBlock {P} at (186,0) size 18x82
+        RenderText {#text} at (0,0) size 18x74
+          text run at (0,0) width 74: "Hola hola 6"
+      RenderBlock {P} at (220,0) size 18x82
+        RenderText {#text} at (0,0) size 18x74
+          text run at (0,0) width 74: "Hola hola 7"
+      RenderBlock {P} at (265,0) size 18x82
+        RenderText {#text} at (0,0) size 18x74
+          text run at (0,0) width 74: "Hola hola 8"
+      RenderBlock {P} at (299,0) size 18x82
+        RenderText {#text} at (0,0) size 18x74
+          text run at (0,0) width 74: "Hola hola 9"
+      RenderBlock {P} at (333,0) size 18x82
+        RenderText {#text} at (0,0) size 18x82
+          text run at (0,0) width 82: "Hola hola 10"
+      RenderBlock {P} at (367,0) size 18x82
+        RenderText {#text} at (0,0) size 18x82
+          text run at (0,0) width 82: "Hola hola 11"
+    RenderBlock {DL} at (75,0) size 695x478
+      RenderBlock {DT} at (0,0) size 36x478
+        RenderText {#text} at (0,329) size 36x43
+          text run at (0,329) width 43: "Report"
+          text run at (18,329) width 33: "Bugs"
+      RenderBlock {DD} at (52,40) size 483x438
+        RenderBlock {P} at (0,0) size 483x438
+          RenderText {#text} at (0,289) size 321x146
+            text run at (0,289) width 46: "You've"
+            text run at (18,289) width 46: "already"
+            text run at (179,289) width 129: "downloaded a build."
+            text run at (213,289) width 132: "All you have to do is"
+            text run at (231,289) width 37: "use it "
+            text run at (231,326) width 17: "as "
+            text run at (231,343) width 91: "your everyday"
+            text run at (249,289) width 146: "browser and mail/news"
+            text run at (267,289) width 85: "reader. If you"
+            text run at (285,289) width 125: "downloaded a build"
+            text run at (303,289) width 32: "with "
+            text run at (303,321) width 67: "Talkback, "
+          RenderInline {EM} at (0,0) size 36x139
+            RenderText {#text} at (303,388) size 36x139
+              text run at (303,388) width 40: "please"
+              text run at (321,289) width 58: "turn it on"
+          RenderText {#text} at (321,347) size 144x433
+            text run at (321,347) width 86: " when it asks."
+            text run at (339,289) width 137: "Talkback reports give"
+            text run at (357,207) width 144: "us really valuable data "
+            text run at (357,351) width 59: "on which"
+            text run at (375,207) width 205: "crashes are the most serious, and"
+            text run at (393,207) width 32: "how "
+            text run at (393,239) width 187: "often people are encountering"
+            text run at (411,207) width 198: "them. And all you have to do is"
+            text run at (429,0) width 80: "click \"OK\". "
+            text run at (429,80) width 351: "If you find something you think is a bug, check to see if"
+            text run at (447,0) width 95: "it's not already "
+          RenderInline {A} at (0,0) size 18x83 [color=#0000EE]
+            RenderText {#text} at (447,95) size 18x83
+              text run at (447,95) width 83: "known about"
+          RenderText {#text} at (447,178) size 18x177
+            text run at (447,178) width 109: ", and then please "
+            text run at (447,287) width 68: "follow the "
+          RenderInline {A} at (0,0) size 36x379 [color=#0000EE]
+            RenderText {#text} at (447,355) size 36x379
+              text run at (447,355) width 24: "bug"
+              text run at (465,0) width 137: "submission procedure"
+          RenderText {#text} at (465,137) size 18x4
+            text run at (465,137) width 4: "."
+      RenderBlock (floating) {DIV} at (551,0) size 394x82 [bgcolor=#008000]
+        RenderBlock {P} at (16,0) size 18x82
+          RenderText {#text} at (0,0) size 18x74
+            text run at (0,0) width 74: "Hola hola 1"
+        RenderBlock {P} at (54,0) size 18x82
+          RenderText {#text} at (0,0) size 18x74
+            text run at (0,0) width 74: "Hola hola 2"
+        RenderBlock {P} at (88,0) size 18x82
+          RenderText {#text} at (0,0) size 18x74
+            text run at (0,0) width 74: "Hola hola 3"
+        RenderBlock {P} at (122,0) size 18x82
+          RenderText {#text} at (0,0) size 18x74
+            text run at (0,0) width 74: "Hola hola 4"
+        RenderBlock {P} at (156,0) size 18x82
+          RenderText {#text} at (0,0) size 18x74
+            text run at (0,0) width 74: "Hola hola 5"
+        RenderBlock {P} at (190,0) size 18x82
+          RenderText {#text} at (0,0) size 18x74
+            text run at (0,0) width 74: "Hola hola 6"
+        RenderBlock {P} at (224,0) size 18x82
+          RenderText {#text} at (0,0) size 18x74
+            text run at (0,0) width 74: "Hola hola 7"
+        RenderBlock {P} at (258,0) size 18x82
+          RenderText {#text} at (0,0) size 18x74
+            text run at (0,0) width 74: "Hola hola 8"
+        RenderBlock {P} at (292,0) size 18x82
+          RenderText {#text} at (0,0) size 18x74
+            text run at (0,0) width 74: "Hola hola 9"
+        RenderBlock {P} at (326,0) size 18x82
+          RenderText {#text} at (0,0) size 18x82
+            text run at (0,0) width 82: "Hola hola 10"
+        RenderBlock {P} at (360,0) size 18x82
+          RenderText {#text} at (0,0) size 18x82
+            text run at (0,0) width 82: "Hola hola 11"
+      RenderBlock {DT} at (551,0) size 18x478
+        RenderText {#text} at (0,82) size 18x117
+          text run at (0,82) width 117: "Quality Assurance"
+      RenderBlock {DD} at (585,40) size 110x438
+        RenderBlock {P} at (0,0) size 110x438
+          RenderInline {A} at (0,0) size 18x76 [color=#0000EE]
+            RenderText {#text} at (0,42) size 18x76
+              text run at (0,42) width 76: "Mozilla QA"
+          RenderText {#text} at (0,118) size 18x40
+            text run at (0,118) width 4: " "
+            text run at (0,122) width 36: "has a "
+          RenderInline {A} at (0,0) size 18x30 [color=#0000EE]
+            RenderText {#text} at (0,158) size 18x30
+              text run at (0,158) width 30: "page"
+          RenderText {#text} at (0,188) size 110x393
+            text run at (0,188) width 4: " "
+            text run at (0,192) width 243: "dedicated to ways to get involved with"
+            text run at (20,42) width 186: "helping. This doesn't involve "
+            text run at (20,228) width 201: "knowing how to code, although"
+            text run at (38,42) width 291: "a little knowledge of HTML is helpful. Being "
+            text run at (38,333) width 87: "involved with"
+            text run at (56,42) width 42: "QA is "
+            text run at (56,84) width 314: "good for people wanting to get more familiar with"
+            text run at (74,42) width 383: "Mozilla, and there's a strong community. A particularly good"
+            text run at (92,42) width 129: "way to get involved "
+            text run at (92,171) width 81: "is to join the "
+          RenderInline {A} at (0,0) size 18x73 [color=#0000EE]
+            RenderText {#text} at (92,252) size 18x73
+              text run at (92,252) width 73: "BugAThon"
+          RenderText {#text} at (92,325) size 18x4
+            text run at (92,325) width 4: "."
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-paginate-complex-expected.checksum b/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-paginate-complex-expected.checksum
new file mode 100644
index 0000000..99ad0a6
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-paginate-complex-expected.checksum
@@ -0,0 +1 @@
+7af9fe9eeeb2a4a542951bc124a6c80e
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-paginate-complex-expected.png b/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-paginate-complex-expected.png
new file mode 100644
index 0000000..976f43c
Binary files /dev/null and b/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-paginate-complex-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-paginate-complex-expected.txt b/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-paginate-complex-expected.txt
new file mode 100644
index 0000000..d579a90
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-paginate-complex-expected.txt
@@ -0,0 +1,259 @@
+layer at (0,0) size 1680x1208
+  RenderView at (0,0) size 785x585
+layer at (-895,0) size 1680x585 backgroundClip at (0,0) size 1680x1208 clip at (0,0) size 1680x1208 outlineClip at (0,0) size 1680x1208
+  RenderBlock {HTML} at (0,0) size 1680x585
+    RenderBody {BODY} at (8,8) size 1664x1200
+layer at (373,8) size 404x1200
+  RenderBlock {DIV} at (0,0) size 404x1200 [border: (2px solid #000000)]
+    RenderBlock (anonymous) at (2,2) size 252x388
+      RenderText {#text} at (0,0) size 18x110
+        text run at (0,0) width 110: "This is some text."
+      RenderBR {BR} at (14,110) size 0x0
+      RenderText {#text} at (18,0) size 18x110
+        text run at (18,0) width 110: "This is some text."
+      RenderBR {BR} at (32,110) size 0x0
+      RenderText {#text} at (36,0) size 18x110
+        text run at (36,0) width 110: "This is some text."
+      RenderBR {BR} at (50,110) size 0x0
+      RenderText {#text} at (54,0) size 18x110
+        text run at (54,0) width 110: "This is some text."
+      RenderBR {BR} at (68,110) size 0x0
+      RenderText {#text} at (72,0) size 18x110
+        text run at (72,0) width 110: "This is some text."
+      RenderBR {BR} at (86,110) size 0x0
+      RenderText {#text} at (90,0) size 18x110
+        text run at (90,0) width 110: "This is some text."
+      RenderBR {BR} at (104,110) size 0x0
+      RenderText {#text} at (108,0) size 18x110
+        text run at (108,0) width 110: "This is some text."
+      RenderBR {BR} at (122,110) size 0x0
+      RenderText {#text} at (126,0) size 18x110
+        text run at (126,0) width 110: "This is some text."
+      RenderBR {BR} at (140,110) size 0x0
+      RenderText {#text} at (144,0) size 18x110
+        text run at (144,0) width 110: "This is some text."
+      RenderBR {BR} at (158,110) size 0x0
+      RenderText {#text} at (162,0) size 18x110
+        text run at (162,0) width 110: "This is some text."
+      RenderBR {BR} at (176,110) size 0x0
+      RenderText {#text} at (180,0) size 18x110
+        text run at (180,0) width 110: "This is some text."
+      RenderBR {BR} at (194,110) size 0x0
+      RenderText {#text} at (198,0) size 18x110
+        text run at (198,0) width 110: "This is some text."
+      RenderBR {BR} at (212,110) size 0x0
+      RenderText {#text} at (216,0) size 18x110
+        text run at (216,0) width 110: "This is some text."
+      RenderBR {BR} at (230,110) size 0x0
+      RenderText {#text} at (234,0) size 18x110
+        text run at (234,0) width 110: "This is some text."
+      RenderBR {BR} at (248,110) size 0x0
+    RenderBlock {P} at (270,2) size 604x388
+      RenderBlock (floating) {SPAN} at (132,0) size 147x78
+        RenderText {#text} at (0,0) size 147x78
+          text run at (0,0) width 78: "T"
+      RenderText {#text} at (132,78) size 18x100
+        text run at (132,78) width 100: "his is some text."
+      RenderBR {BR} at (146,178) size 0x0
+      RenderText {#text} at (150,78) size 18x110
+        text run at (150,78) width 110: "This is some text."
+      RenderBR {BR} at (164,188) size 0x0
+      RenderText {#text} at (168,78) size 18x110
+        text run at (168,78) width 110: "This is some text."
+      RenderBR {BR} at (182,188) size 0x0
+      RenderText {#text} at (186,78) size 18x110
+        text run at (186,78) width 110: "This is some text."
+      RenderBR {BR} at (200,188) size 0x0
+      RenderText {#text} at (204,78) size 18x110
+        text run at (204,78) width 110: "This is some text."
+      RenderBR {BR} at (218,188) size 0x0
+      RenderText {#text} at (222,78) size 18x110
+        text run at (222,78) width 110: "This is some text."
+      RenderBR {BR} at (236,188) size 0x0
+      RenderText {#text} at (240,78) size 18x110
+        text run at (240,78) width 110: "This is some text."
+      RenderBR {BR} at (254,188) size 0x0
+      RenderText {#text} at (258,78) size 18x110
+        text run at (258,78) width 110: "This is some text."
+      RenderBR {BR} at (272,188) size 0x0
+      RenderText {#text} at (276,78) size 18x110
+        text run at (276,78) width 110: "This is some text."
+      RenderBR {BR} at (290,188) size 0x0
+      RenderText {#text} at (294,0) size 18x110
+        text run at (294,0) width 110: "This is some text."
+      RenderBR {BR} at (308,110) size 0x0
+      RenderText {#text} at (312,0) size 18x110
+        text run at (312,0) width 110: "This is some text."
+      RenderBR {BR} at (326,110) size 0x0
+      RenderText {#text} at (330,0) size 18x110
+        text run at (330,0) width 110: "This is some text."
+      RenderBR {BR} at (344,110) size 0x0
+      RenderText {#text} at (348,0) size 18x110
+        text run at (348,0) width 110: "This is some text."
+      RenderBR {BR} at (362,110) size 0x0
+      RenderText {#text} at (366,0) size 18x110
+        text run at (366,0) width 110: "This is some text."
+      RenderBR {BR} at (380,110) size 0x0
+      RenderText {#text} at (384,0) size 18x110
+        text run at (384,0) width 110: "This is some text."
+      RenderBR {BR} at (398,110) size 0x0
+      RenderText {#text} at (402,0) size 18x110
+        text run at (402,0) width 110: "This is some text."
+      RenderBR {BR} at (416,110) size 0x0
+      RenderText {#text} at (420,0) size 18x110
+        text run at (420,0) width 110: "This is some text."
+      RenderBR {BR} at (434,110) size 0x0
+      RenderText {#text} at (438,0) size 18x110
+        text run at (438,0) width 110: "This is some text."
+      RenderBR {BR} at (452,110) size 0x0
+      RenderText {#text} at (456,0) size 18x110
+        text run at (456,0) width 110: "This is some text."
+      RenderBR {BR} at (470,110) size 0x0
+      RenderText {#text} at (474,0) size 18x110
+        text run at (474,0) width 110: "This is some text."
+      RenderBR {BR} at (488,110) size 0x0
+      RenderText {#text} at (492,0) size 18x110
+        text run at (492,0) width 110: "This is some text."
+      RenderBR {BR} at (506,110) size 0x0
+      RenderText {#text} at (510,0) size 18x110
+        text run at (510,0) width 110: "This is some text."
+      RenderBR {BR} at (524,110) size 0x0
+      RenderText {#text} at (532,0) size 18x110
+        text run at (532,0) width 110: "This is some text."
+      RenderBR {BR} at (546,110) size 0x0
+      RenderText {#text} at (550,0) size 18x110
+        text run at (550,0) width 110: "This is some text."
+      RenderBR {BR} at (564,110) size 0x0
+      RenderText {#text} at (568,0) size 18x110
+        text run at (568,0) width 110: "This is some text."
+      RenderBR {BR} at (582,110) size 0x0
+      RenderText {#text} at (586,0) size 18x110
+        text run at (586,0) width 110: "This is some text."
+      RenderBR {BR} at (600,110) size 0x0
+layer at (-47,8) size 404x1200 backgroundClip at (0,0) size 1680x1208 clip at (0,0) size 1680x1208 outlineClip at (0,0) size 1680x1208
+  RenderBlock {DIV} at (420,0) size 404x1200 [border: (2px solid #000000)]
+    RenderBlock (anonymous) at (2,2) size 252x388
+      RenderText {#text} at (0,0) size 18x110
+        text run at (0,0) width 110: "This is some text."
+      RenderBR {BR} at (14,110) size 0x0
+      RenderText {#text} at (18,0) size 18x110
+        text run at (18,0) width 110: "This is some text."
+      RenderBR {BR} at (32,110) size 0x0
+      RenderText {#text} at (36,0) size 18x110
+        text run at (36,0) width 110: "This is some text."
+      RenderBR {BR} at (50,110) size 0x0
+      RenderText {#text} at (54,0) size 18x110
+        text run at (54,0) width 110: "This is some text."
+      RenderBR {BR} at (68,110) size 0x0
+      RenderText {#text} at (72,0) size 18x110
+        text run at (72,0) width 110: "This is some text."
+      RenderBR {BR} at (86,110) size 0x0
+      RenderText {#text} at (90,0) size 18x110
+        text run at (90,0) width 110: "This is some text."
+      RenderBR {BR} at (104,110) size 0x0
+      RenderText {#text} at (108,0) size 18x110
+        text run at (108,0) width 110: "This is some text."
+      RenderBR {BR} at (122,110) size 0x0
+      RenderText {#text} at (126,0) size 18x110
+        text run at (126,0) width 110: "This is some text."
+      RenderBR {BR} at (140,110) size 0x0
+      RenderText {#text} at (144,0) size 18x110
+        text run at (144,0) width 110: "This is some text."
+      RenderBR {BR} at (158,110) size 0x0
+      RenderText {#text} at (162,0) size 18x110
+        text run at (162,0) width 110: "This is some text."
+      RenderBR {BR} at (176,110) size 0x0
+      RenderText {#text} at (180,0) size 18x110
+        text run at (180,0) width 110: "This is some text."
+      RenderBR {BR} at (194,110) size 0x0
+      RenderText {#text} at (198,0) size 18x110
+        text run at (198,0) width 110: "This is some text."
+      RenderBR {BR} at (212,110) size 0x0
+      RenderText {#text} at (216,0) size 18x110
+        text run at (216,0) width 110: "This is some text."
+      RenderBR {BR} at (230,110) size 0x0
+      RenderText {#text} at (234,0) size 18x110
+        text run at (234,0) width 110: "This is some text."
+      RenderBR {BR} at (248,110) size 0x0
+    RenderBlock {P} at (270,2) size 604x388
+      RenderImage {IMG} at (132,0) size 100x100 [bgcolor=#008000]
+      RenderImage {IMG} at (132,288) size 200x100 [bgcolor=#008000]
+      RenderText {#text} at (132,100) size 18x106
+        text run at (132,100) width 106: "This is some text"
+      RenderBR {BR} at (146,206) size 0x0
+      RenderText {#text} at (150,100) size 18x110
+        text run at (150,100) width 110: "This is some text."
+      RenderBR {BR} at (164,210) size 0x0
+      RenderText {#text} at (168,100) size 18x110
+        text run at (168,100) width 110: "This is some text."
+      RenderBR {BR} at (182,210) size 0x0
+      RenderText {#text} at (186,100) size 18x110
+        text run at (186,100) width 110: "This is some text."
+      RenderBR {BR} at (200,210) size 0x0
+      RenderText {#text} at (204,100) size 18x110
+        text run at (204,100) width 110: "This is some text."
+      RenderBR {BR} at (218,210) size 0x0
+      RenderText {#text} at (222,100) size 18x110
+        text run at (222,100) width 110: "This is some text."
+      RenderBR {BR} at (236,210) size 0x0
+      RenderText {#text} at (240,0) size 18x110
+        text run at (240,0) width 110: "This is some text."
+      RenderBR {BR} at (254,110) size 0x0
+      RenderText {#text} at (258,0) size 18x110
+        text run at (258,0) width 110: "This is some text."
+      RenderBR {BR} at (272,110) size 0x0
+      RenderText {#text} at (276,0) size 18x110
+        text run at (276,0) width 110: "This is some text."
+      RenderBR {BR} at (290,110) size 0x0
+      RenderText {#text} at (294,0) size 18x110
+        text run at (294,0) width 110: "This is some text."
+      RenderBR {BR} at (308,110) size 0x0
+      RenderText {#text} at (312,0) size 18x110
+        text run at (312,0) width 110: "This is some text."
+      RenderBR {BR} at (326,110) size 0x0
+      RenderText {#text} at (330,0) size 18x110
+        text run at (330,0) width 110: "This is some text."
+      RenderBR {BR} at (344,110) size 0x0
+      RenderText {#text} at (348,0) size 18x110
+        text run at (348,0) width 110: "This is some text."
+      RenderBR {BR} at (362,110) size 0x0
+      RenderText {#text} at (366,0) size 18x110
+        text run at (366,0) width 110: "This is some text."
+      RenderBR {BR} at (380,110) size 0x0
+      RenderText {#text} at (384,0) size 18x110
+        text run at (384,0) width 110: "This is some text."
+      RenderBR {BR} at (398,110) size 0x0
+      RenderText {#text} at (402,0) size 18x110
+        text run at (402,0) width 110: "This is some text."
+      RenderBR {BR} at (416,110) size 0x0
+      RenderText {#text} at (420,0) size 18x110
+        text run at (420,0) width 110: "This is some text."
+      RenderBR {BR} at (434,110) size 0x0
+      RenderText {#text} at (438,0) size 18x110
+        text run at (438,0) width 110: "This is some text."
+      RenderBR {BR} at (452,110) size 0x0
+      RenderText {#text} at (456,0) size 18x110
+        text run at (456,0) width 110: "This is some text."
+      RenderBR {BR} at (470,110) size 0x0
+      RenderText {#text} at (474,0) size 18x110
+        text run at (474,0) width 110: "This is some text."
+      RenderBR {BR} at (488,110) size 0x0
+      RenderText {#text} at (492,0) size 18x110
+        text run at (492,0) width 110: "This is some text."
+      RenderBR {BR} at (506,110) size 0x0
+      RenderText {#text} at (510,0) size 18x110
+        text run at (510,0) width 110: "This is some text."
+      RenderBR {BR} at (524,110) size 0x0
+      RenderText {#text} at (532,0) size 18x110
+        text run at (532,0) width 110: "This is some text."
+      RenderBR {BR} at (546,110) size 0x0
+      RenderText {#text} at (550,0) size 18x110
+        text run at (550,0) width 110: "This is some text."
+      RenderBR {BR} at (564,110) size 0x0
+      RenderText {#text} at (568,0) size 18x110
+        text run at (568,0) width 110: "This is some text."
+      RenderBR {BR} at (582,110) size 0x0
+      RenderText {#text} at (586,0) size 18x110
+        text run at (586,0) width 110: "This is some text."
+      RenderBR {BR} at (600,110) size 0x0
+scrolled to 895,0
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-paginate-expected.checksum b/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-paginate-expected.checksum
new file mode 100644
index 0000000..891c2ea
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-paginate-expected.checksum
@@ -0,0 +1 @@
+2d9a8af096836a536969d176d9dffffb
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-paginate-expected.png b/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-paginate-expected.png
new file mode 100644
index 0000000..eb4a9fa
Binary files /dev/null and b/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-paginate-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-paginate-expected.txt b/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-paginate-expected.txt
new file mode 100644
index 0000000..921c21f
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-rl/float-paginate-expected.txt
@@ -0,0 +1,128 @@
+layer at (0,0) size 785x1208
+  RenderView at (0,0) size 785x600
+layer at (0,0) size 785x600
+  RenderBlock {HTML} at (0,0) size 785x600
+    RenderBody {BODY} at (8,8) size 769x1200
+layer at (373,8) size 404x1200
+  RenderBlock {DIV} at (0,0) size 404x1200 [border: (2px solid #000000)]
+    RenderText {#text} at (2,2) size 18x110
+      text run at (2,2) width 110: "This is some text."
+    RenderBR {BR} at (16,112) size 0x0
+    RenderText {#text} at (20,2) size 18x110
+      text run at (20,2) width 110: "This is some text."
+    RenderBR {BR} at (34,112) size 0x0
+    RenderText {#text} at (38,2) size 18x110
+      text run at (38,2) width 110: "This is some text."
+    RenderBR {BR} at (52,112) size 0x0
+    RenderText {#text} at (56,2) size 18x110
+      text run at (56,2) width 110: "This is some text."
+    RenderBR {BR} at (70,112) size 0x0
+    RenderText {#text} at (74,2) size 18x110
+      text run at (74,2) width 110: "This is some text."
+    RenderBR {BR} at (88,112) size 0x0
+    RenderText {#text} at (92,2) size 18x110
+      text run at (92,2) width 110: "This is some text."
+    RenderBR {BR} at (106,112) size 0x0
+    RenderText {#text} at (110,2) size 18x110
+      text run at (110,2) width 110: "This is some text."
+    RenderBR {BR} at (124,112) size 0x0
+    RenderText {#text} at (128,2) size 18x110
+      text run at (128,2) width 110: "This is some text."
+    RenderBR {BR} at (142,112) size 0x0
+    RenderText {#text} at (146,2) size 18x110
+      text run at (146,2) width 110: "This is some text."
+    RenderBR {BR} at (160,112) size 0x0
+    RenderText {#text} at (164,2) size 18x110
+      text run at (164,2) width 110: "This is some text."
+    RenderBR {BR} at (178,112) size 0x0
+    RenderImage {IMG} at (402,2) size 300x250 [bgcolor=#008000]
+    RenderText {#text} at (402,252) size 18x110
+      text run at (402,252) width 110: "This is some text."
+    RenderBR {BR} at (416,362) size 0x0
+    RenderText {#text} at (420,252) size 18x110
+      text run at (420,252) width 110: "This is some text."
+    RenderBR {BR} at (434,362) size 0x0
+    RenderText {#text} at (438,252) size 18x110
+      text run at (438,252) width 110: "This is some text."
+    RenderBR {BR} at (452,362) size 0x0
+    RenderText {#text} at (456,252) size 18x110
+      text run at (456,252) width 110: "This is some text."
+    RenderBR {BR} at (470,362) size 0x0
+    RenderText {#text} at (474,252) size 18x110
+      text run at (474,252) width 110: "This is some text."
+    RenderBR {BR} at (488,362) size 0x0
+    RenderText {#text} at (492,252) size 18x110
+      text run at (492,252) width 110: "This is some text."
+    RenderBR {BR} at (506,362) size 0x0
+    RenderText {#text} at (510,252) size 18x110
+      text run at (510,252) width 110: "This is some text."
+    RenderBR {BR} at (524,362) size 0x0
+    RenderText {#text} at (528,252) size 18x110
+      text run at (528,252) width 110: "This is some text."
+    RenderBR {BR} at (542,362) size 0x0
+    RenderText {#text} at (546,252) size 18x110
+      text run at (546,252) width 110: "This is some text."
+    RenderBR {BR} at (560,362) size 0x0
+    RenderText {#text} at (564,252) size 18x110
+      text run at (564,252) width 110: "This is some text."
+    RenderBR {BR} at (578,362) size 0x0
+    RenderText {#text} at (582,252) size 18x110
+      text run at (582,252) width 110: "This is some text."
+    RenderBR {BR} at (596,362) size 0x0
+    RenderText {#text} at (600,252) size 18x110
+      text run at (600,252) width 110: "This is some text."
+    RenderBR {BR} at (614,362) size 0x0
+    RenderText {#text} at (618,252) size 18x110
+      text run at (618,252) width 110: "This is some text."
+    RenderBR {BR} at (632,362) size 0x0
+    RenderText {#text} at (636,252) size 18x110
+      text run at (636,252) width 110: "This is some text."
+    RenderBR {BR} at (650,362) size 0x0
+    RenderText {#text} at (654,252) size 18x110
+      text run at (654,252) width 110: "This is some text."
+    RenderBR {BR} at (668,362) size 0x0
+    RenderText {#text} at (672,252) size 18x110
+      text run at (672,252) width 110: "This is some text."
+    RenderBR {BR} at (686,362) size 0x0
+    RenderText {#text} at (690,252) size 18x110
+      text run at (690,252) width 110: "This is some text."
+    RenderBR {BR} at (704,362) size 0x0
+    RenderText {#text} at (708,2) size 18x110
+      text run at (708,2) width 110: "This is some text."
+    RenderBR {BR} at (722,112) size 0x0
+    RenderText {#text} at (726,2) size 18x110
+      text run at (726,2) width 110: "This is some text."
+    RenderBR {BR} at (740,112) size 0x0
+    RenderText {#text} at (744,2) size 18x110
+      text run at (744,2) width 110: "This is some text."
+    RenderBR {BR} at (758,112) size 0x0
+    RenderText {#text} at (762,2) size 18x110
+      text run at (762,2) width 110: "This is some text."
+    RenderBR {BR} at (776,112) size 0x0
+    RenderText {#text} at (780,2) size 18x110
+      text run at (780,2) width 110: "This is some text."
+    RenderBR {BR} at (794,112) size 0x0
+    RenderText {#text} at (802,2) size 18x110
+      text run at (802,2) width 110: "This is some text."
+    RenderBR {BR} at (816,112) size 0x0
+    RenderText {#text} at (820,2) size 18x110
+      text run at (820,2) width 110: "This is some text."
+    RenderBR {BR} at (834,112) size 0x0
+    RenderText {#text} at (838,2) size 18x110
+      text run at (838,2) width 110: "This is some text."
+    RenderBR {BR} at (852,112) size 0x0
+    RenderText {#text} at (856,2) size 18x110
+      text run at (856,2) width 110: "This is some text."
+    RenderBR {BR} at (870,112) size 0x0
+    RenderText {#text} at (874,2) size 18x110
+      text run at (874,2) width 110: "This is some text."
+    RenderBR {BR} at (888,112) size 0x0
+    RenderText {#text} at (892,2) size 18x110
+      text run at (892,2) width 110: "This is some text."
+    RenderBR {BR} at (906,112) size 0x0
+    RenderText {#text} at (910,2) size 18x110
+      text run at (910,2) width 110: "This is some text."
+    RenderBR {BR} at (924,112) size 0x0
+    RenderText {#text} at (928,2) size 18x110
+      text run at (928,2) width 110: "This is some text."
+    RenderBR {BR} at (942,112) size 0x0
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-rl/nested-columns-expected.checksum b/LayoutTests/platform/mac/fast/multicol/vertical-rl/nested-columns-expected.checksum
new file mode 100644
index 0000000..bad7a11
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-rl/nested-columns-expected.checksum
@@ -0,0 +1 @@
+fd79ca33f37e6473502d5d79fc607023
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-rl/nested-columns-expected.png b/LayoutTests/platform/mac/fast/multicol/vertical-rl/nested-columns-expected.png
new file mode 100644
index 0000000..a8ff43f
Binary files /dev/null and b/LayoutTests/platform/mac/fast/multicol/vertical-rl/nested-columns-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-rl/nested-columns-expected.txt b/LayoutTests/platform/mac/fast/multicol/vertical-rl/nested-columns-expected.txt
new file mode 100644
index 0000000..9d116fe
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-rl/nested-columns-expected.txt
@@ -0,0 +1,74 @@
+layer at (0,0) size 785x758
+  RenderView at (0,0) size 785x600
+layer at (0,0) size 785x600
+  RenderBlock {HTML} at (0,0) size 785x600
+layer at (277,8) size 500x750
+  RenderBody {BODY} at (8,8) size 500x750
+    RenderBlock {H1} at (0,0) size 37x367
+      RenderText {#text} at (0,0) size 37x166
+        text run at (0,0) width 166: "Header One"
+    RenderBlock (anonymous) at (58,0) size 198x367
+      RenderText {#text} at (0,0) size 198x362
+        text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
+        text run at (18,0) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
+        text run at (36,0) width 325: "lectus. Quisque adipiscing rhoncus sem. Proin nulla"
+        text run at (54,0) width 358: "purus, vulputate vel, varius ut, euismod et, nisi. Sed vitae"
+        text run at (72,0) width 343: "felis vel orci sagittis aliquam. Cras convallis adipiscing"
+        text run at (90,0) width 340: "sem. Nam nonummy enim. Nullam bibendum lobortis"
+        text run at (108,0) width 344: "neque. Vestibulum velit orci, tempus euismod, pretium"
+        text run at (126,0) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
+        text run at (144,0) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
+        text run at (162,0) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
+        text run at (180,0) width 229: "sit amet, consectetuer adipiscing elit."
+    RenderBlock {H1} at (277,0) size 37x367
+      RenderText {#text} at (0,0) size 37x169
+        text run at (0,0) width 169: "Header Two"
+    RenderBlock (anonymous) at (335,0) size 201x367
+      RenderText {#text} at (0,0) size 201x362
+        text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
+        text run at (18,0) width 351: "Nulla varius enim ac mi. Curabitur sollicitudin felis quis"
+        text run at (36,0) width 325: "lectus. Quisque adipiscing rhoncus sem. Proin nulla"
+        text run at (54,0) width 358: "purus, vulputate vel, varius ut, euismod et, nisi. Sed vitae"
+        text run at (72,0) width 343: "felis vel orci sagittis aliquam. Cras convallis adipiscing"
+        text run at (90,0) width 340: "sem. Nam nonummy enim. Nullam bibendum lobortis"
+        text run at (108,0) width 344: "neque. Vestibulum velit orci, tempus euismod, pretium"
+        text run at (126,0) width 343: "quis, interdum vitae, nulla. Phasellus eget ante et tortor"
+        text run at (144,0) width 343: "condimentum vestibulum. Suspendisse hendrerit quam"
+        text run at (165,0) width 362: "nec felis. Sed varius turpis vitae pede. Lorem ipsum dolor"
+        text run at (183,0) width 229: "sit amet, consectetuer adipiscing elit."
+    RenderBlock {H1} at (557,0) size 37x367
+      RenderText {#text} at (0,0) size 37x190
+        text run at (0,0) width 190: "Header Three"
+    RenderBlock {H1} at (852,0) size 37x367
+      RenderText {#text} at (0,0) size 37x177
+        text run at (0,0) width 177: "Header Four"
+    RenderBlock (anonymous) at (910,0) size 36x367
+      RenderText {#text} at (0,0) size 36x354
+        text run at (0,0) width 354: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
+        text run at (18,0) width 154: "Nulla varius enim ac mi."
+layer at (-54,8) size 216x367 backgroundClip at (0,0) size 785x758 clip at (0,0) size 785x758 outlineClip at (0,0) size 785x758
+  RenderBlock {DIV} at (615,0) size 216x367
+    RenderText {#text} at (0,0) size 396x175
+      text run at (0,0) width 139: "Lorem ipsum dolor sit"
+      text run at (18,0) width 116: "amet, consectetuer"
+      text run at (36,0) width 172: "adipiscing elit. Nulla varius"
+      text run at (54,0) width 137: "enim ac mi. Curabitur"
+      text run at (72,0) width 173: "sollicitudin felis quis lectus."
+      text run at (90,0) width 175: "Quisque adipiscing rhoncus"
+      text run at (108,0) width 145: "sem. Proin nulla purus,"
+      text run at (126,0) width 147: "vulputate vel, varius ut,"
+      text run at (144,0) width 164: "euismod et, nisi. Sed vitae"
+      text run at (162,0) width 124: "felis vel orci sagittis"
+      text run at (180,0) width 147: "aliquam. Cras convallis"
+      text run at (198,0) width 132: "adipiscing sem. Nam"
+      text run at (216,0) width 154: "nonummy enim. Nullam"
+      text run at (234,0) width 160: "bibendum lobortis neque."
+      text run at (252,0) width 136: "Vestibulum velit orci,"
+      text run at (270,0) width 158: "tempus euismod, pretium"
+      text run at (288,0) width 167: "quis, interdum vitae, nulla."
+      text run at (306,0) width 172: "Phasellus eget ante et tortor"
+      text run at (324,0) width 163: "condimentum vestibulum."
+      text run at (342,0) width 137: "Suspendisse hendrerit"
+      text run at (360,0) width 165: "quam nec felis. Sed varius"
+      text run at (378,0) width 111: "turpis vitae pede. "
+    RenderText {#text} at (0,0) size 0x0
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-rl/unsplittable-inline-block-expected.checksum b/LayoutTests/platform/mac/fast/multicol/vertical-rl/unsplittable-inline-block-expected.checksum
new file mode 100644
index 0000000..6254a8a
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-rl/unsplittable-inline-block-expected.checksum
@@ -0,0 +1 @@
+cc260c2d383d27ffea316e36dfd7351f
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-rl/unsplittable-inline-block-expected.png b/LayoutTests/platform/mac/fast/multicol/vertical-rl/unsplittable-inline-block-expected.png
new file mode 100644
index 0000000..84e43b1
Binary files /dev/null and b/LayoutTests/platform/mac/fast/multicol/vertical-rl/unsplittable-inline-block-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/multicol/vertical-rl/unsplittable-inline-block-expected.txt b/LayoutTests/platform/mac/fast/multicol/vertical-rl/unsplittable-inline-block-expected.txt
new file mode 100644
index 0000000..3242827
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/multicol/vertical-rl/unsplittable-inline-block-expected.txt
@@ -0,0 +1,44 @@
+layer at (0,0) size 785x778
+  RenderView at (0,0) size 785x600
+layer at (0,0) size 785x600
+  RenderBlock {HTML} at (0,0) size 785x600
+    RenderBody {BODY} at (8,8) size 769x584
+layer at (457,8) size 320x770
+  RenderBlock {DIV} at (0,0) size 320x770 [border: (5px solid #000000)]
+    RenderBlock {DIV} at (10,10) size 250x367
+    RenderBlock (anonymous) at (310,10) size 202x367
+      RenderBlock {DIV} at (0,0) size 202x301 [border: (2px solid #008000)]
+        RenderText {#text} at (2,2) size 18x297
+          text run at (2,2) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (16,299) size 0x0
+        RenderText {#text} at (20,2) size 18x297
+          text run at (20,2) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (34,299) size 0x0
+        RenderText {#text} at (38,2) size 18x297
+          text run at (38,2) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (52,299) size 0x0
+        RenderText {#text} at (56,2) size 18x297
+          text run at (56,2) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (70,299) size 0x0
+        RenderText {#text} at (74,2) size 18x297
+          text run at (74,2) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (88,299) size 0x0
+        RenderText {#text} at (92,2) size 18x297
+          text run at (92,2) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (106,299) size 0x0
+        RenderText {#text} at (110,2) size 18x297
+          text run at (110,2) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (124,299) size 0x0
+        RenderText {#text} at (128,2) size 18x297
+          text run at (128,2) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (142,299) size 0x0
+        RenderText {#text} at (146,2) size 18x297
+          text run at (146,2) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (160,299) size 0x0
+        RenderText {#text} at (164,2) size 18x297
+          text run at (164,2) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (178,299) size 0x0
+        RenderText {#text} at (182,2) size 18x297
+          text run at (182,2) width 297: "All of this text should be in the second column."
+        RenderBR {BR} at (196,299) size 0x0
+      RenderText {#text} at (0,0) size 0x0
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index f6d64a9..7a60357 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,109 @@
+2011-01-26  Dave Hyatt  <hyatt at apple.com>
+
+        Reviewed by Dan Bernstein.
+
+        https://bugs.webkit.org/show_bug.cgi?id=46421, make multi-column layout work with vertical text.
+
+        Added new tests in fast/multicol/vertical-lr and fast/multicol/vertical-rl.
+
+        * css/html.css:
+        Update p, blockquote and h1-h6 to respect directionality so that column layout tests that use those
+        elements work properly.
+
+        * rendering/InlineFlowBox.cpp:
+        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
+        Fix a flipping bug with the computation of lineTopIncludingMargins where it could be incorrectly shrunk
+        in some cases (causing lines to all stack on top of one another).
+
+        * rendering/InlineTextBox.h:
+        (WebCore::InlineTextBox::calculateBoundaries):
+        Fix calculateBoundaries to be physical rather than logical.
+
+        * rendering/LayoutState.cpp:
+        (WebCore::LayoutState::addForcedColumnBreak):
+        * rendering/LayoutState.h:
+        Rename childY to childLogicalOffset.
+
+        * rendering/RenderBlock.cpp:
+        (WebCore::RenderBlock::layoutBlock):
+        (WebCore::RenderBlock::addOverflowFromChildren):
+        (WebCore::RenderBlock::addOverflowFromFloats):
+        (WebCore::RenderBlock::collapseMargins):
+        (WebCore::RenderBlock::estimateLogicalTopPosition):
+        (WebCore::RenderBlock::layoutBlockChild):
+        (WebCore::RenderBlock::markForPaginationRelayoutIfNeeded):
+        (WebCore::RenderBlock::paintColumnRules):
+        (WebCore::RenderBlock::paintColumnContents):
+        (WebCore::RenderBlock::paintFloats):
+        (WebCore::RenderBlock::selectionGaps):
+        (WebCore::RenderBlock::removeFloatingObjectsBelow):
+        (WebCore::RenderBlock::addOverhangingFloats):
+        (WebCore::RenderBlock::hitTestFloats):
+        (WebCore::RenderBlock::hitTestColumns):
+        (WebCore::RenderBlock::calcColumnWidth):
+        (WebCore::RenderBlock::desiredColumnWidth):
+        (WebCore::RenderBlock::columnRectAt):
+        (WebCore::RenderBlock::layoutColumns):
+        (WebCore::RenderBlock::adjustPointToColumnContents):
+        (WebCore::RenderBlock::adjustRectForColumns):
+        (WebCore::RenderBlock::flipForWritingModeIncludingColumns):
+        (WebCore::RenderBlock::adjustForColumns):
+        (WebCore::RenderBlock::adjustForBorderFit):
+        (WebCore::RenderBlock::nextPageLogicalTop):
+        (WebCore::RenderBlock::applyBeforeBreak):
+        (WebCore::RenderBlock::applyAfterBreak):
+        (WebCore::RenderBlock::adjustForUnsplittableChild):
+        (WebCore::RenderBlock::adjustLinePositionForPagination):
+        * rendering/RenderBlock.h:
+        (WebCore::RenderBlock::logicalRightOffsetForContent):
+        (WebCore::RenderBlock::logicalLeftOffsetForContent):
+        (WebCore::RenderBlock::leftForFloatIncludingMargin):
+        (WebCore::RenderBlock::topForFloatIncludingMargin):
+        * rendering/RenderBlockLineLayout.cpp:
+        (WebCore::RenderBlock::layoutInlineChildren):
+        (WebCore::RenderBlock::determineStartPosition):
+        Reworking of all the RenderBlock column functions to support flipping and vertical modes.
+
+        * rendering/RenderBox.cpp:
+        (WebCore::RenderBox::offsetFromContainer):
+        (WebCore::RenderBox::flipForWritingModeIncludingColumns):
+        Patch offsetFromContainer to be aware of flipped block writing modes when dealing with column layouts.
+
+        * rendering/RenderBox.h:
+        (WebCore::RenderBox::clientLogicalBottom):
+        Fix a bug in clientLogicalBottom where it didn't add in the right border/padding.
+        
+        * rendering/RenderFlexibleBox.cpp:
+        (WebCore::RenderFlexibleBox::layoutBlock):
+        Better terminology for pagination.
+
+        * rendering/RenderInline.cpp:
+        (WebCore::RenderInline::offsetFromContainer):
+        (WebCore::RenderInline::mapLocalToContainer):
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::paintChildLayerIntoColumns):
+        (WebCore::RenderLayer::hitTestChildLayerColumns):
+        (WebCore::RenderLayer::localBoundingBox):
+        (WebCore::RenderLayer::boundingBox):
+        Patch painting in RenderLayers to be vertical-text-aware.
+    
+        * rendering/RenderObject.cpp:
+        (WebCore::RenderObject::mapLocalToContainer):
+        Add code to be flipped block-aware with columns.
+
+        * rendering/RenderTable.cpp:
+        (WebCore::RenderTable::layout):
+        * rendering/RenderTableRow.cpp:
+        (WebCore::RenderTableRow::layout):
+        * rendering/RenderTableSection.cpp:
+        (WebCore::RenderTableSection::layoutRows):
+        Fix pagination to use better terminology.
+        
+        * rendering/RenderText.cpp:
+        (WebCore::RenderText::absoluteQuads):
+        (WebCore::RenderText::absoluteQuadsForRange):
+        Fix a bug where vertical text wasn't taken into account.
+
 2011-01-26  Dimitri Glazkov  <dglazkov at chromium.org>
 
         Unreviewed, rolling out r76719.
diff --git a/Source/WebCore/css/html.css b/Source/WebCore/css/html.css
index 3c75559..135ebf9 100644
--- a/Source/WebCore/css/html.css
+++ b/Source/WebCore/css/html.css
@@ -61,7 +61,10 @@ body {
 
 p {
     display: block;
-    margin: 1.0__qem 0px
+    -webkit-margin-before: 1__qem;
+    -webkit-margin-after: 1__qem;
+    -webkit-margin-start: 0;
+    -webkit-margin-end: 0;
 }
 
 div {
@@ -87,7 +90,10 @@ address {
 
 blockquote {
     display: block;
-    margin: 1__qem 40px 1em 40px
+    -webkit-margin-before: 1__qem;
+    -webkit-margin-after: 1em;
+    -webkit-margin-start: 40px;
+    -webkit-margin-end: 40px;
 }
 
 figcaption {
@@ -96,7 +102,10 @@ figcaption {
 
 figure {
     display: block;
-    margin: 1em 40px 1em 40px
+    -webkit-margin-before: 1em;
+    -webkit-margin-after: 1em;
+    -webkit-margin-start: 40px;
+    -webkit-margin-end: 40px;
 }
 
 q {
@@ -121,7 +130,10 @@ center {
 
 hr {
     display: block;
-    margin: 0.5em auto;
+    -webkit-margin-before: 0.5em;
+    -webkit-margin-after: 0.5em;
+    -webkit-margin-start: auto;
+    -webkit-margin-end: auto;
     border-style: inset;
     border-width: 1px
 }
@@ -135,41 +147,59 @@ map {
 h1 {
     display: block;
     font-size: 2em;
-    margin: .67__qem 0 .67em 0;
+    -webkit-margin-before: 0.67__qem;
+    -webkit-margin-after: 0.67em;
+    -webkit-margin-start: 0;
+    -webkit-margin-end: 0;
     font-weight: bold
 }
 
 h2 {
     display: block;
     font-size: 1.5em;
-    margin: .83__qem 0 .83em 0;
+    -webkit-margin-before: 0.83__qem;
+    -webkit-margin-after: 0.83em;
+    -webkit-margin-start: 0;
+    -webkit-margin-end: 0;
     font-weight: bold
 }
 
 h3 {
     display: block;
     font-size: 1.17em;
-    margin: 1__qem 0 1em 0;
+    -webkit-margin-before: 1__qem;
+    -webkit-margin-after: 1em;
+    -webkit-margin-start: 0;
+    -webkit-margin-end: 0;
     font-weight: bold
 }
 
 h4 {
     display: block;
-    margin: 1.33__qem 0 1.33em 0;
+    -webkit-margin-before: 1.33__qem;
+    -webkit-margin-after: 1.33em;
+    -webkit-margin-start: 0;
+    -webkit-margin-end: 0;
     font-weight: bold
 }
 
 h5 {
     display: block;
     font-size: .83em;
-    margin: 1.67__qem 0 1.67em 0;
+    -webkit-margin-before: 1.67__qem;
+    -webkit-margin-after: 1.67em;
+    -webkit-margin-start: 0;
+    -webkit-margin-end: 0;
     font-weight: bold
 }
 
 h6 {
     display: block;
     font-size: .67em;
-    margin: 2.33__qem 0 2.33em 0;
+    -webkit-margin-before: 2.33__qem;
+    -webkit-margin-after: 2.33em;
+    -webkit-margin-start: 0;
+    -webkit-margin-end: 0;
     font-weight: bold
 }
 
diff --git a/Source/WebCore/rendering/InlineFlowBox.cpp b/Source/WebCore/rendering/InlineFlowBox.cpp
index 5e141cc..cafbae8 100644
--- a/Source/WebCore/rendering/InlineFlowBox.cpp
+++ b/Source/WebCore/rendering/InlineFlowBox.cpp
@@ -604,7 +604,7 @@ void InlineFlowBox::placeBoxesInBlockDirection(int top, int maxHeight, int maxAs
         }
         
         int newLogicalTop = curr->logicalTop();
-        int newLogicalTopIncludingMargins;
+        int newLogicalTopIncludingMargins = newLogicalTop;
         int boxHeight = curr->logicalHeight();
         int boxHeightIncludingMargins = boxHeight;
             
diff --git a/Source/WebCore/rendering/InlineTextBox.h b/Source/WebCore/rendering/InlineTextBox.h
index 0076703..8a4cd72 100644
--- a/Source/WebCore/rendering/InlineTextBox.h
+++ b/Source/WebCore/rendering/InlineTextBox.h
@@ -81,7 +81,7 @@ private:
     int selectionHeight();
 
 public:
-    virtual IntRect calculateBoundaries() const { return IntRect(x(), y(), logicalWidth(), logicalHeight()); }
+    virtual IntRect calculateBoundaries() const { return IntRect(x(), y(), width(), height()); }
 
     virtual IntRect selectionRect(int absx, int absy, int startPos, int endPos);
     bool isSelected(int startPos, int endPos) const;
diff --git a/Source/WebCore/rendering/LayoutState.cpp b/Source/WebCore/rendering/LayoutState.cpp
index aeba416..8e4201e 100644
--- a/Source/WebCore/rendering/LayoutState.cpp
+++ b/Source/WebCore/rendering/LayoutState.cpp
@@ -167,11 +167,11 @@ int LayoutState::pageLogicalOffset(int childLogicalOffset) const
     return m_layoutOffset.height() + childLogicalOffset - m_pageOffset.height();
 }
 
-void LayoutState::addForcedColumnBreak(int childY)
+void LayoutState::addForcedColumnBreak(int childLogicalOffset)
 {
     if (!m_columnInfo || m_columnInfo->columnHeight())
         return;
-    m_columnInfo->addForcedBreak(pageLogicalOffset(childY));
+    m_columnInfo->addForcedBreak(pageLogicalOffset(childLogicalOffset));
 }
 
 } // namespace WebCore
diff --git a/Source/WebCore/rendering/LayoutState.h b/Source/WebCore/rendering/LayoutState.h
index c499435..f14c9ff 100644
--- a/Source/WebCore/rendering/LayoutState.h
+++ b/Source/WebCore/rendering/LayoutState.h
@@ -71,7 +71,7 @@ public:
     // direction (so an x-offset in vertical text and a y-offset for horizontal text).
     int pageLogicalOffset(int childLogicalOffset) const;
 
-    void addForcedColumnBreak(int childY);
+    void addForcedColumnBreak(int childLogicalOffset);
     
     bool pageLogicalHeight() const { return m_pageLogicalHeight; }
     bool pageLogicalHeightChanged() const { return m_pageLogicalHeightChanged; }
diff --git a/Source/WebCore/rendering/RenderBlock.cpp b/Source/WebCore/rendering/RenderBlock.cpp
index 9535403..e992355 100644
--- a/Source/WebCore/rendering/RenderBlock.cpp
+++ b/Source/WebCore/rendering/RenderBlock.cpp
@@ -1259,7 +1259,7 @@ void RenderBlock::layoutBlock(bool relayoutChildren, int pageLogicalHeight)
     statePusher.pop();
 
     if (view()->layoutState()->m_pageLogicalHeight)
-        setPageLogicalOffset(view()->layoutState()->pageLogicalOffset(y()));
+        setPageLogicalOffset(view()->layoutState()->pageLogicalOffset(logicalTop()));
 
     updateLayerTransform();
 
@@ -1322,10 +1322,18 @@ void RenderBlock::addOverflowFromChildren()
         ColumnInfo* colInfo = columnInfo();
         if (columnCount(colInfo)) {
             IntRect lastRect = columnRectAt(colInfo, columnCount(colInfo) - 1);
-            int overflowLeft = !style()->isLeftToRightDirection() ? min(0, lastRect.x()) : 0;
-            int overflowRight = style()->isLeftToRightDirection() ? max(width(), lastRect.x() + lastRect.width()) : 0;
-            int overflowHeight = borderTop() + paddingTop() + colInfo->columnHeight();
-            addLayoutOverflow(IntRect(overflowLeft, 0, overflowRight - overflowLeft, overflowHeight));
+            if (style()->isHorizontalWritingMode()) {
+                int overflowLeft = !style()->isLeftToRightDirection() ? min(0, lastRect.x()) : 0;
+                int overflowRight = style()->isLeftToRightDirection() ? max(width(), lastRect.right()) : 0;
+                int overflowHeight = borderBefore() + paddingBefore() + colInfo->columnHeight();
+                addLayoutOverflow(IntRect(overflowLeft, 0, overflowRight - overflowLeft, overflowHeight));
+            } else {
+                IntRect lastRect = columnRectAt(colInfo, columnCount(colInfo) - 1);
+                int overflowTop = !style()->isLeftToRightDirection() ? min(0, lastRect.y()) : 0;
+                int overflowBottom = style()->isLeftToRightDirection() ? max(height(), lastRect.bottom()) : 0;
+                int overflowWidth = borderBefore() + paddingBefore() + colInfo->columnHeight();
+                addLayoutOverflow(IntRect(0, overflowTop, overflowWidth, overflowBottom - overflowTop));
+            }
         }
     }
 }
@@ -1375,7 +1383,7 @@ void RenderBlock::addOverflowFromFloats()
     DeprecatedPtrListIterator<FloatingObject> it(*m_floatingObjects);
     for (; (r = it.current()); ++it) {
         if (r->m_isDescendant)
-            addOverflowFromChild(r->m_renderer, IntSize(r->left() + r->m_renderer->marginLeft(), r->top() + r->m_renderer->marginTop()));
+            addOverflowFromChild(r->m_renderer, IntSize(leftForFloatIncludingMargin(r), topForFloatIncludingMargin(r)));
     }
     return;
 }
@@ -1641,7 +1649,7 @@ int RenderBlock::collapseMargins(RenderBox* child, MarginInfo& marginInfo)
     bool paginated = view()->layoutState()->isPaginated();
     if (paginated && logicalTop > beforeCollapseLogicalTop) {
         int oldLogicalTop = logicalTop;
-        logicalTop = min(logicalTop, nextPageTop(beforeCollapseLogicalTop));
+        logicalTop = min(logicalTop, nextPageLogicalTop(beforeCollapseLogicalTop));
         setLogicalHeight(logicalHeight() + (logicalTop - oldLogicalTop));
     }
     return logicalTop;
@@ -1711,7 +1719,7 @@ int RenderBlock::estimateLogicalTopPosition(RenderBox* child, const MarginInfo&
     // Adjust logicalTopEstimate down to the next page if the margins are so large that we don't fit on the current
     // page.
     if (paginated && logicalTopEstimate > logicalHeight())
-        logicalTopEstimate = min(logicalTopEstimate, nextPageTop(logicalHeight()));
+        logicalTopEstimate = min(logicalTopEstimate, nextPageLogicalTop(logicalHeight()));
 
     logicalTopEstimate += getClearDelta(child, logicalTopEstimate);
     
@@ -2054,7 +2062,7 @@ void RenderBlock::layoutBlockChild(RenderBox* child, MarginInfo& marginInfo, int
 
     if (paginated) {
         // Check for an after page/column break.
-        int newHeight = applyAfterBreak(child, height(), marginInfo);
+        int newHeight = applyAfterBreak(child, logicalHeight(), marginInfo);
         if (newHeight != height())
             setLogicalHeight(newHeight);
     }
@@ -2151,7 +2159,7 @@ void RenderBlock::markForPaginationRelayoutIfNeeded()
     if (needsLayout())
         return;
 
-    if (view()->layoutState()->pageLogicalHeightChanged() || (view()->layoutState()->pageLogicalHeight() && view()->layoutState()->pageLogicalOffset(y()) != pageLogicalOffset()))
+    if (view()->layoutState()->pageLogicalHeightChanged() || (view()->layoutState()->pageLogicalHeight() && view()->layoutState()->pageLogicalOffset(logicalTop()) != pageLogicalOffset()))
         setChildNeedsLayout(true, false);
 }
 
@@ -2228,32 +2236,34 @@ void RenderBlock::paintColumnRules(PaintInfo& paintInfo, int tx, int ty)
     // We need to do multiple passes, breaking up our child painting into strips.
     ColumnInfo* colInfo = columnInfo();
     unsigned colCount = columnCount(colInfo);
-    int currXOffset = style()->isLeftToRightDirection() ? 0 : contentWidth();
-    int ruleAdd = borderLeft() + paddingLeft();
-    int ruleX = style()->isLeftToRightDirection() ? 0 : contentWidth();
+    int currLogicalLeftOffset = style()->isLeftToRightDirection() ? 0 : contentLogicalWidth();
+    int ruleAdd = logicalLeftOffsetForContent();
+    int ruleLogicalLeft = style()->isLeftToRightDirection() ? 0 : contentLogicalWidth();
     for (unsigned i = 0; i < colCount; i++) {
         IntRect colRect = columnRectAt(colInfo, i);
 
+        int inlineDirectionSize = style()->isHorizontalWritingMode() ? colRect.width() : colRect.height();
+        
         // Move to the next position.
         if (style()->isLeftToRightDirection()) {
-            ruleX += colRect.width() + colGap / 2;
-            currXOffset += colRect.width() + colGap;
+            ruleLogicalLeft += inlineDirectionSize + colGap / 2;
+            currLogicalLeftOffset += inlineDirectionSize + colGap;
         } else {
-            ruleX -= (colRect.width() + colGap / 2);
-            currXOffset -= (colRect.width() + colGap);
+            ruleLogicalLeft -= (inlineDirectionSize + colGap / 2);
+            currLogicalLeftOffset -= (inlineDirectionSize + colGap);
         }
        
         // Now paint the column rule.
         if (i < colCount - 1) {
-            int ruleStart = tx + ruleX - ruleWidth / 2 + ruleAdd;
-            int ruleEnd = ruleStart + ruleWidth;
-            int ruleTop = ty + borderTop() + paddingTop();
-            int ruleBottom = ruleTop + contentHeight();
-            drawLineForBoxSide(paintInfo.context, ruleStart, ruleTop, ruleEnd, ruleBottom,
+            int ruleLeft = style()->isHorizontalWritingMode() ? tx + ruleLogicalLeft - ruleWidth / 2 + ruleAdd : tx + borderBefore() + paddingBefore();
+            int ruleRight = style()->isHorizontalWritingMode() ? ruleLeft + ruleWidth : ruleLeft + contentWidth();
+            int ruleTop = style()->isHorizontalWritingMode() ? ty + borderTop() + paddingTop() : ty + ruleLogicalLeft - ruleWidth / 2 + ruleAdd;
+            int ruleBottom = style()->isHorizontalWritingMode() ? ruleTop + contentHeight() : ruleTop + ruleWidth;
+            drawLineForBoxSide(paintInfo.context, ruleLeft, ruleTop, ruleRight, ruleBottom,
                                style()->isLeftToRightDirection() ? BSLeft : BSRight, ruleColor, ruleStyle, 0, 0);
         }
         
-        ruleX = currXOffset;
+        ruleLogicalLeft = currLogicalLeftOffset;
     }
 }
 
@@ -2261,16 +2271,17 @@ void RenderBlock::paintColumnContents(PaintInfo& paintInfo, int tx, int ty, bool
 {
     // We need to do multiple passes, breaking up our child painting into strips.
     GraphicsContext* context = paintInfo.context;
-    int colGap = columnGap();
     ColumnInfo* colInfo = columnInfo();
     unsigned colCount = columnCount(colInfo);
     if (!colCount)
         return;
-    int currXOffset = style()->isLeftToRightDirection() ? 0 : contentWidth() - columnRectAt(colInfo, 0).width();
-    int currYOffset = 0;
+    int currLogicalTopOffset = 0;
     for (unsigned i = 0; i < colCount; i++) {
         // For each rect, we clip to the rect, and then we adjust our coords.
         IntRect colRect = columnRectAt(colInfo, i);
+        flipForWritingMode(colRect);
+        int logicalLeftOffset = (style()->isHorizontalWritingMode() ? colRect.x() : colRect.y()) - logicalLeftOffsetForContent();
+        IntSize offset = style()->isHorizontalWritingMode() ? IntSize(logicalLeftOffset, currLogicalTopOffset) : IntSize(currLogicalTopOffset, logicalLeftOffset);
         colRect.move(tx, ty);
         PaintInfo info(paintInfo);
         info.rect.intersect(colRect);
@@ -2281,10 +2292,10 @@ void RenderBlock::paintColumnContents(PaintInfo& paintInfo, int tx, int ty, bool
             // Each strip pushes a clip, since column boxes are specified as being
             // like overflow:hidden.
             context->clip(colRect);
-            
+
             // Adjust our x and y when painting.
-            int finalX = tx + currXOffset;
-            int finalY = ty + currYOffset;
+            int finalX = tx + offset.width();
+            int finalY = ty + offset.height();
             if (paintingFloats)
                 paintFloats(info, finalX, finalY, paintInfo.phase == PaintPhaseSelection || paintInfo.phase == PaintPhaseTextClip);
             else
@@ -2292,14 +2303,12 @@ void RenderBlock::paintColumnContents(PaintInfo& paintInfo, int tx, int ty, bool
 
             context->restore();
         }
-        
-        // Move to the next position.
-        if (style()->isLeftToRightDirection())
-            currXOffset += colRect.width() + colGap;
+
+        int blockDelta = (style()->isHorizontalWritingMode() ? colRect.height() : colRect.width());
+        if (style()->isFlippedBlocksWritingMode())
+            currLogicalTopOffset += blockDelta;
         else
-            currXOffset -= (colRect.width() + colGap);
-        
-        currYOffset -= colRect.height();
+            currLogicalTopOffset -= blockDelta;
     }
 }
 
@@ -2476,6 +2485,19 @@ void RenderBlock::paintObject(PaintInfo& paintInfo, int tx, int ty)
     }
 }
 
+IntPoint RenderBlock::flipFloatForWritingMode(const FloatingObject* child, const IntPoint& point) const
+{
+    if (!style()->isFlippedBlocksWritingMode())
+        return point;
+    
+    // This is similar to the ParentToChildFlippingAdjustment in RenderBox::flipForWritingMode.  We have to subtract out our left/top offsets twice, since
+    // it's going to get added back in.  We hide this complication here so that the calling code looks normal for the unflipped
+    // case.
+    if (style()->isHorizontalWritingMode())
+        return IntPoint(point.x(), point.y() + height() - child->renderer()->height() - 2 * topForFloatIncludingMargin(child));
+    return IntPoint(point.x() + width() - child->width() - 2 * leftForFloatIncludingMargin(child), point.y());
+}
+
 void RenderBlock::paintFloats(PaintInfo& paintInfo, int tx, int ty, bool preservePhase)
 {
     if (!m_floatingObjects)
@@ -2488,7 +2510,7 @@ void RenderBlock::paintFloats(PaintInfo& paintInfo, int tx, int ty, bool preserv
         if (r->m_shouldPaint && !r->m_renderer->hasSelfPaintingLayer()) {
             PaintInfo currentPaintInfo(paintInfo);
             currentPaintInfo.phase = preservePhase ? paintInfo.phase : PaintPhaseBlockBackground;
-            IntPoint childPoint = flipForWritingMode(r->m_renderer, IntPoint(tx + r->left() + r->m_renderer->marginLeft() - r->m_renderer->x(), ty + r->top() + r->m_renderer->marginTop() - r->m_renderer->y()), ParentToChildFlippingAdjustment);
+            IntPoint childPoint = flipFloatForWritingMode(r, IntPoint(tx + leftForFloatIncludingMargin(r) - r->m_renderer->x(), ty + topForFloatIncludingMargin(r) - r->m_renderer->y()));
             r->m_renderer->paint(currentPaintInfo, childPoint.x(), childPoint.y());
             if (!preservePhase) {
                 currentPaintInfo.phase = PaintPhaseChildBlockBackgrounds;
@@ -2722,8 +2744,8 @@ GapRects RenderBlock::selectionGaps(RenderBlock* rootBlock, const IntPoint& root
         if (m_floatingObjects) {
             for (DeprecatedPtrListIterator<FloatingObject> it(*m_floatingObjects); it.current(); ++it) {
                 FloatingObject* r = it.current();
-                IntRect floatBox = IntRect(offsetFromRootBlock.width() + r->left() + r->m_renderer->marginLeft(),
-                                           offsetFromRootBlock.height() + r->top() + r->m_renderer->marginTop(),
+                IntRect floatBox = IntRect(offsetFromRootBlock.width() + leftForFloatIncludingMargin(r),
+                                           offsetFromRootBlock.height() + topForFloatIncludingMargin(r),
                                            r->m_renderer->width(), r->m_renderer->height());
                 rootBlock->flipForWritingMode(floatBox);
                 floatBox.move(rootBlockPhysicalPosition.x(), rootBlockPhysicalPosition.y());
@@ -3093,13 +3115,13 @@ void RenderBlock::removeFloatingObject(RenderBox* o)
     }
 }
 
-void RenderBlock::removeFloatingObjectsBelow(FloatingObject* lastFloat, int y)
+void RenderBlock::removeFloatingObjectsBelow(FloatingObject* lastFloat, int logicalOffset)
 {
     if (!m_floatingObjects)
         return;
     
     FloatingObject* curr = m_floatingObjects->last();
-    while (curr != lastFloat && (!curr->isPlaced() || curr->top() >= y)) {
+    while (curr != lastFloat && (!curr->isPlaced() || logicalTopForFloat(curr) >= logicalOffset)) {
         m_floatingObjects->removeLast();
         curr = m_floatingObjects->last();
     }
@@ -3611,7 +3633,7 @@ int RenderBlock::addOverhangingFloats(RenderBlock* child, int logicalLeftOffset,
             // Since the float doesn't overhang, it didn't get put into our list.  We need to go ahead and add its overflow in to the
             // child now.
             if (r->m_isDescendant)
-                child->addOverflowFromChild(r->m_renderer, IntSize(r->left() + r->m_renderer->marginLeft(), r->top() + r->m_renderer->marginTop()));
+                child->addOverflowFromChild(r->m_renderer, IntSize(leftForFloatIncludingMargin(r), topForFloatIncludingMargin(r)));
         }
     }
     return lowestFloatLogicalBottom;
@@ -3849,9 +3871,9 @@ bool RenderBlock::hitTestFloats(const HitTestRequest& request, HitTestResult& re
     DeprecatedPtrListIterator<FloatingObject> it(*m_floatingObjects);
     for (it.toLast(); (floatingObject = it.current()); --it) {
         if (floatingObject->m_shouldPaint && !floatingObject->m_renderer->hasSelfPaintingLayer()) {
-            int xOffset = floatingObject->left() + floatingObject->m_renderer->marginLeft() - floatingObject->m_renderer->x();
-            int yOffset = floatingObject->top() + floatingObject->m_renderer->marginTop() - floatingObject->m_renderer->y();
-            IntPoint childPoint = flipForWritingMode(floatingObject->m_renderer, IntPoint(tx + xOffset, ty + yOffset), ParentToChildFlippingAdjustment);
+            int xOffset = leftForFloatIncludingMargin(floatingObject) - floatingObject->m_renderer->x();
+            int yOffset = topForFloatIncludingMargin(floatingObject) - floatingObject->m_renderer->y();
+            IntPoint childPoint = flipFloatForWritingMode(floatingObject, IntPoint(tx + xOffset, ty + yOffset));
             if (floatingObject->m_renderer->hitTest(request, result, IntPoint(x, y), childPoint.x(), childPoint.y())) {
                 updateHitTestResult(result, IntPoint(x - childPoint.x(), y - childPoint.y()));
                 return true;
@@ -3869,23 +3891,36 @@ bool RenderBlock::hitTestColumns(const HitTestRequest& request, HitTestResult& r
     int colCount = columnCount(colInfo);
     if (!colCount)
         return false;
-    int left = borderLeft() + paddingLeft();
-    int currYOffset = 0;
+    int logicalLeft = logicalLeftOffsetForContent();
+    int currLogicalTopOffset = 0;
     int i;
-    for (i = 0; i < colCount; i++)
-        currYOffset -= columnRectAt(colInfo, i).height();
+    bool isHorizontal = style()->isHorizontalWritingMode();
+    for (i = 0; i < colCount; i++) {
+        IntRect colRect = columnRectAt(colInfo, i);
+        int blockDelta =  (isHorizontal ? colRect.height() : colRect.width());
+        if (style()->isFlippedBlocksWritingMode())
+            currLogicalTopOffset += blockDelta;
+        else
+            currLogicalTopOffset -= blockDelta;
+    }
     for (i = colCount - 1; i >= 0; i--) {
         IntRect colRect = columnRectAt(colInfo, i);
-        int currXOffset = colRect.x() - left;
-        currYOffset += colRect.height();
+        flipForWritingMode(colRect);
+        int currLogicalLeftOffset = (isHorizontal ? colRect.x() : colRect.y()) - logicalLeft;
+        int blockDelta =  (isHorizontal ? colRect.height() : colRect.width());
+        if (style()->isFlippedBlocksWritingMode())
+            currLogicalTopOffset -= blockDelta;
+        else
+            currLogicalTopOffset += blockDelta;
         colRect.move(tx, ty);
         
         if (colRect.intersects(result.rectForPoint(x, y))) {
             // The point is inside this column.
             // Adjust tx and ty to change where we hit test.
         
-            int finalX = tx + currXOffset;
-            int finalY = ty + currYOffset;
+            IntSize offset = isHorizontal ? IntSize(currLogicalLeftOffset, currLogicalTopOffset) : IntSize(currLogicalTopOffset, currLogicalLeftOffset);
+            int finalX = tx + offset.width();
+            int finalY = ty + offset.height();
             if (result.isRectBasedTest() && !colRect.contains(result.rectForPoint(x, y)))
                 hitTestContents(request, result, x, y, finalX, finalY, hitTestAction);
             else
@@ -4105,7 +4140,7 @@ void RenderBlock::calcColumnWidth()
 {    
     // Calculate our column width and column count.
     unsigned desiredColumnCount = 1;
-    int desiredColumnWidth = contentWidth();
+    int desiredColumnWidth = contentLogicalWidth();
     
     // For now, we don't support multi-column layouts when printing, since we have to do a lot of work for proper pagination.
     if (document()->paginated() || (style()->hasAutoColumnCount() && style()->hasAutoColumnWidth())) {
@@ -4180,7 +4215,7 @@ void RenderBlock::setDesiredColumnCountAndWidth(int count, int width)
 int RenderBlock::desiredColumnWidth() const
 {
     if (!hasColumns())
-        return contentWidth();
+        return contentLogicalWidth();
     return gColumnInfoMap->get(this)->desiredColumnWidth();
 }
 
@@ -4209,14 +4244,17 @@ IntRect RenderBlock::columnRectAt(ColumnInfo* colInfo, unsigned index) const
     ASSERT(hasColumns() && gColumnInfoMap->get(this) == colInfo);
 
     // Compute the appropriate rect based off our information.
-    int colWidth = colInfo->desiredColumnWidth();
-    int colHeight = colInfo->columnHeight();
-    int colTop = borderTop() + paddingTop();
+    int colLogicalWidth = colInfo->desiredColumnWidth();
+    int colLogicalHeight = colInfo->columnHeight();
+    int colLogicalTop = borderBefore() + paddingBefore();
     int colGap = columnGap();
-    int colLeft = style()->isLeftToRightDirection() ? 
-                      borderLeft() + paddingLeft() + (index * (colWidth + colGap))
-                      : borderLeft() + paddingLeft() + contentWidth() - colWidth - (index * (colWidth + colGap));
-    return IntRect(colLeft, colTop, colWidth, colHeight);
+    int colLogicalLeft = style()->isLeftToRightDirection() ? 
+                          logicalLeftOffsetForContent() + (index * (colLogicalWidth + colGap))
+                        : logicalLeftOffsetForContent() + contentLogicalWidth() - colLogicalWidth - (index * (colLogicalWidth + colGap));
+    IntRect rect(colLogicalLeft, colLogicalTop, colLogicalWidth, colLogicalHeight);
+    if (style()->isHorizontalWritingMode())
+        return IntRect(colLogicalLeft, colLogicalTop, colLogicalWidth, colLogicalHeight);
+    return IntRect(colLogicalTop, colLogicalLeft, colLogicalHeight, colLogicalWidth);
 }
 
 bool RenderBlock::layoutColumns(bool hasSpecifiedPageLogicalHeight, int pageLogicalHeight, LayoutStateMaintainer& statePusher)
@@ -4236,12 +4274,12 @@ bool RenderBlock::layoutColumns(bool hasSpecifiedPageLogicalHeight, int pageLogi
             // maximum page break distance.
             if (!pageLogicalHeight) {
                 int distanceBetweenBreaks = max(colInfo->maximumDistanceBetweenForcedBreaks(),
-                                                view()->layoutState()->pageLogicalOffset(borderTop() + paddingTop() + contentHeight()) - colInfo->forcedBreakOffset());
+                                                view()->layoutState()->pageLogicalOffset(borderBefore() + paddingBefore() + contentLogicalHeight()) - colInfo->forcedBreakOffset());
                 columnHeight = max(colInfo->minimumColumnHeight(), distanceBetweenBreaks);
             }
-        } else if (contentHeight() > pageLogicalHeight * desiredColumnCount) {
+        } else if (contentLogicalHeight() > pageLogicalHeight * desiredColumnCount) {
             // Now that we know the intrinsic height of the columns, we have to rebalance them.
-            columnHeight = max(colInfo->minimumColumnHeight(), (int)ceilf((float)contentHeight() / desiredColumnCount));
+            columnHeight = max(colInfo->minimumColumnHeight(), (int)ceilf((float)contentLogicalHeight() / desiredColumnCount));
         }
         
         if (columnHeight && columnHeight != pageLogicalHeight) {
@@ -4253,10 +4291,10 @@ bool RenderBlock::layoutColumns(bool hasSpecifiedPageLogicalHeight, int pageLogi
     } 
     
     if (pageLogicalHeight)
-        colInfo->setColumnCountAndHeight(ceilf((float)contentHeight() / pageLogicalHeight), pageLogicalHeight);
+        colInfo->setColumnCountAndHeight(ceilf((float)contentLogicalHeight() / pageLogicalHeight), pageLogicalHeight);
 
     if (columnCount(colInfo)) {
-        setLogicalHeight(borderTop() + paddingTop() + colInfo->columnHeight() + borderBottom() + paddingBottom() + horizontalScrollbarHeight());
+        setLogicalHeight(borderBefore() + paddingBefore() + colInfo->columnHeight() + borderAfter() + paddingAfter() + scrollbarLogicalHeight());
         m_overflow.clear();
     }
     
@@ -4275,34 +4313,57 @@ void RenderBlock::adjustPointToColumnContents(IntPoint& point) const
 
     // Determine which columns we intersect.
     int colGap = columnGap();
-    int leftGap = colGap / 2;
+    int halfColGap = colGap / 2;
     IntPoint columnPoint(columnRectAt(colInfo, 0).location());
-    int yOffset = 0;
+    int logicalOffset = 0;
     for (unsigned i = 0; i < colInfo->columnCount(); i++) {
         // Add in half the column gap to the left and right of the rect.
         IntRect colRect = columnRectAt(colInfo, i);
-        IntRect gapAndColumnRect(colRect.x() - leftGap, colRect.y(), colRect.width() + colGap, colRect.height());
-
-        if (point.x() >= gapAndColumnRect.x() && point.x() < gapAndColumnRect.right()) {
-            // FIXME: The clamping that follows is not completely right for right-to-left
-            // content.
-            // Clamp everything above the column to its top left.
-            if (point.y() < gapAndColumnRect.y())
-                point = gapAndColumnRect.location();
-            // Clamp everything below the column to the next column's top left. If there is
-            // no next column, this still maps to just after this column.
-            else if (point.y() >= gapAndColumnRect.bottom()) {
-                point = gapAndColumnRect.location();
-                point.move(0, gapAndColumnRect.height());
+        if (style()->isHorizontalWritingMode()) {
+            IntRect gapAndColumnRect(colRect.x() - halfColGap, colRect.y(), colRect.width() + colGap, colRect.height());
+            if (point.x() >= gapAndColumnRect.x() && point.x() < gapAndColumnRect.right()) {
+                // FIXME: The clamping that follows is not completely right for right-to-left
+                // content.
+                // Clamp everything above the column to its top left.
+                if (point.y() < gapAndColumnRect.y())
+                    point = gapAndColumnRect.location();
+                // Clamp everything below the column to the next column's top left. If there is
+                // no next column, this still maps to just after this column.
+                else if (point.y() >= gapAndColumnRect.bottom()) {
+                    point = gapAndColumnRect.location();
+                    point.move(0, gapAndColumnRect.height());
+                }
+
+                // We're inside the column.  Translate the x and y into our column coordinate space.
+                point.move(columnPoint.x() - colRect.x(), logicalOffset);
+                return;
             }
+            
+            // Move to the next position.
+            logicalOffset += colRect.height();
+        } else {
+            IntRect gapAndColumnRect(colRect.x(), colRect.y() - halfColGap, colRect.width(), colRect.height() + colGap);
+            if (point.y() >= gapAndColumnRect.y() && point.y() < gapAndColumnRect.bottom()) {
+                // FIXME: The clamping that follows is not completely right for right-to-left
+                // content.
+                // Clamp everything above the column to its top left.
+                if (point.x() < gapAndColumnRect.x())
+                    point = gapAndColumnRect.location();
+                // Clamp everything below the column to the next column's top left. If there is
+                // no next column, this still maps to just after this column.
+                else if (point.x() >= gapAndColumnRect.right()) {
+                    point = gapAndColumnRect.location();
+                    point.move(gapAndColumnRect.width(), 0);
+                }
 
-            // We're inside the column.  Translate the x and y into our column coordinate space.
-            point.move(columnPoint.x() - colRect.x(), yOffset);
-            return;
+                // We're inside the column.  Translate the x and y into our column coordinate space.
+                point.move(logicalOffset, columnPoint.y() - colRect.y());
+                return;
+            }
+            
+            // Move to the next position.
+            logicalOffset += colRect.width();
         }
-
-        // Move to the next position.
-        yOffset += colRect.height();
     }
 }
 
@@ -4322,27 +4383,56 @@ void RenderBlock::adjustRectForColumns(IntRect& r) const
     if (!colCount)
         return;
     
-    int left = borderLeft() + paddingLeft();
-    
-    int currYOffset = 0;
+    int logicalLeft = logicalLeftOffsetForContent();
+    int currLogicalOffset = 0;
+
     for (unsigned i = 0; i < colCount; i++) {
         IntRect colRect = columnRectAt(colInfo, i);
-        int currXOffset = colRect.x() - left;
-        
         IntRect repaintRect = r;
-        repaintRect.move(currXOffset, currYOffset);
-        
+        if (style()->isHorizontalWritingMode()) {
+            int currXOffset = colRect.x() - logicalLeft;
+            repaintRect.move(currXOffset, currLogicalOffset);
+            currLogicalOffset -= colRect.height();
+        } else {
+            int currYOffset = colRect.y() - logicalLeft;
+            repaintRect.move(currLogicalOffset, currYOffset);
+            currLogicalOffset -= colRect.width();
+        }
         repaintRect.intersect(colRect);
-        
         result.unite(repaintRect);
-
-        // Move to the next position.
-        currYOffset -= colRect.height();
     }
 
     r = result;
 }
 
+IntPoint RenderBlock::flipForWritingModeIncludingColumns(const IntPoint& point) const
+{
+    ASSERT(hasColumns());
+    if (!hasColumns() || !style()->isFlippedBlocksWritingMode())
+        return point;
+    ColumnInfo* colInfo = columnInfo();
+    int columnLogicalHeight = colInfo->columnHeight();
+    int expandedLogicalHeight = borderBefore() + paddingBefore() + columnCount(colInfo) * columnLogicalHeight + borderAfter() + paddingAfter() + scrollbarLogicalHeight();
+    if (style()->isHorizontalWritingMode())
+        return IntPoint(point.x(), expandedLogicalHeight - point.y());
+    return IntPoint(expandedLogicalHeight - point.x(), point.y());
+}
+
+void RenderBlock::flipForWritingModeIncludingColumns(IntRect& rect) const
+{
+    ASSERT(hasColumns());
+    if (!hasColumns() || !style()->isFlippedBlocksWritingMode())
+        return;
+    
+    ColumnInfo* colInfo = columnInfo();
+    int columnLogicalHeight = colInfo->columnHeight();
+    int expandedLogicalHeight = borderBefore() + paddingBefore() + columnCount(colInfo) * columnLogicalHeight + borderAfter() + paddingAfter() + scrollbarLogicalHeight();
+    if (style()->isHorizontalWritingMode())
+        rect.setY(expandedLogicalHeight - rect.bottom());
+    else
+        rect.setX(expandedLogicalHeight - rect.right());
+}
+
 void RenderBlock::adjustForColumns(IntSize& offset, const IntPoint& point) const
 {
     if (!hasColumns())
@@ -4350,18 +4440,34 @@ void RenderBlock::adjustForColumns(IntSize& offset, const IntPoint& point) const
 
     ColumnInfo* colInfo = columnInfo();
 
-    int left = borderLeft() + paddingLeft();
-    int yOffset = 0;
+    int logicalLeft = logicalLeftOffsetForContent();
     size_t colCount = columnCount(colInfo);
+    int colLogicalWidth = colInfo->desiredColumnWidth();
+    int colLogicalHeight = colInfo->columnHeight();
+
     for (size_t i = 0; i < colCount; ++i) {
-        IntRect columnRect = columnRectAt(colInfo, i);
-        int xOffset = columnRect.x() - left;
-        if (point.y() < columnRect.bottom() + yOffset) {
-            offset.expand(xOffset, -yOffset);
-            return;
-        }
+        // Compute the edges for a given column in the block progression direction.
+        IntRect sliceRect = IntRect(logicalLeft, borderBefore() + paddingBefore() + i * colLogicalHeight, colLogicalWidth, colLogicalHeight);
+        if (!style()->isHorizontalWritingMode())
+            sliceRect = sliceRect.transposedRect();
+        
+        // If we have a flipped blocks writing mode, then convert the column so that it's coming from the after edge (either top or left edge).
+        flipForWritingModeIncludingColumns(sliceRect);
+        
+        int logicalOffset = style()->isFlippedBlocksWritingMode() ? (colCount - 1 - i) * colLogicalHeight : i * colLogicalHeight;
 
-        yOffset += columnRect.height();
+        // Now we're in the same coordinate space as the point.  See if it is inside the rectangle.
+        if (style()->isHorizontalWritingMode()) {
+            if (point.y() >= sliceRect.y() && point.y() < sliceRect.bottom()) {
+                offset.expand(columnRectAt(colInfo, i).x() - logicalLeft, -logicalOffset);
+                return;
+            }
+        } else {
+            if (point.x() >= sliceRect.x() && point.x() < sliceRect.right()) {
+                offset.expand(-logicalOffset, columnRectAt(colInfo, i).y() - logicalLeft);
+                return;
+            }
+        }
     }
 }
 
@@ -4501,16 +4607,13 @@ static int getBPMWidth(int childValue, Length cssUnit)
 static int getBorderPaddingMargin(const RenderBoxModelObject* child, bool endOfInline)
 {
     RenderStyle* cstyle = child->style();
-    int result = 0;
-    bool leftSide = (cstyle->isLeftToRightDirection()) ? !endOfInline : endOfInline;
-    result += getBPMWidth((leftSide ? child->marginLeft() : child->marginRight()),
-                          (leftSide ? cstyle->marginLeft() :
-                                      cstyle->marginRight()));
-    result += getBPMWidth((leftSide ? child->paddingLeft() : child->paddingRight()),
-                          (leftSide ? cstyle->paddingLeft() :
-                                      cstyle->paddingRight()));
-    result += leftSide ? child->borderLeft() : child->borderRight();
-    return result;
+    if (endOfInline)
+        return getBPMWidth(child->marginEnd(), cstyle->marginEnd()) + 
+               getBPMWidth(child->paddingEnd(), cstyle->paddingEnd()) +
+               child->borderEnd();
+    return getBPMWidth(child->marginStart(), cstyle->marginStart()) + 
+               getBPMWidth(child->paddingStart(), cstyle->paddingStart()) +
+               child->borderStart();
 }
 
 static inline void stripTrailingSpace(int& inlineMax, int& inlineMin,
@@ -4533,7 +4636,7 @@ void RenderBlock::computeInlinePreferredLogicalWidths()
     int inlineMax = 0;
     int inlineMin = 0;
 
-    int cw = containingBlock()->contentWidth();
+    int cw = containingBlock()->contentLogicalWidth();
 
     // If we are at the start of a line, we want to ignore all white-space.
     // Also strip spaces if we previously had text that ended in a trailing space.
@@ -4543,7 +4646,7 @@ void RenderBlock::computeInlinePreferredLogicalWidths()
     // Firefox and Opera will allow a table cell to grow to fit an image inside it under
     // very specific cirucumstances (in order to match common WinIE renderings). 
     // Not supporting the quirk has caused us to mis-render some real sites. (See Bugzilla 10517.) 
-    bool allowImagesToBreak = !document()->inQuirksMode() || !isTableCell() || !style()->width().isIntrinsicOrAuto();
+    bool allowImagesToBreak = !document()->inQuirksMode() || !isTableCell() || !style()->logicalWidth().isIntrinsicOrAuto();
 
     bool autoWrap, oldAutoWrap;
     autoWrap = oldAutoWrap = style()->autoWrap();
@@ -4611,12 +4714,12 @@ void RenderBlock::computeInlinePreferredLogicalWidths()
                 } else {
                     // Inline replaced elts add in their margins to their min/max values.
                     int margins = 0;
-                    Length leftMargin = cstyle->marginLeft();
-                    Length rightMargin = cstyle->marginRight();
-                    if (leftMargin.isFixed())
-                        margins += leftMargin.value();
-                    if (rightMargin.isFixed())
-                        margins += rightMargin.value();
+                    Length startMargin = cstyle->marginStart();
+                    Length endMargin = cstyle->marginEnd();
+                    if (startMargin.isFixed())
+                        margins += startMargin.value();
+                    if (endMargin.isFixed())
+                        margins += endMargin.value();
                     childMin += margins;
                     childMax += margins;
                 }
@@ -4655,8 +4758,8 @@ void RenderBlock::computeInlinePreferredLogicalWidths()
                 if (!addedTextIndent) {
                     addedTextIndent = true;
                     ti = style()->textIndent().calcMinValue(cw);
-                    childMin+=ti;
-                    childMax+=ti;
+                    childMin += ti;
+                    childMax += ti;
                 }
 
                 // Add our width to the max.
@@ -4818,14 +4921,16 @@ void RenderBlock::computeBlockPreferredLogicalWidths()
         // A margin basically has three types: fixed, percentage, and auto (variable).
         // Auto and percentage margins simply become 0 when computing min/max width.
         // Fixed margins can be added in as is.
-        Length ml = child->style()->marginLeft();
-        Length mr = child->style()->marginRight();
-        int margin = 0, marginLeft = 0, marginRight = 0;
-        if (ml.isFixed())
-            marginLeft += ml.value();
-        if (mr.isFixed())
-            marginRight += mr.value();
-        margin = marginLeft + marginRight;
+        Length startMarginLength = child->style()->marginStart();
+        Length endMarginLength = child->style()->marginEnd();
+        int margin = 0;
+        int marginStart = 0;
+        int marginEnd = 0;
+        if (startMarginLength.isFixed())
+            marginStart += startMarginLength.value();
+        if (endMarginLength.isFixed())
+            marginEnd += endMarginLength.value();
+        margin = marginStart + marginEnd;
 
         int w = child->minPreferredLogicalWidth() + margin;
         m_minPreferredLogicalWidth = max(w, m_minPreferredLogicalWidth);
@@ -4841,8 +4946,11 @@ void RenderBlock::computeBlockPreferredLogicalWidths()
                 // Determine a left and right max value based off whether or not the floats can fit in the
                 // margins of the object.  For negative margins, we will attempt to overlap the float if the negative margin
                 // is smaller than the float width.
-                int maxLeft = marginLeft > 0 ? max(floatLeftWidth, marginLeft) : floatLeftWidth + marginLeft;
-                int maxRight = marginRight > 0 ? max(floatRightWidth, marginRight) : floatRightWidth + marginRight;
+                bool ltr = containingBlock()->style()->isLeftToRightDirection();
+                int marginLogicalLeft = ltr ? marginStart : marginEnd;
+                int marginLogicalRight = ltr ? marginEnd : marginStart;
+                int maxLeft = marginLogicalLeft > 0 ? max(floatLeftWidth, marginLogicalLeft) : floatLeftWidth + marginLogicalLeft;
+                int maxRight = marginLogicalRight > 0 ? max(floatRightWidth, marginLogicalRight) : floatRightWidth + marginLogicalRight;
                 w = child->maxPreferredLogicalWidth() + maxLeft + maxRight;
                 w = max(w, floatLeftWidth + floatRightWidth);
             }
@@ -4872,7 +4980,7 @@ void RenderBlock::computeBlockPreferredLogicalWidths()
         // of 100px because of the table.
         // We can achieve this effect by making the maxwidth of blocks that contain tables
         // with percentage widths be infinite (as long as they are not inside a table cell).
-        if (document()->inQuirksMode() && child->style()->width().isPercent() &&
+        if (document()->inQuirksMode() && child->style()->logicalWidth().isPercent() &&
             !isTableCell() && child->isTable() && m_maxPreferredLogicalWidth < BLOCK_MAX_WIDTH) {
             RenderBlock* cb = containingBlock();
             while (!cb->isRenderView() && !cb->isTableCell())
@@ -5370,7 +5478,7 @@ void RenderBlock::adjustForBorderFit(int x, int& left, int& right) const
             for (; (r = it.current()); ++it) {
                 // Only examine the object if our m_shouldPaint flag is set.
                 if (r->m_shouldPaint) {
-                    int floatLeft = r->left() - r->m_renderer->x() + r->m_renderer->marginLeft();
+                    int floatLeft = leftForFloatIncludingMargin(r) - r->m_renderer->x();
                     int floatRight = floatLeft + r->m_renderer->width();
                     left = min(left, floatLeft);
                     right = max(right, floatRight);
@@ -5725,16 +5833,18 @@ RenderBlock* RenderBlock::createAnonymousColumnSpanBlock() const
     return newBox;
 }
 
-int RenderBlock::nextPageTop(int yPos) const
+int RenderBlock::nextPageLogicalTop(int logicalOffset) const
 {
     LayoutState* layoutState = view()->layoutState();
     if (!layoutState->m_pageLogicalHeight)
-        return yPos;
+        return logicalOffset;
     
-    // The yPos is in our coordinate space.  We can add in our pushed offset.
+    // The logicalOffset is in our coordinate space.  We can add in our pushed offset.
     int pageLogicalHeight = layoutState->m_pageLogicalHeight;
-    int remainingHeight = (pageLogicalHeight - ((layoutState->m_layoutOffset - layoutState->m_pageOffset).height() + yPos) % pageLogicalHeight) % pageLogicalHeight;
-    return yPos + remainingHeight;
+    IntSize delta = layoutState->m_layoutOffset - layoutState->m_pageOffset;
+    int offset = style()->isHorizontalWritingMode() ? delta.height() : delta.width();
+    int remainingLogicalHeight = (pageLogicalHeight - (offset + logicalOffset) % pageLogicalHeight) % pageLogicalHeight;
+    return logicalOffset + remainingLogicalHeight;
 }
 
 static bool inNormalFlow(RenderBox* child)
@@ -5751,7 +5861,7 @@ static bool inNormalFlow(RenderBox* child)
     return true;
 }
 
-int RenderBlock::applyBeforeBreak(RenderBox* child, int yPos)
+int RenderBlock::applyBeforeBreak(RenderBox* child, int logicalOffset)
 {
     // FIXME: Add page break checking here when we support printing.
     bool checkColumnBreaks = view()->layoutState()->isPaginatingColumns();
@@ -5759,13 +5869,13 @@ int RenderBlock::applyBeforeBreak(RenderBox* child, int yPos)
     bool checkBeforeAlways = (checkColumnBreaks && child->style()->columnBreakBefore() == PBALWAYS) || (checkPageBreaks && child->style()->pageBreakBefore() == PBALWAYS);
     if (checkBeforeAlways && inNormalFlow(child)) {
         if (checkColumnBreaks)
-            view()->layoutState()->addForcedColumnBreak(yPos);
-        return nextPageTop(yPos);
+            view()->layoutState()->addForcedColumnBreak(logicalOffset);
+        return nextPageLogicalTop(logicalOffset);
     }
-    return yPos;
+    return logicalOffset;
 }
 
-int RenderBlock::applyAfterBreak(RenderBox* child, int yPos, MarginInfo& marginInfo)
+int RenderBlock::applyAfterBreak(RenderBox* child, int logicalOffset, MarginInfo& marginInfo)
 {
     // FIXME: Add page break checking here when we support printing.
     bool checkColumnBreaks = view()->layoutState()->isPaginatingColumns();
@@ -5774,28 +5884,30 @@ int RenderBlock::applyAfterBreak(RenderBox* child, int yPos, MarginInfo& marginI
     if (checkAfterAlways && inNormalFlow(child)) {
         marginInfo.setMarginAfterQuirk(true); // Cause margins to be discarded for any following content.
         if (checkColumnBreaks)
-            view()->layoutState()->addForcedColumnBreak(yPos);
-        return nextPageTop(yPos);
+            view()->layoutState()->addForcedColumnBreak(logicalOffset);
+        return nextPageLogicalTop(logicalOffset);
     }
-    return yPos;
+    return logicalOffset;
 }
 
-int RenderBlock::adjustForUnsplittableChild(RenderBox* child, int yPos, bool includeMargins)
+int RenderBlock::adjustForUnsplittableChild(RenderBox* child, int logicalOffset, bool includeMargins)
 {
     bool isUnsplittable = child->isReplaced() || child->scrollsOverflow();
     if (!isUnsplittable)
-        return yPos;
-    int childHeight = child->height() + (includeMargins ? child->marginTop() + child->marginBottom() : 0);
+        return logicalOffset;
+    int childLogicalHeight = logicalHeightForChild(child) + (includeMargins ? marginBeforeForChild(child) + marginAfterForChild(child) : 0);
     LayoutState* layoutState = view()->layoutState();
     if (layoutState->m_columnInfo)
-        layoutState->m_columnInfo->updateMinimumColumnHeight(childHeight);
+        layoutState->m_columnInfo->updateMinimumColumnHeight(childLogicalHeight);
     int pageLogicalHeight = layoutState->m_pageLogicalHeight;
-    if (!pageLogicalHeight || childHeight > pageLogicalHeight)
-        return yPos;
-    int remainingHeight = (pageLogicalHeight - ((layoutState->m_layoutOffset - layoutState->m_pageOffset).height() + yPos) % pageLogicalHeight) % pageLogicalHeight;
-    if (remainingHeight < childHeight)
-        return yPos + remainingHeight;
-    return yPos;
+    if (!pageLogicalHeight || childLogicalHeight > pageLogicalHeight)
+        return logicalOffset;
+    IntSize delta = layoutState->m_layoutOffset - layoutState->m_pageOffset;
+    int offset = style()->isHorizontalWritingMode() ? delta.height() : delta.width();
+    int remainingLogicalHeight = (pageLogicalHeight - (offset + logicalOffset) % pageLogicalHeight) % pageLogicalHeight;
+    if (remainingLogicalHeight < childLogicalHeight)
+        return logicalOffset + remainingLogicalHeight;
+    return logicalOffset;
 }
 
 void RenderBlock::adjustLinePositionForPagination(RootInlineBox* lineBox, int& delta)
@@ -5818,22 +5930,24 @@ void RenderBlock::adjustLinePositionForPagination(RootInlineBox* lineBox, int& d
     // line and all following lines.
     LayoutState* layoutState = view()->layoutState();
     int pageLogicalHeight = layoutState->m_pageLogicalHeight;
-    int yPos = lineBox->topVisualOverflow();
-    int lineHeight = lineBox->bottomVisualOverflow() - yPos;
+    int logicalOffset = lineBox->logicalTopVisualOverflow();
+    int lineHeight = lineBox->logicalBottomVisualOverflow() - logicalOffset;
     if (layoutState->m_columnInfo)
         layoutState->m_columnInfo->updateMinimumColumnHeight(lineHeight);
-    yPos += delta;
+    logicalOffset += delta;
     lineBox->setPaginationStrut(0);
     if (!pageLogicalHeight || lineHeight > pageLogicalHeight)
         return;
-    int remainingHeight = pageLogicalHeight - ((layoutState->m_layoutOffset - layoutState->m_pageOffset).height() + yPos) % pageLogicalHeight;
-    if (remainingHeight < lineHeight) {
-        int totalHeight = lineHeight + max(0, yPos);
-        if (lineBox == firstRootBox() && totalHeight < pageLogicalHeight && !isPositioned() && !isTableCell())
-            setPaginationStrut(remainingHeight + max(0, yPos));
+    IntSize offsetDelta = layoutState->m_layoutOffset - layoutState->m_pageOffset;
+    int offset = style()->isHorizontalWritingMode() ? offsetDelta.height() : offsetDelta.width();
+    int remainingLogicalHeight = pageLogicalHeight - (offset + logicalOffset) % pageLogicalHeight;
+    if (remainingLogicalHeight < lineHeight) {
+        int totalLogicalHeight = lineHeight + max(0, logicalOffset);
+        if (lineBox == firstRootBox() && totalLogicalHeight < pageLogicalHeight && !isPositioned() && !isTableCell())
+            setPaginationStrut(remainingLogicalHeight + max(0, logicalOffset));
         else {
-            delta += remainingHeight;
-            lineBox->setPaginationStrut(remainingHeight);
+            delta += remainingLogicalHeight;
+            lineBox->setPaginationStrut(remainingLogicalHeight);
         }
     }  
 }
diff --git a/Source/WebCore/rendering/RenderBlock.h b/Source/WebCore/rendering/RenderBlock.h
index e43b87d..cc98000 100644
--- a/Source/WebCore/rendering/RenderBlock.h
+++ b/Source/WebCore/rendering/RenderBlock.h
@@ -106,6 +106,9 @@ public:
     // Block flows subclass availableWidth to handle multi column layout (shrinking the width available to children when laying out.)
     virtual int availableLogicalWidth() const;
 
+    IntPoint flipForWritingModeIncludingColumns(const IntPoint&) const;
+    void flipForWritingModeIncludingColumns(IntRect&) const;
+
     RootInlineBox* firstRootBox() const { return static_cast<RootInlineBox*>(firstLineBox()); }
     RootInlineBox* lastRootBox() const { return static_cast<RootInlineBox*>(lastLineBox()); }
 
@@ -212,6 +215,9 @@ public:
 
     virtual void scrollbarsChanged(bool /*horizontalScrollbarChanged*/, bool /*verticalScrollbarChanged*/) { };
 
+    int logicalRightOffsetForContent() const { return style()->isHorizontalWritingMode() ? borderLeft() + paddingLeft() + availableLogicalWidth() : borderTop() + paddingTop() + availableLogicalWidth(); }
+    int logicalLeftOffsetForContent() const { return style()->isHorizontalWritingMode() ? borderLeft() + paddingLeft() : borderTop() + paddingTop(); }
+
 protected:
     // These functions are only used internally to manipulate the render tree structure via remove/insert/appendChildNode.
     // Since they are typically called only to move objects around within anonymous blocks (which only have layers in
@@ -261,8 +267,6 @@ protected:
     virtual void paint(PaintInfo&, int tx, int ty);
     virtual void paintObject(PaintInfo&, int tx, int ty);
 
-    int logicalRightOffsetForContent() const { return style()->isHorizontalWritingMode() ? borderLeft() + paddingLeft() + availableLogicalWidth() : borderTop() + paddingTop() + availableLogicalWidth(); }
-    int logicalLeftOffsetForContent() const { return style()->isHorizontalWritingMode() ? borderLeft() + paddingLeft() : borderTop() + paddingTop(); }
     int logicalRightOffsetForLine(int position, int fixedOffset, bool applyTextIndent = true, int* logicalHeightRemaining = 0) const;
     int logicalLeftOffsetForLine(int position, int fixedOffset, bool applyTextIndent = true, int* logicalHeightRemaining = 0) const;
 
@@ -399,7 +403,7 @@ private:
         int bottom() const { ASSERT(isPlaced()); return m_frameRect.bottom(); }
         int width() const { return m_frameRect.width(); }
         int height() const { return m_frameRect.height(); }
-    
+
         void setLeft(int left) { m_frameRect.setX(left); }
         void setTop(int top) { m_frameRect.setY(top); }
         void setWidth(int width) { m_frameRect.setWidth(width); }
@@ -417,11 +421,13 @@ private:
         bool m_isPlaced : 1;
     };
 
-    int logicalTopForFloat(FloatingObject* child) const { return style()->isHorizontalWritingMode() ? child->top() : child->left(); }
-    int logicalBottomForFloat(FloatingObject* child) const { return style()->isHorizontalWritingMode() ? child->bottom() : child->right(); }
-    int logicalLeftForFloat(FloatingObject* child) const { return style()->isHorizontalWritingMode() ? child->left() : child->top(); }
-    int logicalRightForFloat(FloatingObject* child) const { return style()->isHorizontalWritingMode() ? child->right() : child->bottom(); }
-    int logicalWidthForFloat(FloatingObject* child) const { return style()->isHorizontalWritingMode() ? child->width() : child->height(); }
+    IntPoint flipFloatForWritingMode(const FloatingObject*, const IntPoint&) const;
+
+    int logicalTopForFloat(const FloatingObject* child) const { return style()->isHorizontalWritingMode() ? child->top() : child->left(); }
+    int logicalBottomForFloat(const FloatingObject* child) const { return style()->isHorizontalWritingMode() ? child->bottom() : child->right(); }
+    int logicalLeftForFloat(const FloatingObject* child) const { return style()->isHorizontalWritingMode() ? child->left() : child->top(); }
+    int logicalRightForFloat(const FloatingObject* child) const { return style()->isHorizontalWritingMode() ? child->right() : child->bottom(); }
+    int logicalWidthForFloat(const FloatingObject* child) const { return style()->isHorizontalWritingMode() ? child->width() : child->height(); }
     void setLogicalTopForFloat(FloatingObject* child, int logicalTop)
     {
         if (style()->isHorizontalWritingMode())
@@ -451,6 +457,22 @@ private:
             child->setHeight(logicalWidth);
     }
 
+    int leftForFloatIncludingMargin(const FloatingObject* child) const
+    {
+        if (style()->isHorizontalWritingMode())
+            return child->left() + child->renderer()->marginLeft();
+        else
+            return child->left() + marginBeforeForChild(child->renderer());
+    }
+        
+    int topForFloatIncludingMargin(const FloatingObject* child) const
+    {
+        if (style()->isHorizontalWritingMode())
+            return child->top() + marginBeforeForChild(child->renderer());
+        else
+            return child->top() + child->renderer()->marginTop();
+    }
+
     // The following functions' implementations are in RenderBlockLineLayout.cpp.
     RootInlineBox* determineStartPosition(bool& firstLine, bool& fullLayout, bool& previousLineBrokeCleanly,
                                           InlineBidiResolver&, Vector<FloatWithRect>& floats, unsigned& numCleanFloats,
@@ -488,7 +510,7 @@ private:
 
     FloatingObject* insertFloatingObject(RenderBox*);
     void removeFloatingObject(RenderBox*);
-    void removeFloatingObjectsBelow(FloatingObject*, int y);
+    void removeFloatingObjectsBelow(FloatingObject*, int logicalOffset);
     
     // Called from lineWidth, to position the floats added in the last line.
     // Returns true if and only if it has positioned any floats.
@@ -667,11 +689,11 @@ private:
     // End helper functions and structs used by layoutBlockChildren.
 
     // Pagination routines.
-    int nextPageTop(int yPos) const; // Returns the top of the next page following yPos.
-    int applyBeforeBreak(RenderBox* child, int yPos); // If the child has a before break, then return a new yPos that shifts to the top of the next page/column.
-    int applyAfterBreak(RenderBox* child, int yPos, MarginInfo& marginInfo); // If the child has an after break, then return a new yPos that shifts to the top of the next page/column.
-    int adjustForUnsplittableChild(RenderBox* child, int yPos, bool includeMargins = false); // If the child is unsplittable and can't fit on the current page, return the top of the next page/column.
-    void adjustLinePositionForPagination(RootInlineBox*, int& deltaY); // Computes a deltaY value that put a line at the top of the next page if it doesn't fit on the current page.
+    int nextPageLogicalTop(int logicalOffset) const; // Returns the top of the next page following logicalOffset.
+    int applyBeforeBreak(RenderBox* child, int logicalOffset); // If the child has a before break, then return a new yPos that shifts to the top of the next page/column.
+    int applyAfterBreak(RenderBox* child, int logicalOffset, MarginInfo& marginInfo); // If the child has an after break, then return a new offset that shifts to the top of the next page/column.
+    int adjustForUnsplittableChild(RenderBox* child, int logicalOffset, bool includeMargins = false); // If the child is unsplittable and can't fit on the current page, return the top of the next page/column.
+    void adjustLinePositionForPagination(RootInlineBox*, int& deltaOffset); // Computes a deltaOffset value that put a line at the top of the next page if it doesn't fit on the current page.
 
     typedef PositionedObjectsListHashSet::const_iterator Iterator;
     DeprecatedPtrList<FloatingObject>* m_floatingObjects;
diff --git a/Source/WebCore/rendering/RenderBlockLineLayout.cpp b/Source/WebCore/rendering/RenderBlockLineLayout.cpp
index 108f529..2637bc0 100644
--- a/Source/WebCore/rendering/RenderBlockLineLayout.cpp
+++ b/Source/WebCore/rendering/RenderBlockLineLayout.cpp
@@ -790,7 +790,7 @@ void RenderBlock::layoutInlineChildren(bool relayoutChildren, int& repaintLogica
                         adjustLinePositionForPagination(lineBox, adjustment);
                         if (adjustment) {
                             int oldLineWidth = availableLogicalWidthForLine(oldLogicalHeight, firstLine);
-                            lineBox->adjustPosition(0, adjustment);
+                            lineBox->adjustBlockDirectionPosition(adjustment);
                             if (useRepaintBounds) // This can only be a positive adjustment, so no need to update repaintTop.
                                 repaintLogicalBottom = max(repaintLogicalBottom, afterSideVisualOverflowForLine(lineBox));
                                 
@@ -848,7 +848,7 @@ void RenderBlock::layoutInlineChildren(bool relayoutChildren, int& repaintLogica
                     if (delta) {
                         repaintLogicalTop = min(repaintLogicalTop, beforeSideVisualOverflowForLine(line) + min(delta, 0));
                         repaintLogicalBottom = max(repaintLogicalBottom, afterSideVisualOverflowForLine(line) + max(delta, 0));
-                        line->adjustPosition(0, delta);
+                        line->adjustBlockDirectionPosition(delta);
                     }
                     if (Vector<RenderBox*>* cleanLineFloats = line->floatsPtr()) {
                         Vector<RenderBox*>::iterator end = cleanLineFloats->end();
@@ -965,7 +965,7 @@ RootInlineBox* RenderBlock::determineStartPosition(bool& firstLine, bool& fullLa
                         
                     repaintLogicalTop = min(repaintLogicalTop, beforeSideVisualOverflowForLine(curr) + min(paginationDelta, 0));
                     repaintLogicalBottom = max(repaintLogicalBottom, afterSideVisualOverflowForLine(curr) + max(paginationDelta, 0));
-                    curr->adjustPosition(0, paginationDelta);
+                    curr->adjustBlockDirectionPosition(paginationDelta);
                 }                
             }
             
diff --git a/Source/WebCore/rendering/RenderBox.cpp b/Source/WebCore/rendering/RenderBox.cpp
index 86ba374..9428519 100644
--- a/Source/WebCore/rendering/RenderBox.cpp
+++ b/Source/WebCore/rendering/RenderBox.cpp
@@ -1268,8 +1268,14 @@ IntSize RenderBox::offsetFromContainer(RenderObject* o, const IntPoint& point) c
 
     if (!isInline() || isReplaced()) {
         if (style()->position() != AbsolutePosition && style()->position() != FixedPosition) {
-            o->adjustForColumns(offset, IntPoint(point.x() + x(), point.y() + y()));
-            offset += locationOffsetIncludingFlipping();
+            if (o->hasColumns()) {
+                IntRect columnRect(frameRect());
+                toRenderBlock(o)->flipForWritingModeIncludingColumns(columnRect);
+                offset += IntSize(columnRect.location().x(), columnRect.location().y());
+                columnRect.move(point.x(), point.y());
+                o->adjustForColumns(offset, columnRect.location());
+            } else
+                offset += locationOffsetIncludingFlipping();
         } else
             offset += locationOffset();
     }
@@ -3328,6 +3334,13 @@ IntPoint RenderBox::flipForWritingMode(const IntPoint& position) const
     return style()->isHorizontalWritingMode() ? IntPoint(position.x(), height() - position.y()) : IntPoint(width() - position.x(), position.y());
 }
 
+IntPoint RenderBox::flipForWritingModeIncludingColumns(const IntPoint& point) const
+{
+    if (!hasColumns() || !style()->isFlippedBlocksWritingMode())
+        return flipForWritingMode(point);
+    return toRenderBlock(this)->flipForWritingModeIncludingColumns(point);
+}
+
 IntSize RenderBox::flipForWritingMode(const IntSize& offset) const
 {
     if (!style()->isFlippedBlocksWritingMode())
diff --git a/Source/WebCore/rendering/RenderBox.h b/Source/WebCore/rendering/RenderBox.h
index 7bc4910..595947f 100644
--- a/Source/WebCore/rendering/RenderBox.h
+++ b/Source/WebCore/rendering/RenderBox.h
@@ -172,7 +172,7 @@ public:
     int clientTop() const { return borderTop(); }
     int clientWidth() const;
     int clientHeight() const;
-    int clientLogicalBottom() const { return style()->isHorizontalWritingMode() ? clientTop() + clientHeight() : clientLeft() + clientWidth(); }
+    int clientLogicalBottom() const { return borderBefore() + (style()->isHorizontalWritingMode() ? clientHeight() : clientWidth()); }
     IntRect clientBoxRect() const { return IntRect(clientLeft(), clientTop(), clientWidth(), clientHeight()); }
 
     // scrollWidth/scrollHeight will be the same as clientWidth/clientHeight unless the
@@ -378,6 +378,7 @@ public:
     IntPoint flipForWritingMode(const RenderBox* child, const IntPoint&, FlippingAdjustment) const;
     int flipForWritingMode(int position) const; // The offset is in the block direction (y for horizontal writing modes, x for vertical writing modes).
     IntPoint flipForWritingMode(const IntPoint&) const;
+    IntPoint flipForWritingModeIncludingColumns(const IntPoint&) const;
     IntSize flipForWritingMode(const IntSize&) const;
     void flipForWritingMode(IntRect&) const;
     IntSize locationOffsetIncludingFlipping() const;
diff --git a/Source/WebCore/rendering/RenderFlexibleBox.cpp b/Source/WebCore/rendering/RenderFlexibleBox.cpp
index 15362d6..75be4f6 100644
--- a/Source/WebCore/rendering/RenderFlexibleBox.cpp
+++ b/Source/WebCore/rendering/RenderFlexibleBox.cpp
@@ -280,7 +280,7 @@ void RenderFlexibleBox::layoutBlock(bool relayoutChildren, int /*pageHeight FIXM
     updateLayerTransform();
 
     if (view()->layoutState()->pageLogicalHeight())
-        setPageLogicalOffset(view()->layoutState()->pageLogicalOffset(y()));
+        setPageLogicalOffset(view()->layoutState()->pageLogicalOffset(logicalTop()));
 
     // Update our scrollbars if we're overflow:auto/scroll/hidden now that we know if
     // we overflow or not.
diff --git a/Source/WebCore/rendering/RenderInline.cpp b/Source/WebCore/rendering/RenderInline.cpp
index b5ca8a4..ad0081d 100644
--- a/Source/WebCore/rendering/RenderInline.cpp
+++ b/Source/WebCore/rendering/RenderInline.cpp
@@ -749,7 +749,7 @@ void RenderInline::computeRectForRepaint(RenderBoxModelObject* repaintContainer,
 IntSize RenderInline::offsetFromContainer(RenderObject* container, const IntPoint& point) const
 {
     ASSERT(container == this->container());
-
+    
     IntSize offset;    
     if (isRelPositioned())
         offset += relativePositionOffset();
@@ -783,6 +783,10 @@ void RenderInline::mapLocalToContainer(RenderBoxModelObject* repaintContainer, b
     if (!o)
         return;
 
+    IntPoint centerPoint = roundedIntPoint(transformState.mappedPoint());
+    if (o->isBox() && o->style()->isFlippedBlocksWritingMode())
+        transformState.move(toRenderBox(o)->flipForWritingModeIncludingColumns(roundedIntPoint(transformState.mappedPoint())) - centerPoint);
+
     IntSize containerOffset = offsetFromContainer(o, roundedIntPoint(transformState.mappedPoint()));
 
     bool preserve3D = useTransforms && (o->style()->preserves3D() || style()->preserves3D());
diff --git a/Source/WebCore/rendering/RenderLayer.cpp b/Source/WebCore/rendering/RenderLayer.cpp
index c9ec87b..a9b005d 100644
--- a/Source/WebCore/rendering/RenderLayer.cpp
+++ b/Source/WebCore/rendering/RenderLayer.cpp
@@ -2569,13 +2569,18 @@ void RenderLayer::paintChildLayerIntoColumns(RenderLayer* childLayer, RenderLaye
     int layerY = 0;
     columnBlock->layer()->convertToLayerCoords(rootLayer, layerX, layerY);
     
+    bool isHorizontal = columnBlock->style()->isHorizontalWritingMode();
+
     ColumnInfo* colInfo = columnBlock->columnInfo();
     unsigned colCount = columnBlock->columnCount(colInfo);
-    int currYOffset = 0;
+    int currLogicalTopOffset = 0;
     for (unsigned i = 0; i < colCount; i++) {
         // For each rect, we clip to the rect, and then we adjust our coords.
         IntRect colRect = columnBlock->columnRectAt(colInfo, i);
-        int currXOffset = colRect.x() - (columnBlock->borderLeft() + columnBlock->paddingLeft());
+        columnBlock->flipForWritingMode(colRect);
+        int logicalLeftOffset = (isHorizontal ? colRect.x() : colRect.y()) - columnBlock->logicalLeftOffsetForContent();
+        IntSize offset = isHorizontal ? IntSize(logicalLeftOffset, currLogicalTopOffset) : IntSize(currLogicalTopOffset, logicalLeftOffset);
+
         colRect.move(layerX, layerY);
 
         IntRect localDirtyRect(paintDirtyRect);
@@ -2595,7 +2600,7 @@ void RenderLayer::paintChildLayerIntoColumns(RenderLayer* childLayer, RenderLaye
                 if (oldHasTransform)
                     oldTransform = *childLayer->transform();
                 TransformationMatrix newTransform(oldTransform);
-                newTransform.translateRight(currXOffset, currYOffset);
+                newTransform.translateRight(offset.width(), offset.height());
                 
                 childLayer->m_transform.set(new TransformationMatrix(newTransform));
                 childLayer->paintLayer(rootLayer, context, localDirtyRect, paintBehavior, paintingRoot, overlapTestRequests, paintFlags);
@@ -2610,7 +2615,7 @@ void RenderLayer::paintChildLayerIntoColumns(RenderLayer* childLayer, RenderLaye
                 int childY = 0;
                 columnLayers[colIndex - 1]->convertToLayerCoords(rootLayer, childX, childY);
                 TransformationMatrix transform;
-                transform.translateRight(childX + currXOffset, childY + currYOffset);
+                transform.translateRight(childX + offset.width(), childY + offset.height());
                 
                 // Apply the transform.
                 context->concatCTM(transform.toAffineTransform());
@@ -2625,7 +2630,11 @@ void RenderLayer::paintChildLayerIntoColumns(RenderLayer* childLayer, RenderLaye
         }
 
         // Move to the next position.
-        currYOffset -= colRect.height();
+        int blockDelta = isHorizontal ? colRect.height() : colRect.width();
+        if (columnBlock->style()->isFlippedBlocksWritingMode())
+            currLogicalTopOffset += blockDelta;
+        else
+            currLogicalTopOffset -= blockDelta;
     }
 }
 
@@ -3038,21 +3047,35 @@ RenderLayer* RenderLayer::hitTestChildLayerColumns(RenderLayer* childLayer, Rend
     int colCount = columnBlock->columnCount(colInfo);
     
     // We have to go backwards from the last column to the first.
-    int left = columnBlock->borderLeft() + columnBlock->paddingLeft();
-    int currYOffset = 0;
+    bool isHorizontal = columnBlock->style()->isHorizontalWritingMode();
+    int logicalLeft = columnBlock->logicalLeftOffsetForContent();
+    int currLogicalTopOffset = 0;
     int i;
-    for (i = 0; i < colCount; i++)
-        currYOffset -= columnBlock->columnRectAt(colInfo, i).height();
+    for (i = 0; i < colCount; i++) {
+        IntRect colRect = columnBlock->columnRectAt(colInfo, i);
+        int blockDelta =  (isHorizontal ? colRect.height() : colRect.width());
+        if (columnBlock->style()->isFlippedBlocksWritingMode())
+            currLogicalTopOffset += blockDelta;
+        else
+            currLogicalTopOffset -= blockDelta;
+    }
     for (i = colCount - 1; i >= 0; i--) {
         // For each rect, we clip to the rect, and then we adjust our coords.
         IntRect colRect = columnBlock->columnRectAt(colInfo, i);
-        int currXOffset = colRect.x() - left;
-        currYOffset += colRect.height();
+        columnBlock->flipForWritingMode(colRect);
+        int currLogicalLeftOffset = (isHorizontal ? colRect.x() : colRect.y()) - logicalLeft;
+        int blockDelta =  (isHorizontal ? colRect.height() : colRect.width());
+        if (columnBlock->style()->isFlippedBlocksWritingMode())
+            currLogicalTopOffset -= blockDelta;
+        else
+            currLogicalTopOffset += blockDelta;
         colRect.move(layerX, layerY);
 
         IntRect localClipRect(hitTestRect);
         localClipRect.intersect(colRect);
         
+        IntSize offset = isHorizontal ? IntSize(currLogicalLeftOffset, currLogicalTopOffset) : IntSize(currLogicalTopOffset, currLogicalLeftOffset);
+
         if (!localClipRect.isEmpty() && localClipRect.intersects(result.rectForPoint(hitTestPoint))) {
             RenderLayer* hitLayer = 0;
             if (!columnIndex) {
@@ -3062,7 +3085,7 @@ RenderLayer* RenderLayer::hitTestChildLayerColumns(RenderLayer* childLayer, Rend
                 if (oldHasTransform)
                     oldTransform = *childLayer->transform();
                 TransformationMatrix newTransform(oldTransform);
-                newTransform.translateRight(currXOffset, currYOffset);
+                newTransform.translateRight(offset.width(), offset.height());
                 
                 childLayer->m_transform.set(new TransformationMatrix(newTransform));
                 hitLayer = childLayer->hitTestLayer(rootLayer, columnLayers[0], request, result, localClipRect, hitTestPoint, false, transformState, zOffset);
@@ -3075,7 +3098,7 @@ RenderLayer* RenderLayer::hitTestChildLayerColumns(RenderLayer* childLayer, Rend
                 // This involves subtracting out the position of the layer in our current coordinate space.
                 RenderLayer* nextLayer = columnLayers[columnIndex - 1];
                 RefPtr<HitTestingTransformState> newTransformState = nextLayer->createLocalTransformState(rootLayer, nextLayer, localClipRect, hitTestPoint, transformState);
-                newTransformState->translate(currXOffset, currYOffset, HitTestingTransformState::AccumulateTransform);
+                newTransformState->translate(offset.width(), offset.height(), HitTestingTransformState::AccumulateTransform);
                 IntPoint localPoint = roundedIntPoint(newTransformState->mappedPoint());
                 IntRect localHitTestRect = newTransformState->mappedQuad().enclosingBoundingBox();
                 newTransformState->flatten();
@@ -3345,19 +3368,9 @@ IntRect RenderLayer::localBoundingBox() const
     // as part of our bounding box.  We do this because we are the responsible layer for both hit testing and painting those
     // floats.
     IntRect result;
-    if (renderer()->isRenderInline()) {
-        // Go from our first line box to our last line box.
-        RenderInline* inlineFlow = toRenderInline(renderer());
-        InlineFlowBox* firstBox = inlineFlow->firstLineBox();
-        if (!firstBox)
-            return result;
-        int top = firstBox->topVisualOverflow();
-        int bottom = inlineFlow->lastLineBox()->bottomVisualOverflow();
-        int left = firstBox->x();
-        for (InlineFlowBox* curr = firstBox->nextLineBox(); curr; curr = curr->nextLineBox())
-            left = min(left, curr->x());
-        result = IntRect(left, top, width(), bottom - top);
-    } else if (renderer()->isTableRow()) {
+    if (renderer()->isRenderInline())
+        result = toRenderInline(renderer())->linesVisualOverflowBoundingBox();
+    else if (renderer()->isTableRow()) {
         // Our bounding box is just the union of all of our cells' border/overflow rects.
         for (RenderObject* child = renderer()->firstChild(); child; child = child->nextSibling()) {
             if (child->isTableCell()) {
@@ -3393,7 +3406,10 @@ IntRect RenderLayer::localBoundingBox() const
 IntRect RenderLayer::boundingBox(const RenderLayer* ancestorLayer) const
 {    
     IntRect result = localBoundingBox();
-
+    if (renderer()->isBox())
+        renderBox()->flipForWritingMode(result);
+    else
+        renderer()->containingBlock()->flipForWritingMode(result);
     int deltaX = 0, deltaY = 0;
     convertToLayerCoords(ancestorLayer, deltaX, deltaY);
     result.move(deltaX, deltaY);
diff --git a/Source/WebCore/rendering/RenderObject.cpp b/Source/WebCore/rendering/RenderObject.cpp
index cfaa65d..1729236 100644
--- a/Source/WebCore/rendering/RenderObject.cpp
+++ b/Source/WebCore/rendering/RenderObject.cpp
@@ -1947,6 +1947,10 @@ void RenderObject::mapLocalToContainer(RenderBoxModelObject* repaintContainer, b
     if (!o)
         return;
 
+    IntPoint centerPoint = roundedIntPoint(transformState.mappedPoint());
+    if (o->isBox() && o->style()->isFlippedBlocksWritingMode())
+        transformState.move(toRenderBox(o)->flipForWritingModeIncludingColumns(roundedIntPoint(transformState.mappedPoint())) - centerPoint);
+
     IntSize columnOffset;
     o->adjustForColumns(columnOffset, roundedIntPoint(transformState.mappedPoint()));
     if (!columnOffset.isZero())
diff --git a/Source/WebCore/rendering/RenderTable.cpp b/Source/WebCore/rendering/RenderTable.cpp
index 3534d9a..1b54440 100644
--- a/Source/WebCore/rendering/RenderTable.cpp
+++ b/Source/WebCore/rendering/RenderTable.cpp
@@ -394,7 +394,7 @@ void RenderTable::layout()
     statePusher.pop();
 
     if (view()->layoutState()->pageLogicalHeight())
-        setPageLogicalOffset(view()->layoutState()->pageLogicalOffset(y()));
+        setPageLogicalOffset(view()->layoutState()->pageLogicalOffset(logicalTop()));
 
     bool didFullRepaint = repainter.repaintAfterLayout();
     // Repaint with our new bounds if they are different from our old bounds.
diff --git a/Source/WebCore/rendering/RenderTableRow.cpp b/Source/WebCore/rendering/RenderTableRow.cpp
index 595e156..7300c19 100644
--- a/Source/WebCore/rendering/RenderTableRow.cpp
+++ b/Source/WebCore/rendering/RenderTableRow.cpp
@@ -125,7 +125,7 @@ void RenderTableRow::layout()
     for (RenderObject* child = firstChild(); child; child = child->nextSibling()) {
         if (child->isTableCell()) {
             RenderTableCell* cell = toRenderTableCell(child);
-            if (!cell->needsLayout() && paginated && view()->layoutState()->pageLogicalHeight() && view()->layoutState()->pageLogicalOffset(cell->y()) != cell->pageLogicalOffset())
+            if (!cell->needsLayout() && paginated && view()->layoutState()->pageLogicalHeight() && view()->layoutState()->pageLogicalOffset(cell->logicalTop()) != cell->pageLogicalOffset())
                 cell->setChildNeedsLayout(true, false);
 
             if (child->needsLayout()) {
diff --git a/Source/WebCore/rendering/RenderTableSection.cpp b/Source/WebCore/rendering/RenderTableSection.cpp
index fa557bc..81b5fee 100644
--- a/Source/WebCore/rendering/RenderTableSection.cpp
+++ b/Source/WebCore/rendering/RenderTableSection.cpp
@@ -617,7 +617,7 @@ int RenderTableSection::layoutRows(int toAdd)
             if (intrinsicPaddingBefore != oldIntrinsicPaddingBefore || intrinsicPaddingAfter != oldIntrinsicPaddingAfter)
                 cell->setNeedsLayout(true, false);
 
-            if (!cell->needsLayout() && view()->layoutState()->pageLogicalHeight() && view()->layoutState()->pageLogicalOffset(cell->y()) != cell->pageLogicalOffset())
+            if (!cell->needsLayout() && view()->layoutState()->pageLogicalHeight() && view()->layoutState()->pageLogicalOffset(cell->logicalTop()) != cell->pageLogicalOffset())
                 cell->setChildNeedsLayout(true, false);
 
             cell->layoutIfNeeded();
diff --git a/Source/WebCore/rendering/RenderText.cpp b/Source/WebCore/rendering/RenderText.cpp
index 58c41ab..3f1dad5 100644
--- a/Source/WebCore/rendering/RenderText.cpp
+++ b/Source/WebCore/rendering/RenderText.cpp
@@ -345,8 +345,12 @@ void RenderText::absoluteQuads(Vector<FloatQuad>& quads, ClippingOption option)
 
         // Shorten the width of this text box if it ends in an ellipsis.
         IntRect ellipsisRect = (option == ClipToEllipsis) ? ellipsisRectForBox(box, 0, textLength()) : IntRect();
-        if (!ellipsisRect.isEmpty())
-            boundaries.setWidth(ellipsisRect.right() - boundaries.x());
+        if (!ellipsisRect.isEmpty()) {
+            if (style()->isHorizontalWritingMode())
+                boundaries.setWidth(ellipsisRect.right() - boundaries.x());
+            else
+                boundaries.setHeight(ellipsisRect.bottom() - boundaries.y());
+        }
         quads.append(localToAbsoluteQuad(FloatRect(boundaries)));
     }
 }
@@ -374,8 +378,13 @@ void RenderText::absoluteQuadsForRange(Vector<FloatQuad>& quads, unsigned start,
             IntRect r(box->calculateBoundaries());
             if (useSelectionHeight) {
                 IntRect selectionRect = box->selectionRect(0, 0, start, end);
-                r.setHeight(selectionRect.height());
-                r.setY(selectionRect.y());
+                if (box->isHorizontal()) {
+                    r.setHeight(selectionRect.height());
+                    r.setY(selectionRect.y());
+                } else {
+                    r.setWidth(selectionRect.width());
+                    r.setX(selectionRect.x());
+                }
             }
             quads.append(localToAbsoluteQuad(FloatRect(r)));
         } else {
@@ -384,8 +393,13 @@ void RenderText::absoluteQuadsForRange(Vector<FloatQuad>& quads, unsigned start,
             if (r.height()) {
                 if (!useSelectionHeight) {
                     // change the height and y position because selectionRect uses selection-specific values
-                    r.setHeight(box->logicalHeight());
-                    r.setY(box->y());
+                    if (box->isHorizontal()) {
+                        r.setHeight(box->logicalHeight());
+                        r.setY(box->y());
+                    } else {
+                        r.setWidth(box->logicalHeight());
+                        r.setX(box->x());
+                    }
                 }
                 quads.append(localToAbsoluteQuad(FloatRect(r)));
             }

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list