CSS-Adaptor-Whitelist
view release on metacpan or search on metacpan
lib/CSS/Adaptor/Whitelist.pm view on Meta::CPAN
my $re_percent = qr/(?: \d{1,2} \.? | \d{0,2} \. \d+ ) \%/x;
my $re_frac = qr/ \d* \. \d+ | \d+ \.? /x;
my $re_dim = qr/ $re_percent | (?:$re_frac) (?:p[ctx]|in|[cem]m|ex) \b | 0 \b /x;
my $re_ndim = qr/(?:-?$re_dim)/;
my $re_color_name = qr/(?i-xsm:\b(?:A(?:qua(?:marine)?|(?:liceBlu|ntiqueWhit|zur)e)|B(?:l(?:a(?:ck|nchedAlmond)|ue(?:Violet)?)|(?:eig|isqu)e|rown|urlyWood)|C(?:h(?:artreus|ocolat)e|or(?:n(?:flowerBlue|silk)|al)|adetBlue|(?:rimso|ya)n)|D(?:ark(?:G(?:r...
my $re_color = qr/(?:
transparent \b
| $re_color_name # Blue
| \#[\da-fA-F]{6} \b # #FF00FF
| \#[\da-fA-F]{3} \b # #F0F
| rgb\( # rgb(255,0,255), rgb(255,0,255,0.3)
(?: \d{1,3} | $re_percent ),
(?: \d{1,3} | $re_percent ),
(?: \d{1,3} | $re_percent )
(?: , (?:$re_zero_to_one | $re_percent) )?
\)
)/x;
my $re_url = qr{url\((?:http://[-\w+.]+/[-/\w.?%#]+)\)};
sub set_url_re {
my ($new_re) = @_;
if (ref($new_re) ne 'Regexp') {
die 'set_url_re requires a compiled regular expression, e.g. qr/url(http:.*?)/'
}
else {
$re_url = $new_re;
}
}
# background
my $re_image = qr/(?:
none \b
| $re_url
)/x;
my $re_xy_pos = qr/(?:
(?: left | center | right | $re_ndim ) \b
(?: \s+
(?: top | center | bottom | $re_ndim ) \b
)?
)/x;
my $re_bg_attach = qr/(?:scroll\b|fixed\b)/;
my $re_bg_repeat = qr/(?:repeat(?:-[xy])?\b|no-repeat\b)/;
# border
my $re_border_width = qr/(?: thin\b | medium\b | thick\b | $re_dim )/x;
my $re_border_style = qr/(?: (?:none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset) \b )/x;
sub ck_border {
space_sep_res(shift, $re_border_width, $re_border_style, $re_color)
}
my $re_border_radius = qr/(?: $re_dim ( \s+ $re_dim )? )/x;
# margin, padding
my $re_margin = qr/(?: auto \b | $re_ndim )/x;
my $re_margin_all = qr/(?: $re_margin ( \s+ $re_margin ){0,3} )/x;
my $re_padding_all = qr/(?: $re_ndim ( \s+ $re_ndim ){0,3} )/x;
# font
my $re_font_family = qr/(?: [-a-zA-Z0-9 ,"']+ \b )/x; # maybe too generous, should we list possible families?
my $re_font_size = qr/(?: (?:x?x-)?(?:small|large)\b | small(?:er)? \b | larger? \b | medium \b | $re_dim )/x;
my $re_font_style = qr/(?: normal \b | oblique \b | italic \b )/x;
my $re_font_variant = qr/(?: normal \b | small-caps \b )/x;
my $re_font_weight = qr/(?: (?: normal | lighter | bold(?:er)? | \d{3} ) \b )/x;
# list style
my $re_list_style_position = qr/(?: (?:in|out)side \b )/x;
my $re_list_style_type = qr/(?: (?:
none | circle | disc | square | armenian
| decimal(?:-leading-zero)? | georgian | lower-greek | (?:lower|upper)-(?:alpha|latin|roman)
) \b )/x;
# various
my $re_cursor = qr/(?:
(?: $re_url (?: \s*,\s* $re_url )* \s* , )?
(?: auto | crosshair | default | help | move | pointer | progress | text | wait
| (?:[news]|[ns][ew])-resize
) \b
)/x;
our %whitelist = (
background => sub {
space_sep_res(shift, $re_color, $re_image, $re_bg_repeat, $re_bg_attach, $re_xy_pos)
},
'background-color' => qr/^$re_color$/,
'background-image' => qr/^$re_image$/,
'background-position' => qr/^$re_xy_pos$/,
'background-attachment' => qr/^$re_bg_attach$/,
'background-repeat' => qr/^$re_bg_repeat$/,
border => \&ck_border,
'border-color' => qr/^$re_color$/,
'border-style' => qr/^$re_border_style$/,
'border-width' => qr/^$re_border_width$/,
'border-collapse' => list2hash(qw(collapse separate)),
'border-spacing' => qr/^ $re_dim (?: \s+ $re_dim )? $/x,
'border-top' => \&ck_border,
'border-top-color' => qr/^$re_color$/,
'border-top-style' => qr/^$re_border_style$/,
'border-top-width' => qr/^$re_border_width$/,
'border-bottom' => \&ck_border,
'border-bottom-color' => qr/^$re_color$/,
'border-bottom-style' => qr/^$re_border_style$/,
'border-bottom-width' => qr/^$re_border_width$/,
'border-left' => \&ck_border,
'border-left-color' => qr/^$re_color$/,
'border-left-style' => qr/^$re_border_style$/,
'border-left-width' => qr/^$re_border_width$/,
'border-right' => \&ck_border,
'border-right-color' => qr/^$re_color$/,
'border-right-style' => qr/^$re_border_style$/,
'border-right-width' => qr/^$re_border_width$/,
'-webkit-border-radius' => qr/^$re_border_radius$/,
'-moz-border-radius' => qr/^$re_border_radius$/,
'-o-border-radius' => qr/^$re_border_radius$/,
'border-radius' => qr/^$re_border_radius$/,
outline => \&ck_border,
'outline-color' => qr/^$re_color$/,
'outline-style' => qr/^$re_border_style$/,
'outline-width' => qr/^$re_border_width$/,
margin => qr/^$re_margin_all$/x,
'margin-top' => qr/$re_margin$/,
( run in 0.790 second using v1.01-cache-2.11-cpan-39bf76dae61 )