瀏覽代碼

added :missing values header argument to gnuplot

* lisp/ob-gnuplot.el (org-babel-header-args:gnuplot): Declare
  gnuplot-specific header argument.
  (*org-babel-gnuplot-missing*): Dynamic variable used to hold the value
  of the missing header argument.
  (org-babel-gnuplot-process-vars): Wrap in local binding for missing
  value.
  (org-babel-gnuplot-quote-tsv-field): Replace missing value with the
  missing header argument value when present.
Eric Schulte 12 年之前
父節點
當前提交
1f42ea516a
共有 1 個文件被更改,包括 21 次插入10 次删除
  1. 21 10
      lisp/ob-gnuplot.el

+ 21 - 10
lisp/ob-gnuplot.el

@@ -52,22 +52,29 @@
   '((:results . "file") (:exports . "results") (:session . nil))
   "Default arguments to use when evaluating a gnuplot source block.")
 
+(defvar org-babel-header-args:gnuplot
+  '((missing . :any))
+  "Gnuplot specific header args.")
+
 (defvar org-babel-gnuplot-timestamp-fmt nil)
 
+(defvar *org-babel-gnuplot-missing* nil)
+
 (defun org-babel-gnuplot-process-vars (params)
   "Extract variables from PARAMS and process the variables.
 Dumps all vectors into files and returns an association list
 of variable names and the related value to be used in the gnuplot
 code."
-  (mapcar
-   (lambda (pair)
-     (cons
-      (car pair) ;; variable name
-      (if (listp (cdr pair)) ;; variable value
-          (org-babel-gnuplot-table-to-data
-           (cdr pair) (org-babel-temp-file "gnuplot-") params)
-        (cdr pair))))
-   (mapcar #'cdr (org-babel-get-header params :var))))
+  (let ((*org-babel-gnuplot-missing* (cdr (assoc :missing params))))
+    (mapcar
+     (lambda (pair)
+       (cons
+	(car pair) ;; variable name
+	(if (listp (cdr pair)) ;; variable value
+	    (org-babel-gnuplot-table-to-data
+	     (cdr pair) (org-babel-temp-file "gnuplot-") params)
+	  (cdr pair))))
+     (mapcar #'cdr (org-babel-get-header params :var)))))
 
 (defun org-babel-expand-body:gnuplot (body params)
   "Expand BODY according to PARAMS, return the expanded body."
@@ -85,6 +92,7 @@ code."
            (timefmt (plist-get params :timefmt))
            (time-ind (or (plist-get params :timeind)
                          (when timefmt 1)))
+	   (missing (cdr (assoc :missing params)))
 	   (add-to-body (lambda (text) (setq body (concat text "\n" body))))
            output)
       ;; append header argument settings to body
@@ -210,7 +218,10 @@ then create one.  Return the initialized session.  The current
   (if (string-match org-table-number-regexp s) s
     (if (string-match org-ts-regexp3 s)
 	(org-babel-gnuplot-quote-timestamp-field s)
-      (concat "\"" (mapconcat 'identity (split-string s "\"") "\"\"") "\""))))
+      (if (and *org-babel-gnuplot-missing* (zerop (length s)))
+	  *org-babel-gnuplot-missing*
+	(concat "\"" (mapconcat 'identity (split-string s "\"") "\"\"")
+		"\"")))))
 
 (defun org-babel-gnuplot-table-to-data (table data-file params)
   "Export TABLE to DATA-FILE in a format readable by gnuplot.