mirror of
https://github.com/servo/servo.git
synced 2025-08-06 22:15:33 +01:00
Update PropertyDeclarationBlock::to_css so that the iteration of
possible shorthands matches the linked spec. Previously substep 5 attempted to serialize the complete shorthand declaration and substep 6 skipped to the next shorthand only if the current shorthand was not serialized, but this did not catch empty serializations. The spec on the other hand specifically says that the *value* should be evaluated first and if the value is empty substep 6 should skip to the next shorthand - which is what happens now. To do this required some refactoring which mostly simplifies the code. Specifically: - append_declaration_value was refactored so that importance is not required as a arg (by moving it to the end of append_serialization) and is_overflow_with_name was removed as an arg also (initially I refactored it elsewhere, but it turns out it's no longer required at all - more below). With these changes, append_declaration_value can be used within the algorithm for to_css to obtain just the value for substep 5. - Substeps 7 and 8 of the algorithm become explicit (they were implicit before) by passing the value, shorthand and importance to append_serialization. - serialize_shorthand_to_buffer is no longer required (as the algorithm serializes the value first instead, as per the spec. A surprising result of this was that I could also remove a lot of code handling the special case of the overflow properties serialization. This is because the overflow's LonghandToCss implementation of to_css_declared already does the right thing according to the spec - it writes the single value if both overflow-x and -y are equal, and writes nothing otherwise - so that the algorithm now skips that shorthand instead rendering the longhands.
This commit is contained in:
parent
854d720b21
commit
a0998d30d4
4 changed files with 36 additions and 141 deletions
|
@ -2,7 +2,7 @@
|
|||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
use properties::{AppendableValue, DeclaredValue, PropertyDeclaration, ShorthandId};
|
||||
use properties::DeclaredValue;
|
||||
use style_traits::ToCss;
|
||||
use values::specified::{BorderStyle, CSSColor};
|
||||
use std::fmt;
|
||||
|
@ -91,17 +91,3 @@ fn serialize_directional_border<W, I,>(dest: &mut W,
|
|||
_ => Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#[allow(missing_docs)]
|
||||
pub fn is_overflow_shorthand<'a, I>(appendable_value: &AppendableValue<'a, I>) -> bool
|
||||
where I: Iterator<Item=&'a PropertyDeclaration>
|
||||
{
|
||||
if let AppendableValue::DeclarationsForShorthand(shorthand, _) = *appendable_value {
|
||||
if let ShorthandId::Overflow = shorthand {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
false
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue