Python "domlib"

Admin User, erstellt 04. Feb. 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.
##
from __main__ import (exec_build, check_sink, Sink, add,
make_check, stream_close, flush_buffer, check_integer,
exec_unify, check_atom, deref, put_atom, stream_flush)
from liblet.util.auxlib import (xml_escape)
def test_ir_is_sink(args):
obj = deref(exec_build(args[0]))
return isinstance(obj, Sink)
def test_ir_data_current(args):
obj = deref(exec_build(args[0]))
check_sink(obj)
return exec_unify(args[1], obj.data)
def test_ir_flush_buffer(args):
obj = deref(exec_build(args[0]))
check_sink(obj)
flush_buffer(obj)
return True
def test_ir_indent_current(args):
obj = deref(exec_build(args[0]))
check_sink(obj)
return exec_unify(args[1], obj.indent)
def test_ir_indent_set(args):
obj = deref(exec_build(args[0]))
check_sink(obj)
alpha = deref(exec_build(args[1]))
check_integer(alpha)
obj.indent = alpha
return True
def test_dom_output_new(args):
obj = deref(exec_build(args[0]))
check_sink(obj)
dst = Sink()
dst.data = obj
dst.send = dom_send
dst.notify = dom_notify
dst.release = dom_release
return exec_unify(args[1], dst)
def dom_send(data, buf):
text = xml_escape(buf)
put_atom(data, text)
def dom_notify(data):
stream_flush(data)
def dom_release(data):
stream_close(data)
def test_dom_error_new(args):
obj = deref(exec_build(args[0]))
check_sink(obj)
dst = Sink()
dst.data = obj
dst.send = dom_alert
dst.notify = dom_notify
dst.release = dom_release
return exec_unify(args[1], dst)
def dom_alert(data, buf):
text = "<span style='color: #A52A2A'>"+xml_escape(buf)+"</span>"
put_atom(data, text)
def main():
add("ir_is_sink", 1, make_check(test_ir_is_sink))
add("ir_data_current", 2, make_check(test_ir_data_current))
add("ir_flush_buffer", 1, make_check(test_ir_flush_buffer))
add("ir_indent_current", 2, make_check(test_ir_indent_current))
add("ir_indent_set", 2, make_check(test_ir_indent_set))
add("dom_output_new", 2, make_check(test_dom_output_new))
add("dom_error_new", 2, make_check(test_dom_error_new))