emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/auctex 8e89a80 17/57: Add new style/floatrow.el


From: Tassilo Horn
Subject: [elpa] externals/auctex 8e89a80 17/57: Add new style/floatrow.el
Date: Tue, 25 Jul 2017 14:02:29 -0400 (EDT)

branch: externals/auctex
commit 8e89a8030bf5802334e9aa9e69a1e76c5855628f
Author: Arash Esbati <address@hidden>
Commit: Arash Esbati <address@hidden>

    Add new style/floatrow.el
    
    * Makefile.in (STYLESRC): Add new style.
    
    * style/floatrow.el: New file.
---
 Makefile.in       |   3 +-
 style/floatrow.el | 726 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 728 insertions(+), 1 deletion(-)

diff --git a/Makefile.in b/Makefile.in
index a454950..180603f 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -165,7 +165,8 @@ STYLESRC = style/prosper.el \
           style/titleps.el   style/titlesec.el  style/titletoc.el \
           style/exam.el      style/breqn.el     style/sourcecodepro.el \
           style/preview.el   style/fvextra.el   style/jurabib.el \
-          style/csquotes.el  style/babel.el     style/dk-bib.el
+          style/csquotes.el  style/babel.el     style/dk-bib.el \
+          style/floatrow.el
 
 STYLEELC = $(STYLESRC:.el=.elc)
 
diff --git a/style/floatrow.el b/style/floatrow.el
new file mode 100644
index 0000000..422c87a
--- /dev/null
+++ b/style/floatrow.el
@@ -0,0 +1,726 @@
+;;; floatrow.el --- AUCTeX style for `floatrow.sty' (v0.3b)
+
+;; Copyright (C) 2017 Free Software Foundation, Inc.
+
+;; Author: Arash Esbati <address@hidden>
+;; Maintainer: address@hidden
+;; 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 `pushnew':
+(eval-when-compile (require 'cl))
+
+;; Needed for auto-parsing.
+(require 'tex)
+
+(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.")
+
+(defvar LaTeX-floatrow-key-val-options-local nil
+  "Buffer-local key=value options for floatrow macros and environments.")
+(make-variable-buffer-local 'LaTeX-floatrow-key-val-options-local)
+
+(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 key=val options:
+  (when (LaTeX-floatrow-DeclareNewOption-list)
+    (LaTeX-floatrow-update-key-val-options))
+  ;;
+  ;; 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-update-key-val-options ()
+  "Update buffer-local key-val options before offering for completion."
+  (let ((vcode-keys '("precode" "rowprecode" "midcode" "postcode" 
"rowpostcode"))
+       (sep-keys '("floatrowsep" "capbesidesep")))
+    (dolist (keyvals (LaTeX-floatrow-DeclareNewOption-list))
+      (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))
+            (val-match (cadr (assoc key LaTeX-floatrow-key-val-options-local)))
+            (temp (copy-alist LaTeX-floatrow-key-val-options-local))
+            (opts (cond ((string= key "precode")
+                         (dolist (x vcode-keys)
+                           (setq temp (assq-delete-all (car (assoc x temp)) 
temp)))
+                         temp)
+                        ((string= key "floatrowsep")
+                         (setq temp (dolist (x sep-keys)
+                                      (assq-delete-all (car (assoc x temp)) 
temp)))
+                         temp)
+                        (t
+                         (assq-delete-all (car (assoc key temp)) temp)))))
+       (cond ((string= key "precode")
+              (dolist (x vcode-keys)
+                (pushnew (list x (delete-dups (append (list val) val-match)))
+                         opts :test #'equal)))
+             ((string= key "floatrowsep")
+              (dolist (x sep-keys)
+                (pushnew (list x (delete-dups (append (list val) val-match)))
+                         opts :test #'equal)))
+             (t
+              (pushnew (list key (delete-dups (append (list val) val-match)))
+                       opts :test #'equal)))
+       (setq LaTeX-floatrow-key-val-options-local (copy-alist opts))))))
+
+(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 "]")
+        (width (completing-read
+                (TeX-argument-prompt t nil "Width")
+                (mapcar (lambda (x) (concat TeX-esc (car x)))
+                        (LaTeX-length-list))))
+        (height (completing-read
+                 (TeX-argument-prompt t nil "Height")
+                (mapcar (lambda (x) (concat TeX-esc (car x)))
+                        (LaTeX-length-list))))
+        (vertpos (if (string= height "")
+                     ""
+                   (completing-read
+                    (TeX-argument-prompt t nil "Vertical alignment")
+                    '("t" "c" "b" "s")))))
+    (TeX-argument-insert width t)
+    ;; Insert an extra pair of brackets if only `height' is given,
+    ;; otherwise it will become `width'
+    (when (and (string= width "")
+              height (not (string= height "")))
+      (insert "[]"))
+    (TeX-argument-insert height t)
+    (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 (TeX-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))
+    (LaTeX-floatrow-update-key-val-options)
+    (TeX-argument-insert val optional)
+    (TeX-argument-insert
+     (TeX-read-key-val optional LaTeX-floatrow-key-val-options-local) 
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 from 
floatrow.sty.
+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)
+
+   ;; Activate the buffer-local version of key-vals
+   (setq LaTeX-floatrow-key-val-options-local
+        (copy-alist LaTeX-floatrow-key-val-options))
+
+   ;; 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 optional nil "Preamble")
+                    '("\\capbeside" "\\nocapbeside" "\\captop") ]
+      (TeX-arg-eval completing-read
+                   (TeX-argument-prompt optional 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 optional 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 optional nil "Float type")
+                   '("figure" "table"))
+      [ 2 ])
+
+    '("renewfloatcommand"
+      (TeX-arg-eval completing-read
+                   (TeX-argument-prompt optional nil "Command")
+                   (LaTeX-floatrow-newfloatcommand-list))
+      (TeX-arg-eval completing-read
+                   (TeX-argument-prompt optional 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 optional nil "Float type")
+                    LaTeX-floatrow-supported-float-types ]
+      (TeX-arg-key-val LaTeX-floatrow-key-val-options-local))
+
+    ;; 3.2 Settings for Current Float Environment
+    '("thisfloatsetup"
+      (TeX-arg-key-val LaTeX-floatrow-key-val-options-local))
+
+    ;; 3.3 Clearing of Settings for Current Float Type
+    '("clearfloatsetup"
+      (TeX-arg-eval completing-read
+                    (TeX-argument-prompt optional 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)))
+ LaTeX-dialect)
+
+(defvar LaTeX-floatrow-package-options nil
+  "Prompt for package options for the floatrow package.")
+
+;;; floatrow.el ends here



reply via email to

[Prev in Thread] Current Thread [Next in Thread]