replace_division: balance parens

This commit is contained in:
April Arcus 2022-02-27 22:13:32 -08:00 committed by Gleb Mazovetskiy
parent e2ecd0305a
commit 96917c6cb9
1 changed files with 34 additions and 2 deletions

View File

@ -184,9 +184,41 @@ class Converter
end
def replace_division(less)
re = /(?<!\w)\(\s*([^(]+?)\s+\/\s+([^)]+?)\s*\)/
re = %r{
(?<expression>
(?<callee>[[:alpha:]\.]+)?
\(
(?:
(?>
(?<dividend>
[^()/]+
|
\([^/]+\)
)
\s+
/
\s+
(?<divisor>
[^()/]+
|
\([^/]+\)
)
)
|
\g<expression>
)
\)
)
}x
return less if less !~ re
"@use \"sass:math\";\n" + less.gsub(re, 'math.div(\1, \2)')
"@use \"sass:math\";\n" + less.gsub(re) do
named_captures = $~.named_captures
callee = named_captures['callee']
dividend = named_captures['dividend']
divisor = named_captures['divisor']
expression = "math.div(#{dividend}, #{divisor})"
callee.nil? ? expression : "#{callee}(#{expression})"
end
end
def sass_fn_exists(fn)