93 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
from __future__ import print_function
 | 
						|
 | 
						|
from metakernel import MetaKernel
 | 
						|
 | 
						|
from metakernel import register_ipython_magics
 | 
						|
register_ipython_magics()
 | 
						|
 | 
						|
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': 'language',
 | 
						|
         'version'       : "0.0.1",
 | 
						|
        'file_extension': '.yap',
 | 
						|
        'help_links': MetaKernel.help_links,
 | 
						|
    }
 | 
						|
 | 
						|
    def __init__(self, **kwargs):
 | 
						|
 | 
						|
        MetaKernel.__init__(self, **kwargs)
 | 
						|
        self._start_yap()
 | 
						|
        self.qq = None      sq
 | 
						|
 | 
						|
    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:
 | 
						|
            engine = yap.YAPEngine()
 | 
						|
            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 {'status': 'ok', 'execution_count': self.execution_count,
 | 
						|
                'payload': [], 'user_expressions': {}}
 | 
						|
 | 
						|
    interrupted = False
 | 
						|
    try:
 | 
						|
        print self.q
 | 
						|
        if self.q is None:
 | 
						|
          self.q = self.engine.query(code.rstrip())
 | 
						|
       if self.q.next():
 | 
						|
            vs = self.q.namedVars()
 | 
						|
            if vs.length() > 0:
 | 
						|
              l = []
 | 
						|
              while vs.length() > 0:
 | 
						|
                eq = vs.car()
 | 
						|
                l.append(' '.join([getArg(1).text(), '=', eq.getArg(2).text())
 | 
						|
                vs = vs.cdr()
 | 
						|
              l.append(';')
 | 
						|
              o = '\n'.join(l)
 | 
						|
            else:
 | 
						|
              return 'yes'
 | 
						|
              self.q = None
 | 
						|
 | 
						|
        else:
 | 
						|
            return 'no'
 | 
						|
            self.q = None
 | 
						|
 | 
						|
 | 
						|
 | 
						|
    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)
 |