Index: third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node.cc |
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node.cc b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node.cc |
index e00cfde3970536b3d8291ba69f13539787f66171..6befe478dc6a5fb0f6c07c94e3b0e09c4d7995f2 100644 |
--- a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node.cc |
+++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node.cc |
@@ -192,8 +192,7 @@ void NGInlineNode::PrepareLayout() { |
// Scan list of siblings collecting all in-flow non-atomic inlines. A single |
// NGInlineNode represent a collection of adjacent non-atomic inlines. |
CollectInlines(Data().start_inline_, GetLayoutBlockFlow()); |
- if (Data().is_bidi_enabled_) |
- SegmentText(); |
+ SegmentText(); |
ShapeText(); |
} |
@@ -282,21 +281,30 @@ LayoutObject* NGInlineNode::CollectInlines(LayoutObject* start, |
} |
void NGInlineNode::SegmentText() { |
- // TODO(kojii): Move this to caller, this will be used again after line break. |
+ NGInlineNodeData& data = MutableData(); |
+ if (!data.is_bidi_enabled_) { |
+ data.SetBaseDirection(TextDirection::kLtr); |
+ return; |
+ } |
+ |
NGBidiParagraph bidi; |
- MutableData().text_content_.Ensure16Bit(); |
- if (!bidi.SetParagraph(Data().text_content_, Style())) { |
+ data.text_content_.Ensure16Bit(); |
+ if (!bidi.SetParagraph(data.text_content_, Style())) { |
// On failure, give up bidi resolving and reordering. |
- MutableData().is_bidi_enabled_ = false; |
+ data.is_bidi_enabled_ = false; |
+ data.SetBaseDirection(TextDirection::kLtr); |
return; |
} |
- if (bidi.Direction() == UBIDI_LTR) { |
+ |
+ data.SetBaseDirection(bidi.BaseDirection()); |
+ |
+ if (bidi.IsUnidirectional() && IsLtr(bidi.BaseDirection())) { |
// All runs are LTR, no need to reorder. |
- MutableData().is_bidi_enabled_ = false; |
+ data.is_bidi_enabled_ = false; |
return; |
} |
- Vector<NGInlineItem>& items = MutableData().items_; |
+ Vector<NGInlineItem>& items = data.items_; |
unsigned item_index = 0; |
for (unsigned start = 0; start < Data().text_content_.length();) { |
UBiDiLevel level; |