Browse Source

Merge commit 'origin/master'

Dan Davison 16 years ago
parent
commit
4b7eef1a31
2 changed files with 50 additions and 41 deletions
  1. 40 40
      lisp/org-babel.el
  2. 10 1
      org-babel.org

+ 40 - 40
lisp/org-babel.el

@@ -476,48 +476,48 @@ non-nil."
 elements of PLISTS override the values of previous element.  This
 elements of PLISTS override the values of previous element.  This
 takes into account some special considerations for certain
 takes into account some special considerations for certain
 parameters when merging lists."
 parameters when merging lists."
-  (let (params results vars var ref)
-    (mapc (lambda (plist)
-	    (mapc (lambda (pair)
-		    (case (car pair)
-		      (:var
-		       ;; we want only one specification per variable
-		       (when (string-match "^\\([^= \f\t\n\r\v]+\\)[ \t]*=[ \t]*\\([^\f\n\r\v]+\\)$" (cdr pair))
-			 ;; TODO: When is this not true?
-			 (setq var (intern (match-string 1 (cdr pair)))
-			       ref (match-string 2 (cdr pair))
-			       vars (cons (cons var ref) (assq-delete-all var vars)))))
-		      (:results
-		       ;; maintain list of unique :results specifications
-		       (setq results (org-babel-merge-results results (split-string (cdr pair)))))
-		      (t
-		       ;; replace: this covers e.g. :session
-		       (setq params (cons pair (assq-delete-all	(car pair) params))))))
-		  plist))
-	  plists)
+  (let (params results exports vars var ref)
+    (flet ((e-merge (exclusive-groups &rest result-params)
+                    ;; maintain exclusivity of mutually exclusive parameters
+                    (let (output)
+                      (mapc (lambda (new-params)
+                              (mapc (lambda (new-param)
+                                      (mapc (lambda (exclusive-group)
+                                              (when (member new-param exclusive-group)
+                                                (mapcar (lambda (excluded-param)
+                                                          (setq output (delete excluded-param output)))
+                                                        exclusive-group)))
+                                            exclusive-groups)
+                                      (setq output (org-uniquify (cons new-param output))))
+                                    new-params))
+                            result-params)
+                      output)))
+      (mapc (lambda (plist)
+              (mapc (lambda (pair)
+                      (case (car pair)
+                        (:var
+                         ;; we want only one specification per variable
+                         (when (string-match "^\\([^= \f\t\n\r\v]+\\)[ \t]*=[ \t]*\\([^\f\n\r\v]+\\)$" (cdr pair))
+                           ;; TODO: When is this not true?
+                           (setq var (intern (match-string 1 (cdr pair)))
+                                 ref (match-string 2 (cdr pair))
+                                 vars (cons (cons var ref) (assq-delete-all var vars)))))
+                        (:results
+                         (setq results (e-merge '(("file" "vector" "scalar")
+                                                  ("replace" "silent"))
+                                                results (split-string (cdr pair)))))
+                        (:exports
+                         (setq exports (e-merge '(("code" "results" "both"))
+                                                exports (split-string (cdr pair)))))
+                        (t ;; replace: this covers e.g. :session
+                         (setq params (cons pair (assq-delete-all (car pair) params))))))
+                    plist))
+            plists))
     (setq vars (mapcar (lambda (pair) (format "%s=%s" (car pair) (cdr pair))) vars))
     (setq vars (mapcar (lambda (pair) (format "%s=%s" (car pair) (cdr pair))) vars))
     (while vars (setq params (cons (cons :var (pop vars)) params)))
     (while vars (setq params (cons (cons :var (pop vars)) params)))
-    (cons (cons :results (mapconcat 'identity results " ")) params)))
-
-(defun org-babel-merge-results (&rest result-params)
-  "Combine all result parameter lists in RESULT-PARAMS taking
-into account the fact that some groups of result params are
-mutually exclusive."
-  (let ((exclusive-groups '(("file" "vector" "scalar")
-                            ("replace" "silent")))
-        output)
-    (mapc (lambda (new-params)
-            (mapc (lambda (new-param)
-                    (mapc (lambda (exclusive-group)
-                            (when (member new-param exclusive-group)
-                              (mapcar (lambda (excluded-param)
-                                        (setq output (delete excluded-param output)))
-                                      exclusive-group)))
-                          exclusive-groups)
-                    (setq output (org-uniquify (cons new-param output))))
-                  new-params))
-          result-params)
-    output))
+    (cons (cons :exports (mapconcat 'identity exports " "))
+          (cons (cons :results (mapconcat 'identity results " "))
+                params))))
 
 
 (defun org-babel-clean-text-properties (text)
 (defun org-babel-clean-text-properties (text)
   "Strip all properties from text return."
   "Strip all properties from text return."

+ 10 - 1
org-babel.org

@@ -204,7 +204,7 @@ would then be [[#sandbox][the sandbox]].
 #+end_src
 #+end_src
 
 
 
 
-* Tasks [30/50]
+* Tasks [31/51]
 ** PROPOSED optional timestamp for output
 ** PROPOSED optional timestamp for output
    Add option to place an (inactive) timestamp at the #+resname, to
    Add option to place an (inactive) timestamp at the #+resname, to
    record when that output was generated.
    record when that output was generated.
@@ -888,6 +888,15 @@ $0
 [[file:snippets/org-mode/sb][sb -- snippet]]
 [[file:snippets/org-mode/sb][sb -- snippet]]
 
 
 waiting for guidance from those more familiar with yasnippets
 waiting for guidance from those more familiar with yasnippets
+** DONE exclusive =exports= params
+   
+#+srcname: implement-export-exclusivity
+#+begin_src ruby 
+:this_is_a_test
+#+end_src
+
+#+resname:
+: :this_is_a_test
 ** DONE LoB: allow output in buffer
 ** DONE LoB: allow output in buffer
 ** DONE allow default header arguments by language
 ** DONE allow default header arguments by language
 org-babel-default-header-args:lang-name
 org-babel-default-header-args:lang-name