diff options
author | April Arcus <ril@google.com> | 2022-02-28 09:13:32 +0300 |
---|---|---|
committer | Gleb Mazovetskiy <glex.spb@gmail.com> | 2022-02-28 10:45:28 +0300 |
commit | 96917c6cb9b2d5d83076fa63daaf344d224e773e (patch) | |
tree | aa98f680f3edc542f0f3afe55dfba0a917603546 | |
parent | e2ecd0305ac49f9fe5fc57f0317d14ade8b1b268 (diff) |
replace_division: balance parens
-rw-r--r-- | tasks/converter/less_conversion.rb | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/tasks/converter/less_conversion.rb b/tasks/converter/less_conversion.rb index 61e2146b..f28f4ee7 100644 --- a/tasks/converter/less_conversion.rb +++ b/tasks/converter/less_conversion.rb @@ -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) |