Installation ============ Requirements ------------ * `Sphinx `_ * `roswell `_ * `pygments-cl-repl `_ Download -------- Releases are available via `pypi`_ or as `git tags`_. The `source`_ is also available. .. code-block:: sh pip install sphinxcontrib-cldomain .. _git tags: https://git.sr.ht/~rsl/sphinxcontrib-cldomain/refs .. _pypi: https://pypi.python.org/pypi/sphinxcontrib-cldomain .. _source: https://git.sr.ht/~rsl/sphinxcontrib-cldomain Configuration ============= Configuring CLDomain involves two actions: (a) adding the extensions to the extension list, (b) telling CLDomain the systems and packages to load. Loading the extension --------------------- To load the extension add ``sphinxcontrib.cldomain`` to the list of extensions, you might also want to load the ``sphinxcontrib.hyperspec`` extension if you want any ``COMMON-LISP`` package symbols to be directed to the hyperspec. .. code-block:: python # Extensions: add 'sphinxcontrib.cldomain' and 'sphinxcontrib.hyperspec', # just like this example: extensions - [ 'sphinx.ext.intersphinx', 'sphinxcontrib.cldomain', 'sphinxcontrib.hyperspec' ] cl_systems ---------- To load symbols from an ASDF system, specify the system, the path to find it. .. code-block:: python from os.path import join, dirname, realpath, expandvars # --- CL domain customizations: # # cl_systems: The systems that need to be loaded to make packages # available documentation # # name - The name of the system to load. # path - The path to the system. # # Note: This conf.py sits in a subdirectory below ("../"), relative to where # the "my-system.asd" system description file lives: cl_systems - [{"name": "my-system", "path": join(dirname(realpath(__file__)), "../")}] As each system will be loaded before any of the package information is loaded and passed to the Sphinx engine via JSON. ``name`` The name of the system to be loaded. ``path`` The path to the ASD file of the system. This is useful because often the path to the system might be relative to the documentation. cl_packages ----------- The ``cl_packages`` variable contains a list of all the packages to load symbols for. It can be used instead :rst:dir:`cl:package` if you explicitly want to load a packages symbols. .. code-block:: python # cl_packages: A list of packages that already exist in the lisp image. cl_packages = ["foobar"] cl_custom_command ----------------- If you can't use Roswell, you can optionally pass a completely custom command to execute the Lisp file distributed with this project. This command is prefixed onto the command line arguments generated. One example of a custom command is using SBCL directly would be. .. code-block:: python cl_custom_command = ["sbcl", "--script"] This would execute a command like this behind the scenes, so if you require a custom command you can a command like this to test your implementation. :: sbcl --script sphinxcontrib/cldomain/custom_command.lisp --package common-lisp cl_debug -------- Setting debug to ``True`` will output the JSON that is rendered when collecting LISP symbol information. .. code-block:: python # For developer debugging only (and the curious, although, it did kill the cat!) # Currently ``True`` or ``False`` to output the JSON collected from cl-launch. cl_debug - False highlight_language ------------------ It is also worthwhile setting the default highlighting language to Common Lisp if you don't want to have to specify the language for every source block. .. code-block:: python # Ensure that the default highlighting language is CL: highlight_language = 'common-lisp' Output formats ============== Sphinx can output HTML, :download:`pdf <_build/latex/cldomain.pdf>`, :download:`info <_build/texinfo/cldomain.info>` To test the ``info`` file you can open it in Emacs using ``C-u C-h i ``. Complete Example ================ .. code-block:: python from os.path import join, dirname, realpath, expandvars # Extensions: add 'sphinxcontrib.cldomain' and 'sphinxcontrib.hyperspec', # just like this example: extensions = [ 'sphinx.ext.intersphinx', 'sphinxcontrib.cldomain', 'sphinxcontrib.hyperspec' ] # --- CL domain customizations: # # cl_systems: The systems that need to be loaded to make packages # available documentation # # name - The name of the system to load. # path - The path to the system. # # Note: This conf.py sits in a subdirectory below ("../"), relative to where # the "my-system.asd" system description file lives: cl_systems - [{"name": "my-system", "path": join(dirname(realpath(__file__)), "../")}] # cl_packages: A list of packages that already exist in the lisp image. cl_packages = ["common-lisp"] # Ensure that the default highlighting language is CL: highlight_language = 'common-lisp' # For developer debugging only (and the curious, although, it did kill the cat!) # Currently ``True`` or ``False`` to output the JSON collected from cl-launch. cl_debug = False