Prolog "main"

Admin User, created Apr 13. 2024
         
/**
* Modern Albufeira Prolog Interpreter
*
* 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
* Jekejeke is a registered trademark of XLOG Technologies AG.
*/
:- ensure_loaded('../../transpiler/cross/helper.p').
:- ensure_loaded('transpiler.p').
:- ensure_loaded('bundler.p').
% run_doge
run_doge :-
transpile_doge,
bundle_doge.
/*****************************************************************/
/* Transpile Dogelog Player for JavaScript */
/*****************************************************************/
/**
* transpile_doge:
* The predicate succeeds. As side effect it creates the transpiled
* Dogelog Player for the JavaScript target.
*/
% transpile_doge
transpile_doge :-
transpile_doge_core,
transpile_doge_lib.
% transpile_doge_core
transpile_doge_core :-
transpile_begin('player/drawer/bootload.mjs', [defer_meta(true)]),
transpile_add('transpiler/cross/albufeira.p', 'player/drawer/bootload.mjs', [defer_meta(true)]),
transpile_add('transpiler/drawer/core.p', 'player/drawer/bootload.mjs', [defer_meta(true)]),
transpile_add('transpiler/drawer/engine.p', 'player/drawer/bootload.mjs', [defer_meta(true)]),
transpile_add('transpiler/drawer/dynamic.p', 'player/drawer/bootload.mjs', [defer_meta(true)]),
transpile_add('transpiler/drawer/loader.p', 'player/drawer/bootload.mjs', [defer_meta(true)]),
transpile_end('player/drawer/bootload.mjs', [defer_meta(true)]),
copy_time('transpiler/cross/albufeira.p', 'player/drawer/bootload.mjs'),
copy_time('transpiler/drawer/core.p', 'player/drawer/bootload.mjs', [update(true)]),
copy_time('transpiler/drawer/engine.p', 'player/drawer/bootload.mjs', [update(true)]),
copy_time('transpiler/drawer/dynamic.p', 'player/drawer/bootload.mjs', [update(true)]),
copy_time('transpiler/drawer/loader.p', 'player/drawer/bootload.mjs', [update(true)]),
transpile_begin('player/drawer/streams.mjs'),
transpile_add('transpiler/drawer/code.p', 'player/drawer/streams.mjs'),
transpile_add('transpiler/drawer/scanner.p', 'player/drawer/streams.mjs'),
transpile_add('transpiler/drawer/term.p', 'player/drawer/streams.mjs'),
transpile_add('transpiler/drawer/session.p', 'player/drawer/streams.mjs'),
transpile_end('player/drawer/streams.mjs'),
copy_time('transpiler/drawer/code.p', 'player/drawer/streams.mjs'),
copy_time('transpiler/drawer/scanner.p', 'player/drawer/streams.mjs', [update(true)]),
copy_time('transpiler/drawer/term.p', 'player/drawer/streams.mjs', [update(true)]),
copy_time('transpiler/drawer/session.p', 'player/drawer/streams.mjs', [update(true)]).
% transpile_doge_lib
transpile_doge_lib :-
copy_pathdirs('transpiler/drawer/liblet/', 'player/drawer/liblet/'),
clean_pathdirs('transpiler/drawer/liblet/', 'player/drawer/liblet/', '.p').
/*****************************************************************/
/* Bundle Dogelog Player for JavaScript */
/*****************************************************************/
/**
* bundle_doge:
* The predicate succeeds. As side effect it creates the canned
* Dogelog Player for the JavaScript target.
*/
% bundle_doge
bundle_doge :-
bundle_doge_core,
bundle_doge_lib.
% bundle_doge_core
bundle_doge_core :-
copy_text('player/cross/header.mjs', 'player/canned/dogelog.mjs'),
bundle_add('player/drawer/nova/store.mjs', 'player/canned/dogelog.mjs'),
bundle_add('player/drawer/nova/machine.mjs', 'player/canned/dogelog.mjs'),
bundle_add('player/drawer/nova/unicode.mjs', 'player/canned/dogelog.mjs'),
bundle_add('player/drawer/nova/special.mjs', 'player/canned/dogelog.mjs'),
bundle_add('player/drawer/nova/eval.mjs', 'player/canned/dogelog.mjs'),
bundle_add('player/drawer/nova/runtime.mjs', 'player/canned/dogelog.mjs'),
bundle_add('player/drawer/bootload.mjs', 'player/canned/dogelog.mjs'),
bundle_add('player/drawer/streams.mjs', 'player/canned/dogelog.mjs'),
bundle_add('player/drawer/dogelog.mjs', 'player/canned/dogelog.mjs', [keep_export(true)]),
bundle_add('player/drawer/index.mjs', 'player/canned/dogelog.mjs', [keep_export(true)]),
copy_time('player/drawer/nova/store.mjs', 'player/canned/dogelog.mjs'),
copy_time('player/drawer/nova/machine.mjs', 'player/canned/dogelog.mjs', [update(true)]),
copy_time('player/drawer/nova/unicode.mjs', 'player/canned/dogelog.mjs', [update(true)]),
copy_time('player/drawer/nova/special.mjs', 'player/canned/dogelog.mjs', [update(true)]),
copy_time('player/drawer/nova/eval.mjs', 'player/canned/dogelog.mjs', [update(true)]),
copy_time('player/drawer/nova/runtime.mjs', 'player/canned/dogelog.mjs', [update(true)]),
copy_time('player/drawer/bootload.mjs', 'player/canned/dogelog.mjs', [update(true)]),
copy_time('player/drawer/streams.mjs', 'player/canned/dogelog.mjs', [update(true)]),
copy_time('player/drawer/dogelog.mjs', 'player/canned/dogelog.mjs', [update(true)]),
copy_time('player/drawer/index.mjs', 'player/canned/dogelog.mjs', [update(true)]).
% bundle_doge_lib
bundle_doge_lib :-
strip_pathdirs('player/drawer/liblet/', 'player/canned/liblet/'),
clean_pathdirs('player/drawer/liblet/', 'player/canned/liblet/', '.p'),
bundle_pathdirs('player/drawer/liblet/', 'player/canned/liblet/'),
clean_pathdirs('player/drawer/liblet/', 'player/canned/liblet/', '.mjs').
/*******************************************************************/
/* Bundle File */
/*******************************************************************/
% bundle_path(+Atom, +Atom)
bundle_path(InName, OutName) :-
copy_text('player/cross/header.mjs', OutName),
bundle_add(InName, OutName, [keep_export(true), keep_import(true)]),
copy_time(InName, OutName).
% bundle_pathdirs(+Atom, +Atom)
bundle_pathdirs(InDir, OutDir) :-
ensure_directory(OutDir),
directory_member(InDir, Name),
sub_atom(Name, _, _, 0, '.mjs'),
atom_concat(InDir, Name, InName),
atom_concat(OutDir, Name, OutName),
bundle_path(InName, OutName),
fail.
bundle_pathdirs(InDir, OutDir) :-
directory_member(InDir, Name),
\+ sub_atom(Name, _, _, _, '.'),
atom_concat(Name, '/', Name2),
atom_concat(InDir, Name2, InName),
atom_concat(OutDir, Name2, OutName),
bundle_pathdirs(InName, OutName),
fail.
bundle_pathdirs(_, _).