diff options
Diffstat (limited to 'elpa/auctex-13.1.3/style/l3doc.el')
-rw-r--r-- | elpa/auctex-13.1.3/style/l3doc.el | 270 |
1 files changed, 270 insertions, 0 deletions
diff --git a/elpa/auctex-13.1.3/style/l3doc.el b/elpa/auctex-13.1.3/style/l3doc.el new file mode 100644 index 0000000..e51e83a --- /dev/null +++ b/elpa/auctex-13.1.3/style/l3doc.el @@ -0,0 +1,270 @@ +;;; l3doc.el --- AUCTeX style for `l3doc.cls' -*- lexical-binding: t; -*- + +;; Copyright (C) 2022 Free Software Foundation, Inc. + +;; Author: Arash Esbati <arash@gnu.org> +;; Maintainer: auctex-devel@gnu.org +;; Created: 2022-03-05 +;; Keywords: tex + +;; This file is part of AUCTeX. + +;; AUCTeX is free software; you can redistribute it and/or modify it +;; under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 3, or (at your option) +;; any later version. + +;; AUCTeX is distributed in the hope that it will be useful, but +;; WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;; General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with AUCTeX; see the file COPYING. If not, write to the Free +;; Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +;; 02110-1301, USA. + +;;; Commentary: + +;; This file adds support for `l3doc.cls' dated 2022/02/24. + +;;; Code: + +(require 'tex) +(require 'latex) + +;; Silence the compiler: +(declare-function font-latex-add-keywords + "font-latex" + (keywords class)) +(defvar LaTeX-article-class-options) + +(defvar LaTeX-l3doc-cmd-key-val-options + '(("index") + ("noindex") + ("module" ("TeX")) + ("replace" ("true" "false"))) + "Key=value options for l3doc macros.") + +(defun LaTeX-env-l3doc-function (environment) + "Insert the ENVIRONMENT provided by l3doc.cls. +This function should be used for the environments 'function' and +'variable' provided by the l3doc class. Also ask the user if a +'syntax' environment should be added as well." + (let* ((time (format-time-string "%Y-%m-%d" (current-time))) + (exp-flag (TeX-read-key-val t `(("added" (,time)) + ("updated" (,time)) + ("deprecated") + ("tested") + ("EXP") + ("rEXP") + ("TF") + ("pTF") + ("noTF") + ("label") + ("verb")) + "Flags (k=v)")) + (mac (TeX-read-string + (TeX-argument-prompt nil nil "Macro(s)") + TeX-esc)) + (active-mark (and (TeX-active-mark) + (not (eq (mark) (point))))) + (elt-count 0) + (count 1) + (comment-func (lambda () + (if (TeX-in-line-comment) + (indent-according-to-mode) + (delete-horizontal-space) + (beginning-of-line) + (insert "%") + (indent-according-to-mode)))) + p) + (LaTeX-insert-environment environment + (concat + (unless (zerop (length exp-flag)) + (format "[%s]" exp-flag)) + TeX-grop mac TeX-grcl)) + ;; Remember where we start: + (setq p (point-marker)) + ;; Now make sure we have '%' everywhere, start at the beginning: + (search-backward (concat TeX-esc "begin" TeX-grop environment TeX-grcl) + (if active-mark nil (line-beginning-position 0)) + t) + (funcall comment-func) + ;; Now at the end: + (goto-char p) + (search-forward (concat TeX-esc "end" TeX-grop environment TeX-grcl) + (if active-mark nil (line-end-position 2)) + t) + (goto-char (match-beginning 0)) + (funcall comment-func) + ;; Finally for where we started and clean up only when region was + ;; not active: + (goto-char p) + (unless active-mark (funcall comment-func)) + (set-marker p nil) + ;; Ask if we should insert a 'syntax' environment: + (when (and (not active-mark) + (y-or-n-p "Insert syntax environment? ")) + (LaTeX-environment-menu "syntax") + (funcall comment-func) + ;; Try to be smart: insert \cs{mac} into buffer. First, delete + ;; any whitespaces after the ',' if inserted: + (setq mac (split-string + (replace-regexp-in-string "[[:blank:]]" + "" + mac) + "," t)) + ;; Count the number of elements for the number of linebreaks: + (setq elt-count (length mac)) + ;; Now insert the functions wrapped in \cs: + (save-excursion + (dolist (elt mac) + (insert TeX-esc "cs" TeX-grop (substring elt 1) TeX-grcl) + (when (< count elt-count) + (LaTeX-newline) + (setq count (1+ count))))) + ;; Now move to end of the first line: + (end-of-line) + (just-one-space)))) + +(defun LaTeX-item-l3doc-syntax () + "Insert line break macro on the last line. +For syntax environment from l3doc class." + (save-excursion + (end-of-line 0) + (just-one-space) + (TeX-insert-macro "\\"))) + +(TeX-add-style-hook + "l3doc" + (lambda () + + ;; l3doc.cls loads shortvrb.sty and sets '|' and '"' as shorthands. + ;; We append them to a local version of `LaTeX-shortvrb-chars' + ;; before running the style hook for 'shortvrb' which is done + ;; inside 'doc.el': + (make-local-variable 'LaTeX-shortvrb-chars) + (dolist (elt '(?| ?\")) + (add-to-list 'LaTeX-shortvrb-chars elt t)) + + (TeX-run-style-hooks "expl3" "doc" "ltx-base" + "article" "array" "amsmath" "booktabs" + "color" "colortbl" "hologo" "enumitem" + "textcomp" "csquotes" "fancyvrb" "verbatim" + "underscore") + + (TeX-add-symbols + ;; 4.2 Partitioning documentation and implementation + '("EnableDocumentation" 0) + '("EnableImplementation" 0) + '("DisableDocumentation" 0) + '("DisableImplementation" 0) + '("DocInputAgain" 0) + + ;; 4.3 General text markup + '("cmd" + [TeX-arg-key-val LaTeX-l3doc-cmd-key-val-options] + TeX-arg-macro) + '("cs" + [TeX-arg-key-val LaTeX-l3doc-cmd-key-val-options] + (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Macro") + (TeX-symbol-list))) + '("tn" + [TeX-arg-key-val LaTeX-l3doc-key-val-options] + (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Macro") + (TeX-symbol-list))) + + ;; "meta" is provided by doc.el, so don't add here again + '("Arg" "Argument") + '("marg" "Mandatory argument") + '("oarg" "Optional argument") + '("parg" "Picture mode argument") + + '("file" "File name") + '("env" LaTeX-env-args + (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Environment") + (LaTeX-environment-list))) + '("pkg" "Package name") + '("cls" "Class name") + + '("NB" "Tag" t) + + '("DocInput" + (TeX-arg-eval + (lambda () + (let ((file (TeX-read-string + (format "File(s) to include (default %s): " (current-buffer)) + nil nil (current-buffer)))) + (format "%s" file))))) + + ;; 4.5 Describing functions in the implementation + '("TestFiles" "File(s)") + '("UnitTested" 0) + '("TestMissing" t)) + + (LaTeX-add-environments + '("documentation") + '("implementation") + '("NOTE" "Tag") + '("function" LaTeX-env-l3doc-function) + '("variable" LaTeX-env-l3doc-function) + ;; Feature in 'syntax' environment: Hit 'M-RET' to insert '\\': + '("syntax") + '("texnote") + '("arguments" LaTeX-env-item)) + + ;; Do not indent the content of the 'documentation' and + ;; 'implementation' environments; it is odd when major parts of the + ;; document are indented. Append them to a local version of + ;; `LaTeX-document-regexp': + (unless (string-match-p "\\<implementation\\>" LaTeX-document-regexp) + (set (make-local-variable 'LaTeX-document-regexp) + (concat LaTeX-document-regexp + "\\|documentation\\|implementation"))) + + ;; Append syntax to `LaTeX-item-list' with `LaTeX-item-l3doc-syntax' + (add-to-list 'LaTeX-item-list '("syntax" . LaTeX-item-l3doc-syntax) t) + + ;; Fontification + (when (and (featurep 'font-latex) + (eq TeX-install-font-lock 'font-latex-setup)) + (font-latex-add-keywords '(("cmd" "[{") + ("cs" "[{") + ("Arg" "{") + ("marg" "{") + ("oarg" "{") + ("parg" "{") + ("file" "{") + ("env" "{") + ("pkg" "{") + ("cls" "{") + ("NB" "{{")) + 'textual) + (font-latex-add-keywords '(("EnableDocumentation" "") + ("EnableImplementation" "") + ("DisableDocumentation" "") + ("DisableImplementation" "") + ("DocInputAgain" "") + ("TestFiles" "{") + ("UnitTested" "") + ("TestMissing" "{")) + 'function) + (font-latex-add-keywords '("DocInput" "{") + 'reference))) + TeX-dialect) + +(defvar LaTeX-l3doc-class-options + (progn + (TeX-load-style "article") + (append (remove "a5paper" LaTeX-article-class-options) + '("full" "onlydoc" "check" "nocheck" "checktest" + "nochecktest" "kernel" "stdmodule" "cm-default" + "lm-default" "cs-break-off" "cs-break-nohyphen" + "show-notes" "hide-notes"))) + "Class options for the l3doc class.") + +;;; l3doc.el ends here |