Prolog "collect"

Admin User, created Dec 20. 2023
         
/**
* Warranty & Liability
* To the extent permitted by applicable law and unless explicitly
* otherwise agreed upon, XLOG Technologies AG makes no warranties
* regarding the provided information. XLOG Technologies AG assumes
* no liability that any problems might be solved with the information
* provided by XLOG Technologies AG.
*
* Rights & License
* All industrial property rights regarding the information - copyright
* and patent rights in particular - are the sole property of XLOG
* Technologies AG. If the company was not the originator of some
* excerpts, XLOG Technologies AG has at least obtained the right to
* reproduce, change and translate the information.
*
* Reproduction is restricted to the whole unaltered document. Reproduction
* of the information is only allowed for non-commercial uses. Selling,
* giving away or letting of the execution of the library is prohibited.
* The library can be distributed as part of your applications and libraries
* for execution provided this comment remains unchanged.
*
* Restrictions
* Only to be distributed with programs that add significant and primary
* functionality to the library. Not to be distributed with additional
* software intended to replace any components of the library.
*
* Trademarks
* Dogelog is a deposited trademark of XLOG Technologies AG.
*/
/*******************************************************************/
/* Collect Index */
/*******************************************************************/
/**
* collectj_file(A, T):
* The predicate succeeds in building a predicate index for
* the Java text A with tag T.
*/
% collectj_file(+Atom, +Atom)
collectj_file(InName, Tag) :-
setup_once_cleanup(
open(InName, read, InStream),
sys_collectj_lines(InStream, Tag),
close(InStream)).
% sys_collectj_lines(+Stream, +Atom)
sys_collectj_lines(InStream, Tag) :-
repeat,
get_atom(InStream, 0'\n, Line),
(Line \== '' ->
sys_collectj_line(Line, Tag),
fail; !).
% sys_collectj_line(+Atom, +Atom)
sys_collectj_line(Line, Tag) :- !,
atom_concat(' Store.add("', H, Line),
sub_atom(H, Pos, _, Pos2, '", '),
sub_atom(H, _, Pos2, 0, J),
sub_atom(J, Pos3, _, _, ', '), !,
sub_atom(H, 0, Pos, _, F),
sub_atom(J, 0, Pos3, _, K),
atom_integer(K, 10, N),
sys_build_functor(F, N, Tag).