summaryrefslogtreecommitdiff
path: root/elpa/auctex-13.1.3/style/floatrow.el
diff options
context:
space:
mode:
authormattkae <mattkae@protonmail.com>2022-05-17 07:07:37 -0400
committermattkae <mattkae@protonmail.com>2022-05-17 07:07:37 -0400
commitbecff06c71d277647eda4378203d03ab36e141eb (patch)
treea1f73bba3676f34e0faf76764f5de963321f5576 /elpa/auctex-13.1.3/style/floatrow.el
parent3f4a0d5370ae6c34afe180df96add3b8522f4af1 (diff)
Evil mode and latex support
Diffstat (limited to 'elpa/auctex-13.1.3/style/floatrow.el')
-rw-r--r--elpa/auctex-13.1.3/style/floatrow.el753
1 files changed, 753 insertions, 0 deletions
diff --git a/elpa/auctex-13.1.3/style/floatrow.el b/elpa/auctex-13.1.3/style/floatrow.el
new file mode 100644
index 0000000..be8878f
--- /dev/null
+++ b/elpa/auctex-13.1.3/style/floatrow.el
@@ -0,0 +1,753 @@
+;;; floatrow.el --- AUCTeX style for `floatrow.sty' (v0.3b) -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2017--2021 Free Software Foundation, Inc.
+
+;; Author: Arash Esbati <arash@gnu.org>
+;; Maintainer: auctex-devel@gnu.org
+;; Created: 2016-11-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 `floatrow.sty' (v0.3b) from 2009/08/02.
+;; `floatrow.sty' is part of TeXLive.
+;;
+;; `floatrow.sty' is a powerful package and the documentation long.
+;; It is expected that this style is not feature complete. One
+;; deliberate decision is that this style does not offer any package
+;; options: Please use the command `\floatsetup' to set the options
+;; you want.
+;;
+;; This style also alters the way AUCTeX inserts the environments
+;; "table" and "figure" (cf. function `LaTeX-floatrow-env-init'). If
+;; you want the original behavior, try `C-c C-e rawfigure' or `C-c C-e
+;; rawtable' which include the environments incl. the macro \RawFloats
+;; at the beginning of the environment (cf. function
+;; `LaTeX-floatrow-env-figure-raw').
+;;
+;; Another deliberate decision is the implementation of commands like
+;; `\ffigbox' and `\ttabbox': When invoked with `C-c C-m ffigbox RET',
+;; the final result will look like this with cursor being at *:
+;;
+;; \ffigbox{*}{%
+;; \caption{query for a caption}%
+;; \label{prefix:is-chosen-acc-to-current-environment}%
+;; }
+;;
+;; This gives users the freedom to insert any command where point is.
+;; The mandatory arguments are not part of the fontification as
+;; commands like `\includegraphics' or `tabular' environments have their
+;; own fontification.
+
+;;; Code:
+
+;; Needed for compiling `cl-pushnew':
+(eval-when-compile
+ (require 'cl-lib))
+
+;; Needed for compiling `LaTeX-check-insert-macro-default-style':
+(require 'latex)
+
+;; Needed for auto-parsing:
+(require 'tex)
+
+;; Silence the compiler:
+(declare-function font-latex-add-keywords
+ "font-latex"
+ (keywords class))
+
+(declare-function reftex-compile-variables
+ "reftex"
+ ())
+
+(defvar LaTeX-floatrow-key-val-options
+ '(;; 3.1.1 Float Style
+ ("style" ("plain" "plaintop" "Plaintop"
+ "ruled" "Ruled"
+ "boxed" "Boxed" "BOXED"
+ "shadowbox" "Shadowbox" "SHADOWBOX"
+ "doublebox" "Doublebox" "DOUBLEBOX"
+ "wshadowbox" "Wshadowbox" "WSHADOWBOX"))
+ ;; 3.1.2 Font Settings
+ ("font" ("scriptsize" "footnotesize" "small" "normalsize" "large"
+ "Large" "normalfont" "up" "it" "sl" "sc" "md" "bf"
+ "rm" "sf" "tt"))
+ ("footfont" ("scriptsize" "footnotesize" "small" "normalsize" "large"
+ "Large" "normalfont" "up" "it" "sl" "sc" "md" "bf"
+ "rm" "sf" "tt"))
+ ;; 3.1.3 Position of Caption
+ ("capposition" ("top" "TOP" "bottom" "beside"))
+ ;; 3.1.4 Position of Beside Caption
+ ("capbesideposition" ("left" "right" "inside" "outside"
+ "top" "bottom" "center"))
+ ;; 3.1.5 Defining The Width of Beside Caption
+ ("capbesidewidth" ("none" "sidefil"))
+ ;; 3.1.6 Defining Width of Object
+ ("floatwidth" ("\\hsize" "\\textwidth" "\\columnwidth" "\\linewidth"))
+ ;; 3.1.7 Other Settings for Beside Captions
+ ("capbesideframe" ("yes" "no"))
+ ;; 3.1.8 Defining Float Foot Position (Legends and Footnotes)
+ ("footposition" ("default" "caption" "bottom"))
+ ;; 3.1.9 Vertical Alignment of Float Elements
+ ("heightadjust" ("all" "caption" "object" "none" "nocaption" "noobject"))
+ ("valign" ("t" "c" "b" "s"))
+ ;; 3.1.10 Facing Layout
+ ("facing" ("yes" "no"))
+ ;; 3.1.11 Object Settings
+ ("objectset" ("justified" "centering" "raggedright" "RaggedRight" "raggedleft"))
+ ;; 3.1.12 Defining Float Margins
+ ("margins" ("centering" "raggedright" "raggedleft"
+ "hangright" "hanginside" "hangoutside"))
+ ;; 3.1.13 Defining Float Separators
+ ("floatrowsep" ("columnsep" "quad" "qquad" "hfil" "hfill" "none"))
+ ("capbesidesep" ("columnsep" "quad" "qquad" "hfil" "hfill" "none"))
+ ;; 3.1.14 Defining Float Rules/Skips
+ ("precode" ("none" "thickrule" "rule" "lowrule" "captionskip"))
+ ("rowprecode" ("none" "thickrule" "rule" "lowrule" "captionskip"))
+ ("midcode" ("none" "thickrule" "rule" "lowrule" "captionskip"))
+ ("postcode" ("none" "thickrule" "rule" "lowrule" "captionskip"))
+ ("rowpostcode" ("none" "thickrule" "rule" "lowrule" "captionskip"))
+ ;; 3.1.15 Defining Float Frames
+ ("framestyle" ("fbox" "colorbox" "FRcolorbox" "corners"
+ "doublebox" "shadowbox" "wshadowbox"))
+ ("frameset")
+ ("framearound" ("none" "object" "all" "row" "none"))
+ ("framefit" ("yes" "no"))
+ ("rowfill" ("yes" "no"))
+ ;; 3.1.16 Settings for Colored Frames
+ ("colorframeset")
+ ("colorframecorners")
+ ;; 3.1.17 Defining Float Skips
+ ("captionskip")
+ ("footskip")
+ ;; 3.1.18 Defining Float Footnote Rule's Style
+ ("footnoterule" ("normal" "limited" "fullsize" "none"))
+ ;; 3.1.19 Managing Floats with [H] Placement Option
+ ("doublefloataswide" ("yes" "no"))
+ ("floatHaslist" ("yes" "no"))
+ ;; 7.2.1 Additions in The floatrow Package to longtable package
+ ("LTcapwidth" ("table" "contents")))
+ "Key=value options for floatrow macros and environments.")
+
+(defun LaTeX-floatrow-key-val-options ()
+ "Return an updated list of key=vals from floatrow package."
+ (append
+ (when (LaTeX-floatrow-DeclareNewOption-list)
+ (let ((vcode-keys '("precode" "rowprecode" "midcode" "postcode" "rowpostcode"))
+ (sep-keys '("floatrowsep" "capbesidesep"))
+ result)
+ (dolist (keyvals (LaTeX-floatrow-DeclareNewOption-list) result)
+ (let* ((key (cond ((string= (nth 1 keyvals) "FloatStyle")
+ "style")
+ ((string= (nth 1 keyvals) "FloatFont")
+ "font")
+ ((string= (nth 1 keyvals) "FloatVCode")
+ "precode")
+ ((string= (nth 1 keyvals) "ColorBox")
+ "colorframeset")
+ ((string= (nth 1 keyvals) "CBoxCorners")
+ "colorframecorners")
+ ((string= (nth 1 keyvals) "ObjectSet")
+ "objectset")
+ ((string= (nth 1 keyvals) "MarginSet")
+ "margins")
+ ((string= (nth 1 keyvals) "FloatSeparators")
+ "floatrowsep")
+ ((string= (nth 1 keyvals) "FloatFootnoterule")
+ "footnoterule")
+ (t nil)))
+ (val (nth 2 keyvals))
+ (vals-predefined
+ (cadr (assoc key LaTeX-floatrow-key-val-options)))
+ (vals-parsed (cadr (assoc key result))))
+ ;; Remove entry in `result' if there is one for the `key'.
+ ;; `precode' and `floatrowsep' are special here since they
+ ;; are placeholders for other keys (see above):
+ (cond ((string= key "precode")
+ (dolist (x vcode-keys)
+ (when (assoc x result)
+ (setq result (assq-delete-all (car (assoc x result)) result)))))
+ ((string= key "floatrowsep")
+ (dolist (x sep-keys)
+ (when (assoc x result)
+ (setq result (assq-delete-all (car (assoc x result)) result)))))
+ (t
+ (when (assoc key result)
+ (setq result (assq-delete-all (car (assoc key result)) result)))))
+ ;; Add the entrie to `result'. Again, watch for `precode'
+ ;; and `floatrowsep'. Also delete any dupes:
+ (cond ((string= key "precode")
+ (dolist (x vcode-keys)
+ (cl-pushnew (list x (TeX-delete-duplicate-strings
+ (append vals-parsed
+ vals-predefined
+ (list val))))
+ result :test #'equal)))
+ ((string= key "floatrowsep")
+ (dolist (x sep-keys)
+ (cl-pushnew (list x (TeX-delete-duplicate-strings
+ (append vals-parsed
+ vals-predefined
+ (list val))))
+ result :test #'equal)))
+ (t
+ (cl-pushnew (list key (TeX-delete-duplicate-strings
+ (append vals-parsed
+ vals-predefined
+ (list val))))
+ result :test #'equal)))))))
+ LaTeX-floatrow-key-val-options))
+
+(defvar LaTeX-floatrow-supported-float-types
+ '("figure" "table" ; Standard LaTeX
+ "widefigure" "widetable" "widefloat" ; Standard figure* & table*
+ "wrapfigure" "wraptable" "wrapfloat" ; wrapfig.sty
+ "rotfigure" "rottable" "rotfloat" ; rotating.sty
+ "widerotfigure" "widerottable" "widerotfloat" ; for 2-col & wide
+ "figurerow" "tablerow" "floatrow" ; inside floatrow env's
+ "capbesidefigure" "capbesidetable" ; floats with beside captions
+ "capbesidefloat"
+ "longtable" ; longtable.sty
+ "subfigure" "subtable" "sub") ; subcaption.sty
+ "List of float types supported by floatrow.sty.")
+
+;; Setup for \newfloatcommand
+(TeX-auto-add-type "floatrow-newfloatcommand" "LaTeX")
+
+(defvar LaTeX-floatrow-newfloatcommand-regexp
+ '("\\\\newfloatcommand{\\([^}]+\\)}" 1 LaTeX-auto-floatrow-newfloatcommand)
+ "Matches the arguments of \"\\newfloatcommand\" from floatrow.sty.")
+
+;; Setup for various \Declare* macros:
+(TeX-auto-add-type "floatrow-DeclareNewOption" "LaTeX")
+
+(defvar LaTeX-floatrow-DeclareNewOption-regexp
+ `(,(concat
+ "\\\\Declare"
+ "\\("
+ (mapconcat #'identity
+ '("FloatStyle" ; 3.6.1 Float Style Option (style=)
+ "FloatFont" ; 3.6.2 Float Font Option (font=)
+ "FloatVCode" ; 3.6.3 Option for Float Rules/Skips (precode= etc.)
+ "ColorBox" ; 3.6.4 Settings for Colored Frame (colorframeset=)
+ "CBoxCorners" ; colorframecorners=
+ "ObjectSet" ; 3.6.5 Object Justification Option (objectset=)
+ "MarginSet" ; 3.6.6 Option for Float Box Alignment/Settings (margins=)
+ "FloatSeparators" ; 3.6.7 Float Separators Options (floatrowsep=, capbesidesep=)
+ "FloatFootnoterule") ; 3.6.8 Option for Footnote Rule's Style (footnoterule=)
+ "\\|")
+ "\\)"
+ "{\\([^}]+\\)}")
+ (0 1 2) LaTeX-auto-floatrow-DeclareNewOption)
+ "Matches the arguments of \"\\Declare*\" from floatrow.sty.")
+
+;; Setup for \newseparated(label|ref):
+(TeX-auto-add-type "floatrow-newseparatedlabel-ref" "LaTeX")
+
+(defvar LaTeX-floatrow-newseparatedlabel-ref-regexp
+ `(,(concat
+ "\\\\newseparated"
+ "\\(label\\|ref\\)"
+ "{?"
+ "\\\\"
+ "\\([a-zA-Z]+\\)"
+ "}?")
+ (2 1) LaTeX-auto-floatrow-newseparatedlabel-ref)
+ "Matches the arguments \"\\newseparated(label|ref)\" command from floatrow.sty.")
+
+;; Setup for \DeclareNewFloatType:
+(TeX-auto-add-type "floatrow-DeclareNewFloatType" "LaTeX")
+
+(defvar LaTeX-floatrow-DeclareNewFloatType-regexp
+ '("\\\\DeclareNewFloatType{\\([^}]+\\)}"
+ 1 LaTeX-auto-floatrow-DeclareNewFloatType)
+ "Matches the argument of \"\\DeclareNewFloatType\" command from floatrow.sty.")
+
+;; Plug them into the machinery.
+(defun LaTeX-floatrow-auto-prepare ()
+ "Clear various \"LaTeX-floatrow\" variables before parsing."
+ (setq LaTeX-auto-floatrow-newfloatcommand nil
+ LaTeX-auto-floatrow-DeclareNewOption nil
+ LaTeX-auto-floatrow-newseparatedlabel-ref nil
+ LaTeX-auto-floatrow-DeclareNewFloatType nil))
+
+(defun LaTeX-floatrow-auto-cleanup ()
+ "Process parsed results from floatrow package."
+ ;; Replace initially the way fig & tab env's are inserted:
+ (LaTeX-floatrow-env-init)
+ ;;
+ ;; Process new float commands like \ffigbox:
+ (when (LaTeX-floatrow-newfloatcommand-list)
+ (dolist (cmd (mapcar #'car (LaTeX-floatrow-newfloatcommand-list)))
+ (TeX-add-symbols `(,cmd LaTeX-floatrow-arg-floatbox))
+ (when (and (featurep 'font-latex)
+ (eq TeX-install-font-lock 'font-latex-setup))
+ (font-latex-add-keywords `((,cmd "[[["))
+ 'textual))))
+ ;;
+ ;; Process new label/ref commands:
+ (when (LaTeX-floatrow-newseparatedlabel-ref-list)
+ (let (floatrow-run-reftex-compile-vars)
+ (dolist (elt (LaTeX-floatrow-newseparatedlabel-ref-list))
+ (let ((cmd (car elt))
+ (type (cadr elt)))
+ (if (string= type "ref")
+ ;; More fun w/ referencing macros:
+ (TeX-add-symbols `(,cmd TeX-arg-ref))
+ ;; Less fun w/ label defining macros. Add cmd to
+ ;; TeX-symbol-list:
+ (TeX-add-symbols `(,cmd TeX-arg-define-label))
+ ;; For AUCTeX, parse the argument of the new macro and add
+ ;; it to `LaTeX-auto-label':
+ (TeX-auto-add-regexp
+ `(,(concat "\\\\" cmd "{\\([^\n\r%\\{}]+\\)}") 1 LaTeX-auto-label))
+ ;; For RefTeX, append cmd to `reftex-label-regexps and set
+ ;; floatrow-run-reftex-compile-vars to t:
+ (when (and (boundp 'reftex-label-regexps)
+ (fboundp 'reftex-compile-variables)
+ (not (string-match
+ cmd
+ (mapconcat #'identity reftex-label-regexps "|"))))
+ (add-to-list (make-local-variable 'reftex-label-regexps)
+ (concat "\\\\" cmd "{\\(?1:[^}]*\\)}") t)
+ (setq floatrow-run-reftex-compile-vars t)))
+ ;; Fontify macros as reference:
+ (when (and (featurep 'font-latex)
+ (eq TeX-install-font-lock 'font-latex-setup))
+ (font-latex-add-keywords `((,cmd "{"))
+ 'reference))))
+ ;; Run `reftex-compile-variables' if needed only once:
+ (when floatrow-run-reftex-compile-vars
+ (reftex-compile-variables))))
+ ;;
+ ;; Process new floattypes:
+ (when (LaTeX-floatrow-DeclareNewFloatType-list)
+ (LaTeX-floatrow-arg-declare-new-floattype nil t))
+ ;;
+ ;; Add elements from `LaTeX-floatrow-supported-float-types' to
+ ;; `LaTeX-caption-supported-float-types':
+ (when (boundp 'LaTeX-caption-supported-float-types)
+ (make-local-variable 'LaTeX-caption-supported-float-types)
+ (dolist (float LaTeX-floatrow-supported-float-types)
+ (add-to-list 'LaTeX-caption-supported-float-types float t))) )
+
+(add-hook 'TeX-auto-prepare-hook #'LaTeX-floatrow-auto-prepare t)
+(add-hook 'TeX-auto-cleanup-hook #'LaTeX-floatrow-auto-cleanup t)
+(add-hook 'TeX-update-style-hook #'TeX-auto-parse t)
+
+(defun LaTeX-floatrow-arg-floatbox (optional)
+ "Query and insert arguments of float box commands from floatrow.sty.
+If OPTIONAL is non-nil, indicate optional argument during query."
+ ;; Query for the optional arguments; ask for "vertpos" only if
+ ;; "height" is given. let-bind `TeX-arg-*-brace' for
+ ;; `TeX-argument-insert':
+ (let* ((TeX-arg-opening-brace "[")
+ (TeX-arg-closing-brace "]")
+ (TeX-last-optional-rejected nil)
+ (width (LaTeX-check-insert-macro-default-style
+ (completing-read
+ (TeX-argument-prompt t nil "Width")
+ (mapcar (lambda (x) (concat TeX-esc (car x)))
+ (LaTeX-length-list)))))
+ (TeX-last-optional-rejected (or (not width)
+ (and width (string= width ""))))
+ (height (LaTeX-check-insert-macro-default-style
+ (completing-read
+ (TeX-argument-prompt t nil "Height")
+ (mapcar (lambda (x) (concat TeX-esc (car x)))
+ (LaTeX-length-list)))))
+ (TeX-last-optional-rejected (or (not height)
+ (and height (string= height ""))))
+ (vertpos (LaTeX-check-insert-macro-default-style
+ (if (string= height "")
+ ""
+ (completing-read
+ (TeX-argument-prompt t nil "Vertical alignment")
+ '("t" "c" "b" "s"))))))
+ (and width (TeX-argument-insert width t))
+ ;; Insert an extra pair of brackets if only `height' is given,
+ ;; otherwise it will become `width'
+ (when (and width (string= width "")
+ height (not (string= height "")))
+ (insert "[]"))
+ (and height (TeX-argument-insert height t))
+ (and vertpos (TeX-argument-insert vertpos t)))
+ ;; Now query for the (short-)caption. Also check for the
+ ;; float-type; if we're inside (sub)?floatrow*?, then check for the
+ ;; next outer environment:
+ (let* ((currenv (if (string-match "floatrow\\*?\\_>" (LaTeX-current-environment))
+ (LaTeX-current-environment 2)
+ (LaTeX-current-environment)))
+ (caption (TeX-read-string
+ (TeX-argument-prompt optional nil "Caption")))
+ (short-caption
+ (when (>= (length caption) LaTeX-short-caption-prompt-length)
+ (TeX-read-string
+ (TeX-argument-prompt t nil "Short caption")))))
+ (indent-according-to-mode)
+ ;; The final result will look like this with * being point:
+ ;; \ffigbox{*}{%
+ ;; \caption{text}%
+ ;; \label{fig:foo}%
+ ;; }
+ (insert TeX-grop)
+ (save-excursion
+ ;; We are inside the 1. mandatory arg: Save the pos & insert `}{':
+ (insert TeX-grcl TeX-grop)
+ (if (and caption (not (string= caption "")))
+ (progn
+ ;; If caption, move to EOL, delete any spaces and hide the line end
+ (end-of-line)
+ (delete-horizontal-space)
+ (insert "%")
+ ;; Add a newline and the caption
+ (newline-and-indent)
+ (insert (LaTeX-compose-caption-macro caption short-caption))
+ ;; If we have a caption, then we probably also want a
+ ;; label. Hide EOL end and proceed to enter a label
+ (insert "%")
+ (newline-and-indent)
+ (when (LaTeX-label currenv 'environment)
+ ;; Move point to end of line and hide EOL
+ (end-of-line)
+ (delete-horizontal-space)
+ (insert "%")
+ (newline-and-indent))
+ ;; Now close the group
+ (insert TeX-grcl)
+ (indent-according-to-mode)
+ (end-of-line))
+ ;; Otherwise, only insert a }
+ (insert TeX-grcl)))))
+
+(defun LaTeX-floatrow-env-init ()
+ "Replace AUCTeX entries in the variable `LaTeX-environment-list'.
+After loading the style hook floatrow.el, delete the entries for
+figure*? and table*? from variable `LaTeX-environment-list' and
+replace them with the ones offered by the style. Original
+entries are available under \"rawfigure*?\" and \"rawtable*?\"."
+ (LaTeX-environment-list)
+ (dolist (env '("figure" "figure*" "table" "table*"))
+ (setq LaTeX-environment-list
+ (assq-delete-all (car (assoc env LaTeX-environment-list))
+ LaTeX-environment-list))
+ (LaTeX-add-environments `(,env LaTeX-floatrow-env-figure)
+ `(,(concat "raw" env) LaTeX-floatrow-env-figure-raw))))
+
+(defun LaTeX-floatrow-env-figure (environment)
+ "Create floating ENVIRONMENT suitable for floatrow macros."
+ (let ((float (and LaTeX-float
+ (TeX-read-string
+ (TeX-argument-prompt t nil "Float position")
+ LaTeX-float))))
+ (LaTeX-insert-environment environment
+ (unless (zerop (length float))
+ (concat LaTeX-optop float LaTeX-optcl)))))
+
+(defun LaTeX-floatrow-env-figure-raw (env)
+ "Create raw floating ENV with floatrow.sty.
+Also insert the macro \"\\RawFloats\" when finished with user
+queries."
+ (let ((environment (replace-regexp-in-string "raw" "" env)))
+ (LaTeX-env-figure environment)
+ (save-excursion
+ ;; `LaTeX-find-matching-begin' will not work for us as we don't
+ ;; know how user answers queries from AUCTeX, hence we search
+ ;; back for `environment':
+ (re-search-backward (concat "\\\\begin{" environment "}") nil t)
+ (end-of-line)
+ (LaTeX-newline)
+ (indent-according-to-mode)
+ (insert TeX-esc "RawFloats"))))
+
+(defun LaTeX-floatrow-arg-declare-new-options (optional prompt key)
+ "Query and insert user-defined values to keys provided by floatrow.sty.
+If OPTIONAL is non-nil, ask for an optional argument and insert
+it in square brackets. PROMPT replaces the standard one. KEY is
+a string and corresponds to first parsed element in
+`LaTeX-floatrow-DeclareNewOption-regexp'."
+ (let ((val (TeX-read-string
+ (TeX-argument-prompt optional prompt "New value option"))))
+ (LaTeX-add-floatrow-DeclareNewOptions
+ (list (concat TeX-esc "Declare" key TeX-grop val TeX-grcl)
+ key val))
+ (TeX-argument-insert val optional)
+ (TeX-argument-insert
+ (TeX-read-key-val optional (LaTeX-floatrow-key-val-options)) optional)))
+
+(defun LaTeX-floatrow-arg-newseparatedlabel/ref (optional type)
+ "Query and insert user defined label and reference macros from floatrow.sty.
+If OPTIONAL is non-nil, insert the argument in brackets. TYPE is
+the string \"label\" or \"ref\"."
+ (let ((cmd (TeX-read-string
+ (if (string= type "label")
+ (TeX-argument-prompt optional nil "Label command: \\" t)
+ (TeX-argument-prompt optional nil "Reference command: \\" t)))))
+ (LaTeX-add-floatrow-newseparatedlabel-refs (list cmd type))
+ (if (string= type "label")
+ (TeX-add-symbols `(,cmd TeX-arg-define-label))
+ (TeX-add-symbols `(,cmd TeX-arg-ref)))
+ (TeX-argument-insert cmd optional TeX-esc)))
+
+(defun LaTeX-floatrow-arg-declare-new-floattype (optional &optional cleanup)
+ "Query and insert the first argument of \"DeclareNewFloatType\" macro.
+If OPTIONAL is non-nil, insert the argument in brackets. If
+CLEANUP in non-nil, skip the query and insert process as we are
+inside the function `LaTeX-floatrow-auto-cleanup' and process
+only the parsed items."
+ (let ((type (if cleanup
+ (mapcar #'car (LaTeX-floatrow-DeclareNewFloatType-list))
+ (list (TeX-read-string
+ (TeX-argument-prompt optional nil "Environment type"))))))
+ ;; If not inside `LaTeX-floatrow-auto-cleanup', add user input to
+ ;; list of new floats and insert it
+ (unless cleanup
+ (LaTeX-add-floatrow-DeclareNewFloatTypes (car type))
+ (TeX-argument-insert (car type) optional))
+ ;; Make the next variables buffer local
+ (make-local-variable 'LaTeX-floatrow-supported-float-types)
+ (when (boundp 'LaTeX-caption-supported-float-types)
+ (make-local-variable 'LaTeX-caption-supported-float-types))
+ ;; Process new float type(s): a) add type to list of known
+ ;; environments incl. "raw" version b) add different flavors of
+ ;; type to `LaTeX-floatrow-supported-float-types' c) check if
+ ;; `LaTeX-caption-supported-float-types' is bound and add
+ ;; different flavors of type to it as well
+ (dolist (elt type)
+ (LaTeX-add-environments `(,elt LaTeX-floatrow-env-figure)
+ `(,(concat "raw" elt) LaTeX-floatrow-env-figure-raw))
+ (add-to-list 'LaTeX-floatrow-supported-float-types elt t)
+ (add-to-list 'LaTeX-floatrow-supported-float-types (concat "wide" elt) t)
+ (add-to-list 'LaTeX-floatrow-supported-float-types (concat elt "row") t)
+ (add-to-list 'LaTeX-floatrow-supported-float-types (concat "capbeside" elt) t)
+ (when (boundp 'LaTeX-caption-supported-float-types)
+ (add-to-list 'LaTeX-caption-supported-float-types elt t)
+ (add-to-list 'LaTeX-caption-supported-float-types (concat "wide" elt) t)
+ (add-to-list 'LaTeX-caption-supported-float-types (concat elt "row") t)
+ (add-to-list 'LaTeX-caption-supported-float-types (concat "capbeside" elt) t)))))
+
+(TeX-add-style-hook
+ "floatrow"
+ (lambda ()
+
+ ;; Add floatrow to the parser
+ (TeX-auto-add-regexp LaTeX-floatrow-DeclareNewOption-regexp)
+ (TeX-auto-add-regexp LaTeX-floatrow-newfloatcommand-regexp)
+ (TeX-auto-add-regexp LaTeX-floatrow-newseparatedlabel-ref-regexp)
+ (TeX-auto-add-regexp LaTeX-floatrow-DeclareNewFloatType-regexp)
+
+ ;; Add pre-defined float commands:
+ (LaTeX-add-floatrow-newfloatcommands
+ "ffigbox" "fcapside" "ttabbox")
+
+ ;; Macros
+ (TeX-add-symbols
+ ;; 2.1 The \floatbox Macro
+ ;; \floatbox[<preamble>]{<captype>}[<width>][<height>][<vert pos>]{<caption>}{<object>}
+ '("floatbox"
+ [TeX-arg-eval completing-read
+ (TeX-argument-prompt t nil "Preamble")
+ '("\\capbeside" "\\nocapbeside" "\\captop")]
+ (TeX-arg-eval completing-read
+ (TeX-argument-prompt nil nil "Float type")
+ LaTeX-floatrow-supported-float-types)
+ LaTeX-floatrow-arg-floatbox)
+
+ ;; 2.2 Creation of Personal Commands for Float Boxes
+ '("newfloatcommand"
+ (TeX-arg-eval
+ (lambda ()
+ (let ((cmd (TeX-read-string
+ (TeX-argument-prompt nil nil "Command"))))
+ (LaTeX-add-floatrow-newfloatcommands cmd)
+ (TeX-add-symbols
+ `(,cmd LaTeX-floatrow-arg-floatbox))
+ (format "%s" cmd))))
+ (TeX-arg-eval completing-read
+ (TeX-argument-prompt nil nil "Float type")
+ '("figure" "table"))
+ [ 2 ])
+
+ '("renewfloatcommand"
+ (TeX-arg-eval completing-read
+ (TeX-argument-prompt nil nil "Command")
+ (LaTeX-floatrow-newfloatcommand-list))
+ (TeX-arg-eval completing-read
+ (TeX-argument-prompt nil nil "Float type")
+ '("figure" "table"))
+ [ 2 ])
+
+
+ ;; 2.2.2 Predefined Float Box Commands
+ '("ffigbox"
+ LaTeX-floatrow-arg-floatbox)
+
+ '("ttabbox"
+ LaTeX-floatrow-arg-floatbox)
+
+ '("fcapside"
+ LaTeX-floatrow-arg-floatbox)
+
+ ;; 2.3.1 Mixed Row
+ '("CenterFloatBoxes" 0)
+ '("TopFloatBoxes" 0)
+ '("BottomFloatBoxes" 0)
+ '("PlainFloatBoxes" 0)
+ '("buildFBBOX" 2)
+
+ ;; 3 Float Layout Settings
+ '("floatsetup"
+ [TeX-arg-eval completing-read
+ (TeX-argument-prompt t nil "Float type")
+ LaTeX-floatrow-supported-float-types]
+ (TeX-arg-key-val (LaTeX-floatrow-key-val-options)))
+
+ ;; 3.2 Settings for Current Float Environment
+ '("thisfloatsetup"
+ (TeX-arg-key-val (LaTeX-floatrow-key-val-options)))
+
+ ;; 3.3 Clearing of Settings for Current Float Type
+ '("clearfloatsetup"
+ (TeX-arg-eval completing-read
+ (TeX-argument-prompt nil nil "Float type")
+ LaTeX-floatrow-supported-float-types))
+
+ ;; 3.4 Temporary Clearing of All Float Settings
+ '("killfloatstyle" 0)
+
+ ;; 3.6.1 Float Style Option (style=)
+ '("DeclareFloatStyle"
+ (LaTeX-floatrow-arg-declare-new-options "New style option"
+ "FloatStyle"))
+
+ ;; 3.6.2 Float Font Option (font=)
+ '("DeclareFloatFont"
+ (LaTeX-floatrow-arg-declare-new-options "New font option"
+ "FloatFont"))
+
+ ;; 3.6.3 Option for Float Rules/Skips (precode= etc.)
+ '("DeclareFloatVCode"
+ (LaTeX-floatrow-arg-declare-new-options "New rules/skip option"
+ "FloatVCode"))
+
+ ;; 3.6.4 Settings for Colored Frame (colorframeset=)
+ '("DeclareColorBox"
+ (LaTeX-floatrow-arg-declare-new-options "New colored frame option"
+ "ColorBox"))
+
+ ;; (colorframecorners=)
+ '("DeclareCBoxCorners"
+ (LaTeX-floatrow-arg-declare-new-options "New colored corner option"
+ "CBoxCorners"))
+
+ ;; 3.6.5 Object Justification Option (objectset=)
+ '("DeclareObjectSet"
+ (LaTeX-floatrow-arg-declare-new-options "New object justification"
+ "ObjectSet"))
+
+ ;; 3.6.6 Option for Float Box Alignment/Settings (margins=)
+ '("DeclareMarginSet"
+ (LaTeX-floatrow-arg-declare-new-options "New alignment option"
+ "MarginSet"))
+
+ '("setfloatmargins" 2)
+ '("setfloatmargins*" 2)
+ '("floatfacing" 2)
+ '("floatfacing*" 2)
+ '("floatboxmargins" 2)
+ '("floatrowmargins" 2)
+ '("floatcapbesidemargins" 2)
+
+ ;; 3.6.7 Float Separators Options (floatrowsep=, capbesidesep=)
+ '("DeclareFloatSeparators"
+ (LaTeX-floatrow-arg-declare-new-options "New separator option"
+ "FloatSeparators"))
+
+ ;; 3.6.8 Option for Footnote Rule's Style (footnoterule=)
+ '("DeclareFloatFootnoterule"
+ (LaTeX-floatrow-arg-declare-new-options "New footnote rule option"
+ "FloatFootnoterule"))
+
+ ;; 4 Creation of New Float Types
+ '("DeclareNewFloatType"
+ (LaTeX-floatrow-arg-declare-new-floattype)
+ (TeX-arg-key-val (("placement" ("tbp" "t" "b" "p"))
+ ("name")
+ ("fileext")
+ ("within" ("chapter" "section" "subsection"))
+ ("relatedcapstyle" ("yes" "no")))))
+
+ ;; 6.2 Support of The Label-Sublabel References
+ '("newseparatedlabel"
+ (LaTeX-floatrow-arg-newseparatedlabel/ref "label") 2)
+
+ '("newseparatedref"
+ (LaTeX-floatrow-arg-newseparatedlabel/ref "ref") t)
+
+ '("makelabelseparator" t) ) ;; terminate TeX-add-symbols
+
+ ;; Environments
+ (LaTeX-add-environments
+ ;; 2.3 Building Float Row
+ '("floatrow" [ "Number of beside floats" ])
+
+ ;; 6.1 Managing of Float Parts With the subfloatrow Environment
+ '("subfloatrow" [ "Number of beside floats" ])
+ '("subfloatrow*" [ "Number of beside floats" ]))
+
+ ;; 2.1.1 Float Box Width Equals to The Width of Object Contents
+ (LaTeX-add-lengths "FBwidth" "FBheight" "Xhsize")
+
+ ;; Fontification
+ (when (and (featurep 'font-latex)
+ (eq TeX-install-font-lock 'font-latex-setup))
+ (font-latex-add-keywords '(("floatbox" "[{[[[")
+ ("ffigbox" "[[[")
+ ("ttabbox" "[[[")
+ ("fcapside" "[[["))
+ 'textual)
+ (font-latex-add-keywords '(("newfloatcommand" "{{[[")
+ ("renewfloatcommand" "{{[[")
+ ("buildFBBOX" "{{")
+ ("floatsetup" "[{")
+ ("thisfloatsetup" "{")
+ ("clearfloatsetup" "{")
+ ("killfloatstyle" "")
+ ("DeclareFloatStyle" "{{")
+ ("DeclareFloatFont" "{{")
+ ("DeclareFloatVCode" "{{")
+ ("DeclareColorBox" "{{")
+ ("DeclareCBoxCorners" "{{")
+ ("DeclareObjectSet" "{{")
+ ("DeclareMarginSet" "{{")
+ ("DeclareFloatSeparators" "{{")
+ ("DeclareFloatFootnoterule" "{{")
+ ("newseparatedlabel" "{{{")
+ ("newseparatedref" "{{")
+ ("makelabelseparator" "{")
+ ("DeclareNewFloatType" "{{")
+ ("RawFloats" ""))
+ 'function)))
+ TeX-dialect)
+
+(defvar LaTeX-floatrow-package-options nil
+ "Prompt for package options for the floatrow package.")
+
+;;; floatrow.el ends here