;;; psfig.el - Support for the psfig style option.  -*- lexical-binding: t; -*-

;; Copyright (C) 2013-2014, 2020 Free Software Foundation, Inc.

;; Contributed by Marc Gemis <makke@wins.uia.ac.be>
;; Please direct comments to him.

;;; Code:

(require 'tex)
(require 'latex)

(TeX-add-style-hook
 "psfig"
 (lambda ()
   ;; probable some of the following symbols may be removed
   (TeX-add-symbols "protect" "figurepath"  "fbox"
                    "other" "letter" "other" "then" "Sine" "Cosine"
                    "psdraft" "psfull" "psscalefirst" "psrotatefirst"
                    "psnodraftbox" "psdraftbox" "pssilent" "psnoisy"
                    "minmaxtest"
                    '("psfig" TeX-arg-psfig)
                    '("psfigurepath" t)
                    )
   (LaTeX-add-environments
    '("psfigure" LaTeX-env-psfigure)))
 TeX-dialect)

(defun TeX-arg-psfig (_optional)
  "Ask for file, width and length. Insert psfig macro"
  (let ((psfile (read-file-name "PS-file: " "" "" nil))
        (figwidth (TeX-read-string "Figure width: "))
        (figheight (TeX-read-string "Figure height: "))
        )

    (insert TeX-grop "figure=" psfile)
    (if (not (zerop (length figwidth)))
        (insert ",width=" figwidth))
    (if (not (zerop (length figheight)))
        (insert ",height=" figheight))
    (insert TeX-grcl)))


(defun LaTeX-env-psfigure (_environment)
  "Create  with \\label and \\caption and \\psfig commands."
  (let* ((float (TeX-read-string "Float to: " LaTeX-float))
         (caption (TeX-read-string "Caption: "))
         (short-caption (when (>= (length caption) LaTeX-short-caption-prompt-length)
                          (TeX-read-string "(Optional) Short caption: ")))
         (label (TeX-read-string "Label: " LaTeX-figure-label))
                                        ; gf: ask if this should be centered
         (psfile (read-file-name "PS-file: " "" "" nil))
         (figwidth (TeX-read-string "Figure width: "))
         (figheight (TeX-read-string "Figure height: "))
         )

    (setq LaTeX-float (if (zerop (length float))
                          LaTeX-float
                        float))

    (LaTeX-insert-environment "figure"
                              (concat LaTeX-optop LaTeX-float LaTeX-optcl))

    (insert TeX-esc "centerline" TeX-grop TeX-esc "psfig" TeX-grop
            "figure=" psfile)
    (if (not (zerop (length figwidth)))
        (insert ",width=" figwidth))
    (if (not (zerop (length figheight)))
        (insert ",height=" figheight))
    (insert TeX-grcl TeX-grcl)
    (if (zerop (length caption))
        ()
      (newline-and-indent)
      (insert (LaTeX-compose-caption-macro caption short-caption)))
    (if (or (zerop (length label))
            (equal LaTeX-figure-label label))
        ()
      (newline-and-indent)
      (insert TeX-esc "label" TeX-grop label TeX-grcl))

    (forward-line 2)))

;;; psfig.el ends here
