mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
style: Allow shorthands to specify their own impl of SpecifiedValueInfo and manual impl it for font and border.
Bug: 1434130 Reviewed-by: emilio MozReview-Commit-ID: 3B9OfkWU0Eq
This commit is contained in:
parent
e50847666c
commit
185e4ce61d
3 changed files with 46 additions and 22 deletions
|
@ -619,9 +619,14 @@
|
||||||
% endif
|
% endif
|
||||||
</%def>
|
</%def>
|
||||||
|
|
||||||
<%def name="shorthand(name, sub_properties, derive_serialize=False, **kwargs)">
|
<%def name="shorthand(name, sub_properties, derive_serialize=False,
|
||||||
|
derive_value_info=True, **kwargs)">
|
||||||
<%
|
<%
|
||||||
shorthand = data.declare_shorthand(name, sub_properties.split(), **kwargs)
|
shorthand = data.declare_shorthand(name, sub_properties.split(), **kwargs)
|
||||||
|
# mako doesn't accept non-string value in parameters with <% %> form, so
|
||||||
|
# we have to workaround it this way.
|
||||||
|
if not isinstance(derive_value_info, bool):
|
||||||
|
derive_value_info = eval(derive_value_info)
|
||||||
%>
|
%>
|
||||||
% if shorthand:
|
% if shorthand:
|
||||||
/// ${shorthand.spec}
|
/// ${shorthand.spec}
|
||||||
|
@ -636,8 +641,11 @@
|
||||||
#[allow(unused_imports)]
|
#[allow(unused_imports)]
|
||||||
use style_traits::{ParseError, StyleParseErrorKind};
|
use style_traits::{ParseError, StyleParseErrorKind};
|
||||||
#[allow(unused_imports)]
|
#[allow(unused_imports)]
|
||||||
use style_traits::{CssWriter, SpecifiedValueInfo, ToCss};
|
use style_traits::{CssWriter, KeywordsCollectFn, SpecifiedValueInfo, ToCss};
|
||||||
|
|
||||||
|
% if derive_value_info:
|
||||||
|
#[derive(SpecifiedValueInfo)]
|
||||||
|
% endif
|
||||||
pub struct Longhands {
|
pub struct Longhands {
|
||||||
% for sub_property in shorthand.sub_properties:
|
% for sub_property in shorthand.sub_properties:
|
||||||
pub ${sub_property.ident}:
|
pub ${sub_property.ident}:
|
||||||
|
@ -744,26 +752,6 @@
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
<%
|
|
||||||
sub_properties_for_value_info = shorthand.sub_properties
|
|
||||||
if shorthand.name == "border":
|
|
||||||
# border-image subproperties are simply reset by border
|
|
||||||
# shorthand, so border cannot accept values of them.
|
|
||||||
# XXX We may want a better mechanism for this, but this
|
|
||||||
# is probably fine for now.
|
|
||||||
sub_properties_for_value_info = [
|
|
||||||
subprop for subprop in shorthand.sub_properties
|
|
||||||
if not subprop.name.startswith("border-image")
|
|
||||||
]
|
|
||||||
%>
|
|
||||||
impl SpecifiedValueInfo for Longhands {
|
|
||||||
const SUPPORTED_TYPES: u8 = 0
|
|
||||||
% for subprop in sub_properties_for_value_info:
|
|
||||||
| <longhands::${subprop.ident}::SpecifiedValue as SpecifiedValueInfo>::SUPPORTED_TYPES
|
|
||||||
% endfor
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
${caller.body()}
|
${caller.body()}
|
||||||
}
|
}
|
||||||
% endif
|
% endif
|
||||||
|
|
|
@ -140,6 +140,7 @@ pub fn parse_border<'i, 't>(
|
||||||
for prop in ['color', 'style', 'width'])}
|
for prop in ['color', 'style', 'width'])}
|
||||||
${' '.join('border-image-%s' % name
|
${' '.join('border-image-%s' % name
|
||||||
for name in ['outset', 'repeat', 'slice', 'source', 'width'])}"
|
for name in ['outset', 'repeat', 'slice', 'source', 'width'])}"
|
||||||
|
derive_value_info="False"
|
||||||
spec="https://drafts.csswg.org/css-backgrounds/#border">
|
spec="https://drafts.csswg.org/css-backgrounds/#border">
|
||||||
|
|
||||||
pub fn parse_value<'i, 't>(
|
pub fn parse_value<'i, 't>(
|
||||||
|
@ -202,6 +203,17 @@ pub fn parse_border<'i, 't>(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Just use the same as border-left. The border shorthand can't accept
|
||||||
|
// any value that the sub-shorthand couldn't.
|
||||||
|
<%
|
||||||
|
border_left = "<::properties::shorthands::border_left::Longhands as SpecifiedValueInfo>"
|
||||||
|
%>
|
||||||
|
impl SpecifiedValueInfo for Longhands {
|
||||||
|
const SUPPORTED_TYPES: u8 = ${border_left}::SUPPORTED_TYPES;
|
||||||
|
fn collect_completion_keywords(f: KeywordsCollectFn) {
|
||||||
|
${border_left}::collect_completion_keywords(f);
|
||||||
|
}
|
||||||
|
}
|
||||||
</%helpers:shorthand>
|
</%helpers:shorthand>
|
||||||
|
|
||||||
<%helpers:shorthand name="border-radius" sub_properties="${' '.join(
|
<%helpers:shorthand name="border-radius" sub_properties="${' '.join(
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
${'font-language-override' if product == 'gecko' else ''}
|
${'font-language-override' if product == 'gecko' else ''}
|
||||||
${'font-feature-settings' if product == 'gecko' else ''}
|
${'font-feature-settings' if product == 'gecko' else ''}
|
||||||
${'font-variation-settings' if product == 'gecko' else ''}"
|
${'font-variation-settings' if product == 'gecko' else ''}"
|
||||||
|
derive_value_info="False"
|
||||||
spec="https://drafts.csswg.org/css-fonts-3/#propdef-font">
|
spec="https://drafts.csswg.org/css-fonts-3/#propdef-font">
|
||||||
use parser::Parse;
|
use parser::Parse;
|
||||||
use properties::longhands::{font_family, font_style, font_weight, font_stretch};
|
use properties::longhands::{font_family, font_style, font_weight, font_stretch};
|
||||||
|
@ -258,6 +259,29 @@
|
||||||
}
|
}
|
||||||
% endif
|
% endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<%
|
||||||
|
subprops_for_value_info = ["font_style", "font_weight", "font_stretch",
|
||||||
|
"font_variant_caps", "font_size", "font_family"]
|
||||||
|
subprops_for_value_info = [
|
||||||
|
"<longhands::{}::SpecifiedValue as SpecifiedValueInfo>".format(p)
|
||||||
|
for p in subprops_for_value_info
|
||||||
|
]
|
||||||
|
%>
|
||||||
|
impl SpecifiedValueInfo for Longhands {
|
||||||
|
const SUPPORTED_TYPES: u8 = 0
|
||||||
|
% for p in subprops_for_value_info:
|
||||||
|
| ${p}::SUPPORTED_TYPES
|
||||||
|
% endfor
|
||||||
|
;
|
||||||
|
|
||||||
|
fn collect_completion_keywords(f: KeywordsCollectFn) {
|
||||||
|
% for p in subprops_for_value_info:
|
||||||
|
${p}::collect_completion_keywords(f);
|
||||||
|
% endfor
|
||||||
|
<longhands::system_font::SystemFont as SpecifiedValueInfo>::collect_completion_keywords(f);
|
||||||
|
}
|
||||||
|
}
|
||||||
</%helpers:shorthand>
|
</%helpers:shorthand>
|
||||||
|
|
||||||
<%helpers:shorthand name="font-variant"
|
<%helpers:shorthand name="font-variant"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue