diff --git a/weasyprint/css/validation.py b/weasyprint/css/validation.py index 7d9f9dd49..0c5fcf60e 100644 --- a/weasyprint/css/validation.py +++ b/weasyprint/css/validation.py @@ -882,9 +882,12 @@ def line_height(token): """``line-height`` property validation.""" if get_keyword(token) == 'normal': return 'normal' - if (token.type in ('NUMBER', 'INTEGER', 'DIMENSION', 'PERCENTAGE') and - token.value >= 0): + if token.type in ('NUMBER', 'INTEGER', 'PERCENTAGE') and token.value >= 0: return Dimension(token.value, token.unit) + elif token.type == 'DIMENSION' and token.value >= 0: + length = get_length(token) + if length: + return length @validator() diff --git a/weasyprint/tests/test_css_validation.py b/weasyprint/tests/test_css_validation.py index b27867b7f..b87629a70 100644 --- a/weasyprint/tests/test_css_validation.py +++ b/weasyprint/tests/test_css_validation.py @@ -495,6 +495,23 @@ def test_font(): assert_invalid('font: 12px "Invalid" family') +@assert_no_logs +def test_line_height(): + """Test the ``line-height`` property.""" + assert expand_to_dict('line-height: 1px') == {'line_height': (1, 'px')} + assert expand_to_dict('line-height: 1.1%') == {'line_height': (1.1, '%')} + assert expand_to_dict('line-height: 1em') == {'line_height': (1, 'em')} + assert expand_to_dict('line-height: 1') == {'line_height': (1, None)} + assert expand_to_dict('line-height: 1.3') == {'line_height': (1.3, None)} + assert expand_to_dict('line-height: -0') == {'line_height': (0, None)} + assert expand_to_dict('line-height: 0px') == {'line_height': (0, 'px')} + assert_invalid('line-height: 1deg') + assert_invalid('line-height: -1px') + assert_invalid('line-height: -1') + assert_invalid('line-height: -0.5%') + assert_invalid('line-height: 1px 1px') + + @assert_no_logs def test_linear_gradient(): red = (1, 0, 0, 1)