diff --git a/lisp/ox.el b/lisp/ox.el index 003ec279e..8ee61c518 100644 --- a/lisp/ox.el +++ b/lisp/ox.el @@ -3104,22 +3104,25 @@ storing and resolving footnotes. It is created automatically." (let* ((value (org-element-property :value element)) (ind (org-get-indentation)) location - (file (and (string-match - "^\\(\".+?\"\\|\\S-+\\)\\(?:\\s-+\\|$\\)" value) - (prog1 - (save-match-data - (let ((matched (match-string 1 value))) - (when (string-match "\\(::\\(.*?\\)\\)\"?\\'" matched) - (setq location (match-string 2 matched)) - (setq matched - (replace-match "" nil nil matched 1))) - (expand-file-name - (org-remove-double-quotes - matched) - dir))) - (setq value (replace-match "" nil nil value))))) + (file + (and (string-match + "^\\(\".+?\"\\|\\S-+\\)\\(?:\\s-+\\|$\\)" value) + (prog1 + (save-match-data + (let ((matched (match-string 1 value))) + (when (string-match "\\(::\\(.*?\\)\\)\"?\\'" + matched) + (setq location (match-string 2 matched)) + (setq matched + (replace-match "" nil nil matched 1))) + (expand-file-name + (org-remove-double-quotes + matched) + dir))) + (setq value (replace-match "" nil nil value))))) (only-contents - (and (string-match ":only-contents *\\([^: \r\t\n]\\S-*\\)?" value) + (and (string-match ":only-contents *\\([^: \r\t\n]\\S-*\\)?" + value) (prog1 (org-not-nil (match-string 1 value)) (setq value (replace-match "" nil nil value))))) (lines @@ -3141,7 +3144,8 @@ storing and resolving footnotes. It is created automatically." (if (string-match ":minlevel +\\([0-9]+\\)" value) (prog1 (string-to-number (match-string 1 value)) (setq value (replace-match "" nil nil value))) - (get-text-property (point) :org-include-induced-level)))) + (get-text-property (point) + :org-include-induced-level)))) (src-args (and (eq env 'literal) (match-string 1 value))) (block (and (string-match "\\<\\(\\S-+\\)\\>" value) @@ -3187,22 +3191,23 @@ storing and resolving footnotes. It is created automatically." file location only-contents lines) lines))) (org-mode) - (insert (org-export--prepare-file-contents - file lines ind minlevel - (or (gethash file file-prefix) - (puthash file (incf current-prefix) file-prefix)) - footnotes))) + (insert + (org-export--prepare-file-contents + file lines ind minlevel + (or (gethash file file-prefix) + (puthash file (incf current-prefix) file-prefix)) + footnotes))) (org-export-expand-include-keyword (cons (list file lines) included) (file-name-directory file) footnotes) (buffer-string))))) - ;; Expand footnotes after all files have been - ;; included. Footnotes are stored at end of buffer. + ;; Expand footnotes after all files have been included. + ;; Footnotes are stored at end of buffer. (unless included (org-with-wide-buffer (goto-char (point-max)) - (maphash (lambda (ref def) (insert (format "\n[%s] %s\n" ref def))) + (maphash (lambda (k v) (insert (format "\n[%s] %s\n" k v))) footnotes))))))))))) (defun org-export--inclusion-absolute-lines (file location only-contents lines) @@ -3225,7 +3230,7 @@ Return a string of lines to be included in the format expected by (let ((org-link-search-must-match-exact-headline t)) (org-link-search location)) (error - (error (format "%s for %s::%s" (error-message-string err) file location)))) + (error "%s for %s::%s" (error-message-string err) file location))) (let* ((element (org-element-at-point)) (contents-begin (and only-contents (org-element-property :contents-begin element)))) @@ -3285,7 +3290,8 @@ Return the new label." (insert (format "%d-" id))) (1- (search-forward "]"))))) -(defun org-export--prepare-file-contents (file &optional lines ind minlevel id footnotes) +(defun org-export--prepare-file-contents + (file &optional lines ind minlevel id footnotes) "Prepare contents of FILE for inclusion and return it as a string. When optional argument LINES is a string specifying a range of @@ -3365,7 +3371,7 @@ the included document. ;; sections. (org-map-entries (lambda () (if (< offset 0) (delete-char (abs offset)) - (insert (make-string offset ?*))))))))))) + (insert (make-string offset ?*))))))))))) ;; Append ID to all footnote references and definitions, so they ;; become file specific and cannot collide with footnotes in other ;; included files. Further, collect relevant footnotes outside of @@ -3378,7 +3384,8 @@ the included document. (let ((reference (org-element-context))) (when (eq (org-element-type reference) 'footnote-reference) (let* ((label (org-element-property :label reference)) - (digit-label (and label (org-string-match-p "\\`[0-9]+\\'" label)))) + (digit-label + (and label (org-string-match-p "\\`[0-9]+\\'" label)))) ;; Update the footnote-reference at point and collect ;; the new label, which is only used for footnotes ;; outsides LINES. @@ -3386,20 +3393,28 @@ the included document. ;; If label is akin to [1] convert it to [fn:ID-1]. ;; Otherwise add "ID-" after "fn:". (let ((new-label (org-export--update-footnote-label - (org-element-property :begin reference) digit-label id))) + (org-element-property :begin reference) + digit-label id))) (unless (eq (org-element-property :type reference) 'inline) (org-with-wide-buffer (let* ((definition (org-footnote-get-definition label)) (beginning (nth 1 definition))) (unless definition - (error "Definition not found for footnote %s in file %s" label file)) - (if (or (< beginning marker-min) (> beginning marker-max)) - ;; Store since footnote-definition is outside of LINES. + (error + "Definition not found for footnote %s in file %s" + label file)) + (if (or (< beginning marker-min) + (> beginning marker-max)) + ;; Store since footnote-definition is + ;; outside of LINES. (puthash new-label - (org-element-normalize-string (nth 3 definition)) + (org-element-normalize-string + (nth 3 definition)) footnotes) - ;; Update label of definition since it is included directly. - (org-export--update-footnote-label beginning digit-label id))))))))))) + ;; Update label of definition since it is + ;; included directly. + (org-export--update-footnote-label + beginning digit-label id))))))))))) (set-marker marker-min nil) (set-marker marker-max nil))) (org-element-normalize-string (buffer-string)))) @@ -3514,9 +3529,10 @@ the communication channel used for export, as a plist." (funcall transcoder data contents (org-combine-plists - info (list :back-end backend - :translate-alist all-transcoders - :exported-data (make-hash-table :test 'eq :size 401))))))))) + info (list + :back-end backend + :translate-alist all-transcoders + :exported-data (make-hash-table :test #'eq :size 401))))))))) ;;;; For Export Snippets