Browse Source

ob: Refactor `org-babel-read-result'

* lisp/ob-core.el (org-babel-read-result): Refactor code.
(org-babel-read-table):
(org-babel-read-list):
(org-babel-read-link): Fix docstring.
(org-babel-read-element): Fix indentation for example blocks.
Nicolas Goaziou 9 years ago
parent
commit
a00af53e6e
1 changed files with 15 additions and 27 deletions
  1. 15 27
      lisp/ob-core.el

+ 15 - 27
lisp/ob-core.el

@@ -2011,7 +2011,13 @@ Return nil if ELEMENT cannot be read."
 	(or (org-babel-number-p v) v)))
      (`table (org-babel-read-table))
      (`plain-list (org-babel-read-list))
-     ((or `example-block `export-block)
+     (`example-block
+      (let ((v (org-element-property :value element)))
+	(if (or org-src-preserve-indentation
+		(org-element-property :preserve-indent element))
+	    v
+	  (org-remove-indentation v))))
+     (`export-block
       (org-remove-indentation (org-element-property :value element)))
      (`paragraph
       ;; Treat paragraphs containing a single link specially.
@@ -2033,46 +2039,28 @@ Return nil if ELEMENT cannot be read."
 	(org-element-property :contents-end element))))
      (_ nil))))
 
-(defvar org-block-regexp)
 (defun org-babel-read-result ()
-  "Read the result at `point' into emacs-lisp."
-  (let ((case-fold-search t) result-string)
-    (cond
-     ((org-at-table-p) (org-babel-read-table))
-     ((org-at-item-p) (org-babel-read-list))
-     ((looking-at org-bracket-link-regexp) (org-babel-read-link))
-     ((looking-at org-block-regexp) (org-remove-indentation (match-string 4)))
-     ((or (looking-at "^[ \t]*: ") (looking-at "^[ \t]*:$"))
-      (setq result-string
-	    (org-babel-trim
-	     (mapconcat (lambda (line)
-                          (or (and (> (length line) 1)
-				   (string-match "^[ \t]*: ?\\(.+\\)" line)
-				   (match-string 1 line))
-			      ""))
-			(split-string
-			 (buffer-substring
-                          (point) (org-babel-result-end)) "[\r\n]+")
-			"\n")))
-      (or (org-babel-number-p result-string) result-string))
-     ((looking-at org-babel-result-regexp)
-      (save-excursion (forward-line 1) (org-babel-read-result))))))
+  "Read the result at point into emacs-lisp."
+  (and (not (save-excursion
+	      (beginning-of-line)
+	      (looking-at-p "[ \t]*$")))
+       (org-babel-read-element (org-element-at-point))))
 
 (defun org-babel-read-table ()
-  "Read the table at `point' into emacs-lisp."
+  "Read the table at point into emacs-lisp."
   (mapcar (lambda (row)
             (if (and (symbolp row) (equal row 'hline)) row
               (mapcar (lambda (el) (org-babel-read el 'inhibit-lisp-eval)) row)))
           (org-table-to-lisp)))
 
 (defun org-babel-read-list ()
-  "Read the list at `point' into emacs-lisp."
+  "Read the list at point into emacs-lisp."
   (mapcar (lambda (el) (org-babel-read el 'inhibit-lisp-eval))
 	  (cdr (org-list-to-lisp))))
 
 (defvar org-link-types-re)
 (defun org-babel-read-link ()
-  "Read the link at `point' into emacs-lisp.
+  "Read the link at point into emacs-lisp.
 If the path of the link is a file path it is expanded using
 `expand-file-name'."
   (let* ((case-fold-search t)