[Geany] Help with custom compiler

Lex Trotman elextr at xxxxx
Thu Jul 19 14:45:00 UTC 2012


On 19 July 2012 23:32, Nick Treleaven <nick.treleaven at btinternet.com> wrote:
> On 19/07/2012 09:30, Lex Trotman wrote:
>>
>> On 19 July 2012 17:38, Laszlo Nagy<gandalf at shopzeus.com>  wrote:
>>>
>>> Here is an example. There are two kinds of error messages that I can get
>>> -
>>>
>>> because there can be an error in the compiler that I'm working on, and
>>> also
>>> there can be an error in the file that is being compiled:
>>>
>>> Error message (type one):
>>>
>>> File "/home/gandalf/Python/Lib/shopzeus/scripts/ssdlc.py", line 23, in
>>> <module>
>>>
>>> Regexp (type one):
>>>
>>> \s*File\s\"([^\"]+)\", line (\d+), in\s*(.*)
>>>
>>>
>>> Error message (type two):
>>>
>>> /home/gandalf/Python/Lib/shopzeus/demos/ssdl/test/test.ssdl:53:9:Syntax
>>> error
>>>
>>> Regexp (type two):
>>>
>>> ([^:]+):([^:]+):[^:]+:([^:]+)
>>>
>>> Both of these errors can happen then I press F8, so I would like to
>>> capture
>>> both messages if possible.  This is what I have tried:
>>>
>>> (?:\s*File\s\"([^\"]+)\", line (\d+),
>>> in\s*(.*))|(?:([^:]+):([^:]+):[^:]+:([^:]+))
>>>
>>> But it does not capture errors in the compiler. Maybe my regular
>>> expression
>>> is wrong. Or maybe the non-capturing group "?:" does not work.
>
>
> I couldn't find the problem with that regex exactly, but it seems to be the
> [^\"]+ part.
>
> This seems to work here:
> File\s(\S+?), line (\d+)|(\S+):(\S+):
>
> It might need tweaking though. The regex doesn't have to match the entire
> line.
>
> Also, the 2nd regex seems to be unnecessary as Geany already tries this
> pattern as a built in.
>

Good point, but it can't be quite a correct match or it would have
worked for Laszlo.

>
>> IIUC Match group numbering is in the order they occur in the regex,
>> not the order they match, so the "type two" regex groups are 3 and 4
>> which geany ignores. The method isn't really suited to mixed
>
>
> No, the type two matches start from 1.

No, matches are numbered in the order of their ( and don't change even
if the previous ones don't match because they were in a different
alternate branch.

The ( after File is 1, the ( after line is 2, the two ( in
:([^:]+):[^:]+:([^:]+)) are 3 and 4 so they would be ignored by geany
since we only look at one and two.

Cheers
Lex

>
> Nick
>
> _______________________________________________
> Geany mailing list
> Geany at uvena.de
> https://lists.uvena.de/cgi-bin/mailman/listinfo/geany



More information about the Users mailing list