Filtering...

top

books/xdoc/top
other
(in-package "XDOC")
other
(include-book "base")
other
(include-book "book-thms")
other
(include-book "full-escape-symbol")
bootstrap-revappend-chars-auxfunction
(defun bootstrap-revappend-chars-aux
  (x n xl y)
  (declare (xargs :mode :program)
    (type string x)
    (type (integer 0 *) n xl))
  (if (eql n xl)
    y
    (bootstrap-revappend-chars-aux x
      (the (integer 0 *) (+ 1 (the (integer 0 *) n)))
      xl
      (cons (char x n) y))))
bootstrap-revappend-charsfunction
(defun bootstrap-revappend-chars
  (x acc)
  (declare (xargs :mode :program)
    (type string x))
  (bootstrap-revappend-chars-aux x
    0
    (length x)
    acc))
revappend-bar-escape-stringfunction
(defun revappend-bar-escape-string
  (x n xl acc)
  (declare (xargs :mode :program)
    (type string x)
    (type unsigned-byte n xl))
  (if (eql n xl)
    acc
    (let* ((char (char x n)) (acc (if (or (eql char #\|) (eql char #\\))
            (cons #\\ acc)
            acc)))
      (revappend-bar-escape-string x
        (+ n 1)
        xl
        (cons char acc)))))
revappend-full-escape-symbolfunction
(defun revappend-full-escape-symbol
  (x acc)
  (declare (xargs :mode :program))
  (let* ((pkg (symbol-package-name x)) (name (symbol-name x))
      (acc (cons #\| acc))
      (acc (revappend-bar-escape-string pkg
          0
          (length pkg)
          acc))
      (acc (list* #\| #\: #\: #\| acc))
      (acc (revappend-bar-escape-string name
          0
          (length name)
          acc))
      (acc (cons #\| acc)))
    acc))
colon-xdoc-initializedfunction
(defun colon-xdoc-initialized
  (state)
  (declare (xargs :stobjs state :mode :program))
  (cdr (assoc 'colon-xdoc-support-loaded
      (table-alist 'xdoc (w state)))))
colon-xdoc-initmacro
(defmacro colon-xdoc-init
  nil
  '(with-output :off (summary event
      observation
      prove
      proof-tree)
    (make-event (if (colon-xdoc-initialized state)
        '(value-triple :invisible)
        `(progn (include-book "xdoc/defxdoc-raw" :dir :system :ttags :all)
          (include-book "xdoc/topics" :dir :system)
          (include-book "system/doc/acl2-doc-wrap" :dir :system)
          (include-book "xdoc/display" :dir :system :ttags :all)
          (encapsulate nil
            (local (xdoc-quiet))
            (local (set-inhibit-warnings "Documentation")))
          (table xdoc 'colon-xdoc-support-loaded t))))))
xdocmacro
(defmacro xdoc
  (name)
  (declare (xargs :guard (or (symbolp name)
        (and (quotep name)
          (symbolp (unquote name))))))
  (let ((name (if (symbolp name)
         name
         (unquote name))))
    `(with-output :off (summary event)
      (progn (colon-xdoc-init)
        (make-event (b* (((mv & all-xdoc-topics state) (with-guard-checking-error-triple t
                 (all-xdoc-topics state))) ((mv & & state) (colon-xdoc-fn ',XDOC::NAME
                  all-xdoc-topics
                  state)))
            (value '(value-triple :invisible))))))))
other
(add-ld-keyword-alias! :doc '(1 xdoc))
remove1-namefunction
(defun remove1-name
  (name l)
  (declare (xargs :mode :program))
  (cond ((endp l) nil)
    ((equal (cdr (assoc-eq :name (car l)))
       name) (cdr l))
    (t (cons (car l)
        (remove1-name name (cdr l))))))
xdoc-extend-fnfunction
(defun xdoc-extend-fn
  (name long world)
  (declare (xargs :mode :program))
  (let* ((all-topics (get-xdoc-table world)) (old-topic (find-topic name all-topics))
      (long (cond ((not long) "")
          ((stringp long) long)
          (t (er hard?
              'xdoc-extend
              "Can't extend ~x0 with non-string ~x1."
              name
              long)))))
    (cond ((not old-topic) (prog2$ (er hard?
            'xdoc-extend
            "Topic ~x0 wasn't found."
            name)
          all-topics))
      (t (let* ((other-topics (remove1-name name all-topics)) (old-long (or (cdr (assoc :long old-topic)) ""))
            (new-long (concatenate 'string old-long long))
            (new-topic (acons :long new-long
                (remove1-assoc :long old-topic))))
          (cons new-topic other-topics))))))
xdoc-extendmacro
(defmacro xdoc-extend
  (name long)
  `(table xdoc
    'doc
    (xdoc-extend-fn ',XDOC::NAME ,XDOC::LONG world)))
xdoc-prepend-fnfunction
(defun xdoc-prepend-fn
  (name long world)
  (declare (xargs :mode :program))
  (let* ((all-topics (get-xdoc-table world)) (old-topic (find-topic name all-topics))
      (long (cond ((not long) "")
          ((stringp long) long)
          (t (er hard?
              'xdoc-extend
              "Can't prepend ~x0 with non-string ~x1."
              name
              long)))))
    (cond ((not old-topic) (er hard?
          'xdoc-prepend
          "Topic ~x0 wasn't found."
          name))
      (t (let* ((other-topics (remove1-name name all-topics)) (old-long (or (cdr (assoc :long old-topic)) ""))
            (new-long (concatenate 'string long old-long))
            (new-topic (acons :long new-long
                (remove1-assoc :long old-topic))))
          (cons new-topic other-topics))))))
xdoc-prependmacro
(defmacro xdoc-prepend
  (name long)
  `(table xdoc
    'doc
    (xdoc-prepend-fn ',XDOC::NAME ,XDOC::LONG world)))
order-subtopics-fnfunction
(defun order-subtopics-fn
  (name order flg world)
  (declare (xargs :mode :program))
  (let* ((all-topics (get-xdoc-table world)) (old-topic (find-topic name all-topics))
      (ctx 'order-subtopics))
    (cond ((not old-topic) (er hard?
          ctx
          "Topic ~x0 wasn't found."
          name))
      ((not (symbol-listp (fix-true-list order))) (er hard?
          ctx
          "Subtopics list contains a non-symbol: ~x0"
          order))
      ((not (booleanp flg)) (er hard?
          ctx
          "Optional argument is not Boolean: ~x0"
          flg))
      (t (let* ((other-topics (remove1-name name all-topics)) (new-topic (acons :suborder (if flg
                  (append order flg)
                  order)
                (remove1-assoc :suborder old-topic))))
          (cons new-topic other-topics))))))
order-subtopicsmacro
(defmacro order-subtopics
  (name order &optional flg)
  `(table xdoc
    'doc
    (order-subtopics-fn ',XDOC::NAME
      ',XDOC::ORDER
      ',XDOC::FLG
      world)))
other
(defund extract-keyword-from-args
  (kwd args)
  (declare (xargs :guard (keywordp kwd)))
  (cond ((atom args) nil)
    ((eq (car args) kwd) (if (consp (cdr args))
        (cons (car args) (cadr args))
        (er hard?
          'extract-keyword-from-args
          "Expected something to follow ~s0."
          kwd)))
    (t (extract-keyword-from-args kwd (cdr args)))))
other
(defund throw-away-keyword-parts
  (args)
  (declare (xargs :guard t))
  (cond ((atom args) nil)
    ((keywordp (car args)) (throw-away-keyword-parts (if (consp (cdr args))
          (cddr args)
          (er hard?
            'throw-away-keyword-parts
            "Expected something to follow ~s0."
            (car args)))))
    (t (cons (car args)
        (throw-away-keyword-parts (cdr args))))))
formula-info-to-defs1function
(defun formula-info-to-defs1
  (entries acc)
  (declare (xargs :mode :program))
  (cond ((atom entries) acc)
    ((and (consp (car entries))
       (symbolp (caar entries))) (let* ((acc (list* #\  #\? #\f #\e #\d #\( #\@ acc)) (acc (revappend-full-escape-symbol (caar entries)
              acc))
          (acc (list* #\
 #\) acc)))
        (formula-info-to-defs1 (cdr entries) acc)))
    ((stringp (car entries)) (let* ((acc (bootstrap-revappend-chars (car entries)
             acc)))
        (formula-info-to-defs1 (cdr entries) acc)))
    (t (formula-info-to-defs1 (cdr entries) acc))))
formula-info-to-defsfunction
(defun formula-info-to-defs
  (headerp entries acc)
  (declare (xargs :mode :program))
  (let* ((original acc) (acc (if headerp
          (bootstrap-revappend-chars "<h3>Definitions and Theorems</h3>"
            acc)
          acc))
      (before-entries acc)
      (acc (formula-info-to-defs1 entries acc)))
    (if (equal acc before-entries)
      original
      acc)))
defsection-autodoc-fnfunction
(defun defsection-autodoc-fn
  (name parents
    short
    long
    pkg
    extension
    marker
    state)
  (declare (xargs :mode :program :stobjs state))
  (let ((err (check-defxdoc-args name
         parents
         short
         long
         pkg)))
    (if err
      (er hard?
        'defsection
        "In section ~x0: Bad defsection arguments: ~s1~%"
        name
        err)
      (let* ((wrld (w state)) (trips (reversed-world-since-event wrld marker nil))
          (info (reverse (new-formula-info trips wrld nil)))
          (acc nil)
          (acc (if long
              (bootstrap-revappend-chars long acc)
              acc))
          (acc (list* #\
 #\
 acc))
          (acc (formula-info-to-defs (not extension)
              info
              acc))
          (long (reverse (the string (coerce acc 'string)))))
        (if extension
          `(xdoc-extend ,XDOC::EXTENSION ,XDOC::LONG)
          `(defxdoc ,XDOC::NAME
            :parents ,XDOC::PARENTS
            :short ,XDOC::SHORT
            :long ,XDOC::LONG
            :pkg ,XDOC::PKG))))))
make-xdoc-fragmentsfunction
(defun make-xdoc-fragments
  (args)
  (cond ((atom args) nil)
    ((stringp (car args)) (cons `(acl2-xdoc-fragment ,(CAR XDOC::ARGS))
        (make-xdoc-fragments (cdr args))))
    (t (cons (car args)
        (make-xdoc-fragments (cdr args))))))
defsection-fnfunction
(defun defsection-fn
  (wrapper name args)
  (declare (xargs :mode :program))
  (let* ((parents (cdr (extract-keyword-from-args :parents args))) (short (cdr (extract-keyword-from-args :short args)))
      (long (cdr (extract-keyword-from-args :long args)))
      (extension (cdr (extract-keyword-from-args :extension args)))
      (pkg (cdr (extract-keyword-from-args :pkg args)))
      (no-xdoc-override (cdr (extract-keyword-from-args :no-xdoc-override args)))
      (set-as-default-parent (cdr (extract-keyword-from-args :set-as-default-parent args)))
      (extension (cond ((symbolp extension) extension)
          ((and (consp extension)
             (atom (cdr extension))
             (symbolp (car extension))) (car extension))
          (t (er hard?
              'defsection
              "In section ~x0, invalid :extension: ~x1."
              name
              extension))))
      (defxdoc-p (and (not extension)
          (or parents short long)))
      (autodoc-arg (extract-keyword-from-args :autodoc args))
      (autodoc-p (and (or defxdoc-p extension)
          (or (not autodoc-arg) (cdr autodoc-arg))))
      (new-args (make-xdoc-fragments (throw-away-keyword-parts args)))
      (stack-pop-if-nonempty (if new-args
          '(:stack :pop)
          nil))
      (new-args (if set-as-default-parent
          (progn$ (and (not (equal (car wrapper) 'encapsulate))
              (er hard?
                'defsection
                "In section  ~x0, set-as-default-parent ~
                     cannot be  set to  t when the  wrapper is  not encapsulate."
                name))
            (cons `(local (set-default-parents ,XDOC::NAME))
              new-args))
          new-args))
      (wrapper (if new-args
          wrapper
          '(progn))))
    (cond ((or (not name) (not (symbolp name))) (er hard?
          'defsection
          "Section name must be a non-nil symbol; found ~
                                  ~x0."
          name))
      ((and extension (or parents short)) (er hard?
          'defsection
          "In section ~x0, you are using :extension, ~
                                  so :parents and :short are not allowed."
          name))
      ((and extension (not autodoc-p)) (er hard?
          'defsection
          "In section ~x0, you are using :extension, ~
                                  so :autodoc nil is not allowed."
          name))
      ((not autodoc-p) `(with-output :stack :push :off :all (progn ,@(AND XDOC::DEFXDOC-P
       `((XDOC::DEFXDOC ,XDOC::NAME :PARENTS ,XDOC::PARENTS :SHORT ,XDOC::SHORT
          :LONG ,XDOC::LONG :NO-OVERRIDE ,XDOC::NO-XDOC-OVERRIDE)))
            (with-output ,@XDOC::STACK-POP-IF-NONEMPTY
              (,@XDOC::WRAPPER . ,XDOC::NEW-ARGS))
            ,@(AND XDOC::EXTENSION `(XDOC::XDOC-EXTEND ,XDOC::EXTENSION ,XDOC::LONG)))))
      (t (let ((marker `(table intro-table :mark ',XDOC::NAME)))
          `(with-output :stack :push :off (:other-than error)
            (progn (table intro-table :mark nil)
              ,XDOC::MARKER
              (with-output ,@XDOC::STACK-POP-IF-NONEMPTY
                (,@XDOC::WRAPPER . ,XDOC::NEW-ARGS))
              (make-event (defsection-autodoc-fn ',XDOC::NAME
                  ',XDOC::PARENTS
                  ,XDOC::SHORT
                  ,XDOC::LONG
                  ,XDOC::PKG
                  ',XDOC::EXTENSION
                  ',XDOC::MARKER
                  state))
              (value-triple ',XDOC::NAME))))))))
defsectionmacro
(defmacro defsection
  (name &rest args)
  (defsection-fn '(encapsulate nil)
    name
    args))
defsection-prognmacro
(defmacro defsection-progn
  (name &rest args)
  (defsection-fn '(progn) name args))
other
(table ppr-special-syms 'defsection 1)
other
(table ppr-special-syms 'defsection-progn 1)
other
(defsection mksym
  (defun concatenate-symbol-names
    (x)
    (declare (xargs :guard (symbol-listp x)))
    (if (consp x)
      (concatenate 'string
        (symbol-name (car x))
        (concatenate-symbol-names (cdr x)))
      ""))
  (defmacro mksym
    (&rest args)
    `(intern-in-package-of-symbol (concatenate-symbol-names (list ,@XDOC::ARGS))
      mksym-package-symbol)))
defpointermacro
(defmacro defpointer
  (from to &optional keyword-p)
  (declare (xargs :guard (and (symbolp from) (symbolp to))))
  (let ((from-name (string-downcase (symbol-name from))))
    `(defxdoc ,XDOC::FROM
      :parents (pointers)
      :short ,(CONCATENATE 'STRING "See @(see " (XDOC::FULL-ESCAPE-SYMBOL XDOC::TO) ")"
              (IF XDOC::KEYWORD-P
                  (CONCATENATE 'STRING
                               " for information about the keyword @(':"
                               XDOC::FROM-NAME "').")
                  ".")))))
add-resource-directory-fnfunction
(defun add-resource-directory-fn
  (dirname fullpath world)
  (declare (xargs :guard (and (stringp dirname) (stringp fullpath))
      :mode :program))
  (let* ((resource-dirs (cdr (assoc-eq 'resource-dirs
           (table-alist 'xdoc world)))) (look (cdr (assoc-equal dirname resource-dirs))))
    (if look
      (if (equal look fullpath)
        resource-dirs
        (er hard?
          'add-resource-directory
          "Conflicting paths for resource directory ~x0.~%  ~
                 - Previous path: ~x1.~%  ~
                 - New path: ~x2."
          dirname
          look
          fullpath))
      (cons (cons dirname fullpath)
        resource-dirs))))
add-resource-directorymacro
(defmacro add-resource-directory
  (dirname path)
  `(make-event (let ((dirname ,XDOC::DIRNAME) (fullpath (extend-pathname (cbd) ,XDOC::PATH state)))
      (value `(table xdoc
          'resource-dirs
          (add-resource-directory-fn ,XDOC::DIRNAME
            ,XDOC::FULLPATH
            world))))))