Prolog "main"

Admin User, erstellt 13. Apr. 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('bundler.p').
:- ensure_loaded('transpiler.p').
% runpy_doge
runpy_doge :-
transpilepy_doge,
bundlepy_doge.
/*****************************************************************/
/* Transpile Dogelog Player */
/*****************************************************************/
/**
* transpilepy_doge:
* The predicate succeeds. As side effect it creates the transpiled
* Dogelog Player for the JavaScript target.
*/
% transpilepy_doge
transpilepy_doge :-
transpilepy_doge_core,
transpilepy_doge_lib.
% transpilepy_doge_core
transpilepy_doge_core :-
transpilepy_begin('playerpy/drawer/bootload.py', [defer_meta(true)]),
transpilepy_add('transpiler/cross/albufeira.p', 'playerpy/drawer/bootload.py', [defer_meta(true)]),
transpilepy_add('transpiler/drawer/core.p', 'playerpy/drawer/bootload.py', [defer_meta(true)]),
transpilepy_add('transpiler/drawer/engine.p', 'playerpy/drawer/bootload.py', [defer_meta(true)]),
transpilepy_add('transpiler/drawer/dynamic.p', 'playerpy/drawer/bootload.py', [defer_meta(true)]),
transpilepy_add('transpiler/drawer/loader.p', 'playerpy/drawer/bootload.py', [defer_meta(true)]),
transpilepy_end('playerpy/drawer/bootload.py', [defer_meta(true)]),
copy_time('transpiler/cross/albufeira.p', 'playerpy/drawer/bootload.py'),
copy_time('transpiler/drawer/core.p', 'playerpy/drawer/bootload.py', [update(true)]),
copy_time('transpiler/drawer/engine.p', 'playerpy/drawer/bootload.py', [update(true)]),
copy_time('transpiler/drawer/dynamic.p', 'playerpy/drawer/bootload.py', [update(true)]),
copy_time('transpiler/drawer/loader.p', 'playerpy/drawer/bootload.py', [update(true)]),
transpilepy_begin('playerpy/drawer/streams.py'),
transpilepy_add('transpiler/drawer/code.p', 'playerpy/drawer/streams.py'),
transpilepy_add('transpiler/drawer/scanner.p', 'playerpy/drawer/streams.py'),
transpilepy_add('transpiler/drawer/term.p', 'playerpy/drawer/streams.py'),
transpilepy_add('transpiler/drawer/session.p', 'playerpy/drawer/streams.py'),
transpilepy_end('playerpy/drawer/streams.py'),
copy_time('transpiler/drawer/code.p', 'playerpy/drawer/streams.py'),
copy_time('transpiler/drawer/scanner.p', 'playerpy/drawer/streams.py', [update(true)]),
copy_time('transpiler/drawer/term.p', 'playerpy/drawer/streams.py', [update(true)]),
copy_time('transpiler/drawer/session.p', 'playerpy/drawer/streams.py', [update(true)]).
% transpilepy_doge_lib
transpilepy_doge_lib :-
copy_pathdirs('transpiler/drawer/liblet/', 'playerpy/drawer/liblet/'),
clean_pathdirs('transpiler/drawer/liblet/', 'playerpy/drawer/liblet/', '.p').
/*****************************************************************/
/* Bundle Dogelog Player */
/*****************************************************************/
/**
* bundlepy_doge:
* The predicate succeeds. As side effect it creates the canned
* Dogelog Player for the Python target.
*/
% bundlepy_doge
bundlepy_doge :-
bundlepy_doge_core,
bundlepy_doge_lib.
% bundlepy_doge_core
bundlepy_doge_core :-
copy_text('playerpy/cross/header.py', 'playerpy/canned/dogelog.py'),
bundlepy_add('playerpy/drawer/nova/store.py', 'playerpy/canned/dogelog.py'),
bundlepy_add('playerpy/drawer/nova/machine.py', 'playerpy/canned/dogelog.py'),
bundlepy_add('playerpy/drawer/nova/unicode.py', 'playerpy/canned/dogelog.py'),
bundlepy_add('playerpy/drawer/nova/special.py', 'playerpy/canned/dogelog.py'),
bundlepy_add('playerpy/drawer/nova/eval.py', 'playerpy/canned/dogelog.py'),
bundlepy_add('playerpy/drawer/nova/runtime.py', 'playerpy/canned/dogelog.py'),
bundlepy_add('playerpy/drawer/bootload.py', 'playerpy/canned/dogelog.py'),
bundlepy_add('playerpy/drawer/streams.py', 'playerpy/canned/dogelog.py'),
bundlepy_add('playerpy/drawer/dogelog.py', 'playerpy/canned/dogelog.py'),
bundlepy_add('playerpy/drawer/index.py', 'playerpy/canned/dogelog.py'),
copy_time('playerpy/drawer/nova/store.py', 'playerpy/canned/dogelog.py'),
copy_time('playerpy/drawer/nova/machine.py', 'playerpy/canned/dogelog.py', [update(true)]),
copy_time('playerpy/drawer/nova/unicode.py', 'playerpy/canned/dogelog.py', [update(true)]),
copy_time('playerpy/drawer/nova/special.py', 'playerpy/canned/dogelog.py', [update(true)]),
copy_time('playerpy/drawer/nova/eval.py', 'playerpy/canned/dogelog.py', [update(true)]),
copy_time('playerpy/drawer/nova/runtime.py', 'playerpy/canned/dogelog.py', [update(true)]),
copy_time('playerpy/drawer/bootload.py', 'playerpy/canned/dogelog.py', [update(true)]),
copy_time('playerpy/drawer/streams.py', 'playerpy/canned/dogelog.py', [update(true)]),
copy_time('playerpy/drawer/dogelog.py', 'playerpy/canned/dogelog.py', [update(true)]),
copy_time('playerpy/drawer/index.py', 'playerpy/canned/dogelog.py', [update(true)]).
% bundlepy_doge_lib
bundlepy_doge_lib :-
strip_pathdirs('playerpy/drawer/liblet/', 'playerpy/canned/liblet/'),
clean_pathdirs('playerpy/drawer/liblet/', 'playerpy/canned/liblet/', '.p'),
bundlepy_pathdirs('playerpy/drawer/liblet/', 'playerpy/canned/liblet/'),
clean_pathdirs('playerpy/drawer/liblet/', 'playerpy/canned/liblet/', '.py').
/*******************************************************************/
/* Bundle File */
/*******************************************************************/
% bundlepy_path(+Atom, +Atom)
bundlepy_path(InName, OutName) :-
copy_text('playerpy/cross/header.py', OutName),
bundlepy_add(InName, OutName, [keep_import(true)]),
copy_time(InName, OutName).
% bundlepy_pathdirs(+Atom, +Atom)
bundlepy_pathdirs(InDir, OutDir) :-
ensure_directory(OutDir),
directory_member(InDir, Name),
sub_atom(Name, _, _, 0, '.py'),
atom_concat(InDir, Name, InName),
atom_concat(OutDir, Name, OutName),
bundlepy_path(InName, OutName),
fail.
bundlepy_pathdirs(InDir, OutDir) :-
directory_member(InDir, Name),
\+ sub_atom(Name, _, _, _, '.'),
atom_concat(Name, '/', Name2),
atom_concat(InDir, Name2, InName),
atom_concat(OutDir, Name2, OutName),
bundlepy_pathdirs(InName, OutName),
fail.
bundlepy_pathdirs(_, _).