Browse Source

DONE new results types (org, html, latex)

Eric Schulte 16 years ago
parent
commit
6ca0934ead
2 changed files with 137 additions and 76 deletions
  1. 43 19
      lisp/org-babel.el
  2. 94 57
      org-babel.org

+ 43 - 19
lisp/org-babel.el

@@ -492,13 +492,24 @@ current source block.  With optional argument INSERT controls
 insertion of results in the org-mode file.  INSERT can take the
 insertion of results in the org-mode file.  INSERT can take the
 following values...
 following values...
 
 
-t ------ the default option, simply insert the results after the
-         source block
+replace - (default option) insert results after the source block
+          replacing any previously inserted results
 
 
-replace - insert results after the source block replacing any
-          previously inserted results
+silent -- no results are inserted
 
 
-silent -- no results are inserted"
+raw ----- results are added directly to the org-mode file.  This
+          is a good option if you code block will output org-mode
+          formatted text.
+
+org ----- this is the same as the 'raw' option
+
+html ---- results are added inside of a #+BEGIN_HTML block.  This
+          is a good option if you code block will output html
+          formatted text.
+
+latex --- results are added inside of a #+BEGIN_LATEX block.
+          This is a good option if you code block will output
+          latex formatted text."
   (if (stringp result)
   (if (stringp result)
       (progn
       (progn
         (setq result (org-babel-clean-text-properties result))
         (setq result (org-babel-clean-text-properties result))
@@ -522,10 +533,14 @@ silent -- no results are inserted"
         (if (stringp result) ;; assume the result is a table if it's not a string
         (if (stringp result) ;; assume the result is a table if it's not a string
             (if (member "file" insert)
             (if (member "file" insert)
                 (insert result)
                 (insert result)
-              (if (or (member "raw" insert) (member "org" insert))
-                  (progn (save-excursion (insert result))
-                         (if (org-at-table-p) (org-cycle)))
-                (org-babel-examplize-region (point) (progn (insert result) (point)))))
+              (if (member "html" insert)
+                  (insert (format "#+BEGIN_HTML\n%s#+END_HTML\n" result))
+                (if (member "latex" insert)
+                    (insert (format "#+BEGIN_LaTeX\n%s#+END_LaTeX\n" result))
+                  (if (or (member "raw" insert) (member "org" insert))
+                      (progn (save-excursion (insert result))
+                             (if (org-at-table-p) (org-cycle)))
+                    (org-babel-examplize-region (point) (progn (insert result) (point)))))))
           (progn
           (progn
             (insert
             (insert
              (concat (orgtbl-to-orgtbl
              (concat (orgtbl-to-orgtbl
@@ -553,12 +568,20 @@ relies on `org-babel-insert-result'."
   (save-excursion
   (save-excursion
     (if (org-at-table-p)
     (if (org-at-table-p)
         (progn (goto-char (org-table-end)) (forward-line 1) (point))
         (progn (goto-char (org-table-end)) (forward-line 1) (point))
-      (let ((case-fold-search nil))
-	(if (looking-at "#\\+begin_example")
-	    (search-forward "#+end_example" nil t)
-	  (progn (while (looking-at "\\(: \\|\\[\\[\\)")
-                   (forward-line 1))
-                 (forward-line 1))))
+      (let ((case-fold-search t))
+        (cond
+         ((looking-at "#\\+begin_latex")
+          (search-forward "#+end_latex" nil t)
+          (forward-line 2))
+         ((looking-at "#\\+begin_html")
+          (search-forward "#+end_html" nil t)
+          (forward-line 2))
+         ((looking-at "#\\+begin_example")
+          (search-forward "#+end_example" nil t)
+          (forward-line 2))
+         (t (progn (while (looking-at "\\(: \\|\\[\\[\\)")
+                     (forward-line 1))
+                   (forward-line 1)))))
       (point))))
       (point))))
 
 
 (defun org-babel-result-to-file (result)
 (defun org-babel-result-to-file (result)
@@ -621,10 +644,11 @@ parameters when merging lists."
                                  ref (match-string 2 (cdr pair))
                                  ref (match-string 2 (cdr pair))
                                  vars (cons (cons var ref) (assq-delete-all var vars)))))
                                  vars (cons (cons var ref) (assq-delete-all var vars)))))
                         (:results
                         (:results
-                         (setq results (e-merge '(("file" "vector" "scalar")
-                                                  ("replace" "silent")
-                                                  ("output" "value"))
-                                                results (split-string (cdr pair)))))
+                         (setq results (e-merge
+                                        '(("file" "vector" "scalar" "raw" "org" "html" "latex")
+                                          ("replace" "silent")
+                                          ("output" "value"))
+                                        results (split-string (cdr pair)))))
                         (:exports
                         (:exports
                          (setq exports (e-merge '(("code" "results" "both"))
                          (setq exports (e-merge '(("code" "results" "both"))
                                                 exports (split-string (cdr pair)))))
                                                 exports (split-string (cdr pair)))))

+ 94 - 57
org-babel.org

@@ -218,68 +218,12 @@ would then be [[#sandbox][the sandbox]].
 #+end_src
 #+end_src
 
 
   
   
-* Tasks [42/64]
+* Tasks [43/63]
 ** TODO source-name visible in LaTeX and html exports
 ** TODO source-name visible in LaTeX and html exports
 Maybe this should be done in backend specific manners.
 Maybe this should be done in backend specific manners.
 
 
 The listings package may provide for naming a source-code block...
 The listings package may provide for naming a source-code block...
 
 
-** STARTED new results types (org, html, latex)
-   Thanks to Tom Short for this recommendation.
-
-   - raw or org :: in which case the results are implemented raw, unquoted
-                   into the org-mode file.  This would also handle links as
-                   source block output.
-   - html :: the results are inserted inside of a #+BEGIN_HTML block
-   - latex :: the results are inserted inside of a #+BEGIN_LATEX block
-
-   It might look like:
-: #+begin_src R :session *R* :results org
-: cat("***** This is a table\n")
-: cat("| 1 | 2 | 3 |\n")
-: cat("[[http://google.com][Google it here]]\n"
-: #+end_src
-:        
-: #+resname:
-: ***** This is a table
-: | 1 | 2 | 3 |
-[[http://google.com][: Google it here]]
-
-We actually might want to remove the =#+resname= line if the results
-type is org-mode, not sure...  Either way I don't think there is a
-good way to capture/remove org type results.
-
-*** raw
-
-Added a =raw= results header argument, which will insert the results
-of a source-code block into an org buffer un-escaped.  Also, if the
-results look like a table, then the table will be aligned.
-
-#+srcname: raw-table-demonstration
-#+begin_src ruby :results output raw
-  puts "| root | square |"
-  puts "|---"
-  10.times do |n|
-    puts "| #{n} | #{n*n} |"
-  end
-#+end_src
-
-#+resname:
-| root | square |
-|------+--------|
-|    0 |      0 |
-|    1 |      1 |
-|    2 |      4 |
-|    3 |      9 |
-|    4 |     16 |
-|    5 |     25 |
-|    6 |     36 |
-|    7 |     49 |
-|    8 |     64 |
-|    9 |     81 |
-** PROPOSED raise elisp error when source-blocks return errors
-Not sure how/if this would work, but it may be desirable.
-
 ** PROPOSED allow `anonymous' function block with function call args?
 ** PROPOSED allow `anonymous' function block with function call args?
    My question here is simply whether we're going to allow
    My question here is simply whether we're going to allow
 #+begin_src python(arg=ref)
 #+begin_src python(arg=ref)
@@ -1248,6 +1192,99 @@ to the command if BUFF is not given.)
     2) The function is called inside of a =write.table= function call
     2) The function is called inside of a =write.table= function call
        writing the results to a table
        writing the results to a table
     3) The table is read using =org-table-import=
     3) The table is read using =org-table-import=
+** DONE new results types (org, html, latex)
+   Thanks to Tom Short for this recommendation.
+
+   - raw or org :: in which case the results are implemented raw, unquoted
+                   into the org-mode file.  This would also handle links as
+                   source block output.
+   - html :: the results are inserted inside of a #+BEGIN_HTML block
+   - latex :: the results are inserted inside of a #+BEGIN_LATEX block
+
+   It might look like:
+: #+begin_src R :session *R* :results org
+: cat("***** This is a table\n")
+: cat("| 1 | 2 | 3 |\n")
+: cat("[[http://google.com][Google it here]]\n"
+: #+end_src
+:        
+: #+resname:
+: ***** This is a table
+: | 1 | 2 | 3 |
+[[http://google.com][: Google it here]]
+
+We actually might want to remove the =#+resname= line if the results
+type is org-mode, not sure...  Either way I don't think there is a
+good way to capture/remove org type results.
+
+*** LaTeX
+#+srcname: latex-results
+#+begin_src emacs-lisp :results latex
+"this should be inside of a LaTeX block"
+#+end_src
+
+#+resname:
+#+BEGIN_LaTeX
+this should be inside of a LaTeX block
+#+END_LaTeX
+
+*** Html
+#+srcname: html-results
+#+begin_src emacs-lisp :results html
+"this should be inside of a HTML block
+
+
+
+and more
+
+
+
+is long"
+#+end_src
+
+#+resname:
+#+BEGIN_HTML
+this should be inside of a HTML block
+
+
+
+and more
+
+
+
+is long
+#+END_HTML
+
+*** raw
+
+Added a =raw= results header argument, which will insert the results
+of a source-code block into an org buffer un-escaped.  Also, if the
+results look like a table, then the table will be aligned.
+
+#+srcname: raw-table-demonstration
+#+begin_src ruby :results output raw
+  puts "| root | square |"
+  puts "|---"
+  10.times do |n|
+    puts "| #{n} | #{n*n} |"
+  end
+#+end_src
+
+#+resname:
+| root | square |
+|------+--------|
+|    0 |      0 |
+|    1 |      1 |
+|    2 |      4 |
+|    3 |      9 |
+|    4 |     16 |
+|    5 |     25 |
+|    6 |     36 |
+|    7 |     49 |
+|    8 |     64 |
+|    9 |     81 |
+
+Not sure how/if this would work, but it may be desirable.
 ** DONE org-bable-tangle: no default extension if one already exists
 ** DONE org-bable-tangle: no default extension if one already exists
 ** DONE take default values for header args from properties
 ** DONE take default values for header args from properties
    Use file-wide and subtree wide properties to set default values for
    Use file-wide and subtree wide properties to set default values for