├── doc ├── pipeline.png ├── declt-user-data │ ├── pipeline.png │ └── pipeline.txt ├── logo.png ├── pipeline.key ├── pipeline │ └── pipeline.001.png ├── aliases.dot ├── definitions.dot ├── components.dot ├── varoids.dot ├── classoids.dot ├── funcoids.dot ├── declt.cl ├── texinfo-klare.css ├── generate.cl └── Makefile ├── share └── logo.xcf ├── make ├── version.make ├── epilogue.make ├── version.cl ├── prologue.make └── config.make ├── LICENSE ├── setup ├── src │ ├── configuration.lisp │ ├── readtable.lisp │ ├── version.lisp │ └── util.lisp ├── package.lisp └── net.didierverna.declt.setup.asd ├── core ├── src │ ├── util │ │ └── misc.lisp │ ├── doc │ │ ├── package.lisp │ │ ├── doc.lisp │ │ ├── asdf.lisp │ │ └── texi.lisp │ └── declt.lisp ├── net.didierverna.declt.core.asd └── package.lisp ├── net.didierverna.declt.asd ├── assess ├── net.didierverna.declt.assess.asd ├── src │ ├── package.lisp │ ├── license.lisp │ ├── definition.lisp │ ├── util.lisp │ └── asdf.lisp └── package.lisp ├── README.md ├── Makefile ├── TODO ├── INSTALL └── CHANGES.md /doc/pipeline.png: -------------------------------------------------------------------------------- 1 | pipeline/pipeline.001.png -------------------------------------------------------------------------------- /doc/declt-user-data/pipeline.png: -------------------------------------------------------------------------------- 1 | ../pipeline/pipeline.001.png -------------------------------------------------------------------------------- /doc/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/didierverna/declt/HEAD/doc/logo.png -------------------------------------------------------------------------------- /share/logo.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/didierverna/declt/HEAD/share/logo.xcf -------------------------------------------------------------------------------- /doc/pipeline.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/didierverna/declt/HEAD/doc/pipeline.key -------------------------------------------------------------------------------- /doc/pipeline/pipeline.001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/didierverna/declt/HEAD/doc/pipeline/pipeline.001.png -------------------------------------------------------------------------------- /make/version.make: -------------------------------------------------------------------------------- 1 | LONG_VERSION := 4.0 beta 3 "William Riker" 2 | SHORT_VERSION := 4.0b3 3 | COPYRIGHT_YEARS := 2010-2013, 2015-2022, 2024, 2025 4 | -------------------------------------------------------------------------------- /doc/aliases.dot: -------------------------------------------------------------------------------- 1 | strict digraph 2 | { 3 | rankdir = TD; 4 | node [ shape = box color = blue ] 5 | 6 | symbol [ color = red fontname = "times bold" ] 7 | alias [ color = red fontname = "times bold" ] 8 | 9 | symbol -> alias -> { "macro-alias" "compiler-macro-alias" "function-alias" } 10 | } 11 | -------------------------------------------------------------------------------- /doc/declt-user-data/pipeline.txt: -------------------------------------------------------------------------------- 1 | .--------. .----------. .---------. 2 | system -> | assess | -> report -> | assemble | -> script -> | typeset | -> file 3 | '--------' '----------' '---------' 4 | ^ ^ 5 | layout -------' format --------' 6 | -------------------------------------------------------------------------------- /doc/definitions.dot: -------------------------------------------------------------------------------- 1 | strict digraph 2 | { 3 | margin = 0; 4 | rankdir = TD; 5 | node [ shape = box color = blue ] 6 | 7 | definition [ color = red fontname = "times bold" ] 8 | component [ color = red fontname = "times bold" ] 9 | package 10 | symbol [ color = red fontname = "times bold" ] 11 | 12 | definition -> { component package symbol } 13 | } 14 | -------------------------------------------------------------------------------- /doc/components.dot: -------------------------------------------------------------------------------- 1 | strict digraph 2 | { 3 | margin = 0; 4 | rankdir = TD; 5 | node [ shape = box color = blue ] 6 | 7 | component [ color = red fontname = "times bold" ] 8 | component -> { file module } 9 | 10 | file -> "source-file" -> { "lisp-file" "c-file" "java-file" "static-file" } 11 | "lisp-file" -> "system-file" 12 | "static-file" -> "doc-file" -> "html-file" 13 | 14 | module -> system 15 | } 16 | -------------------------------------------------------------------------------- /doc/varoids.dot: -------------------------------------------------------------------------------- 1 | strict digraph 2 | { 3 | rankdir = TD; 4 | node [ shape = box color = blue ] 5 | 6 | symbol [ color = red fontname = "times bold" ] 7 | varoid [ color = red fontname = "times bold" ] 8 | symbol -> varoid 9 | 10 | variable [ color = red fontname = "times bold" ] 11 | varoid -> variable -> { constant special } 12 | 13 | varoid -> "symbol-macro" 14 | 15 | slot [ color = red fontname = "times bold" ] 16 | varoid -> slot -> { "clos-slot" "typed-structure-slot" } 17 | } 18 | -------------------------------------------------------------------------------- /doc/classoids.dot: -------------------------------------------------------------------------------- 1 | strict digraph 2 | { 3 | rankdir = TD; 4 | node [ shape = box color = blue ] 5 | 6 | symbol [ color = red fontname = "times bold" ] 7 | classoid [ color = red fontname = "times bold" ] 8 | structure [ color = red fontname = "times bold" ] 9 | 10 | symbol -> classoid -> { structure condition class } 11 | 12 | structure -> { "typed-structure" "clos-structure" } 13 | 14 | "clos-classoid-mixin" 15 | [ shape = ellipse color = green fontname = "times bold" ] 16 | "clos-classoid-mixin" -> { condition class "clos-structure" } 17 | } 18 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (C) 2010-2013, 2015-2022, 2024 Didier Verna 2 | 3 | This file is part of Declt. 4 | 5 | Permission to use, copy, modify, and distribute this software for any 6 | purpose with or without fee is hereby granted, provided that the above 7 | copyright notice and this permission notice appear in all copies. 8 | 9 | THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 | OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 | -------------------------------------------------------------------------------- /make/epilogue.make: -------------------------------------------------------------------------------- 1 | ### epilogue.make --- Epilogue Makefile 2 | 3 | ## Copyright (C) 2021 Didier Verna 4 | 5 | ## Author: Didier Verna 6 | 7 | ## This file is part of Declt. 8 | 9 | ## Permission to use, copy, modify, and distribute this software for any 10 | ## purpose with or without fee is hereby granted, provided that the above 11 | ## copyright notice and this permission notice appear in all copies. 12 | 13 | ## THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 14 | ## WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 15 | ## MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 16 | ## ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 17 | ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 18 | ## ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 19 | ## OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 20 | 21 | 22 | ### Commentary: 23 | 24 | 25 | 26 | ### Code: 27 | 28 | $(TOP_DIR)/make/version.make: \ 29 | $(TOP_DIR)/make/epilogue.make $(TOP_DIR)/make/version.cl \ 30 | $(TOP_DIR)/setup/src/version.lisp 31 | $($(LISP)_PATH) $(EVAL_CONFIG) \ 32 | $($(LISP)_LOAD) $(TOP_DIR)/make/version.cl \ 33 | | tail -3 > $@.new 34 | mv $@.new $@ 35 | 36 | ### epilogue.make ends here 37 | -------------------------------------------------------------------------------- /make/version.cl: -------------------------------------------------------------------------------- 1 | ;;; version.cl --- Declt version extractor script 2 | 3 | ;; Copyright (C) 2010-2012, 2015, 2021 Didier Verna 4 | 5 | ;; Author: Didier Verna 6 | 7 | ;; This file is part of Declt. 8 | 9 | ;; Permission to use, copy, modify, and distribute this software for any 10 | ;; purpose with or without fee is hereby granted, provided that the above 11 | ;; copyright notice and this permission notice appear in all copies. 12 | 13 | ;; THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 14 | ;; WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 15 | ;; MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 16 | ;; ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 17 | ;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 18 | ;; ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 19 | ;; OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 20 | 21 | 22 | ;;; Commentary: 23 | 24 | 25 | 26 | ;;; Code: 27 | 28 | (in-package :cl-user) 29 | 30 | (require "asdf") 31 | 32 | (asdf:load-system :net.didierverna.declt.setup) 33 | 34 | (format t "LONG_VERSION := ~A~%~ 35 | SHORT_VERSION := ~A~%~ 36 | COPYRIGHT_YEARS := ~A~%" 37 | (net.didierverna.declt.setup:version :long) 38 | (net.didierverna.declt.setup:version :short) 39 | net.didierverna.declt.setup:*copyright-years*) 40 | 41 | (uiop:quit) 42 | 43 | ;;; version.cl ends here 44 | -------------------------------------------------------------------------------- /make/prologue.make: -------------------------------------------------------------------------------- 1 | ### prologue.make --- Prologue Makefile 2 | 3 | ## Copyright (C) 2010-2012, 2015, 2021, 2025 Didier Verna 4 | 5 | ## Author: Didier Verna 6 | 7 | ## This file is part of Declt. 8 | 9 | ## Permission to use, copy, modify, and distribute this software for any 10 | ## purpose with or without fee is hereby granted, provided that the above 11 | ## copyright notice and this permission notice appear in all copies. 12 | 13 | ## THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 14 | ## WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 15 | ## MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 16 | ## ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 17 | ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 18 | ## ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 19 | ## OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 20 | 21 | 22 | ### Commentary: 23 | 24 | 25 | 26 | ### Code: 27 | 28 | PROJECT := declt 29 | PACKAGE := net.didierverna.$(PROJECT) 30 | ASDF_FILE := $(PACKAGE).asd 31 | 32 | TYPESET_COPYRIGHT_YEARS := $(subst -,--,$(COPYRIGHT_YEARS)) 33 | 34 | PERL := perl 35 | 36 | SHARE := $(PREFIX)/share 37 | 38 | W3DIR := $(HOME)/www/software/lisp/$(PROJECT) 39 | NET_DIR := $(HOME)/Documents/Science/Sites/didierverna.net/content/projects/quickref 40 | 41 | SBCL_CACHE := sbcl 42 | SBCL_BINLOC := sbcl 43 | SBCL_LOAD := --load 44 | SBCL_EVAL := --eval 45 | SBCL_DUMP := $(SBCL_LOAD) 46 | 47 | BINLOC := $($(LISP)_BINLOC) 48 | 49 | EVAL_CONFIG := 50 | 51 | ### proogue.make ends here 52 | -------------------------------------------------------------------------------- /doc/funcoids.dot: -------------------------------------------------------------------------------- 1 | strict digraph 2 | { 3 | rankdir = TD; 4 | node [ shape = box color = blue ] 5 | 6 | symbol [ color = red fontname = "times bold" ] 7 | funcoid [ color = red fontname = "times bold" ] 8 | symbol -> funcoid 9 | 10 | funcoid -> { "compiler-macro" type } 11 | 12 | expander [ color = red fontname = "times bold" ] 13 | funcoid -> expander -> { "short-expander" "long-expander" } 14 | 15 | funcoid -> combination -> { "short-combination" "long-combination" } 16 | 17 | funcoid -> method 18 | 19 | "setfable-funcoid" [ color = red fontname = "times bold" ] 20 | funcoid -> "setfable-funcoid" -> macro 21 | 22 | function [ color = red fontname = "times bold" ] 23 | "setfable-funcoid" -> function -> { "ordinary-function" "generic-function" } 24 | 25 | "accessor-mixin" [ shape = ellipse color = green fontname = "times bold" ] 26 | 27 | "accessor-method" [ color = red fontname = "times bold" ] 28 | { method "accessor-mixin" } -> "accessor-method" 29 | -> { "reader-method" "writer-method" } 30 | 31 | "ordinary-accessor" [ color = red fontname = "times bold" ] 32 | { "ordinary-function" "accessor-mixin" } -> "ordinary-accessor" 33 | -> { "ordinary-reader" "ordinary-writer" } 34 | 35 | "generic-accessor" [ color = red fontname = "times bold" ] 36 | "generic-function" -> "generic-accessor" 37 | -> { "generic-reader" "generic-writer" } 38 | 39 | { rank = same 40 | "short-expander" "long-expander" 41 | "short-combination" "long-combination" 42 | method macro function 43 | } 44 | { rank = same 45 | "reader-method" "writer-method" 46 | "ordinary-reader" "ordinary-writer" 47 | "generic-reader" "generic-writer" 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /setup/src/configuration.lisp: -------------------------------------------------------------------------------- 1 | ;;; configuration.lisp --- Declt configuration management 2 | 3 | ;; Copyright (C) 2015, 2017, 2019, 2021 Didier Verna 4 | 5 | ;; Author: Didier Verna 6 | 7 | ;; This file is part of Declt. 8 | 9 | ;; Permission to use, copy, modify, and distribute this software for any 10 | ;; purpose with or without fee is hereby granted, provided that the above 11 | ;; copyright notice and this permission notice appear in all copies. 12 | 13 | ;; THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 14 | ;; WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 15 | ;; MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 16 | ;; ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 17 | ;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 18 | ;; ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 19 | ;; OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 20 | 21 | 22 | ;;; Commentary: 23 | 24 | 25 | 26 | ;;; Code: 27 | 28 | (in-package :net.didierverna.declt.setup) 29 | 30 | 31 | (defvar *configuration* nil 32 | "The Declt configuration settings. 33 | This variable contains a property list of configuration options. 34 | Current options are: 35 | - :swank-eval-in-emacs (Boolean) 36 | 37 | See Section 4.1 of the user manual for more information.") 38 | 39 | (defun configuration (key) 40 | "Return KEY's value in the current Declt configuration." 41 | (getf *configuration* key)) 42 | 43 | (defun configure (key value) 44 | "Set KEY to VALUE in the current Declt configuration." 45 | (setf (getf *configuration* key) value)) 46 | 47 | ;;; configuration.lisp ends here 48 | -------------------------------------------------------------------------------- /doc/declt.cl: -------------------------------------------------------------------------------- 1 | ;;; declt.cl --- Declt availability checking script 2 | 3 | ;; Copyright (C) 2011, 2015 Didier Verna 4 | 5 | ;; Author: Didier Verna 6 | 7 | ;; This file is part of Declt. 8 | 9 | ;; Permission to use, copy, modify, and distribute this software for any 10 | ;; purpose with or without fee is hereby granted, provided that the above 11 | ;; copyright notice and this permission notice appear in all copies. 12 | 13 | ;; THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 14 | ;; WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 15 | ;; MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 16 | ;; ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 17 | ;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 18 | ;; ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 19 | ;; OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 20 | 21 | 22 | ;;; Commentary: 23 | 24 | ;; Contents management by FCM version 0.1. 25 | 26 | 27 | ;;; Code: 28 | 29 | (require "asdf") 30 | 31 | (with-open-file (stream "declt.make" :direction :output :if-exists :supersede) 32 | (princ "TEXI_REF :=" stream) 33 | (handler-case 34 | (progn (asdf:load-system :net.didierverna.declt) 35 | (princ " reference.texi" stream)) 36 | (asdf:missing-component () 37 | (format *error-output* "~ 38 | ********************************************************************* 39 | * WARNING: ASDF component NET.DIDIERVERNA.DECLT not found. * 40 | * The Declt reference manual will not be generated. * 41 | *********************************************************************~%"))) 42 | (terpri stream)) 43 | 44 | (uiop:quit) 45 | 46 | ;;; declt.cl ends here 47 | -------------------------------------------------------------------------------- /make/config.make: -------------------------------------------------------------------------------- 1 | ### config.make --- Configuration part 2 | 3 | ## Copyright (C) 2010-2012, 2015, 2021, 2022 Didier Verna 4 | 5 | ## Author: Didier Verna 6 | 7 | ## This file is part of Declt. 8 | 9 | ## Permission to use, copy, modify, and distribute this software for any 10 | ## purpose with or without fee is hereby granted, provided that the above 11 | ## copyright notice and this permission notice appear in all copies. 12 | 13 | ## THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 14 | ## WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 15 | ## MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 16 | ## ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 17 | ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 18 | ## ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 19 | ## OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 20 | 21 | 22 | ### Commentary: 23 | 24 | ## Contents management by FCM version 0.1. 25 | 26 | 27 | ### Code: 28 | 29 | ## Installation prefix. This is used for installing Declt as follows: 30 | # - $(PREFIX)/share/doc/declt/ for the PDF documentation 31 | # - $(PREFIX)/share/info/ for the info documentation 32 | # If any of these are unsatisfactory, you will need to edit the Makefiles, or 33 | # do the installation by hand. 34 | PREFIX := /usr/local 35 | 36 | ## Currently, only SBCL is supported. 37 | LISP := SBCL 38 | 39 | ## Global Common Lisp binary cache location. 40 | BINLOC_CACHE := ${HOME}/.cache/common-lisp 41 | 42 | SBCL_PATH := sbcl 43 | 44 | ## Programs for generating the documentation: 45 | MAKEINFO = makeinfo 46 | INSTALL_INFO = install-info 47 | CONVERT = convert 48 | DOT = dot 49 | GRAPH_EASY = graph-easy 50 | 51 | ### config.make ends here 52 | -------------------------------------------------------------------------------- /setup/package.lisp: -------------------------------------------------------------------------------- 1 | ;;; package.lisp --- Declt setup package definition 2 | 3 | ;; Copyright (C) 2015, 2017, 2019, 2021 Didier Verna 4 | 5 | ;; Author: Didier Verna 6 | 7 | ;; This file is part of Declt. 8 | 9 | ;; Permission to use, copy, modify, and distribute this software for any 10 | ;; purpose with or without fee is hereby granted, provided that the above 11 | ;; copyright notice and this permission notice appear in all copies. 12 | 13 | ;; THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 14 | ;; WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 15 | ;; MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 16 | ;; ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 17 | ;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 18 | ;; ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 19 | ;; OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 20 | 21 | 22 | ;;; Commentary: 23 | 24 | 25 | 26 | ;;; Code: 27 | 28 | (in-package :cl-user) 29 | 30 | (defpackage :net.didierverna.declt.setup 31 | (:documentation "The Declt setup library's package.") 32 | (:use :cl) 33 | ;; #### PORTME. 34 | (:import-from #+sbcl :sb-mop 35 | :validate-superclass) 36 | (:import-from :named-readtables 37 | :defreadtable :in-readtable) 38 | (:export 39 | :in-readtable 40 | ;; From src/configuration.lisp: 41 | :configuration :configure 42 | ;; From src/version.lisp: 43 | :*copyright-years* 44 | :*release-major-level* :*release-minor-level* :*release-status* 45 | :*release-status-level* :*release-name* 46 | :version 47 | ;; From src/util.lisp: 48 | :while :endpush :retain :find* :when-let :when-let* :mapcat 49 | :declare-valid-superclass :abstract-class :defabstract 50 | :non-empty-string-p :non-empty-string)) 51 | 52 | ;;; package.lisp ends here 53 | -------------------------------------------------------------------------------- /core/src/util/misc.lisp: -------------------------------------------------------------------------------- 1 | ;;; misc.lisp --- Miscellaneous utilities 2 | 3 | ;; Copyright (C) 2010, 2011, 2013, 2015-2017, 2019-2021 Didier Verna 4 | 5 | ;; Author: Didier Verna 6 | 7 | ;; This file is part of Declt. 8 | 9 | ;; Permission to use, copy, modify, and distribute this software for any 10 | ;; purpose with or without fee is hereby granted, provided that the above 11 | ;; copyright notice and this permission notice appear in all copies. 12 | 13 | ;; THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 14 | ;; WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 15 | ;; MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 16 | ;; ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 17 | ;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 18 | ;; ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 19 | ;; OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 20 | 21 | 22 | ;;; Commentary: 23 | 24 | 25 | 26 | ;;; Code: 27 | 28 | (in-package :net.didierverna.declt) 29 | (in-readtable :net.didierverna.declt) 30 | 31 | 32 | 33 | ;; ========================================================================== 34 | ;; General 35 | ;; ========================================================================== 36 | 37 | (defun current-time-string () 38 | "Return the current time as a string." 39 | (multiple-value-bind 40 | (second minute hour date month year day-of-week dst-p tz) 41 | (get-decoded-time) 42 | (declare (ignore dst-p)) 43 | (format nil "~A ~A ~2,'0D ~2,'0D:~2,'0D:~2,'0D ~D GMT~@D" 44 | (nth day-of-week '("Mon" "Tue" "Wed" "Thu" "Fri" "Sat" "Sun")) 45 | (nth (1- month) '("Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" 46 | "Sep" "Oct" "Nov" "Dec")) 47 | date 48 | hour 49 | minute 50 | second 51 | year 52 | (- tz)))) 53 | 54 | ;;; misc.lisp ends here 55 | -------------------------------------------------------------------------------- /setup/net.didierverna.declt.setup.asd: -------------------------------------------------------------------------------- 1 | ;;; net.didierverna.setup.setup.asd --- Declt setup ASDF system definition 2 | 3 | ;; Copyright (C) 2015, 2021, 2022 Didier Verna 4 | 5 | ;; Author: Didier Verna 6 | 7 | ;; This file is part of Declt. 8 | 9 | ;; Permission to use, copy, modify, and distribute this software for any 10 | ;; purpose with or without fee is hereby granted, provided that the above 11 | ;; copyright notice and this permission notice appear in all copies. 12 | 13 | ;; THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 14 | ;; WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 15 | ;; MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 16 | ;; ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 17 | ;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 18 | ;; ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 19 | ;; OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 20 | 21 | 22 | ;;; Commentary: 23 | 24 | 25 | 26 | ;;; Code: 27 | 28 | (defsystem :net.didierverna.declt.setup 29 | :long-name 30 | "Documentation Extractor from Common Lisp to Texinfo, setup library" 31 | :description "Declt's preload setup" 32 | :long-description "\ 33 | The Declt setup library provides support for various preload configuration 34 | parameters and meta-utilities. For a more complete description of Declt, 35 | see the `net.didierverna.declt' system." 36 | :author "Didier Verna" 37 | :mailto "didier@didierverna.net" 38 | :homepage 39 | "http://www.lrde.epita.fr/~didier/software/lisp/typesetting.php#declt" 40 | :source-control "https://github.com/didierverna/declt" 41 | :license "BSD" 42 | :version (:read-file-line #p"../make/version.make" 43 | :at (1 (lambda (str) (subseq str 19)))) 44 | :depends-on (:named-readtables) 45 | :serial t 46 | :components ((:file "package") 47 | (:module "src" 48 | :components ((:file "configuration") 49 | (:file "readtable" :depends-on ("configuration")) 50 | (:file "version" :depends-on ("readtable")) 51 | (:file "util" :depends-on ("readtable")))))) 52 | 53 | ;;; net.didierverna.declt.setup.asd ends here 54 | -------------------------------------------------------------------------------- /net.didierverna.declt.asd: -------------------------------------------------------------------------------- 1 | ;;; net.didierverna.declt.asd --- Declt ASDF system definition 2 | 3 | ;; Copyright (C) 2010-2013, 2015, 2022 Didier Verna 4 | 5 | ;; Author: Didier Verna 6 | 7 | ;; This file is part of Declt. 8 | 9 | ;; Permission to use, copy, modify, and distribute this software for any 10 | ;; purpose with or without fee is hereby granted, provided that the above 11 | ;; copyright notice and this permission notice appear in all copies. 12 | 13 | ;; THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 14 | ;; WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 15 | ;; MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 16 | ;; ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 17 | ;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 18 | ;; ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 19 | ;; OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 20 | 21 | 22 | ;;; Commentary: 23 | 24 | ;; Contents management by FCM version 0.1. 25 | 26 | 27 | ;;; Code: 28 | 29 | (asdf:load-system :net.didierverna.declt.setup) 30 | 31 | ;; #### PORTME. 32 | (asdf:defsystem :net.didierverna.declt 33 | :long-name "Documentation Extractor from Common Lisp to Texinfo" 34 | :description "A reference manual generator for Common Lisp libraries" 35 | :long-description "\ 36 | Declt (pronounce dec'let) is a reference manual generator for Common Lisp. 37 | It extracts and formats documentation from ASDF systems, including the system 38 | itself, its local dependencies (subsystems), components, packages and an 39 | extensive list of definitions (variables, functions etc.). The formatted 40 | documentation comes with full indexing and cross-references. 41 | 42 | Reference manuals are generated in Texinfo format which can subsequently be 43 | converted into info, HTML, DVI, PostScript or PDF." 44 | :author "Didier Verna" 45 | :mailto "didier@didierverna.net" 46 | :homepage 47 | "http://www.lrde.epita.fr/~didier/software/lisp/typesetting.php#declt" 48 | :source-control "https://github.com/didierverna/declt" 49 | :license "BSD" 50 | :version #.(net.didierverna.declt.setup:version :short) 51 | :if-feature :sbcl 52 | :depends-on (:net.didierverna.declt.setup :net.didierverna.declt.core)) 53 | 54 | ;;; net.didierverna.declt.asd ends here 55 | -------------------------------------------------------------------------------- /setup/src/readtable.lisp: -------------------------------------------------------------------------------- 1 | ;;; readtable.lisp --- Declt readtable management 2 | 3 | ;; Copyright (C) 2015, 2017, 2019, 2021 Didier Verna 4 | 5 | ;; Author: Didier Verna 6 | 7 | ;; This file is part of Declt. 8 | 9 | ;; Permission to use, copy, modify, and distribute this software for any 10 | ;; purpose with or without fee is hereby granted, provided that the above 11 | ;; copyright notice and this permission notice appear in all copies. 12 | 13 | ;; THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 14 | ;; WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 15 | ;; MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 16 | ;; ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 17 | ;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 18 | ;; ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 19 | ;; OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 20 | 21 | 22 | ;;; Commentary: 23 | 24 | 25 | 26 | ;;; Code: 27 | 28 | (in-package :net.didierverna.declt.setup) 29 | 30 | 31 | (defun clindent (symbol indent) 32 | "Send SYMBOL's INDENTation information to Emacs. 33 | Emacs will set the 'common-lisp-indent-function property. 34 | If INDENT is a symbol, use its indentation definition. Otherwise, INDENT is 35 | considered as an indentation definition." 36 | (when (and (member :swank *features*) (configuration :swank-eval-in-emacs)) 37 | ;; #### NOTE: case portability 38 | (funcall (intern (string :eval-in-emacs) :swank) 39 | `(put ',symbol 'common-lisp-indent-function 40 | ,(if (symbolp indent) 41 | `(get ',indent 'common-lisp-indent-function) 42 | `',indent)) 43 | t))) 44 | 45 | (defmacro defindent (symbol indent) 46 | "Wrapper around `clindent' to avoid quoting SYMBOL and INDENT." 47 | `(eval-when (:compile-toplevel :execute :load-toplevel) 48 | (clindent ',symbol ',indent))) 49 | 50 | (defun i-reader (stream subchar arg) 51 | "Construct a call to `defindent' by reading an argument list from STREAM. 52 | This dispatch macro character function is installed on #i in the 53 | NET.DIDIERVERNA.DECLT named readtable." 54 | (declare (ignore subchar arg)) 55 | (cons 'defindent (read stream))) 56 | 57 | (defreadtable :net.didierverna.declt 58 | (:merge :current) 59 | (:dispatch-macro-char #\# #\i #'i-reader)) 60 | 61 | ;;; readtable.lisp ends here 62 | -------------------------------------------------------------------------------- /core/net.didierverna.declt.core.asd: -------------------------------------------------------------------------------- 1 | ;;; net.didierverna.declt.core.asd --- Declt core ASDF system definition 2 | 3 | ;; Copyright (C) 2015, 2021, 2022 Didier Verna 4 | 5 | ;; Author: Didier Verna 6 | 7 | ;; This file is part of Declt. 8 | 9 | ;; Permission to use, copy, modify, and distribute this software for any 10 | ;; purpose with or without fee is hereby granted, provided that the above 11 | ;; copyright notice and this permission notice appear in all copies. 12 | 13 | ;; THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 14 | ;; WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 15 | ;; MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 16 | ;; ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 17 | ;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 18 | ;; ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 19 | ;; OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 20 | 21 | 22 | ;;; Commentary: 23 | 24 | 25 | 26 | ;;; Code: 27 | 28 | ;; #### PORTME. 29 | (defsystem :net.didierverna.declt.core 30 | :long-name 31 | "Documentation Extractor from Common Lisp to Texinfo, core library" 32 | :description "Declt's core functionality" 33 | :long-description "\ 34 | The Declt core library provides the main functionality of Declt. For a more 35 | complete description of Declt, see the `net.didierverna.declt' system." 36 | :author "Didier Verna" 37 | :mailto "didier@didierverna.net" 38 | :homepage 39 | "http://www.lrde.epita.fr/~didier/software/lisp/typesetting.php#declt" 40 | :source-control "https://github.com/didierverna/declt" 41 | :license "BSD" 42 | :version (:read-file-line #p"../make/version.make" 43 | :at (1 (lambda (str) (subseq str 19)))) 44 | :if-feature :sbcl 45 | :depends-on ((:feature :sbcl (:require :sb-introspect)) 46 | :net.didierverna.declt.setup :net.didierverna.declt.assess) 47 | :serial t 48 | :components ((:file "package") 49 | (:module "src" 50 | :serial t 51 | :components ((:module "util" 52 | :serial t 53 | :components ((:file "misc"))) 54 | (:module "doc" 55 | :serial t 56 | :components ((:file "texi") 57 | (:file "doc") 58 | (:file "symbol") 59 | (:file "package") 60 | (:file "asdf"))) 61 | (:file "declt"))))) 62 | 63 | ;;; net.didierverna.declt.core.asd ends here 64 | -------------------------------------------------------------------------------- /assess/net.didierverna.declt.assess.asd: -------------------------------------------------------------------------------- 1 | ;;; net.didierverna.declt.assess.asd --- Declt assessment ASDF system definition 2 | 3 | ;; Copyright (C) 2021, 2022 Didier Verna 4 | 5 | ;; Author: Didier Verna 6 | 7 | ;; This file is part of Declt. 8 | 9 | ;; Permission to use, copy, modify, and distribute this software for any 10 | ;; purpose with or without fee is hereby granted, provided that the above 11 | ;; copyright notice and this permission notice appear in all copies. 12 | 13 | ;; THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 14 | ;; WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 15 | ;; MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 16 | ;; ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 17 | ;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 18 | ;; ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 19 | ;; OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 20 | 21 | 22 | ;;; Commentary: 23 | 24 | 25 | 26 | ;;; Code: 27 | 28 | ;; #### PORTME. 29 | (defsystem :net.didierverna.declt.assess 30 | :long-name 31 | "Documentation Extractor from Common Lisp to Texinfo, assessment library" 32 | :description "Declt's information gathering pipeline stage" 33 | :long-description 34 | "The Declt assessment library collects information from ASDF systems by 35 | introspection, and produces an abstract representation, independent from both 36 | the final manual's organization and the output format. For a more complete 37 | description of Declt, see the `net.didierverna.declt' system." 38 | :author "Didier Verna" 39 | :mailto "didier@didierverna.net" 40 | :homepage 41 | "http://www.lrde.epita.fr/~didier/software/lisp/typesetting.php#declt" 42 | :source-control "https://github.com/didierverna/declt" 43 | :license "BSD" 44 | :version (:read-file-line #p"../make/version.make" 45 | :at (1 (lambda (str) (subseq str 19)))) 46 | :if-feature :sbcl 47 | :depends-on ((:feature :sbcl (:require :sb-introspect)) 48 | :net.didierverna.declt.setup) 49 | :serial t 50 | :components ((:file "package") 51 | (:module "src" 52 | :serial t ;; not really, but who cares 53 | :components ((:file "util") 54 | (:file "definition") 55 | (:file "license") 56 | (:file "symbol") 57 | (:file "package") 58 | (:file "asdf") 59 | (:file "finalize") 60 | (:file "assess"))))) 61 | 62 | ;;; net.didierverna.declt.assess.asd ends here 63 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Declt 2 | ![Declt Logo](doc/logo.png "Generating Common Lisp documentation since 2010") 3 | Declt (pronounce "dec' let") is a reference manual generator for Common Lisp 4 | libraries. A Declt manual documents one specified ASDF system (considered as 5 | the "main" system), and all its local dependencies (subsystems found in the 6 | same distribution). This is what is collectively referred to as the *library*. 7 | 8 | Declt doesn't perform any kind of static code analysis, but instead loads the 9 | library, and then introspects the Lisp environment to discover what "belongs" 10 | to it. The generated documentation includes the description of both 11 | programmatic and ASDF components. Every such component description is called a 12 | *definition*. 13 | 14 | Declt manuals provide a detailed description of the library's infrastructure 15 | by including definitions for every relevant ASDF component (systems, modules, 16 | and files), and Lisp package. 17 | 18 | Exported programmatic definitions are split from the internal ones, which 19 | allows to separately browse either the library's public interface or its 20 | implementation. Both sections of the manual include definitions for constants, 21 | special variables, symbol macros, macros, setf expanders, compiler macros, 22 | regular functions (including setf ones), generic functions and methods 23 | (including setf ones), method combinations, conditions, structures, classes, 24 | and types. 25 | 26 | Programmatic definitions are as complete and exhaustive as introspection can 27 | make them. Declt collects documentation strings, lambda lists (including 28 | qualifiers and specializers where appropriate), slot definitions (including 29 | type information, allocation type, initialization arguments, *etc.*), 30 | definition sources, *etc.* 31 | 32 | Every definition includes a full set of cross-references to related ones: ASDF 33 | component dependencies, parents, and children, classes direct methods, super- 34 | and sub-classes, slot readers and writers, setf expanders access and update 35 | functions, *etc.* 36 | 37 | Finally, Declt produces exhaustive and multiple-entry indexes to all 38 | documented aspects of the library. 39 | 40 | Declt manuals are generated in Texinfo format. From there it is possible to 41 | produce readable / printable output in Info, HTML, PDF, PostScript, *etc.* 42 | 43 | The primary example of documentation generated by Declt is the Declt 44 | [Reference Manual](https://www.lrde.epita.fr/~didier/software/lisp/declt/reference/). 45 | 46 | ## Quick Start 47 | In your favorite Lisp REPL, type this: 48 | ``` 49 | (asdf:load-system :net.didierverna.declt) 50 | (net.didierverna.declt:nickname-package) 51 | (declt:declt :my.asdf.system) 52 | ``` 53 | You will end up with a file named `my.asdf.system.texi` in the current 54 | directory. This is a Texinfo file that can further be compiled into various 55 | formats, such as Info, HTML, or PDF. For example, in order to get a PDF, type 56 | this in the same directory: 57 | ``` 58 | makeinfo --pdf my.asdf.system.texi 59 | ``` 60 | And enjoy reading the resulting `my.asdf.system.pdf`... 61 | 62 | ## More information 63 | Please see the projet's 64 | [homepage](https://www.lrde.epita.fr/~didier/software/lisp/misc.php#declt), 65 | and notably the Declt 66 | [User Manual](https://www.lrde.epita.fr/~didier/software/lisp/declt/user/) 67 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | ### Makefile --- Toplevel directory 2 | 3 | ## Copyright (C) 2010-2013, 2015, 2021 Didier Verna 4 | 5 | ## Author: Didier Verna 6 | 7 | ## This file is part of Declt. 8 | 9 | ## Permission to use, copy, modify, and distribute this software for any 10 | ## purpose with or without fee is hereby granted, provided that the above 11 | ## copyright notice and this permission notice appear in all copies. 12 | 13 | ## THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 14 | ## WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 15 | ## MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 16 | ## ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 17 | ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 18 | ## ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 19 | ## OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 20 | 21 | 22 | ### Commentary: 23 | 24 | ## Please use GNU Make with this makefile. 25 | 26 | 27 | ### Code: 28 | 29 | TOP_DIR := . 30 | 31 | include make/config.make 32 | include make/version.make 33 | include make/prologue.make 34 | 35 | SUBDIRS := doc 36 | DIST_NAME := $(PROJECT)-$(SHORT_VERSION) 37 | TARBALL := $(DIST_NAME).tar.gz 38 | SIGNATURE := $(TARBALL).asc 39 | 40 | 41 | all: 42 | $(MAKE) gen TARGET=all 43 | $(MAKE) INSTALL 44 | 45 | all-formats info pdf html dvi ps localref generate: 46 | cd doc && $(MAKE) $@ 47 | 48 | # Needed because we have an INSTALL file which fucks up the gen mechanism 49 | # on case-insensitive OSX platforms. 50 | install: 51 | $(MAKE) gen TARGET=install 52 | 53 | uninstall: 54 | $(MAKE) gen TARGET=uninstall 55 | 56 | clean: 57 | -rm *~ 58 | $(MAKE) gen TARGET=clean 59 | 60 | distclean: clean 61 | $(MAKE) gen TARGET=distclean 62 | -rm *.tar.gz *.tar.gz.asc 63 | -rm -fr $($(LISP)_BINLOC)-* 64 | -rm -fr "${HOME}"/.cache/common-lisp/$($(LISP)_CACHE)-*"`pwd`" 65 | 66 | tag: 67 | git tag -a -m 'Version $(LONG_VERSION)' 'version-$(SHORT_VERSION)' 68 | 69 | tar: $(TARBALL) 70 | gpg: $(SIGNATURE) 71 | dist: tar gpg 72 | 73 | install-www: dist 74 | $(MAKE) gen TARGET=install-www 75 | -install -m 644 $(TARBALL) "$(W3DIR)/attic/" 76 | -install -m 644 $(SIGNATURE) "$(W3DIR)/attic/" 77 | echo "\ 78 | \ 80 | | \ 81 | " \ 83 | > "$(W3DIR)/latest.txt" 84 | chmod 644 "$(W3DIR)/latest.txt" 85 | cd "$(W3DIR)" \ 86 | && ln -fs attic/$(TARBALL) latest.tar.gz \ 87 | && ln -fs attic/$(SIGNATURE) latest.tar.gz.asc 88 | 89 | gen: 90 | @for i in $(SUBDIRS) ; do \ 91 | echo "making $(TARGET) in $${i} ..." ; \ 92 | ( cd $${i} && $(MAKE) $(TARGET) ) ; \ 93 | done 94 | 95 | INSTALL: doc/$(PROJECT)-user.info 96 | info --file=./doc/$(PROJECT)-user.info \ 97 | -n Installation \ 98 | -n Configuration \ 99 | -n 'Supported Platforms' \ 100 | --output=$@ 101 | perl -pi -e 's/^File:.*\n//g' $@ 102 | 103 | doc/$(PROJECT)-user.info: 104 | cd doc && $(MAKE) $(PROJECT)-user.info 105 | 106 | $(TARBALL): 107 | git archive --format=tar --prefix=$(DIST_NAME)/ \ 108 | --worktree-attributes HEAD \ 109 | | gzip -c > $@ 110 | 111 | $(SIGNATURE): $(TARBALL) 112 | gpg -b -a $< 113 | 114 | include make/epilogue.make 115 | 116 | .DEFAULT: 117 | $(MAKE) gen TARGET=$@ 118 | 119 | .PHONY: all \ 120 | install uninstall \ 121 | clean distclean \ 122 | tag tar gpg dist install-www \ 123 | gen 124 | 125 | ### Makefile ends here 126 | -------------------------------------------------------------------------------- /doc/texinfo-klare.css: -------------------------------------------------------------------------------- 1 | /* 2 | Custom CSS for HTML documents generated with Texinfo's makeinfo. 3 | Public domain 2016 sirgazil. All rights waived. 4 | */ 5 | 6 | 7 | 8 | /* NATIVE ELEMENTS */ 9 | a:link, 10 | a:visited { 11 | color: #245C8A; 12 | text-decoration: none; 13 | } 14 | 15 | a:active, 16 | a:focus, 17 | a:hover { 18 | text-decoration: underline; 19 | } 20 | 21 | abbr, 22 | acronym { 23 | cursor: help; 24 | } 25 | 26 | blockquote { 27 | color: #555753; 28 | font-style: oblique; 29 | margin: 30px 0px; 30 | padding-left: 3em; 31 | } 32 | 33 | body { 34 | background-color: white; 35 | box-shadow: 0 0 2px gray; 36 | box-sizing: border-box; 37 | color: #333; 38 | font-family: sans-serif; 39 | font-size: 16px; 40 | margin: 50px auto; 41 | max-width: 960px; 42 | padding: 50px; 43 | } 44 | 45 | code, 46 | samp, 47 | tt, 48 | var { 49 | color: purple; 50 | font-size: 0.8em; 51 | } 52 | 53 | div.example, 54 | div.lisp { 55 | margin: 0px; 56 | } 57 | 58 | dl { 59 | margin: 3em 0em; 60 | } 61 | 62 | dl dl { 63 | margin: 0em; 64 | } 65 | 66 | dt { 67 | background-color: #F5F5F5; 68 | padding: 0.5em; 69 | } 70 | 71 | h1, 72 | h2, 73 | h2.contents-heading, 74 | h3, 75 | h4 { 76 | padding: 20px 0px 0px 0px; 77 | font-weight: normal; 78 | } 79 | 80 | h1 { 81 | font-size: 2.4em; 82 | } 83 | 84 | h2 { 85 | font-size: 2.2em; 86 | font-weight: bold; 87 | } 88 | 89 | h3 { 90 | font-size: 1.8em; 91 | } 92 | 93 | h4 { 94 | font-size: 1.4em; 95 | } 96 | 97 | hr { 98 | background-color: silver; 99 | border-style: none; 100 | height: 1px; 101 | margin: 0px; 102 | } 103 | 104 | html { 105 | background-color: #F5F5F5; 106 | } 107 | 108 | img { 109 | max-width: 100%; 110 | } 111 | 112 | li { 113 | padding: 5px; 114 | } 115 | 116 | pre.display, 117 | pre.example, 118 | pre.format, 119 | pre.lisp, 120 | pre.verbatim{ 121 | overflow: auto; 122 | } 123 | 124 | pre.example, 125 | pre.lisp, 126 | pre.verbatim { 127 | background-color: #2D3743; 128 | border-color: #000; 129 | border-style: solid; 130 | border-width: thin; 131 | color: #E1E1E1; 132 | font-size: smaller; 133 | padding: 1em; 134 | } 135 | 136 | pre.menu-comment { 137 | border-color: #E4E4E4; 138 | border-bottom-style: solid; 139 | border-width: thin; 140 | font-family: sans; 141 | } 142 | 143 | table { 144 | border-collapse: collapse; 145 | margin: 40px 0px; 146 | } 147 | 148 | table.index-cp *, 149 | table.index-fn *, 150 | table.index-ky *, 151 | table.index-pg *, 152 | table.index-tp *, 153 | table.index-vr * { 154 | background-color: inherit; 155 | border-style: none; 156 | } 157 | 158 | td, 159 | th { 160 | border-color: silver; 161 | border-style: solid; 162 | border-width: thin; 163 | padding: 10px; 164 | } 165 | 166 | th { 167 | background-color: #F5F5F5; 168 | } 169 | /* END NATIVE ELEMENTS */ 170 | 171 | 172 | 173 | /* CLASSES */ 174 | .contents { 175 | margin-bottom: 4em; 176 | } 177 | 178 | .float { 179 | margin: 3em 0em; 180 | } 181 | 182 | .float-caption { 183 | font-size: smaller; 184 | text-align: center; 185 | } 186 | 187 | .float > img { 188 | display: block; 189 | margin: auto; 190 | } 191 | 192 | .footnote { 193 | font-size: smaller; 194 | margin: 5em 0em; 195 | } 196 | 197 | .footnote h3 { 198 | display: inline; 199 | font-size: small; 200 | } 201 | 202 | .header { 203 | background-color: #F2F2F2; 204 | font-size: small; 205 | padding: 0.2em 1em; 206 | } 207 | 208 | .key { 209 | color: purple; 210 | font-size: 0.8em; 211 | } 212 | 213 | .menu * { 214 | border-style: none; 215 | } 216 | 217 | .menu td { 218 | padding: 0.5em 0em; 219 | } 220 | 221 | .menu td:last-child { 222 | width: 60%; 223 | } 224 | 225 | .menu th { 226 | background-color: inherit; 227 | } 228 | /* END CLASSES */ 229 | -------------------------------------------------------------------------------- /setup/src/version.lisp: -------------------------------------------------------------------------------- 1 | ;;; version.lisp --- Declt version management 2 | 3 | ;; Copyright (C) 2015, 2017, 2019, 2021, 2022, 2024 Didier Verna 4 | 5 | ;; Author: Didier Verna 6 | 7 | ;; This file is part of Declt. 8 | 9 | ;; Permission to use, copy, modify, and distribute this software for any 10 | ;; purpose with or without fee is hereby granted, provided that the above 11 | ;; copyright notice and this permission notice appear in all copies. 12 | 13 | ;; THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 14 | ;; WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 15 | ;; MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 16 | ;; ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 17 | ;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 18 | ;; ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 19 | ;; OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 20 | 21 | 22 | ;;; Commentary: 23 | 24 | 25 | 26 | ;;; Code: 27 | 28 | (in-package :net.didierverna.declt.setup) 29 | (in-readtable :net.didierverna.declt) 30 | 31 | 32 | 33 | ;; Copyright years 34 | (defvar *copyright-years* "2010-2013, 2015-2022, 2024, 2025" 35 | "A string denoting the copyright years for the whole project.") 36 | 37 | 38 | 39 | ;; Version specifiers 40 | 41 | (defparameter *release-major-level* 4 42 | "The major level of this release.") 43 | 44 | (defparameter *release-minor-level* 0 45 | "The minor level of this release.") 46 | 47 | (defparameter *release-status* :beta 48 | "The status of this release.") 49 | 50 | (defparameter *release-status-level* 3 51 | "The status level of this release.") 52 | 53 | (defparameter *release-name* "William Riker" 54 | "The name of this release. 55 | The general naming theme for Declt is \"Star Trek characters\".") 56 | 57 | 58 | 59 | ;; Internal utilities 60 | 61 | (defun release-status-number (release-status) 62 | (ecase release-status 63 | (:alpha 0) 64 | (:beta 1) 65 | (:rc 2) 66 | (:patchlevel 3))) 67 | 68 | ;; #### TODO: I'm sure the format strings can be improved 69 | (defun %version (type major minor status level name) 70 | (ecase type 71 | (:number 72 | (apply #'+ 73 | (* major 10000) 74 | (* minor 100) 75 | (when (eq status :patchlevel) 76 | (list level)))) 77 | (:short 78 | (format nil "~S.~S~ 79 | ~[~ 80 | a~*~S~;~ 81 | b~*~S~;~ 82 | rc~*~S~;~ 83 | ~:[.~S~;~*~]~ 84 | ~]" 85 | major 86 | minor 87 | (release-status-number status) 88 | (zerop level) 89 | level)) 90 | (:long 91 | (format nil "~S.~S ~ 92 | ~[~ 93 | alpha ~*~S ~;~ 94 | beta ~*~S ~;~ 95 | release candidate ~*~S ~;~ 96 | ~:[patchlevel ~S ~;~*~]~ 97 | ~]~ 98 | ~S" 99 | major 100 | minor 101 | (release-status-number status) 102 | (zerop level) 103 | level 104 | name)))) 105 | 106 | 107 | 108 | ;; Entry point 109 | 110 | (defun version (&optional (type :number)) 111 | "Return the current version of Declt. 112 | TYPE can be one of :number, :short or :long. 113 | 114 | A version number is computed as major*10000 + minor*100 + patchlevel, leaving 115 | two digits for each level. Alpha, beta and rc status are ignored in version 116 | numbers. 117 | 118 | A short version is something like 1.3{a,b,rc}4, or 1.3.4 for patchlevel. 119 | Alpha, beta or rc levels start at 1. Patchlevels start at 0 but are ignored 120 | in the output, so that 1.3.0 appears as just 1.3. 121 | 122 | A long version is something like 123 | 1.3 {alpha,beta,release candidate,patchlevel} 4 \"James T. Kirk\". As for 124 | the short version, a patchlevel of 0 is ignored in the output." 125 | (%version type *release-major-level* *release-minor-level* 126 | *release-status* *release-status-level* 127 | *release-name*)) 128 | 129 | ;;; version.lisp ends here 130 | -------------------------------------------------------------------------------- /TODO: -------------------------------------------------------------------------------- 1 | -*- outline -*- 2 | 3 | * Copyright (C) 2010-2013, 2015-2017, 2022 Didier Verna 4 | 5 | This file is part of Declt. 6 | 7 | Copying and distribution of this file, with or without modification, 8 | are permitted in any medium without royalty provided the copyright 9 | notice and this notice are preserved. 10 | 11 | ** Merging 12 | See about standalone methods merging. 13 | 14 | ** Packages and symbols 15 | - See what to do about shadowings, imports etc. 16 | 17 | ** Docstrings 18 | In theory, it is possible for a symbol/doc-type and a corresponding object to 19 | have different docstrings attached (one would be manually overridden after the 20 | original assignment). We could check that and advertise both. 21 | 22 | ** String downcasing 23 | Abstract it so that we may provide an option for case behavior. 24 | 25 | ** Lisp objects formatting 26 | There are many places where we'd prefer ~S (e.g. to preserve colons in front 27 | of keywords), but that would break on unreadable objects. A solution would be 28 | to "ignore-errors" on ~S, and fall back to ~A instead. Make this work along 29 | with format-tables. 30 | 31 | ** modify macros 32 | Is there anything specific to do? 33 | 34 | ** Backend 35 | Clean up the code so that Texinfo becomes a backend with a clean 36 | interface. This way, we could envision adding other backends. 37 | 38 | There are several obstacles to this: 39 | 1. currently, the constructed node structure contains a mix of things to be 40 | rendered (such as the nodes titles and sections) and this already rendered as 41 | strings (definitions in :before-menu-contents). We would need to completely 42 | separate the structure from its rendering so that the structure itself can be 43 | passed along to various backends. That shouldn't be too hard tho. THe node 44 | structure can be augmented by additional slots for, e.g., a list of 45 | definitions to render. 46 | 47 | 2. Part of the cleanup would also be to decide on a good coding style for 48 | fresh lines (FRESH-LINE, TERPRI, ~& and ~%). 49 | 50 | 3. Another problem that will happen is that the introduction and conclusion 51 | material are currently allowed to contain Texinfo directives (contrary to all 52 | other user-provided contents). This will be difficult to abstract if we 53 | generalize the backend notion. 54 | 55 | ** Strings formatting 56 | Provide markup support through backends (Cf. MarCL). We could already have at 57 | least the current DWIM one, plus a raw/verbatim one. 58 | 59 | ** Pathnames 60 | If the system definition pathname or definition sources contain funky stuff 61 | like ./, ../ or even are symlinks, the cross-references will most probably 62 | break. We need to work on canonical pathnames. 63 | 64 | ** Foreign definitions 65 | Even with the latest improvements in foreign definitions handling, there are 66 | still some cases that could escape us. For example, a short form foreign setf 67 | expander for which the update-fn is ours. The only general solution for that 68 | kind of problem is for the finalization phase to scan /all/ symbols in the 69 | Lisp image again, instead of only traversing definitions. That would be 70 | introspection-level #3 (performance cost very high for probably very little 71 | gain). 72 | 73 | ** Anchors 74 | This is a note to myself rather than a TODO entry. 75 | With the simplification of anchor names in v4 (namely, going numerical instead 76 | of human-readable), it will become more complicated to cross-reference 77 | different manual entries, if we ever go down that road. 78 | 79 | ** Call graphs 80 | Cf. 81 | sb-introspect:who-calls 82 | sb-introspect:find-function-callees 83 | 84 | ** Source files 85 | Currently, we can link to source files on the local machine, which is not 86 | advisable for web installation of the reference manuals. However, if the 87 | library provides a source control address, we could link to files in a public 88 | repo ! 89 | 90 | ** Profiling 91 | It may be nice to do it at some point. For example, I wonder if the abundance 92 | of STRING-CAPITALIZE on category names is costly, in which case we could 93 | change the protocol to provide both versions as premade compile-time strings. 94 | -------------------------------------------------------------------------------- /INSTALL: -------------------------------------------------------------------------------- 1 | 2 | 2 Installation 3 | ************** 4 | 5 | First of all, see Declt's homepage 6 | (http://www.lrde.epita.fr/~didier/software/lisp/typesetting.php#declt) 7 | for tarballs, Git repository and online documentation. Declt is an ASDF 8 | 3 library, and currently works with SBCL only. If you download a Declt 9 | tarball, or clone the repository, you need to unpack somewhere in the 10 | ASDF source registry. Otherwise, Declt is also available via Quicklisp. 11 | *Note Supported Platforms::, for more information on portability and 12 | dependencies. 13 | 14 | In addition to the bare Lisp library, the Declt distribution offers 15 | documentation in the form of 2 different manuals: the User Manual (you 16 | are reading it) and the Declt *note Reference Manual: 17 | (declt-reference)Top. The latter is generated by Declt itself. If you 18 | want to compile the manuals by yourself, please follow the instructions 19 | below. 20 | 1. Edit ‘make/config.make’ to your specific needs. In particular, you 21 | will see a number of external programs that are required in order 22 | to compile the manuals in there (*note Supported Platforms::). 23 | 2. Type ‘make’. By default, the documentation is built in Info, PDF, 24 | and HTML formats. If you want other formats (DVI and Postscript 25 | are available), type ‘make all-formats’. You can also type 26 | individually ‘make dvi’ and/or ‘make ps’ in order to get the 27 | corresponding format. 28 | 3. Type ‘make install’ to install the documentation. If you have 29 | compiled the documentation in DVI and Postscript format, those will 30 | be installed as well. 31 | 32 | The reference manual's Texinfo source is included in the distribution 33 | (and in the repository), although, as mentioned before, it is generated 34 | by Declt itself. Before compiling, it is possible to regenerate a local 35 | version of it with hyperlinks to your installation by typing ‘make 36 | localref’. If you ever need to regenerate the regular version, you can 37 | also type ‘make generate’. 38 | 39 | Type ‘make uninstall’ to uninstall the library. 40 | 41 | 42 | 7.1 Configuration 43 | ================= 44 | 45 | Some aspects of Declt's behavior can be configured _before_ the library 46 | system is actually loaded. Declt stores its user-level configuration 47 | (along with some other setup parameters) in another ASDF system called 48 | ‘net.didierverna.declt.setup’ (and the eponym package). In order to 49 | configure the library (I repeat, prior to loading it), you will 50 | typically do something like this: 51 | (require "asdf") 52 | (asdf:load-system :net.didierverna.declt.setup) 53 | (net.didierverna.declt.setup:configure