>From 2ee2e7b04ff647d39e5d05d75928da71e19867fa Mon Sep 17 00:00:00 2001
From: Arash Esbati
Date: Sat, 7 Feb 2015 19:03:13 +0100
Subject: [PATCH] Add new style color.el
* Makefile.in (STYLESRC): Add new style.
* style/color.el: New style.
---
ChangeLog | 6 ++
Makefile.in | 2 +-
style/color.el | 308 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 315 insertions(+), 1 deletion(-)
create mode 100644 style/color.el
diff --git a/ChangeLog b/ChangeLog
index 0213b41..7222ede 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2015-02-07 Arash Esbati
+
+ * Makefile.in (STYLESRC): Add new style.
+
+ * style/color.el: New style.
+
2015-02-06 Mosè Giordano
* tex.el (TeX-source-correlate-handle-TeX-region): Replace
diff --git a/Makefile.in b/Makefile.in
index ed71dfa..7a0851c 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -144,7 +144,7 @@ STYLESRC = style/prosper.el \
style/fbb.el style/newtxmath.el style/newtxsf.el \
style/newtxtext.el style/newtxttt.el style/minted.el \
style/wrapfig.el style/relsize.el style/currvita.el \
- style/tcolorbox.el
+ style/tcolorbox.el style/color.el
STYLEELC = $(STYLESRC:.el=.elc)
ifeq (@preview_enabled@,yes)
diff --git a/style/color.el b/style/color.el
new file mode 100644
index 0000000..de0f50c
--- /dev/null
+++ b/style/color.el
@@ -0,0 +1,308 @@
+;;; color.el --- AUCTeX style for `color.sty' (v1.1a)
+
+;; Copyright (C) 2015 Free Software Foundation, Inc.
+
+;; Author: Arash Esbati
+;; Maintainer: address@hidden
+;; Created: 2015-01-16
+;; 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 `color.sty' (v1.1a) from 2014/10/28.
+;; `color.sty' is part of TeXLive.
+
+;; Many thanks to Tassilo Horn for his percetive comments on
+;; implementation of this style and testing.
+
+;;; Code:
+
+(defvar LaTeX-color-colour-models
+ '("cmyk" "gray" "named" "rgb")
+ "List of color models provided by `color.sty'.")
+
+(defvar LaTeX-color-dvipsnames-colors
+ '("Apricot" "Aquamarine" "Bittersweet" "Black"
+ "Blue" "BlueGreen" "BlueViolet" "BrickRed"
+ "Brown" "BurntOrange" "CadetBlue" "CarnationPink"
+ "Cerulean" "CornflowerBlue" "Cyan" "Dandelion"
+ "DarkOrchid" "Emerald" "ForestGreen" "Fuchsia"
+ "Goldenrod" "Gray" "Green" "GreenYellow"
+ "JungleGreen" "Lavender" "LimeGreen" "Magenta"
+ "Mahogany" "Maroon" "Melon" "MidnightBlue"
+ "Mulberry" "NavyBlue" "OliveGreen" "Orange"
+ "OrangeRed" "Orchid" "Peach" "Periwinkle"
+ "PineGreen" "Plum" "ProcessBlue" "Purple"
+ "RawSienna" "Red" "RedOrange" "RedViolet"
+ "Rhodamine" "RoyalBlue" "RoyalPurple" "RubineRed"
+ "Salmon" "SeaGreen" "Sepia" "SkyBlue"
+ "SpringGreen" "Tan" "TealBlue" "Thistle"
+ "Turquoise" "Violet" "VioletRed" "White"
+ "WildStrawberry" "Yellow" "YellowGreen" "YellowOrange")
+ "List of colors defined by package option `dvipsnames' from `color.sty'.")
+
+;; Needed for auto-parsing.
+(require 'tex)
+
+;; Plug color into the parser -- after that we have the following:
+;; 1. LaTeX-auto-color-definecolor: Name of temporary variable used
+;; when parsing.
+;; 2. LaTeX-add-color-definecolors: Name of function to add
+;; information to add to #3.
+;; 3. LaTeX-color-definecolor-list: Name of variable holding buffer
+;; local information.
+;; 4. LaTeX-color-definecolors-changed: Name of variable indicating
+;; that #3 has changed.
+(TeX-auto-add-type "color-definecolor" "LaTeX")
+
+(defvar LaTeX-color-definecolor-regexp
+ '("\\\\definecolor{\\([^}]+\\)}{\\([^}]+\\)}{\\([^}]+\\)}"
+ 1 LaTeX-auto-color-definecolor)
+ "Matches the arguments of `\\definecolor' from `color'
+package.")
+
+(defun LaTeX-color-auto-prepare ()
+ "Clear `LaTeX-auto-color-definecolor' before parsing."
+ (setq LaTeX-auto-color-definecolor nil))
+
+(defun LaTeX-color-auto-cleanup ()
+ "Move parsed colors from `LaTeX-auto-color-definecolor' to
+`LaTeX-color-definecolor-list'."
+ ;; \definecolor{}{}{}
+ ;; color=, ignored=, ignored=
+ (dolist (color LaTeX-auto-color-definecolor)
+ (add-to-list 'LaTeX-color-definecolor-list (list color))))
+
+(add-hook 'TeX-auto-prepare-hook #'LaTeX-color-auto-prepare t)
+(add-hook 'TeX-auto-cleanup-hook #'LaTeX-color-auto-cleanup t)
+
+(defun TeX-arg-color-definecolor (optional &optional prompt)
+ "Insert arguments of `\\definecolor' from `color.sty'."
+ ;; \definecolor{}{}{}
+ ;; Ask for , add to our list and insert it
+ (let ((colorname (read-string "Color name: ")))
+ (LaTeX-add-color-definecolors colorname)
+ (TeX-argument-insert colorname optional))
+ ;; Ask and insert
+ (let ((model (completing-read
+ (TeX-argument-prompt optional prompt "Color model")
+ (if (not (or (LaTeX-provided-package-options-member "color" "dvips")
+ (LaTeX-provided-package-options-member "color" "dvipsnames")))
+ (remove "named" LaTeX-color-colour-models)
+ LaTeX-color-colour-models))))
+ (TeX-argument-insert model optional)
+ ;; Depending on , ask for and insert it
+ (cond (;; model
+ (string-equal model "cmyk")
+ (let ((cyan (read-string "Value Cyan (between 0,1): "))
+ (magenta (read-string "Value Magenta (between 0,1): "))
+ (yellow (read-string "Value Yellow (between 0,1): "))
+ (black (read-string "Value Black (between 0,1): ")))
+ (TeX-argument-insert
+ (concat cyan "," magenta "," yellow "," black) optional)))
+ ;; model
+ ((string-equal model "rgb")
+ (let ((red (read-string "Value Red (between 0,1): "))
+ (green (read-string "Value Green (between 0,1): "))
+ (blue (read-string "Value Blue (between 0,1): ")))
+ (TeX-argument-insert
+ (concat red "," green "," blue) optional)))
+ ;; model
+ ((string-equal model "gray")
+ (let ((grayness (read-string "Value Gray (between 0,1): ")))
+ (TeX-argument-insert grayness optional)))
+ ;; model takes the dvipsnames
+ ((string-equal model "named")
+ (let ((color (completing-read "Named Color: "
+ LaTeX-color-dvipsnames-colors)))
+ (TeX-argument-insert color optional))))))
+
+(defun TeX-arg-color (optional &optional prompt)
+ "Insert arguments of various color commands from `color.sty'."
+ ;; \color{} or \color[]{}
+ ;; First, ask for . `named' is removed here from completion
+ ;; if package option is not given
+ (let ((model (completing-read
+ (TeX-argument-prompt t prompt "Color model")
+ (if (not (or (LaTeX-provided-package-options-member "color" "dvips")
+ (LaTeX-provided-package-options-member "color" "dvipsnames")))
+ (remove "named" LaTeX-color-colour-models)
+ LaTeX-color-colour-models))))
+ (if (string-equal model "")
+ ;; if empty, ask for with completion
+ (let ((color (completing-read
+ (TeX-argument-prompt optional prompt "Color name")
+ (LaTeX-color-definecolor-list))))
+ (TeX-argument-insert color optional))
+ ;; if not empty, insert [] and proceed
+ (insert (concat LaTeX-optop model LaTeX-optcl))
+ (cond (;; model
+ (string-equal model "cmyk")
+ (let ((cyan (read-string "Value Cyan (between 0,1): "))
+ (magenta (read-string "Value Magenta (between 0,1): "))
+ (yellow (read-string "Value Yellow (between 0,1): "))
+ (black (read-string "Value Black (between 0,1): ")))
+ (TeX-argument-insert
+ (concat cyan "," magenta "," yellow "," black) optional)))
+ ;; model
+ ((string-equal model "rgb")
+ (let ((red (read-string "Value Red (between 0,1): "))
+ (green (read-string "Value Green (between 0,1): "))
+ (blue (read-string "Value Blue (between 0,1): ")))
+ (TeX-argument-insert
+ (concat red "," green "," blue) optional)))
+ ;; model
+ ((string-equal model "gray")
+ (let ((grayness (read-string "Value Gray (between 0,1): ")))
+ (TeX-argument-insert grayness optional)))
+ ;; model; allowed are dvipsnames.
+ ((string-equal model "named")
+ (let ((color (completing-read "Named Color: "
+ LaTeX-color-dvipsnames-colors)))
+ (TeX-argument-insert color optional)))))))
+
+(defun TeX-arg-color-fcolorbox (optional &optional prompt)
+ "Insert arguments of `\\fcolorbox' from `color.sty'. "
+ ;; \fcolorbox{}{}{} or
+ ;; \fcolorbox[]{}{}{}
+ ;; First, ask for ; remove `named' again
+ (let ((model (completing-read
+ (TeX-argument-prompt t prompt "Color model")
+ (if (not (or (LaTeX-provided-package-options-member "color" "dvips")
+ (LaTeX-provided-package-options-member "color" "dvipsnames")))
+ (remove "named" LaTeX-color-colour-models)
+ LaTeX-color-colour-models))))
+ (if (string-equal model "")
+ ;; if empty, ask for with completion
+ (let ((frame-color (completing-read
+ (TeX-argument-prompt optional prompt "Frame color name")
+ (LaTeX-color-definecolor-list)))
+ (box-color (completing-read
+ (TeX-argument-prompt optional prompt "Box color name")
+ (LaTeX-color-definecolor-list))))
+ (TeX-argument-insert frame-color optional)
+ (TeX-argument-insert box-color optional))
+ ;; if not empty, insert [] and cater for 2 mandatory args.
+ (insert (concat LaTeX-optop model LaTeX-optcl))
+ (cond (;; model
+ (string-equal model "cmyk")
+ (let ((cyan (read-string "Frame value Cyan (between 0,1): "))
+ (magenta (read-string "Frame value Magenta (between 0,1): "))
+ (yellow (read-string "Frame value Yellow (between 0,1): "))
+ (black (read-string "Frame value Black (between 0,1): ")))
+ (TeX-argument-insert
+ (concat cyan "," magenta "," yellow "," black) optional))
+ (let ((cyan (read-string "Box value Cyan (between 0,1): "))
+ (magenta (read-string "Box value Magenta (between 0,1): "))
+ (yellow (read-string "Box value Yellow (between 0,1): "))
+ (black (read-string "Box value Black (between 0,1): ")))
+ (TeX-argument-insert
+ (concat cyan "," magenta "," yellow "," black) optional)))
+ ;; model
+ ((string-equal model "rgb")
+ (let ((red (read-string "Frame value Red (between 0,1): "))
+ (green (read-string "Frame value Green (between 0,1): "))
+ (blue (read-string "Frame value Blue (between 0,1): ")))
+ (TeX-argument-insert
+ (concat red "," green "," blue) optional))
+ (let ((red (read-string "Box value Red (between 0,1): "))
+ (green (read-string "Box value Green (between 0,1): "))
+ (blue (read-string "box value Blue (between 0,1): ")))
+ (TeX-argument-insert
+ (concat red "," green "," blue) optional)))
+ ;; model
+ ((string-equal model "gray")
+ (let ((grayness (read-string "Frame value Gray (between 0,1): ")))
+ (TeX-argument-insert grayness optional))
+ (let ((grayness (read-string "Box value Gray (between 0,1): ")))
+ (TeX-argument-insert grayness optional)))
+ ;; model; allowed are dvipsnames.
+ ((string-equal model "named")
+ (let ((color (completing-read "Frame named Color: "
+ LaTeX-color-dvipsnames-colors)))
+ (TeX-argument-insert color optional))
+ (let ((color (completing-read "Box named Color: "
+ LaTeX-color-dvipsnames-colors)))
+ (TeX-argument-insert color optional)))))))
+
+(TeX-add-style-hook
+ "color"
+ (lambda ()
+ ;; Add color to the parser.
+ (TeX-auto-add-regexp LaTeX-color-definecolor-regexp)
+
+ ;; Add list of colors which are always available.
+ (LaTeX-add-color-definecolors
+ "black" "blue" "cyan" "green" "magenta" "red" "white" "yellow")
+
+ ;; Add dvips colors in conjunction with `usenames'.
+ (when (and (LaTeX-provided-package-options-member "color" "usenames")
+ (or (LaTeX-provided-package-options-member "color" "dvips")
+ (LaTeX-provided-package-options-member "color" "dvipsnames")))
+ (apply #'LaTeX-add-color-definecolors LaTeX-color-dvipsnames-colors))
+
+ (TeX-add-symbols
+ ;; \definecolor{}{}{}
+ '("definecolor" TeX-arg-color-definecolor)
+
+ ;; \color{} or \color[]{}
+ '("color" TeX-arg-color)
+
+ ;; \textcolor{}{} or
+ ;; \textcolor[]{}{}
+ '("textcolor" TeX-arg-color "Text")
+
+ ;; \pagecolor{} or
+ ;; \pagecolor[]{}
+ '("pagecolor" TeX-arg-color)
+
+ ;; \nopagecolor
+ '("nopagecolor" 0)
+
+ ;; \colorbox{}{} or
+ ;; \colorbox[]{}{}
+ '("colorbox" TeX-arg-color "Text")
+
+ ;; \fcolorbox{}{}{} or
+ ;; \fcolorbox[]{}{}{}
+ '("fcolorbox" TeX-arg-color-fcolorbox "Text"))
+
+ ;; Fontification
+ (when (and (featurep 'font-latex)
+ (eq TeX-install-font-lock 'font-latex-setup))
+ (font-latex-add-keywords '(("color" "[{")
+ ("pagecolor" "[{"))
+ 'type-declaration)
+ (font-latex-add-keywords '(("textcolor" "[{{")
+ ("colorbox" "[{{" )
+ ("fcolorbox" "[{{{"))
+ 'type-command)
+ (font-latex-add-keywords '(("definecolor" "{{{"))
+ 'function)))
+ LaTeX-dialect)
+
+(defvar LaTeX-color-package-options
+ '("debugshow" "dvipdf" "dvipdfm" "dvipdfmx" "dvips" "dvipsnames"
+ "dvipsone" "dviwin" "dviwindo" "emtex" "monochrome" "nodvipsnames"
+ "oztex" "pctex32" "pctexhp" "pctexps" "pctexwin" "pdftex" "tcidvi"
+ "textures" "truetex" "usenames" "vtex" "xdvi" "xetex")
+ "Package options for the color package.")
+
+;;; color.el ends here
--
2.2.2