Skip to content

Commit c1d4607

Browse files
committed
Factor out parse_modern_alpha.
1 parent 95af223 commit c1d4607

File tree

2 files changed

+22
-18
lines changed

2 files changed

+22
-18
lines changed

src/color.rs

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1269,6 +1269,21 @@ where
12691269
})
12701270
}
12711271

1272+
fn parse_modern_alpha<'i, 't, P>(
1273+
color_parser: &P,
1274+
arguments: &mut Parser<'i, 't>,
1275+
) -> Result<Option<f32>, ParseError<'i, P::Error>>
1276+
where
1277+
P: ColorParser<'i>,
1278+
{
1279+
if !arguments.is_exhausted() {
1280+
arguments.expect_delim('/')?;
1281+
parse_none_or(arguments, |p| parse_alpha_component(color_parser, p))
1282+
} else {
1283+
Ok(Some(OPAQUE))
1284+
}
1285+
}
1286+
12721287
#[inline]
12731288
fn parse_rgb<'i, 't, P>(
12741289
color_parser: &P,
@@ -1324,12 +1339,7 @@ where
13241339
color_parser.parse_number_or_percentage(p)
13251340
})?);
13261341

1327-
if !arguments.is_exhausted() {
1328-
arguments.expect_delim('/')?;
1329-
parse_none_or(arguments, |p| parse_alpha_component(color_parser, p))?.unwrap_or(0.0)
1330-
} else {
1331-
OPAQUE
1332-
}
1342+
parse_modern_alpha(color_parser, arguments)?.unwrap_or(0.0)
13331343
};
13341344

13351345
Ok(P::Output::from_rgba(red, green, blue, alpha))
@@ -1364,12 +1374,7 @@ where
13641374
saturation = parse_none_or(arguments, |p| color_parser.parse_percentage(p))?.unwrap_or(0.0);
13651375
lightness = parse_none_or(arguments, |p| color_parser.parse_percentage(p))?.unwrap_or(0.0);
13661376

1367-
if !arguments.is_exhausted() {
1368-
arguments.expect_delim('/')?;
1369-
parse_none_or(arguments, |p| parse_alpha_component(color_parser, p))?.unwrap_or(0.0)
1370-
} else {
1371-
OPAQUE
1372-
}
1377+
parse_modern_alpha(color_parser, arguments)?.unwrap_or(0.0)
13731378
};
13741379

13751380
let hue = if let Some(h) = maybe_hue {
@@ -1570,12 +1575,7 @@ where
15701575
let r2 = parse_none_or(input, |p| f2(color_parser, p))?;
15711576
let r3 = parse_none_or(input, |p| f3(color_parser, p))?;
15721577

1573-
let alpha = if !input.is_exhausted() {
1574-
input.expect_delim('/')?;
1575-
parse_none_or(input, |p| parse_alpha_component(color_parser, p))?
1576-
} else {
1577-
Some(OPAQUE)
1578-
};
1578+
let alpha = parse_modern_alpha(color_parser, input)?;
15791579

15801580
Ok((r1, r2, r3, alpha))
15811581
}

src/tests.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1624,6 +1624,10 @@ fn generic_parser() {
16241624
"hsl(none 10% none / none)",
16251625
OutputType::Hsl(0.0, 0.1, 0.0, 0.0),
16261626
),
1627+
(
1628+
"hsl(120 100.0% 50.0%)",
1629+
OutputType::Hsl(120.0, 1.0, 0.5, 1.0),
1630+
),
16271631
(
16281632
"hwb(45deg 20% 30% / 0.4)",
16291633
OutputType::Hwb(Some(45.0), Some(0.2), Some(0.3), Some(0.4)),

0 commit comments

Comments
 (0)