# Matches Open SCAD Functions
(?m)                                               # Set Multiline mode.  Then,
(?<Comments>//[\s.]{0,}?$(?>\r\n|\n)){0,}^function # match the literal 'function'
\s+                                                # and the obligitory whitespace.
(?<Name>\w+)                                       # Then match and extract the .Name
\s{0,}                                             # Then, there may be whitespace.
# The .Parameters are within ()
(?<Parameters>
\(                                                 # An open parenthesis
(?>                                                # Followed by...
    [^\(\)]+|                                      # any number of non-parenthesis character OR
    \((?<Depth>)|                                  # an open parenthesis (in which case increment depth) OR
    \)(?<-Depth>)                                  # a closed parenthesis (in which case decrement depth)
)*(?(Depth)(?!))                                   # until depth is 0.
\)                                                 # followed by a closing parenthesis

)\s{0,}                                            # Then, there may be whitespace.
\=\s{0,}                                           # Then, there may be whitespace.
(?:.|\s){0,}?(?=\z|;)
