1:- module( lib_mkdoc, [lib_mkdoc/0,lib_mkdoc/1] ).    2
    3:- dynamic( lib_mkdoc:loaded/1 ).    4:- dynamic( lib_mkdoc:lib_index/5 ).    5
    6lib_mkdoc :- 
    7    lib_mkdoc( '.' ).
 lib_mkdoc(+Dir)
Make docs for lazy packs.

:- asserta( library_directory('/usr/local/users/nicos/local/git/lib/swipl-7.5.1/pack/lib/prolog/mkdoc') ). :- use_module( '/usr/local/users/nicos/local/git/lib/swipl-7.5.1/pack/lib/prolog/mkdoc/lib' ).

*/

   17lib_mkdoc( DirIn ) :-
   18    absolute_file_name( DirIn, Dir, [file_type(directory)] ),
   19    working_directory( Old, Dir ),
   20    directory_file_path( _LibRoot, Pack, Dir ),
   21    directory_file_path( Dir, prolog, PrologD ),
   22    file_name_extension( Pack, pl, PackF ),
   23    directory_file_path( PrologD, PackF, AbsPackF ),
   24    %
   25    directory_file_path( doc, PackF, DocF ),
   26    % shell( 'ln -s ../src doc/src' ),
   27    open( DocF, write, Out ),
   28    open( AbsPackF, read, In ),
   29    read( In, (:- module(Pack,Exports)) ),
   30    portray_clause( Out, (:- module(Pack,Exports)) ),
   31    directory_file_path( Dir, src, SrcD ),
   32    directory_file_path( SrcD, 'LibIndex.pl', SrcLib ),
   33    ( exists_file(SrcLib) -> 
   34        ensure_loaded( lib_mkdoc:SrcLib ),
   35        listing( lib_mkdoc:lib_index/5 )
   36        ;
   37        true
   38    ),
   39    set_prolog_flag( verbose_load, full ),
   40    % asserta( lib_mkdoc:loc(Dir,Out) ),
   41    absolute_file_name( pack('lib/prolog/mkdoc'), Mkdoc, [file_type(directory)] ),
   42    % asserta( library_directory(Mkdoc) ),
   43    % use_module( library(lib) ),
   44    % absolute_file_name( pack('lib/prolog/mkdoc/lib.pl'), LibPl, [file_errors(fail),access(exist)] ),
   45    % use_module( LibPl ),
   46    % export( lib_mkdoc:lib/1 ),
   47    % import( Pack:lib/1 ),
   48    % spy( lib:lib/1 ),
   49    % ensure_loaded( AbsPackF ),
   50    nl( Out ),
   51    portray_clause( Out, (:- assert(user:library_directory(Mkdoc))) ),
   52    directory_file_path( Mkdoc, lib, MkLib ),
   53    portray_clause( Out, (:- use_module(MkLib)) ),
   54    portray_clause( Out, (:- assert(lib:doc_module(Pack))) ),
   55    nl( Out ),
   56    %  :- use_module( '/usr/local/users/nicos/local/git/lib/swipl-7.5.1/pack/lib/prolog/mkdoc/lib' ).
   57    nl( Out ),
   58    read( In, Term ),
   59    lib_mkdoc_stream( Term, In, Locals ),
   60    % lib_mkdoc_stream( Term, In, Out ),
   61    close( In ),
   62    % close( Out ),
   63
   64    % open( DocF, append, OutA ),    % make sure we get the docs in the file too
   65    open( AbsPackF, read, InA ),
   66    read( InA, _ModDfn ),
   67    copy_stream_data( InA, Out ),
   68    close( InA ),
   69    % close( OutA ),
   70    lib_mkdoc_stream_locals( Locals, Out ),
   71    nl( Out ), portray_clause( Out, (:- retractall(lib:doc_module(_))) ), nl( Out ),
   72    close( Out ),
   73
   74    catch( ensure_loaded(DocF), Caught, (write(caught(Caught)),nl) ),
   75    doc_save( DocF, [doc_root('doc/html')] ),
   76    %
   77    working_directory( _, Old ).
   78
   79lib_mkdoc_stream( end_of_file, _In, [] ).
   80lib_mkdoc_stream( Term, In, Locs ) :-
   81     ( Term = (:- lib(Pn/Pa)) -> Locs = [Pn/Pa|Ls] ; Locs = Ls ),
   82     catch( read( In, Next ), _, Next = errored ),
   83     lib_mkdoc_stream( Next, In, Ls ).
   84
   85
   86lib_mkdoc_stream_locals( [], _Out ).
   87lib_mkdoc_stream_locals( [Pn/Pa|T], Out ) :-
   88    lib_mkdoc:lib_index( Pn, Pa, _, _, File ),
   89    directory_file_path( src, File, SrcFile ),
   90    file_name_extension( SrcFile, pl, RelF ),
   91    exists_file( RelF ),
   92    lib_mkdoc_file( RelF, Out ),
   93    !,
   94    lib_mkdoc_stream_locals( T, Out ).
   95lib_mkdoc_stream_locals( [H|T], Out ) :-
   96    write( failed_to_locate_sources_for_local(H) ), nl,
   97    lib_mkdoc_stream_locals( T, Out ).
   98    
   99lib_mkdoc_file( RelF, _Out ) :-
  100    lib_mkdoc:loaded( RelF ),
  101    !.
  102lib_mkdoc_file( RelF, Out ) :-
  103    open( RelF, read, RelIn ),
  104    copy_stream_data( RelIn, Out ),
  105    close( RelIn ),
  106    asserta( lib_mkdoc:loaded( RelF ) )