From 89ba3553dcefedcaaf91c9be7849f11a20a6d344 Mon Sep 17 00:00:00 2001 From: Xidorn Quan Date: Tue, 15 Aug 2017 09:32:39 +1000 Subject: [PATCH] Apply line break suppression to text when in any ruby --- components/style/style_adjuster.rs | 16 +++++++++++++++- ports/geckolib/glue.rs | 2 +- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/components/style/style_adjuster.rs b/components/style/style_adjuster.rs index 70d9880fb29..06ff2df66d7 100644 --- a/components/style/style_adjuster.rs +++ b/components/style/style_adjuster.rs @@ -108,8 +108,9 @@ impl<'a, 'b: 'a> StyleAdjuster<'a, 'b> { /// /// Note that this, for Gecko, comes through Servo_ComputedValues_Inherit. #[cfg(feature = "gecko")] - pub fn adjust_for_text(&mut self) { + pub fn adjust_for_text(&mut self, parent_style: &ComputedValues) { self.adjust_for_text_combine_upright(); + self.adjust_for_text_in_ruby(parent_style); self.set_bits(); } @@ -138,6 +139,19 @@ impl<'a, 'b: 'a> StyleAdjuster<'a, 'b> { } } + /// Applies the line break suppression flag to text if it is in any ruby + /// box. This is necessary because its parent may not itself have the flag + /// set (e.g. ruby or ruby containers), thus we may not inherit the flag + /// from them. + #[cfg(feature = "gecko")] + fn adjust_for_text_in_ruby(&mut self, parent_style: &ComputedValues) { + use properties::computed_value_flags::SHOULD_SUPPRESS_LINEBREAK; + let parent_display = parent_style.get_box().clone_display(); + if parent_display.is_ruby_type() { + self.style.flags.insert(SHOULD_SUPPRESS_LINEBREAK); + } + } + /// https://drafts.csswg.org/css-writing-modes-3/#block-flow: /// /// If a box has a different writing-mode value than its containing diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index 4f58012b31d..d7d59aa6f36 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -1821,7 +1821,7 @@ pub extern "C" fn Servo_ComputedValues_Inherit( if for_text { StyleAdjuster::new(&mut style) - .adjust_for_text(); + .adjust_for_text(reference); } style.build()