branch: master
commit ee1303444115d4f8fa23ab2de5a219bc6aa97340
Author: Arash Esbati <[email protected]>
Commit: Arash Esbati <[email protected]>
Add new style/contract.el
* Makefile.in (STYLESRC): Add new style.
* style/contract.el: New file.
---
Makefile.in | 2 +-
style/contract.el | 159 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 160 insertions(+), 1 deletion(-)
diff --git a/Makefile.in b/Makefile.in
index c4143fcb..d0066af8 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -199,7 +199,7 @@ STYLESRC = style/prosper.el \
style/physics.el style/soul.el style/algpseudocodex.el \
style/wasysym.el style/refcount.el style/simpleicons.el \
style/changebar.el style/amsrefs.el style/standalone.el \
- style/diagbox.el
+ style/diagbox.el style/contract.el
STYLEELC = $(STYLESRC:.el=.elc)
diff --git a/style/contract.el b/style/contract.el
new file mode 100644
index 00000000..898dd746
--- /dev/null
+++ b/style/contract.el
@@ -0,0 +1,159 @@
+;;; contract.el --- AUCTeX style for `contract.sty' (v0.91) -*-
lexical-binding: t; -*-
+
+;; Copyright (C) 2024 Free Software Foundation, Inc.
+
+;; Author: Arash Esbati <[email protected]>
+;; Maintainer: [email protected]
+;; Created: 2024-06-11
+;; 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 the contract package.
+
+;;; Code:
+
+(require 'tex)
+(require 'latex)
+
+;; Silence the compiler:
+(declare-function font-latex-add-keywords
+ "font-latex"
+ (keywords class))
+
+(defconst LaTeX-contract-clause-key-val
+ '(("dummy")
+ ("head")
+ ("nohead")
+ ("notocentry")
+ ("number")
+ ("preskip")
+ ("postskip")
+ ("title")
+ ("tocentry"))
+ "Key=val options for the \\Clause macro.")
+
+(defvar LaTeX-contract-DeclareNewJuraEnvironment-regexp
+ '("\\\\DeclareNewJuraEnvironment{\\([^}]+\\)}"
+ 1 LaTeX-auto-environment)
+ "Regexp for matching argument of \\DeclareNewJuraEnvironment.")
+
+(add-hook 'TeX-update-style-hook #'TeX-auto-parse t)
+
+(TeX-add-style-hook
+ "contract"
+ (lambda ()
+
+ ;; Add the macro to the parser:
+ (TeX-auto-add-regexp LaTeX-contract-DeclareNewJuraEnvironment-regexp)
+
+ ;; 4 Environment for Contracts
+ (LaTeX-add-environments '("contract"))
+
+ ;; 4.1 Clauses
+ (TeX-add-symbols
+ '("contractSetup"
+ (TeX-arg-key-val (LaTeX-contract-package-options-list)))
+ '("Clause"
+ [TeX-arg-key-val LaTeX-contract-clause-key-val
+ nil nil ?\s])
+ '("SubClause"
+ [TeX-arg-key-val LaTeX-contract-clause-key-val
+ nil nil ?\s])
+ "Clauseformat"
+
+ ;; 4.2 Paragraphs
+ "thepar" "parformat" "parformatseparation" "withoutparnumber"
+ '("ellipsispar" ["Number of paragraphs to omit"])
+ "parellipsis"
+
+ ;; 4.3 Sentences
+ "thesentence" "sentencenumberformat" "Sentence"
+
+ ;; 6 Additional Contract Environments
+ '("DeclareNewJuraEnvironment"
+ TeX-arg-define-environment
+ [TeX-arg-key-val (("Clause")
+ ("ClauseFont")
+ ("SubClause")
+ ("Sentence")
+ ("ClauseNumberFormat"))])
+
+ ;; 7 Support for Different Languages
+ "parname"
+ "partshortname"
+ "sentencename"
+ "sentenceshortname")
+
+ ;; 5 Cross References
+ (let ((macs '("refL" "refS" "refN" "refClause" "refClauseN"
+ "refPar" "refParL" "refParS" "refParN"
+ "refSentence" "refSentenceL"" refSentenceS" "refSentenceN")))
+ (dolist (mac macs)
+ (TeX-add-symbols `(,mac TeX-arg-ref)))
+ (when (and (featurep 'font-latex)
+ (eq TeX-install-font-lock 'font-latex-setup))
+ (font-latex-add-keywords (mapcar (lambda (x) (list x "{")) macs)
+ 'reference)))
+
+ (LaTeX-paragraph-commands-add-locally '("Clause" "SubClause"))
+
+ (LaTeX-add-counters "par" "sentence")
+
+ ;; Fontification
+ (when (and (featurep 'font-latex)
+ (eq TeX-install-font-lock 'font-latex-setup))
+ (font-latex-add-keywords '(("contractSetup" "{")
+ ("ellipsispar" "["))
+ 'function)
+ (font-latex-add-keywords '(("Clause" "["))
+ 'sectioning-2)
+ (font-latex-add-keywords '(("SubClause" "["))
+ 'sectioning-3)))
+ TeX-dialect)
+
+(defun LaTeX-contract-package-options-list ()
+ "Return an alist of package options for changes package."
+ (let ((len (mapcar (lambda (x) (concat TeX-esc (car x)))
+ (LaTeX-length-list))))
+ `(("juratotoc" ("true" "false" "number"))
+ ("juratocindent" ,len)
+ ("juratocnumberwidth" ,len)
+ ("contract")
+ ("juratitlepagebreak" ("true" "false"))
+ ("clausemark" ("both" "false" "forceboth" "forceright" "right"))
+ ("parnumber" ("true" "false" "auto" "manual"))
+ ("ref" ("long" "numeric"
+ "clauseonly" "onlyclause" "ClauseOnly" "OnlyClause"
+ "parlong" "longpar" "ParL"
+ "parnumeric" "numericpar" "ParN"
+ "paroff" "nopar"
+ "parshort" "shortpar" "ParS" "sentencelong" "longsentence"
+ "SentenceL"
+ "sentencenumeric" "numericsentence" "SentenceN"
+ "sentenceoff" "nosentence" "sentenceshort" "shortsentence"
+ "SentenceS"
+ "short")))))
+
+(defun LaTeX-contract-package-options ()
+ "Read the contract package options from the user."
+ (TeX-read-key-val t (LaTeX-contract-package-options-list)))
+
+;;; contract.el ends here