On Wed, 1 Feb 2012, Hans-Peter Diettrich wrote:

michael.vancann...@wisa.be schrieb:

Why do you need this ? You make it quite complicated.

All you need is a FindModule(Const AName,AFileHint : String) : TPasModule call in TPasTreeContainer which must be overridden in a descendent (such as TFPDocEngine). The default implementation returns nil.

This call can search the module list if it has one.

But it does not have such a list :-(

It does not need it. A descendent that needs recursive parsing needs it.

Likewise, the FindElement returns nil. Only the FPDoc engine implementation contains a search.


If it doesn't find it, it can then decide to parse it anyway and return the just-parsed instance.

This requires a list of the Inputs (compiler parameters), which only exists in TFPDocCreator. It also requires a list of units being or having been parsed. When a parser is started for a new unit, it doesn't return the created TPasModule until finished, so that TPasTreeContainer cannot tell whether FindModule addresses a module that has not been parsed yet, or one that already is being parsed, but not finished.

Correct. This needs to be done by descendants.

TPasTreeContainer itself and the parser class just need the hook.

All the parser needs to do is call FindModule whenever it encounters a unit
in a uses clause; The rest will happen then automagically.

I found it much more complicated, after a look at the existing code.

Well, It took me about 15 lines to implement it in dglobals.pas of fpdoc.
I moved one function out of fpdocoptsxml to mkfpdoc to split the input line.

First tests work fine. See revision 20213.

Michael.
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to