Re: [Ctags-devel] WindRes parser
Brought to you by:
dhiebert
From: Colomban W. <lis...@he...> - 2013-08-24 09:55:46
|
DISCLAIMER: I am not a CTags developer, I just hack on parsers for some time now. Le 15/08/2013 14:08, Frank Fesevur a écrit : > Hi all, Hi Frank, > I am new to the list, so let me first introduce myself. My name is > Frank Fesevur and I am from the Netherlands. I have written some open > source programs. At the moment I have two main projects, both are > plug-ins for Notepad++, a popular text editor for Windows. One of them > is a yet to be released ctags plug-in. The code of this plug-in is > already available at https://github.com/ffes/npptags Welcome here then :) > I have attached a parser I created for Windows Resource files. For > those of you not familiar with Windows development, in a .rc file UI > things like dialogs and menus are defined. > http://en.wikipedia.org/wiki/Resource_%28Windows%29 > > Here are three links to resource files so you can see the parser in action. > https://github.com/ffes/npptags/blob/master/NppTags_res.rc > https://github.com/ffes/nppsnippets/blob/master/NppSnippets_res.rc > http://dorgem.cvs.sourceforge.net/viewvc/dorgem/Dorgem/Dorgem.rc Good, providing samples is just great since people don't know every languages, +100 ;) > In its current state it recognizes the resources dialogs, menus, > bitmaps, cursors and icons. That is what I needed at the moment. To > add the other types of resources is not difficult, but just not done > yet. If you think the parser could get included in ctags, I will > gladly complete it. At first I'll add all common resources. Maybe > later also add the controls that belong to a resource (in begin/end > block). First, the parser looks quite good and simple, apart from a few things I'll elaborate below, good job. However, I have to warn you: the ctags developers here aren't really responsive (I don't blame them, they probably have other things to do, no bashing), which means you may have to wait a looong time before you get an answer. Either be very patient, or don't put too much hope on it. Now, a few comments on the parser: * Watch string ends. you do: while (!isspace((int) *line)) .. This is dangerous if the line only contains non-space characters, because you'll pass by the end of the string. Just add a check for \0 (string terminator): while (*line && !isspace((int) *line)) or alike. OTOH, code like while (isspace((int) *line)) is fine since the string delimiter character will not validate the isspace() condition anyway. * You may want to use vStringValue() instead of manually accessing str->buffer. I guess it won't change much, but maybe if sometimes the vString implementation is changed it might help -- but that certainly is not a big deal. * Don't index strings at a negative offset: else if( *line == '*' && *(line-1) == '/' ) might index the string at a negative index if '*' appears to be the first character on a line. I would rather do it the other way around: else if (*line == '/' && line[1] == '*') since indexing at +1 is OK since it would only hit the string termination character (\0). * Just some style, I'd rather combine the 2 checks for single line comments in one: else if (*line == '/' && line[1] == '/') I hope it helps :) > Other than that I am also busy fixing the css parser that is available > at several locations on the net and is not yet included in the > official ctags. But I will send a separate mail about that parser when > I have fixed the problems (mainly related to css3 tags). This to keep > the conversation about the two parser separated from each other. Yep, good to separate mails so this don't get bloated by off-topic stuff. Best regards, Colomban |