diff --git a/src/Value/CalcFunction.php b/src/Value/CalcFunction.php index c8791d98..3be53277 100644 --- a/src/Value/CalcFunction.php +++ b/src/Value/CalcFunction.php @@ -71,10 +71,10 @@ public static function parse(ParserState $oParserState, $bIgnoreCase = false) } else { if (in_array($oParserState->peek(), $aOperators)) { if (($oParserState->comes('-') || $oParserState->comes('+'))) { + $sNextChar = $oParserState->peek(1, 1); if ( $oParserState->peek(1, -1) != ' ' - || !($oParserState->comes('- ') - || $oParserState->comes('+ ')) + || !($sNextChar === ' ' || $sNextChar === "\n" || $sNextChar === "\r") ) { throw new UnexpectedTokenException( " {$oParserState->peek()} ", diff --git a/tests/ParserTest.php b/tests/ParserTest.php index e291efd6..9446c3d9 100644 --- a/tests/ParserTest.php +++ b/tests/ParserTest.php @@ -1265,4 +1265,16 @@ public function escapedSpecialCaseTokens() self::assertTrue(is_a($urlRule->getValue(), '\Sabberworm\CSS\Value\URL')); self::assertTrue(is_a($calcRule->getValue(), '\Sabberworm\CSS\Value\CalcFunction')); } + + /** + * @test + */ + public function multilineCalc() + { + $oDoc = self::parsedStructureForFile('multiline-calc'); + $sExpected = <<render()); + } } diff --git a/tests/fixtures/multiline-calc.css b/tests/fixtures/multiline-calc.css new file mode 100644 index 00000000..069caccf --- /dev/null +++ b/tests/fixtures/multiline-calc.css @@ -0,0 +1,6 @@ +.btn { + --foo: calc( + var(--bar) + + (var(--baz) + var(--qux)) * 2 + ); +}