- (while (and (< (point) end)
- (re-search-forward org-babel-inline-src-block-regexp end t))
- (let* ((info (save-match-data (org-babel-parse-inline-src-block-match)))
- (params (nth 2 info))
- (replacement
- (save-match-data
- (if (org-babel-in-example-or-verbatim)
- (buffer-substring (match-beginning 0) (match-end 0))
- ;; expand noweb references in the original file
- (setf (nth 1 info)
- (if (and (cdr (assoc :noweb params))
- (string= "yes" (cdr (assoc :noweb params))))
- (org-babel-expand-noweb-references
- info (get-file-buffer org-current-export-file))
- (nth 1 info)))
- (org-babel-exp-do-export info 'inline)))))
- (setq end (+ end (- (length replacement) (length (match-string 1)))))
- (replace-match replacement t t nil 1)))))
-
-(defun org-exp-res/src-name-cleanup ()
- "Clean up #+results and #+srcname lines for export.
-This function should only be called after all block processing
-has taken place."
+ (unless (markerp end)
+ (let ((m (make-marker)))
+ (set-marker m end (current-buffer))
+ (setq end m)))
+ (let ((rx (concat "\\(?:" org-babel-inline-src-block-regexp
+ "\\|" org-babel-lob-one-liner-regexp "\\)")))
+ (while (re-search-forward rx end t)
+ (save-excursion
+ (let* ((element (save-excursion
+ ;; If match is inline, point is at its
+ ;; end. Move backward so
+ ;; `org-element-context' can get the
+ ;; object, not the following one.
+ (backward-char)
+ (save-match-data (org-element-context))))
+ (type (org-element-type element)))
+ (when (memq type '(babel-call inline-babel-call inline-src-block))
+ (let ((beg-el (org-element-property :begin element))
+ (end-el (org-element-property :end element)))
+ (case type
+ (inline-src-block
+ (let* ((info (org-babel-parse-inline-src-block-match))
+ (params (nth 2 info)))
+ (setf (nth 1 info)
+ (if (and (cdr (assoc :noweb params))
+ (string= "yes" (cdr (assoc :noweb params))))
+ (org-babel-expand-noweb-references
+ info (org-babel-exp-get-export-buffer))
+ (nth 1 info)))
+ (goto-char beg-el)
+ (let ((replacement (org-babel-exp-do-export info 'inline)))
+ (if (equal replacement "")
+ ;; Replacement code is empty: completely
+ ;; remove inline src block, including extra
+ ;; white space that might have been created
+ ;; when inserting results.
+ (delete-region beg-el
+ (progn (goto-char end-el)
+ (skip-chars-forward " \t")
+ (point)))
+ ;; Otherwise: remove inline src block but
+ ;; preserve following white spaces. Then
+ ;; insert value.
+ (delete-region beg-el
+ (progn (goto-char end-el)
+ (skip-chars-backward " \t")
+ (point)))
+ (insert replacement)))))
+ ((babel-call inline-babel-call)
+ (let* ((lob-info (org-babel-lob-get-info))
+ (results
+ (org-babel-exp-do-export
+ (list "emacs-lisp" "results"
+ (apply #'org-babel-merge-params
+ org-babel-default-header-args
+ org-babel-default-lob-header-args
+ (append
+ (org-babel-params-from-properties)
+ (list
+ (org-babel-parse-header-arguments
+ (org-no-properties
+ (concat
+ ":var results="
+ (mapconcat 'identity
+ (butlast lob-info 2)
+ " ")))))))
+ "" (nth 3 lob-info) (nth 2 lob-info))
+ 'lob))
+ (rep (org-fill-template
+ org-babel-exp-call-line-template
+ `(("line" . ,(nth 0 lob-info))))))
+ ;; If replacement is empty, completely remove the
+ ;; object/element, including any extra white space
+ ;; that might have been created when including
+ ;; results.
+ (if (equal rep "")
+ (delete-region
+ beg-el
+ (progn (goto-char end-el)
+ (if (not (eq type 'babel-call))
+ (progn (skip-chars-forward " \t") (point))
+ (skip-chars-forward " \r\t\n")
+ (line-beginning-position))))
+ ;; Otherwise, preserve following white
+ ;; spaces/newlines and then, insert replacement
+ ;; string.
+ (goto-char beg-el)
+ (delete-region beg-el
+ (progn (goto-char end-el)
+ (skip-chars-backward " \r\t\n")
+ (point)))
+ (insert rep)))))))))))))
+
+(defvar org-src-preserve-indentation) ; From org-src.el
+(defun org-babel-exp-process-buffer ()
+ "Execute all blocks in visible part of buffer."