emacs/code/elpa/auctex-13.2.1/style/soul.el

170 lines
6.0 KiB
EmacsLisp

;;; soul.el --- AUCTeX style for `soul.sty' (v3.0) -*- lexical-binding: t; -*-
;; Copyright (C) 2023 Free Software Foundation, Inc.
;; Author: Arash Esbati <arash@gnu.org>
;; Maintainer: auctex-devel@gnu.org
;; Created: 2023-04-21
;; 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 `soul.sty' (v3.0) from 2023-18-02.
;; `soul.sty' is part of TeXLive.
;;; Code:
(require 'tex)
(require 'latex)
;; Silence the compiler:
(declare-function font-latex-add-keywords
"font-latex"
(keywords class))
(declare-function LaTeX-color-definecolor-list "color.el" ())
(declare-function LaTeX-xcolor-definecolor-list "xcolor.el" ())
;; Setup for \sodef:
(TeX-auto-add-type "soul-sodef" "LaTeX")
(defvar LaTeX-soul-sodef-regexp
`(,(concat "\\\\sodef{?\\\\\\(" TeX-token-char "+\\)")
1 LaTeX-auto-soul-sodef))
(defun LaTeX-soul-auto-prepare ()
"Reset `LaTeX-auto-soul-sodef' before parsing."
(setq LaTeX-auto-soul-sodef nil))
(defun LaTeX-soul-auto-cleanup ()
"Process new macros defined with \\sodef."
(dolist (elt (LaTeX-soul-sodef-list))
(let ((mac (car elt)))
(TeX-add-symbols `(,mac "Text"))
(when (and (featurep 'font-latex)
(eq TeX-install-font-lock 'font-latex-setup))
(font-latex-add-keywords `((,mac "{")) 'bold-command)))))
(add-hook 'TeX-auto-prepare-hook #'LaTeX-soul-auto-prepare t)
(add-hook 'TeX-auto-cleanup-hook #'LaTeX-soul-auto-cleanup t)
(add-hook 'TeX-update-style-hook #'TeX-auto-parse t)
(TeX-add-style-hook
"soul"
(lambda ()
(TeX-auto-add-regexp LaTeX-soul-sodef-regexp)
;; New symbols
(TeX-add-symbols
'("so" "Text")
'("caps" "Text")
'("ul" "Text")
'("st" "Text")
'("hl" "Text")
'("sloppyword" "Text")
`("sodef"
,(lambda (optional)
(let ((mac (TeX-read-string
(TeX-argument-prompt optional nil "Macro: \\" t)))
(TeX-arg-opening-brace "")
(TeX-arg-closing-brace ""))
(LaTeX-add-soul-sodefs mac)
(LaTeX-soul-auto-cleanup)
(TeX-argument-insert mac optional TeX-esc)))
(TeX-arg-completing-read LaTeX-font-shape "Font: \\" t ,TeX-esc)
"Inner-letter space" "Inner space" "Outer space"
(lambda (_optional)
(set-marker TeX-exit-mark (point))))
"resetso"
`("capsdef"
(TeX-arg-string "Font" "////")
(TeX-arg-completing-read LaTeX-font-shape "Font: \\" t ,TeX-esc)
"Inner-letter space" "Inner space" "Outer space")
"capsreset"
'("capssave" "Name")
'("capsselect" "Name")
'("setul" "Underline depth" "Underline thickness")
"resetul"
'("setuldepth" "Underline depth")
'("setuloverlap" "Overlap")
'("soulaccent" (TeX-arg-string "Accent command" "\\"))
'("soulregister" TeX-arg-macro "Number of arguments"))
;; The next macros are only added if a color package is loaded:
(when (TeX-member "\\`x?color\\'" (TeX-style-list) #'string-match)
(TeX-add-symbols
`("setulcolor" (TeX-arg-completing-read
,(lambda ()
(if (member "xcolor" (TeX-style-list))
(LaTeX-xcolor-definecolor-list)
(LaTeX-color-definecolor-list)))
"Color"))
`("setstcolor" (TeX-arg-completing-read
,(lambda ()
(if (member "xcolor" (TeX-style-list))
(LaTeX-xcolor-definecolor-list)
(LaTeX-color-definecolor-list)))
"Color"))
`("sethlcolor" (TeX-arg-completing-read
,(lambda ()
(if (member "xcolor" (TeX-style-list))
(LaTeX-xcolor-definecolor-list)
(LaTeX-color-definecolor-list)))
"Color"))))
;; Fontification
(when (and (featurep 'font-latex)
(eq TeX-install-font-lock 'font-latex-setup))
(font-latex-add-keywords '(("so" "|{\\")
("caps" "|{\\")
("st" "|{\\")
("hl" "|{\\")
("sloppyword" "|{\\"))
'bold-command)
(font-latex-add-keywords '(("ul" "|{\\"))
'underline-command)
(font-latex-add-keywords '(("setulcolor" "{")
("setstcolor" "{")
("sethlcolor" "{")
("sodef" "|{\\{{{{")
("resetso" "")
("capsdef" "|{\\{{{{")
("capsreset" "")
("capssave" "{")
("capsselect" "{")
("setul" "{{")
("resetul" "")
("setuldepth" "{")
("setuloverlap" "{")
("soulaccent" "{")
("soulregister" "{{"))
'function)))
TeX-dialect)
(defvar LaTeX-soul-package-options '("capsdefault")
"Package options for the soul package.")
;;; soul.el ends here