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)