Search code examples
regexrecursionsyntax-highlightinggedit

In gedit, highlight a function call within the parenthesis


I'm currently editing my javascript.lang file to highlight function names. Here is my expression for gtksourceview that I am currently using.

<define-regex id="function-regex" >
(?&lt;=([\.|\s]))
([a-z]\w*)
(?=([\(].*))(?=(.*[\)]))
</define-regex>

here's the regex by itself

(?<=([\.|\s]))([a-z]\w*)(?=([\(].*))(?=(.*[\)]))

It appears to work for situations such as, foo(A) which I am satisfied with. But where I am having trouble is if I want it to highlight a function name within the parentheses of another function call.

  foo(bar(A))

or to put it more rigorously

  foo{N}(foo{N-1}(...(foo{2}(foo{1}(A))...))

So with the example,

  foo(bar(baz(A)))

my goal is for it to highlight foo, bar, baz and nothing else.

I don't know how to handle the bar function. I have read about a way of doing regex recursively with (?R) or (?0) but I have not had any success using that to highlight functions recursively in gedit.

P.S. Here are the tests that I am currently using to determine success.

initialDrawGraph(toBeSorted);   
$(element).removeClass(currentclass);
myFrame.popStack();
context.outputCurrentSortOrder(V);
myFrame.nextFunction = sorter.Sort.;
context.outputToDivConsole(formatStr(V),1);

Solution

  • Ok, looks like I was making this more complicated than it needed to be.

    I was able to achieve what I needed with this simpler regex. I just told it to stop looking for the close parenthesis.

    ([a-zA-Z0-9][a-zA-Z0-9]*)(?=\()