David Maus, 16th April 2018 10:34
Execute Apache FOP from within Emacs and compile current file to PDF (or any other supported output formats).
;;; xslfo-mode.el --- Minor mode for working with XSL-FO files(defvar xslfo-fop-outspec '(("pdf" . "pdf") ("rtf" . "rtf") ("txt" . "txt") ("at" . "xml") ("if" . "xml") ("png" . "png") ("tiff" . "tiff") ("ps" . "ps") ("pcl" . "pcl") ("pdfa1b" . "pdf")) "Apache FOP output formats.")(define-minor-mode xslfo-mode "Minor mode for working with XSL-FO files." :init-value nil :lighter "XSL-FO" :keymap `((,(kbd "C-c C-c") . xslfo-compile)))(defmacro xslfo-fop-outspec-extension (name) `(or (cdr (assoc ,name xslfo-fop-outspec)) "bin"))(defun xslfo-compile (&optional arg) (interactive "P") (let* ((outspec (if arg (completing-read "Output format: " (mapcar #'car xslfo-fop-outspec) #'stringp t (caar xslfo-fop-outspec)) "pdf")) (srcfile (or buffer-file-name (error "Buffer not visiting a file"))) (outfile (concat (expand-file-name (file-name-sans-extension srcfile)) "." (xslfo-fop-outspec-extension outspec))) (bufname (concat "*XSL-FO: " outfile "*"))) (with-current-buffer (get-buffer-create bufname) (erase-buffer) (when (= 0 (apply #'call-process (executable-find "fop") nil t t (list (concat "-" outspec) outfile srcfile))) (message "Wrote %s" outfile) (display-buffer bufname)))))(provide 'xslfo-mode);;; xslfo-mode.el ends here
;;; xslfo-mode.el --- Minor mode for working with XSL-FO files
(defvar xslfo-fop-outspec '(("pdf" . "pdf")
("rtf" . "rtf")
("txt" . "txt")
("at" . "xml")
("if" . "xml")
("png" . "png")
("tiff" . "tiff")
("ps" . "ps")
("pcl" . "pcl")
("pdfa1b" . "pdf"))
"Apache FOP output formats.")
(define-minor-mode xslfo-mode
"Minor mode for working with XSL-FO files."
:init-value nil
:lighter "XSL-FO"
:keymap `((,(kbd "C-c C-c") . xslfo-compile)))
(defmacro xslfo-fop-outspec-extension (name)
`(or (cdr (assoc ,name xslfo-fop-outspec)) "bin"))
(defun xslfo-compile (&optional arg)
(interactive "P")
(let* ((outspec (if arg (completing-read "Output format: " (mapcar #'car xslfo-fop-outspec) #'stringp t (caar xslfo-fop-outspec))
"pdf"))
(srcfile (or buffer-file-name (error "Buffer not visiting a file")))
(outfile (concat (expand-file-name (file-name-sans-extension srcfile)) "." (xslfo-fop-outspec-extension outspec)))
(bufname (concat "*XSL-FO: " outfile "*")))
(with-current-buffer (get-buffer-create bufname)
(erase-buffer)
(when (= 0 (apply #'call-process (executable-find "fop") nil t t (list (concat "-" outspec) outfile srcfile)))
(message "Wrote %s" outfile)
(display-buffer bufname)))))
(provide 'xslfo-mode)
;;; xslfo-mode.el ends here