Browse Source

Merge branch 'master' of git+ssh://repo.or.cz/srv/git/org-mode

Carsten Dominik 15 years ago
parent
commit
dd5b4d286e

+ 9 - 4
contrib/babel/lisp/langs/org-babel-haskell.el

@@ -153,6 +153,7 @@ constructs (header arguments, no-web syntax etc...) are ignored."
          (lhs-file (concat base-name ".lhs"))
          (tex-file (concat base-name ".tex"))
          (command (concat org-babel-haskell-lhs2tex-command " " lhs-file " > " tex-file))
+         (preserve-indentp org-src-preserve-indentation)
          indentation)
     ;; escape haskell source-code blocks
     (with-temp-file tmp-org-file
@@ -160,10 +161,14 @@ constructs (header arguments, no-web syntax etc...) are ignored."
       (goto-char (point-min))
       (while (re-search-forward haskell-regexp nil t)
         (save-match-data (setq indentation (length (match-string 1))))
-        (replace-match (save-match-data (concat
-                                         "#+begin_latex\n\\begin{code}\n"
-                                         (org-remove-indentation (match-string 3))
-                                         "\n\\end{code}\n#+end_latex\n"))
+        (replace-match (save-match-data
+                         (concat
+                          "#+begin_latex\n\\begin{code}\n"
+                          (if (or preserve-indentp
+                                  (string-match "-i" (match-string 2)))
+                              (match-string 3)
+                            (org-remove-indentation (match-string 3)))
+                          "\n\\end{code}\n#+end_latex\n"))
                        t t)
         (indent-code-rigidly (match-beginning 0) (match-end 0) indentation)))
     (save-excursion

+ 10 - 7
contrib/babel/lisp/org-babel-tangle.el

@@ -88,7 +88,8 @@ exported source code blocks by language."
                 (lang-specs (cdr (assoc lang org-babel-tangle-langs)))
                 (ext (first lang-specs))
                 (she-bang (second lang-specs))
-                (commentable (not (third lang-specs))))
+                (commentable (not (third lang-specs)))
+                she-banged)
            (mapc
             (lambda (spec)
               (let* ((tangle (cdr (assoc :tangle (third spec))))
@@ -113,7 +114,9 @@ exported source code blocks by language."
                   ;; drop source-block to file
                   (with-temp-buffer
                     (funcall lang-f)
-                    (when she-bang (insert (concat she-bang "\n")))
+                    (when (and she-bang (not (member file-name she-banged)))
+                      (insert (concat she-bang "\n"))
+                      (setq she-banged (cons file-name she-banged)))
                     (when commentable
                       (comment-region
                        (point) (progn (insert "generated by org-babel-tangle") (point)))
@@ -183,17 +186,17 @@ form
   (link source-name params body)"
   (flet ((insert-comment (text)
                          (when commentable
+                           (insert "\n")
                            (comment-region (point) (progn (insert text) (point)))
-                           (move-end-of-line nil))))
+                           (move-end-of-line nil)
+                           (insert "\n"))))
     (let ((link (first spec))
           (source-name (second spec))
           (body (fourth spec))
           (commentable (not (fifth spec))))
-      (insert "\n\n")
       (insert-comment (format "[[%s][%s]]" (org-link-escape link) source-name))
-      (insert (format "\n%s\n" (org-babel-chomp body)))
-      (insert-comment (format "%s ends here" source-name))
-      (insert "\n"))))
+      (insert (format "%s" (org-babel-chomp body)))
+      (insert-comment (format "%s ends here" source-name)))))
 
 (provide 'org-babel-tangle)
 ;;; org-babel-tangle.el ends here

+ 36 - 32
contrib/babel/lisp/org-babel.el

@@ -175,7 +175,7 @@ the header arguments specified at the source code block."
   ;; (message "supplied params=%S" params) ;; debugging
   (let* ((info (or info (org-babel-get-src-block-info)))
          (lang (first info))
-         (params (org-babel-merge-params (third info) params))
+	 (params (setf (third info) (org-babel-merge-params (third info) params)))
          (body (if (assoc :noweb params)
                    (org-babel-expand-noweb-references info) (second info)))
          (processed-params (org-babel-process-params params))
@@ -192,7 +192,7 @@ the header arguments specified at the source code block."
                    (funcall cmd body params)))
     (if (eq result-type 'value)
         (setq result (org-babel-process-value-result result result-params)))
-    (org-babel-insert-result result result-params)
+    (org-babel-insert-result result result-params info)
     result))
 
 (defun org-babel-load-in-session (&optional arg info)
@@ -473,7 +473,7 @@ buffer or nil if no such result exists."
 	   (concat "#\\+resname:[ \t]*" (regexp-quote name) "[ \t\n\f\v\r]") nil t)
       (move-beginning-of-line 0) (point))))
 
-(defun org-babel-where-is-src-block-result (&optional insert)
+(defun org-babel-where-is-src-block-result (&optional insert info)
   "Return the point at the beginning of the result of the current
 source block.  Specifically at the beginning of the #+RESNAME:
 line.  If no result exists for this block then create a
@@ -482,7 +482,7 @@ line.  If no result exists for this block then create a
     (let* ((on-lob-line (progn (beginning-of-line 1)
 			       (looking-at org-babel-lob-one-liner-regexp)))
 	   (name (if on-lob-line (first (org-babel-lob-get-info))
-		   (fifth (org-babel-get-src-block-info))))
+		   (fifth (or info (org-babel-get-src-block-info)))))
 	   (head (unless on-lob-line (org-babel-where-is-src-block-head))) end)
       (when head (goto-char head))
       (or (and name (org-babel-find-named-result name))
@@ -528,7 +528,7 @@ line.  If no result exists for this block then create a
               (mapcar #'org-babel-read row)))
           (org-table-to-lisp)))
 
-(defun org-babel-insert-result (result &optional insert)
+(defun org-babel-insert-result (result &optional insert info)
   "Insert RESULT into the current buffer after the end of the
 current source block.  With optional argument INSERT controls
 insertion of results in the org-mode file.  INSERT can take the
@@ -566,7 +566,7 @@ code ---- the results are extracted in the syntax of the source
         (if (member "file" insert) (setq result (org-babel-result-to-file result))))
     (unless (listp result) (setq result (format "%S" result))))
   (if (and insert (member "replace" insert) (not (member "silent" insert)))
-      (org-babel-remove-result))
+      (org-babel-remove-result info))
   (if (= (length result) 0)
       (if (member "value" result-params)
 	  (message "No result returned by source block")
@@ -578,28 +578,30 @@ code ---- the results are extracted in the syntax of the source
                           (string-equal (substring result -1) "\r"))))
         (setq result (concat result "\n")))
       (save-excursion
-	(let ((existing-result (org-babel-where-is-src-block-result t)))
-	  (when existing-result (goto-char existing-result) (forward-line 1)))
-        (cond
-         ;; assume the result is a table if it's not a string
-         ((not (stringp result))
-          (insert (concat (orgtbl-to-orgtbl
-                           (if (and (listp (car result)) (listp (cdr (car result))))
-                               result (list result))
-                           '(:fmt (lambda (cell) (format "%S" cell)))) "\n"))
-          (forward-line -1) (org-cycle))
-         ((member "file" insert)
-          (insert result))
-         ((member "html" insert)
-          (insert (format "#+BEGIN_HTML\n%s#+END_HTML\n" result)))
-         ((member "latex" insert)
-          (insert (format "#+BEGIN_LaTeX\n%s#+END_LaTeX\n" result)))
-         ((member "code" insert)
-          (insert (format "#+BEGIN_SRC %s\n%s#+END_SRC\n" lang result)))
-         ((or (member "raw" insert) (member "org" insert))
-          (save-excursion (insert result)) (if (org-at-table-p) (org-cycle)))
-         (t
-          (org-babel-examplize-region (point) (progn (insert result) (point))))))
+	(let ((existing-result (org-babel-where-is-src-block-result t info))
+	      (results-switches (cdr (assoc :results_switches (third info)))))
+	  (when existing-result (goto-char existing-result) (forward-line 1))
+	  (setq results-switches (if results-switches (concat " " results-switches) ""))
+	  (cond
+	   ;; assume the result is a table if it's not a string
+	   ((not (stringp result))
+	    (insert (concat (orgtbl-to-orgtbl
+			     (if (and (listp (car result)) (listp (cdr (car result))))
+				 result (list result))
+			     '(:fmt (lambda (cell) (format "%S" cell)))) "\n"))
+	    (forward-line -1) (org-cycle))
+	   ((member "file" insert)
+	    (insert result))
+	   ((member "html" insert)
+	    (insert (format "#+BEGIN_HTML%s\n%s#+END_HTML\n" results-switches result)))
+	   ((member "latex" insert)
+	    (insert (format "#+BEGIN_LaTeX%s\n%s#+END_LaTeX\n" results-switches result)))
+	   ((member "code" insert)
+	    (insert (format "#+BEGIN_SRC %s%s\n%s#+END_SRC\n" lang results-switches result)))
+	   ((or (member "raw" insert) (member "org" insert))
+	    (save-excursion (insert result)) (if (org-at-table-p) (org-cycle)))
+	   (t
+	    (org-babel-examplize-region (point) (progn (insert result) (point)) results-switches)))))
       (message "finished"))))
 
 (defun org-babel-result-to-org-string (result)
@@ -607,11 +609,11 @@ code ---- the results are extracted in the syntax of the source
 relies on `org-babel-insert-result'."
   (with-temp-buffer (org-babel-insert-result result) (buffer-string)))
 
-(defun org-babel-remove-result ()
+(defun org-babel-remove-result (&optional info)
   "Remove the result of the current source block."
   (interactive)
   (save-excursion
-    (goto-char (org-babel-where-is-src-block-result t)) (forward-line 1)
+    (goto-char (org-babel-where-is-src-block-result t info)) (forward-line 1)
     (delete-region (point) (org-babel-result-end))))
 
 (defun org-babel-result-end ()
@@ -643,7 +645,7 @@ RESULT, and the display being the `file-name-nondirectory' if
 non-nil."
   (concat "[[file:" result "]]"))
 
-(defun org-babel-examplize-region (beg end)
+(defun org-babel-examplize-region (beg end &optional results-switches)
   "Comment out region using the ': ' org example quote."
   (interactive "*r")
   (let ((size (abs (- (line-number-at-pos end)
@@ -660,7 +662,9 @@ non-nil."
 	       (move-beginning-of-line 1) (insert ": ") (forward-line 1)))
 	    (t
 	     (goto-char beg)
-	     (insert "#+begin_example\n")
+	     (insert (if results-switches
+                         (format "#+begin_example%s\n" results-switches)
+                       "#+begin_example\n"))
 	     (forward-char (- end beg))
 	     (insert "#+end_example\n"))))))