87 lines
2.5 KiB
Python
87 lines
2.5 KiB
Python
from __future__ import print_function
|
|
|
|
from metakernel import MetaKernel
|
|
|
|
import signal
|
|
import yap
|
|
|
|
class MetaKernelyap(MetaKernel):
|
|
implementation = 'MetaKernel YAP'
|
|
implementation_version = '1.0'
|
|
language = 'text'
|
|
language_version = '0.1'
|
|
banner = "MetaKernel YAP"
|
|
language_info = {
|
|
'mimetype': 'text/plain',
|
|
'name': 'text',
|
|
# ------ If different from 'language':
|
|
'codemirror_mode': {
|
|
"version": 2,
|
|
"name": "prolog"
|
|
},
|
|
'pygments_lexer': 'prolog',
|
|
'version' : "0.0.1",
|
|
'file_extension': '.yap',
|
|
'help_links': MetaKernel.help_links,
|
|
}
|
|
|
|
def __init__(self, **kwargs):
|
|
|
|
MetaKernel.__init__(self, **kwargs)
|
|
self._start_yap()
|
|
|
|
def _start_yap(self):
|
|
# Signal handlers are inherited by forked processes, and we can't easily
|
|
# reset it from the subprocess. Since kernelapp ignores SIGINT except in
|
|
# message handlers, we need to temporarily reset the SIGINT handler here
|
|
# so that yap and its children are interruptible.
|
|
#sig = signal.signal(signal.SIGINT, signal.SIG_DFL)
|
|
#try:
|
|
self.engine = yap.YAPEngine()
|
|
self.q = None
|
|
#engine.query("load_files(library(python), [])").command()
|
|
banner = "YAP {0} Kernel".format(self.engine.version())
|
|
|
|
#finally:
|
|
# signal.signal(signal.SIGINT, sig)
|
|
|
|
# Register Yap function to write image data to temporary file
|
|
#self.yapwrapper.run_command(image_setup_cmd)
|
|
|
|
def get_usage(self):
|
|
return "This is the YAP kernel."
|
|
|
|
def do_execute_direct(self, code):
|
|
if not code.strip():
|
|
return ""
|
|
|
|
interrupted = False
|
|
try:
|
|
if self.q is None:
|
|
self.q = self.engine.query(code.rstrip())
|
|
if self.q.next():
|
|
vs = self.q.namedVars()
|
|
if vs:
|
|
l = {}
|
|
for eq in vs:
|
|
l[eq.getArg(1)] = eq.getArg(2)
|
|
return l
|
|
else:
|
|
return 'yes'
|
|
else:
|
|
return 'no'
|
|
except KeyboardInterrupt:
|
|
return 'stopped by user'
|
|
|
|
|
|
|
|
def repr(self, data):
|
|
return repr(data)
|
|
|
|
if __name__ == '__main__':
|
|
try:
|
|
from ipykernel.kernelapp import IPKernelApp
|
|
except ImportError:
|
|
from IPython.kernel.zmq.kernelapp import IPKernelApp
|
|
IPKernelApp.launch_instance(kernel_class=MetaKernelyap)
|