From d46887f2065fb0b811a506feef8411ba5a67864e Mon Sep 17 00:00:00 2001 From: Luis Anaya Date: Mon, 3 Sep 2012 17:24:58 -0400 Subject: [PATCH] Code to process export of PNG and JPG images. * org-e-groff.el (org-e-groff-inline-image-rules): Added PNG and JPG as valid inline suffixes. (org-e-groff-raster-to-ps): Variable that contains the command to execute raster to eps conversion. (org-e-groff--letter-head): Updated logic to handle empty FROM/TO in letter classes. (org-e-groff-link--inline-image): Added logic to process raster images. --- contrib/lisp/org-e-groff.el | 42 ++++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/contrib/lisp/org-e-groff.el b/contrib/lisp/org-e-groff.el index 5c1d94e49..d0b678dc1 100644 --- a/contrib/lisp/org-e-groff.el +++ b/contrib/lisp/org-e-groff.el @@ -234,8 +234,8 @@ order to reproduce the default set-up: ;;; Links (defcustom org-e-groff-inline-image-rules - '(("file" . "\\.\\(pdf\\|ps\\|eps\\|pic\\)\\'") - ("fuzzy" . "\\.\\(pdf\\|ps\\|eps\\|pic\\)\\'")) + '(("file" . "\\.\\(jpg\\|png\\|pdf\\|ps\\|eps\\|pic\\)\\'") + ("fuzzy" . "\\.\\(jpg\\|png\\|pdf\\|ps\\|eps\\|pic\\)\\'")) "Rules characterizing image files that can be inlined into Groff. A rule consists in an association whose key is the type of link @@ -519,6 +519,17 @@ These are the .aux, .log, .out, and .toc files." :group 'org-export-e-groff :type 'string) +(defcustom org-e-groff-raster-to-ps nil + "Command used to convert raster to EPS. Nil for no conversion. Make sure that + `org-e-groff-inline-image-rules' is adjusted accordingly if not conversion is being + done. In this case, remove the entries for jpg and png in the file and fuzzy lists." + :group 'org-export-e-groff + :type '(choice + (repeat :tag "Shell Command Sequence" (string :tag "Shell Command")) + (const :tag "sam2p" "a=%s;b=%s;sam2p ${a} ${b} ;grep -v BeginData ${b} > b_${b};mv b_${b} ${b}" ) + (const :tag "NetPNM" "a=%s;b=%s;pngtopnm ${a} | pnmtops -noturn > ${b}" ) + (const :tag "None" nil))) + ;; Adding GROFF as a block parser to make sure that its contents ;; does not execute @@ -705,12 +716,16 @@ See `org-e-groff-text-markup-alist' for details." ;; If FROM then get data from FROM - (setq from-data - (replace-regexp-in-string "\\.P\n" "" from-data)) - - (setq to-data - (replace-regexp-in-string "\\.P\n" "" to-data)) - + (if from-data + (setq from-data + (replace-regexp-in-string "\\.P\n" "" from-data)) + (setq from-data "")) + + (if to-data + (setq to-data + (replace-regexp-in-string "\\.P\n" "" to-data)) + (setq from-data "")) + (concat (cond (from-data @@ -1309,9 +1324,15 @@ used as a communication channel." ;; Now clear ATTR from any special keyword and set a default value ;; if nothing is left. Return proper string. - (concat (cond + ((and org-e-groff-raster-to-ps + (or (string-match ".\.png$" path) + (string-match ".\.jpg$" path))) + (let ((eps-path (concat path ".eps"))) + (shell-command (format org-e-groff-raster-to-ps path eps-path)) + (format "\n.DS L F\n.PSPIC %s \"%s\" %s %s\n.DE " + placement eps-path width height))) ((string-match ".\.pic$" path) (format "\n.PS\ncopy \"%s\"\n.PE" path)) (t (format "\n.DS L F\n.PSPIC %s \"%s\" %s %s\n.DE " @@ -1335,6 +1356,8 @@ INFO is a plist holding contextual information. See ((member type '("http" "https" "ftp" "mailto")) (concat type ":" raw-path)) ((string= type "file") + (when (string-match "\\(.+\\)::.+" raw-path) + (setq raw-path (match-string 1 raw-path))) (if (file-name-absolute-p raw-path) (concat "file://" (expand-file-name raw-path)) (concat "file://" raw-path))) @@ -1398,7 +1421,6 @@ INFO is a plist holding contextual information. See ;; No path, only description. Try to do something useful. (t (format org-e-groff-link-with-unknown-path-format desc))))) - ;;; Paragraph (defun org-e-groff-paragraph (paragraph contents info)