Le 20/09/2013 21:00, Tory Gaurnier a écrit :
[...], however, I reallized that it's probably getting the line # to point at from the current line number in File when you actually create the tag, so I traced down the functions, and it appears to be the case, so with that method it would most definitely not be pointing at the correct line for the tag.
So here is my question, does anyone know if another filetype is already doing something similar to this (scanning ahead to find aditional info before adding the tag) so I can study it? Or is there maybe a way I can copy File.fp so I can scan ahead on that one without affecting File? Or is there a way to rewind File to a specific point (this would probably be the easiest method)? If I rewind File.fp will it update all the other info (File.lineNumber, File.filePosition, etc.) with it? I'm just weary about editing File itself because it's kinda hard to trace down how it's managed.
To do that, normally you store the File.lineNumber/File.filePosition at the location you want to generate the tag, and use initTagEntry() and makeTagEntry() instead of simpler but dumber makeSimpleTag():
createMyTag(qmlKind kind, const char *name, ...) { tagEntryInfo entry; initTagEntry (&entry, name); entry.lineNumber = savedLineNumber; entry.filePosition = savedFilePosition; entry.kindName = QMLKinds[kind].name; entry.kind = (char) QMLKinds[kind].letter;
makeTagEntry (&entry); }
See e.g. Geany's PHP parser functions makeNamespacePhpTag() or makeSimplePhpTag().
Regards, Colomban