A Jupyter Kernel for YAP		(#yap_kernel)
=======================

This Jupyter kernel supports interaction with YAP Prolog. The kernel
patches IPython and PyKernel so that the user interacts with the
Prolog interpreter. Most of the original kernels are unaffected by the
changes.

You will need `python3` and `jupyter notebook`to use this package, plus:
	- `setuptools`;
	- `wheel`
	- `pip`

The configuration script should recognize whether these Python
packages are installed.

See `tut.ipynb` for details on how to use  the system.

Both `jupyter notebook` and `jupyter lab` rely on the Javascript
editor ` CodeMirror` for editing tasks such as highlighting, inlining,
and folding. Unfortunately, `CodeMirror` does not support the Prolog
language. Starting from Wielemaker's excellent `CodeMirror` module for
`swish`, YAP includes a codemirror for Prolog, designed to fit easily
with any `CodeMirror`-based application.
	
+ `Jupyter lab` includes a complex dependency mechanism, that always
  tries to download from the Internet. We do a first build to ensure
  all packages are there, set the build offline, patch the different
  copies of codemirror, and build locally.
  
  ~~~~
  CM=$HOME/github/CodeMirror
  PYLIB=$HOME/.local/lib/python3.6/site-packages
  PYSHARE=$HOME/.local/share
  cd $PYLIB/jupyterlab
  jupyter lab build
  cp commands.py commands.py.bk
  sed  's/.node., YARN_PATH,/\"node", YARN_PATH, "--offline",/g' commands.py
  cd $PYSHARE/jupyter/lab/staging/node_modules/codemirror/mode
  split -n l/5 meta.js
  cat xaa xab > meta.js
  echo '     {name: "Prolog", mime: "text\/x-prolog", mode: "prolog", ext: ["yap","pl", "ypp", "prolog"]}' >> meta.js
  cat xac xad xae >> meta.js
  cp -a $CM/mode/prolog prolog
  cd $PYLIB/jupyterlab
  jupyter lab build
  mv commands.py.bk commands.py
  ~~~~