Browse Source

Merge branch 'master' of orgmode.org:org-mode

Carsten Dominik 13 years ago
parent
commit
768c95e18b

+ 151 - 176
EXPERIMENTAL/org-e-html.el

@@ -1505,8 +1505,7 @@ This function shouldn't be used for floats.  See
 
 
 (defun org-e-html-style (info)
 (defun org-e-html-style (info)
   (concat
   (concat
-   (when (plist-get info :style-include-default)
-     org-e-html-style-default)
+   "\n" (when (plist-get info :style-include-default) org-e-html-style-default)
    (plist-get info :style)
    (plist-get info :style)
    (plist-get info :style-extra)
    (plist-get info :style-extra)
    "\n"
    "\n"
@@ -1727,6 +1726,8 @@ original parsed data.  INFO is a plist holding export options."
 
 
 ;;; Transcode Helpers
 ;;; Transcode Helpers
 
 
+;;;; Todo
+
 (defun org-e-html--todo (todo)
 (defun org-e-html--todo (todo)
   (when todo
   (when todo
     (format "<span class=\"%s %s%s\">%s</span>"
     (format "<span class=\"%s %s%s\">%s</span>"
@@ -1734,6 +1735,8 @@ original parsed data.  INFO is a plist holding export options."
 	    org-e-html-todo-kwd-class-prefix (org-e-html-fix-class-name todo)
 	    org-e-html-todo-kwd-class-prefix (org-e-html-fix-class-name todo)
 	    todo)))
 	    todo)))
 
 
+;;;; Tags
+
 (defun org-e-html--tags (tags)
 (defun org-e-html--tags (tags)
   (when tags
   (when tags
     (format "<span class=\"tag\">%s</span>"
     (format "<span class=\"tag\">%s</span>"
@@ -1745,6 +1748,8 @@ original parsed data.  INFO is a plist holding export options."
 		       tag))
 		       tag))
 	     (org-split-string tags ":") "&nbsp;"))))
 	     (org-split-string tags ":") "&nbsp;"))))
 
 
+;;;; Headline
+
 (defun* org-e-html-format-headline
 (defun* org-e-html-format-headline
   (todo todo-type priority text tags
   (todo todo-type priority text tags
 	&key level section-number headline-label &allow-other-keys)
 	&key level section-number headline-label &allow-other-keys)
@@ -1757,6 +1762,98 @@ original parsed data.  INFO is a plist holding export options."
     (concat section-number todo (and todo " ") text
     (concat section-number todo (and todo " ") text
 	    (and tags "&nbsp;&nbsp;&nbsp;") tags)))
 	    (and tags "&nbsp;&nbsp;&nbsp;") tags)))
 
 
+;;;; Src Code
+
+(defun org-e-html-fontify-code (code lang)
+  (when code
+    (cond
+     ;; Case 1: No lang.  Possibly an example block.
+     ((not lang)
+      ;; Simple transcoding.
+      (org-e-html-encode-plain-text code))
+     ;; Case 2: No htmlize or an inferior version of htmlize
+     ((not (and (require 'htmlize nil t) (fboundp 'htmlize-region-for-paste)))
+      ;; Emit a warning.
+      (message "Cannot fontify src block (htmlize.el >= 1.34 required)")
+      ;; Simple transcoding.
+      (org-e-html-encode-plain-text code))
+     (t
+      ;; Map language
+      (setq lang (or (assoc-default lang org-src-lang-modes) lang))
+      (let* ((lang-mode (and lang (intern (format "%s-mode" lang)))))
+	(cond
+	 ;; Case 1: Language is not associated with any Emacs mode
+	 ((not (functionp lang-mode))
+	  ;; Simple transcoding.
+	  (org-e-html-encode-plain-text code))
+	 ;; Case 2: Default.  Fotify code.
+	 (t
+	  ;; htmlize
+	  (setq code (with-temp-buffer
+		       (insert code)
+		       (funcall lang-mode)
+		       (font-lock-fontify-buffer)
+		       ;; markup each line separately
+		       (org-remove-formatting-on-newlines-in-region
+			(point-min) (point-max))
+		       (org-src-mode)
+		       (set-buffer-modified-p nil)
+		       (org-export-e-htmlize-region-for-paste
+			(point-min) (point-max))))
+	  ;; Strip any encolosing <pre></pre> tags
+	  (if (string-match "<pre[^>]*>\n*\\([^\000]*\\)</pre>" code)
+	      (match-string 1 code)
+	    code))))))))
+
+(defun org-e-html-do-format-code
+  (code &optional lang refs retain-labels num-start textarea-p)
+  (when textarea-p
+    (setq num-start nil refs nil lang nil))
+  (let* ((code-lines (org-split-string code "\n"))
+	 (code-length (length code-lines))
+	 (num-fmt
+	  (and num-start
+	       (format "%%%ds: "
+		       (length (number-to-string (+ code-length num-start))))))
+	 (code (org-e-html-fontify-code code lang)))
+    (assert (= code-length (length (org-split-string code "\n"))))
+    (org-export-format-code
+     code
+     (lambda (loc line-num ref)
+       (setq loc
+	     (concat
+	      ;; Add line number, if needed.
+	      (when num-start
+		(format "<span class=\"linenr\">%s</span>"
+			(format num-fmt line-num)))
+	      ;; Transcoded src line.
+	      loc
+	      ;; Add label, if needed.
+	      (when (and ref retain-labels) (format " (%s)" ref))))
+       ;; Mark transcoded line as an anchor, if needed.
+       (if (not ref) loc
+	 (format "<span id=\"coderef-%s\" class=\"coderef-off\">%s</span>"
+		 ref loc)))
+     num-start refs)))
+
+(defun org-e-html-format-code (element info)
+  (let* ((lang (org-element-property :language element))
+	 ;; (switches (org-element-property :switches element))
+	 (switches nil)			; FIXME
+	 (textarea-p (and switches (string-match "-t\\>" switches)))
+	 ;; Extract code and references.
+	 (code-info (org-export-unravel-code element))
+	 (code (car code-info))
+	 (refs (cdr code-info))
+	 ;; Does the src block contain labels?
+	 (retain-labels (org-element-property :retain-labels element))
+	 ;; Does it have line numbers?
+	 (num-start (case (org-element-property :number-lines element)
+		      (continued (org-export-get-loc element info))
+		      (new 0))))
+    (org-e-html-do-format-code
+     code lang refs retain-labels num-start textarea-p)))
+
 
 
 
 
 ;;; Transcode Functions
 ;;; Transcode Functions
@@ -1824,175 +1921,37 @@ holding contextual information.."
   "Transcode an ENTITY object from Org to HTML.
   "Transcode an ENTITY object from Org to HTML.
 CONTENTS are the definition itself.  INFO is a plist holding
 CONTENTS are the definition itself.  INFO is a plist holding
 contextual information."
 contextual information."
-  ;; (let ((ent (org-element-property :latex entity)))
-  ;;   (if (org-element-property :latex-math-p entity)
-  ;; 	(format "$%s$" ent)
-  ;;     ent))
   (org-element-property :html entity))
   (org-element-property :html entity))
 
 
 
 
 ;;;; Example Block
 ;;;; Example Block
 
 
-(defun org-e-html-format-source-line-with-line-number-and-label (line)
-  (let ((ref (org-find-text-property-in-string 'org-coderef line))
-	(num (org-find-text-property-in-string 'org-loc line)))
-    (when num
-      (setq line (format "<span class=\"linenr\">%d:  </span>%s (%s)"
-			 num line ref)))
-    (when ref
-      (setq line
-	    (format
-	     "<span id=\"coderef-%s\" class=\"coderef-off\">%s (%s)</span>"
-	     ref line ref)))
-    line))
-
-(defun org-e-html-format-source-code-or-example-plain
-  (lines lang caption textareap cols rows num cont rpllbl fmt)
-  (format
-   "\n<pre class=\"example\">\n%s\n</pre>"
-   (cond
-    (textareap
-     (format "<p>\n<textarea cols=\"%d\" rows=\"%d\">%s\n</textarea>\n</p>\n"
-	     cols rows lines))
-    (t (mapconcat
-	(lambda (line)
-	  (org-e-html-format-source-line-with-line-number-and-label
-	   (org-e-html-encode-plain-text line)))
-	(org-split-string lines "\n")
-	"\n")))))
-
-(defun org-e-html-format-source-code-or-example-colored
-  (lines lang caption textareap cols rows num cont rpllbl fmt)
-  (let* ((lang-m (when lang
-		   (or (cdr (assoc lang org-src-lang-modes))
-		       lang)))
-	 (mode (and lang-m (intern
-			    (concat
-			     (if (symbolp lang-m)
-				 (symbol-name lang-m)
-			       lang-m)
-			     "-mode"))))
-	 (org-inhibit-startup t)
-	 (org-startup-folded nil))
-    (setq lines
-	  (with-temp-buffer
-	    (insert lines)
-	    (if (functionp mode)
-		(funcall mode)
-	      (fundamental-mode))
-	    (font-lock-fontify-buffer)
-	    ;; markup each line separately
-	    (org-remove-formatting-on-newlines-in-region
-	     (point-min) (point-max))
-	    (org-src-mode)
-	    (set-buffer-modified-p nil)
-	    (org-export-e-htmlize-region-for-paste
-	     (point-min) (point-max))))
-
-    (when (string-match "<pre\\([^>]*\\)>\n*" lines)
-      (setq lines (replace-match
-		   (format "<pre class=\"src src-%s\">\n" lang) t t lines)))
-
-    (when caption
-      (setq lines
-	    (concat
-	     "<div class=\"org-src-container\">"
-	     (format "<label class=\"org-src-name\">%s</label>" caption)
-	     lines "</div>")))
-
-    (unless textareap
-      (setq lines
-	    (mapconcat
-	     (lambda (line)
-	       (org-e-html-format-source-line-with-line-number-and-label line))
-	     (org-split-string lines "\n") "\n")))
-
-    ;; (when (string-match "\\(\\`<[^>]*>\\)\n" lines)
-    ;;   (setq lines (replace-match "\\1" t nil lines)))
-    lines))
-
-(defun org-e-html-format-source-code-or-example
-  (lang code &optional opts indent caption)
-  "Format CODE from language LANG and return it formatted for export.
-The CODE is marked up in `org-export-current-backend' format.
-
-Check if a function by name
-\"org-<backend>-format-source-code-or-example\" is bound. If yes,
-use it as the custom formatter. Otherwise, use the default
-formatter. Default formatters are provided for docbook, html,
-latex and ascii backends. For example, use
-`org-e-html-format-source-code-or-example' to provide a custom
-formatter for export to \"html\".
-
-If LANG is nil, do not add any fontification.
-OPTS contains formatting options, like `-n' for triggering numbering lines,
-and `+n' for continuing previous numbering.
-Code formatting according to language currently only works for HTML.
-Numbering lines works for all three major backends (html, latex, and ascii).
-INDENT was the original indentation of the block."
-  (save-match-data
-    (let* ((backend-formatter 'org-e-html-format-source-code-or-example-plain)
-	   num cont rtn rpllbl keepp textareap preserve-indentp cols rows fmt)
-      (setq opts (or opts "")
-	    num (string-match "[-+]n\\>" opts)
-	    cont (string-match "\\+n\\>" opts)
-	    rpllbl (string-match "-r\\>" opts)
-	    keepp (string-match "-k\\>" opts)
-	    textareap (string-match "-t\\>" opts)
-	    preserve-indentp (or org-src-preserve-indentation
-				 (string-match "-i\\>" opts))
-	    cols (if (string-match "-w[ \t]+\\([0-9]+\\)" opts)
-		     (string-to-number (match-string 1 opts))
-		   80)
-	    rows (if (string-match "-h[ \t]+\\([0-9]+\\)" opts)
-		     (string-to-number (match-string 1 opts))
-		   (org-count-lines code))
-	    fmt (if (string-match "-l[ \t]+\"\\([^\"\n]+\\)\"" opts)
-		    (match-string 1 opts)))
-      (when (and textareap
-		 ;; (eq org-export-current-backend 'html)
-		 )
-	;; we cannot use numbering or highlighting.
-	(setq num nil cont nil lang nil))
-      (if keepp (setq rpllbl 'keep))
-      (setq rtn (if preserve-indentp code (org-remove-indentation code)))
-      (when (string-match "^," rtn)
-	(setq rtn (with-temp-buffer
-		    (insert rtn)
-		    ;; Free up the protected lines
-		    (goto-char (point-min))
-		    (while (re-search-forward "^," nil t)
-		      (if (or (equal lang "org")
-			      (save-match-data
-				(looking-at "\\([*#]\\|[ \t]*#\\+\\)")))
-			  (replace-match ""))
-		      (end-of-line 1))
-		    (buffer-string))))
-      (when lang
-	(if (featurep 'xemacs)
-	    (require 'htmlize)
-	  (require 'htmlize nil t)))
-
-      (setq backend-formatter
-	    (cond
-	     ((fboundp 'htmlize-region-for-paste)
-	      'org-e-html-format-source-code-or-example-colored)
-	     (t
-	      (message
-	       "htmlize.el 1.34 or later is needed for source code formatting")
-	      'org-e-html-format-source-code-or-example-plain)))
-      (funcall backend-formatter rtn lang caption textareap cols rows
-	       num cont rpllbl fmt))))
-
 (defun org-e-html-example-block (example-block contents info)
 (defun org-e-html-example-block (example-block contents info)
   "Transcode a EXAMPLE-BLOCK element from Org to HTML.
   "Transcode a EXAMPLE-BLOCK element from Org to HTML.
 CONTENTS is nil.  INFO is a plist holding contextual information."
 CONTENTS is nil.  INFO is a plist holding contextual information."
   (let* ((options (or (org-element-property :options example-block) ""))
   (let* ((options (or (org-element-property :options example-block) ""))
-	 (value (org-export-handle-code example-block info nil nil t)))
-    ;; (org-e-html--wrap-label
-    ;;  example-block (format "\\begin{verbatim}\n%s\\end{verbatim}" value))
-    (org-e-html--wrap-label
-     example-block (org-e-html-format-source-code-or-example nil value))))
+	 (lang (org-element-property :language example-block))
+	 (caption (org-element-property :caption example-block))
+	 (label (org-element-property :name example-block))
+	 (caption-str (org-e-html--caption/label-string caption label info))
+	 (attr (mapconcat #'identity
+			  (org-element-property :attr_html example-block)
+			  " "))
+	 ;; (switches (org-element-property :switches example-block))
+	 (switches nil)			; FIXME
+	 (textarea-p (and switches (string-match "-t\\>" switches)))
+	 (code (org-e-html-format-code example-block info)))
+    (cond
+     (textarea-p
+      (let ((cols (if (not (string-match "-w[ \t]+\\([0-9]+\\)" switches))
+		      80 (string-to-number (match-string 1 switches))))
+	    (rows (if (string-match "-h[ \t]+\\([0-9]+\\)" switches)
+		      (string-to-number (match-string 1 switches))
+		    (org-count-lines code))))
+	(format
+	 "\n<p>\n<textarea cols=\"%d\" rows=\"%d\">\n%s\n</textarea>\n</p>"
+	 cols rows code)))
+     (t (format "\n<pre class=\"example\">\n%s\n</pre>" code)))))
 
 
 
 
 ;;;; Export Snippet
 ;;;; Export Snippet
@@ -2023,7 +1982,8 @@ CONTENTS is nil.  INFO is a plist holding contextual information."
 		  "^[ \t]*: ?" ""
 		  "^[ \t]*: ?" ""
 		  (org-element-property :value fixed-width)))))
 		  (org-element-property :value fixed-width)))))
     (org-e-html--wrap-label
     (org-e-html--wrap-label
-     fixed-width (org-e-html-format-source-code-or-example nil value))))
+     fixed-width (format "\n<pre class=\"example\">\n%s\n</pre>"
+			 (org-e-html-do-format-code value)))))
 
 
 
 
 ;;;; Footnote Definition
 ;;;; Footnote Definition
@@ -2094,7 +2054,7 @@ holding contextual information."
 			       (funcall org-e-html-format-headline-function
 			       (funcall org-e-html-format-headline-function
 					todo todo-type priority text tags))))
 					todo todo-type priority text tags))))
 			   (t 'org-e-html-format-headline))))
 			   (t 'org-e-html-format-headline))))
-    (apply format-function 
+    (apply format-function
     	   todo todo-type  priority text tags
     	   todo todo-type  priority text tags
     	   :headline-label headline-label :level level
     	   :headline-label headline-label :level level
     	   :section-number section-number extra-keys)))
     	   :section-number section-number extra-keys)))
@@ -2217,7 +2177,7 @@ holding contextual information."
        inlinetask info format-function :contents contents)))
        inlinetask info format-function :contents contents)))
    ;; Otherwise, use a default template.
    ;; Otherwise, use a default template.
    (t (org-e-html--wrap-label
    (t (org-e-html--wrap-label
-       inlinetask 
+       inlinetask
        (format
        (format
 	"\n<div class=\"inlinetask\">\n<b>%s</b><br/>\n%s\n</div>"
 	"\n<div class=\"inlinetask\">\n<b>%s</b><br/>\n%s\n</div>"
 	(org-e-html-format-headline--wrap inlinetask info)
 	(org-e-html-format-headline--wrap inlinetask info)
@@ -2540,7 +2500,7 @@ INFO is a plist holding contextual information.  See
      ;; equivalent line number.
      ;; equivalent line number.
      ((string= type "coderef")
      ((string= type "coderef")
       (let ((fragment (concat "coderef-" path)))
       (let ((fragment (concat "coderef-" path)))
-	(format "<a href=#%s %s>%s</a>" fragment
+	(format "<a href=\"#%s\" %s>%s</a>" fragment
 		(format (concat "class=\"coderef\""
 		(format (concat "class=\"coderef\""
 				" onmouseover=\"CodeHighlightOn(this, '%s');\""
 				" onmouseover=\"CodeHighlightOn(this, '%s');\""
 				" onmouseout=\"CodeHighlightOff(this, '%s');\"")
 				" onmouseout=\"CodeHighlightOff(this, '%s');\"")
@@ -2766,17 +2726,32 @@ holding contextual information."
 CONTENTS holds the contents of the item.  INFO is a plist holding
 CONTENTS holds the contents of the item.  INFO is a plist holding
 contextual information."
 contextual information."
   (let* ((lang (org-element-property :language src-block))
   (let* ((lang (org-element-property :language src-block))
-	 (code (org-export-handle-code src-block info nil nil t))
 	 (caption (org-element-property :caption src-block))
 	 (caption (org-element-property :caption src-block))
-	 (label (org-element-property :name src-block)))
-    ;; FIXME: Handle caption
-
-    ;; caption-str (when caption)
-    ;; (main (org-export-secondary-string (car caption) 'e-html info))
-    ;; (secondary (org-export-secondary-string (cdr caption) 'e-html info))
-    ;; (caption-str (org-e-html--caption/label-string caption label info))
-    (org-e-html-format-source-code-or-example lang code)))
-
+	 (label (org-element-property :name src-block))
+	 (caption-str (org-e-html--caption/label-string caption label info))
+	 (attr (mapconcat #'identity
+			  (org-element-property :attr_html src-block)
+			  " "))
+	 ;; (switches (org-element-property :switches src-block))
+	 (switches nil)			; FIXME
+	 (textarea-p (and switches (string-match "-t\\>" switches)))
+	 (code (org-e-html-format-code src-block info)))
+    (cond
+     (lang (format
+	    "\n<div class=\"org-src-container\">\n%s%s\n</div>"
+	    (if (not caption) ""
+	      (format "<label class=\"org-src-name\">%s</label>" caption-str))
+	    (format "\n<pre class=\"src src-%s\">%s\n</pre>" lang code)))
+     (textarea-p
+      (let ((cols (if (not (string-match "-w[ \t]+\\([0-9]+\\)" switches))
+		      80 (string-to-number (match-string 1 switches))))
+	    (rows (if (string-match "-h[ \t]+\\([0-9]+\\)" switches)
+		      (string-to-number (match-string 1 switches))
+		    (org-count-lines code))))
+	(format
+	 "\n<p>\n<textarea cols=\"%d\" rows=\"%d\">\n%s\n</textarea>\n</p>"
+	 cols rows code)))
+     (t (format "\n<pre class=\"example\">\n%s\n</pre>" code)))))
 
 
 ;;;; Statistics Cookie
 ;;;; Statistics Cookie
 
 

+ 87 - 104
EXPERIMENTAL/org-e-odt.el

@@ -623,38 +623,6 @@ styles congruent with the ODF-1.2 specification."
 				((string= s "\t") (org-e-odt-format-tabs))
 				((string= s "\t") (org-e-odt-format-tabs))
 				(t (org-e-odt-format-spaces (length s))))) line))
 				(t (org-e-odt-format-spaces (length s))))) line))
 
 
-
-(defun org-e-odt-format-source-line-with-line-number-and-label
-  (line fontifier par-style)
-  (let (;; (keep-label (not (numberp rpllbl)))
-	(ref (org-find-text-property-in-string 'org-coderef line))
-	(num (org-find-text-property-in-string 'org-loc line)))
-    (setq line (concat line (and ref (format "(%s)" ref))))
-    (setq line (funcall fontifier line))
-    (when ref
-      (setq line (org-e-odt-format-target line (concat "coderef-" ref))))
-    (setq line (org-e-odt-format-stylized-paragraph par-style line))
-    (if (not num) line
-      (org-e-odt-format-tags
-       '("<text:list-item>" . "</text:list-item>") line))))
-
-(defun org-e-odt-format-source-code-or-example-plain
-  (lines lang caption textareap cols rows num cont rpllbl fmt)
-  "Format source or example blocks much like fixedwidth blocks.
-Use this when `org-export-e-odt-fontify-srcblocks' option is turned
-off."
-  (let* ((lines (org-split-string lines "[\r\n]"))
-	 (line-count (length lines))
-	 (i 0))
-    (mapconcat
-     (lambda (line)
-       (incf i)
-       (org-e-odt-format-source-line-with-line-number-and-label
-	line 'org-e-odt-encode-plain-text
-	(if (= i line-count) "OrgFixedWidthBlockLastLine"
-	  "OrgFixedWidthBlock")))
-     lines "\n")))
-
 (defun org-e-odt-hfy-face-to-css (fn)
 (defun org-e-odt-hfy-face-to-css (fn)
   "Create custom style for face FN.
   "Create custom style for face FN.
 When FN is the default face, use it's foreground and background
 When FN is the default face, use it's foreground and background
@@ -702,76 +670,6 @@ Update styles.xml with styles that were collected as part of
 	(goto-char (match-beginning 0))
 	(goto-char (match-beginning 0))
 	(insert "\n<!-- Org Htmlfontify Styles -->\n" styles "\n")))))
 	(insert "\n<!-- Org Htmlfontify Styles -->\n" styles "\n")))))
 
 
-(defun org-e-odt-format-source-code-or-example-colored (lines lang caption)
-  "Format source or example blocks using `htmlfontify-string'.
-Use this routine when `org-export-e-odt-fontify-srcblocks' option
-is turned on."
-  (let* ((lang-m (and lang (or (cdr (assoc lang org-src-lang-modes)) lang)))
-	 (mode (and lang-m (intern (concat (if (symbolp lang-m)
-					       (symbol-name lang-m)
-					     lang-m) "-mode"))))
-	 (org-inhibit-startup t)
-	 (org-startup-folded nil)
-	 (lines (with-temp-buffer
-		  (insert lines)
-		  (if (functionp mode) (funcall mode) (fundamental-mode))
-		  (font-lock-fontify-buffer)
-		  (buffer-string)))
-	 (hfy-html-quote-regex "\\([<\"&> 	]\\)")
-	 (hfy-html-quote-map '(("\"" "&quot;")
-			       ("<" "&lt;")
-			       ("&" "&amp;")
-			       (">" "&gt;")
-			       (" " "<text:s/>")
-			       ("	" "<text:tab/>")))
-	 (hfy-face-to-css 'org-e-odt-hfy-face-to-css)
-	 (hfy-optimisations-1 (copy-seq hfy-optimisations))
-	 (hfy-optimisations (add-to-list 'hfy-optimisations-1
-					 'body-text-only))
-	 (hfy-begin-span-handler
-	  (lambda (style text-block text-id text-begins-block-p)
-	    (insert (format "<text:span text:style-name=\"%s\">" style))))
-	 (hfy-end-span-handler (lambda nil (insert "</text:span>"))))
-    (when (fboundp 'htmlfontify-string)
-      (let* ((lines (org-split-string lines "[\r\n]"))
-	     (line-count (length lines))
-	     (i 0))
-	(mapconcat
-	 (lambda (line)
-	   (incf i)
-	   (org-e-odt-format-source-line-with-line-number-and-label
-	    line 'htmlfontify-string
-	    (if (= i line-count) "OrgSrcBlockLastLine" "OrgSrcBlock")))
-	 lines "\n")))))
-
-(defun org-e-odt-format-source-code-or-example (lines lang
-						&optional caption ; FIXME
-						)
-  "Format source or example blocks for export.
-Use `org-e-odt-format-source-code-or-example-plain' or
-`org-e-odt-format-source-code-or-example-colored' depending on the
-value of `org-export-e-odt-fontify-srcblocks."
-  (setq ;; lines (org-export-number-lines
-   ;;        lines 0 0 num cont rpllbl fmt 'preprocess) FIXME
-   lines (funcall
-	  (or (and org-export-e-odt-fontify-srcblocks
-		   (or (featurep 'htmlfontify)
-		       ;; htmlfontify.el was introduced in Emacs 23.2
-		       ;; So load it with some caution
-		       (require 'htmlfontify nil t))
-		   (fboundp 'htmlfontify-string)
-		   'org-e-odt-format-source-code-or-example-colored)
-	      'org-e-odt-format-source-code-or-example-plain)
-	  lines lang caption))
-  (let ((num (org-find-text-property-in-string 'org-loc lines)))
-    (if (not num) lines
-      (let* ((cont (not (equal num 1)))
-	     (extra (format " text:continue-numbering=\"%s\""
-			    (if cont "true" "false"))))
-	(org-e-odt-format-tags
-	 '("<text:list text:style-name=\"OrgSrcBlockNumberedLine\"%s>"
-	   . "</text:list>") lines extra)))))
-
 (defun org-e-odt-remap-stylenames (style-name)
 (defun org-e-odt-remap-stylenames (style-name)
   (or
   (or
    (cdr (assoc style-name '(("timestamp-wrapper" . "OrgTimestampWrapper")
    (cdr (assoc style-name '(("timestamp-wrapper" . "OrgTimestampWrapper")
@@ -3324,6 +3222,92 @@ This function shouldn't be used for floats.  See
   output)
   output)
 
 
 
 
+
+;;; Transcode Helpers
+
+;;;; Src Code
+
+(defun org-e-odt-htmlfontify-string (line)
+  (let* ((hfy-html-quote-regex "\\([<\"&> 	]\\)")
+	 (hfy-html-quote-map '(("\"" "&quot;")
+			       ("<" "&lt;")
+			       ("&" "&amp;")
+			       (">" "&gt;")
+			       (" " "<text:s/>")
+			       ("	" "<text:tab/>")))
+	 (hfy-face-to-css 'org-e-odt-hfy-face-to-css)
+	 (hfy-optimisations-1 (copy-seq hfy-optimisations))
+	 (hfy-optimisations (add-to-list 'hfy-optimisations-1
+					 'body-text-only))
+	 (hfy-begin-span-handler
+	  (lambda (style text-block text-id text-begins-block-p)
+	    (insert (format "<text:span text:style-name=\"%s\">" style))))
+	 (hfy-end-span-handler (lambda nil (insert "</text:span>"))))
+    (htmlfontify-string line)))
+
+(defun org-e-odt-do-format-code
+  (code &optional lang refs retain-labels num-start)
+  (let* ((lang (or (assoc-default lang org-src-lang-modes) lang))
+	 (lang-mode (and lang (intern (format "%s-mode" lang))))
+	 (code-lines (org-split-string code "\n"))
+	 (code-length (length code-lines))
+	 (use-htmlfontify-p (and (functionp lang-mode)
+				 org-export-e-odt-fontify-srcblocks
+				 (require 'htmlfontify nil t)
+				 (fboundp 'htmlfontify-string)))
+	 (code (if (not use-htmlfontify-p) code
+		 (with-temp-buffer
+		   (insert code)
+		   (funcall lang-mode)
+		   (font-lock-fontify-buffer)
+		   (buffer-string))))
+	 (fontifier (if use-htmlfontify-p 'org-e-odt-htmlfontify-string
+		      'org-e-odt-encode-plain-text))
+	 (par-style (if use-htmlfontify-p "OrgSrcBlock"
+		      "OrgFixedWidthBlock"))
+	 (i 0))
+    (assert (= code-length (length (org-split-string code "\n"))))
+    (setq code
+	  (org-export-format-code
+	   code
+	   (lambda (loc line-num ref)
+	     (setq par-style
+		   (concat par-style (and (= (incf i) code-length) "LastLine")))
+
+	     (setq loc (concat loc (and ref retain-labels (format " (%s)" ref))))
+	     (setq loc (funcall fontifier loc))
+	     (when ref
+	       (setq loc (org-e-odt-format-target loc (concat "coderef-" ref))))
+	     (setq loc (org-e-odt-format-stylized-paragraph par-style loc))
+	     (if (not line-num) loc
+	       (org-e-odt-format-tags
+		'("<text:list-item>" . "</text:list-item>") loc)))
+	   num-start refs))
+    (cond
+     ((not num-start) code)
+     ((equal num-start 0)
+      (org-e-odt-format-tags
+       '("<text:list text:style-name=\"OrgSrcBlockNumberedLine\"%s>"
+	 . "</text:list>") code " text:continue-numbering=\"false\""))
+     (t (org-e-odt-format-tags
+	 '("<text:list text:style-name=\"OrgSrcBlockNumberedLine\"%s>"
+	   . "</text:list>") code " text:continue-numbering=\"true\"")))))
+
+(defun org-e-odt-format-code (element info)
+  (let* ((lang (org-element-property :language element))
+	 ;; Extract code and references.
+	 (code-info (org-export-unravel-code element))
+	 (code (car code-info))
+	 (refs (cdr code-info))
+	 ;; Does the src block contain labels?
+	 (retain-labels (org-element-property :retain-labels element))
+	 ;; Does it have line numbers?
+	 (num-start (case (org-element-property :number-lines element)
+		      (continued (org-export-get-loc element info))
+		      (new 0))))
+    (org-e-odt-do-format-code code lang refs retain-labels num-start)))
+
+
 
 
 ;;; Template
 ;;; Template
 
 
@@ -4192,7 +4176,6 @@ holding contextual information."
 CONTENTS holds the contents of the item.  INFO is a plist holding
 CONTENTS holds the contents of the item.  INFO is a plist holding
 contextual information."
 contextual information."
   (let* ((lang (org-element-property :language src-block))
   (let* ((lang (org-element-property :language src-block))
-	 (code (org-export-handle-code src-block info nil nil t))
 	 (caption (org-element-property :caption src-block))
 	 (caption (org-element-property :caption src-block))
 	 (label (org-element-property :name src-block)))
 	 (label (org-element-property :name src-block)))
     ;; FIXME: Handle caption
     ;; FIXME: Handle caption
@@ -4201,7 +4184,7 @@ contextual information."
     ;; (main (org-export-secondary-string (car caption) 'e-odt info))
     ;; (main (org-export-secondary-string (car caption) 'e-odt info))
     ;; (secondary (org-export-secondary-string (cdr caption) 'e-odt info))
     ;; (secondary (org-export-secondary-string (cdr caption) 'e-odt info))
     ;; (caption-str (org-e-odt--caption/label-string caption label info))
     ;; (caption-str (org-e-odt--caption/label-string caption label info))
-    (org-e-odt-format-source-code-or-example code lang)))
+    (org-e-odt-format-code src-block info)))
 
 
 
 
 ;;;; Statistics Cookie
 ;;;; Statistics Cookie

+ 1 - 1
contrib/lisp/org-contacts.el

@@ -388,7 +388,7 @@ This function should be called from `gnus-article-prepare-hook'."
   (let ((mails (org-entry-get (point) org-contacts-email-property)))
   (let ((mails (org-entry-get (point) org-contacts-email-property)))
     (unless (member mail (split-string mails))
     (unless (member mail (split-string mails))
       (when (yes-or-no-p
       (when (yes-or-no-p
-             (format "Do you want to this address to %s?" (org-get-heading t)))
+             (format "Do you want to add this address to %s?" (org-get-heading t)))
         (org-set-property org-contacts-email-property (concat mails " " mail))))))
         (org-set-property org-contacts-email-property (concat mails " " mail))))))
 
 
 (defun org-contacts-gnus-check-mail-address ()
 (defun org-contacts-gnus-check-mail-address ()

+ 2 - 0
contrib/lisp/org-element.el

@@ -3919,6 +3919,8 @@ modified."
      ((eq (org-element-type element) 'plain-list)
      ((eq (org-element-type element) 'plain-list)
       (forward-char))
       (forward-char))
      ((memq (org-element-type element) org-element-greater-elements)
      ((memq (org-element-type element) org-element-greater-elements)
+      ;; If contents are hidden, first disclose them.
+      (when (org-element-property :hiddenp element) (org-cycle))
       (goto-char (org-element-property :contents-begin element)))
       (goto-char (org-element-property :contents-begin element)))
      (t (error "No inner element")))))
      (t (error "No inner element")))))
 
 

+ 3 - 0
doc/org.texi

@@ -13673,6 +13673,9 @@ references will not be expanded when the code block is exported.
 ``Noweb'' syntax references in the body of the code block will be expanded
 ``Noweb'' syntax references in the body of the code block will be expanded
 before the block is evaluated or tangled.  However, ``noweb'' syntax
 before the block is evaluated or tangled.  However, ``noweb'' syntax
 references will not be removed when the code block is exported.
 references will not be removed when the code block is exported.
+@item @code{eval}
+``Noweb'' syntax references in the body of the code block will only be
+expanded before the block is evaluated.
 @end itemize
 @end itemize
 
 
 @subsubheading Noweb prefix lines
 @subsubheading Noweb prefix lines

+ 48 - 20
lisp/ob-lilypond.el

@@ -3,7 +3,7 @@
 ;; Copyright (C) 2010-2012  Free Software Foundation, Inc.
 ;; Copyright (C) 2010-2012  Free Software Foundation, Inc.
 
 
 ;; Author: Martyn Jago
 ;; Author: Martyn Jago
-;; Keywords: babel language, literate programming
+;; Keywords: babel language, literate programming, music score
 ;; Homepage: https://github.com/mjago/ob-lilypond
 ;; Homepage: https://github.com/mjago/ob-lilypond
 
 
 ;; This file is part of GNU Emacs.
 ;; This file is part of GNU Emacs.
@@ -23,10 +23,14 @@
 
 
 ;;; Commentary:
 ;;; Commentary:
 
 
-;; Installation / usage info, and examples are available at
-;; https://github.com/mjago/ob-lilypond
+;; Installation, ob-lilypond documentation, and examples are available at
+;; http://orgmode.org/worg/org-contrib/babel/languages/ob-doc-lilypond.html
+;;
+;; Lilypond documentation can be found at
+;; http://lilypond.org/manuals.html
 
 
 ;;; Code:
 ;;; Code:
+
 (require 'ob)
 (require 'ob)
 (require 'ob-eval)
 (require 'ob-eval)
 (require 'ob-tangle)
 (require 'ob-tangle)
@@ -37,9 +41,11 @@
 (add-to-list 'org-babel-tangle-lang-exts '("LilyPond" . "ly"))
 (add-to-list 'org-babel-tangle-lang-exts '("LilyPond" . "ly"))
 
 
 (defvar org-babel-default-header-args:lilypond '()
 (defvar org-babel-default-header-args:lilypond '()
-  "Default header arguments for js code blocks.")
+  "Default header arguments for lilypond code blocks.
+NOTE: The arguments are determined at lilypond compile time.
+See (ly-set-header-args)")
 
 
-(defconst ly-version "0.3"
+(defconst ly-version "7.6"
   "The version number of the file ob-lilypond.el.")
   "The version number of the file ob-lilypond.el.")
 
 
 (defvar ly-compile-post-tangle t
 (defvar ly-compile-post-tangle t
@@ -86,6 +92,10 @@ LY-GEN-SVG to t")
 "HTML generation can be turned on by default by setting
 "HTML generation can be turned on by default by setting
 LY-GEN-HTML to t")
 LY-GEN-HTML to t")
 
 
+(defvar ly-gen-pdf nil
+"PDF generation can be turned on by default by setting
+LY-GEN-PDF to t")
+
 (defvar ly-use-eps nil
 (defvar ly-use-eps nil
 "You can force the compiler to use the EPS backend by setting
 "You can force the compiler to use the EPS backend by setting
 LY-USE-EPS to t")
 LY-USE-EPS to t")
@@ -203,18 +213,20 @@ FILE-NAME is full path to lilypond (.ly) file"
         (arg-2 nil)                    ;infile
         (arg-2 nil)                    ;infile
         (arg-3 "*lilypond*")           ;buffer
         (arg-3 "*lilypond*")           ;buffer
         (arg-4 t)                      ;display
         (arg-4 t)                      ;display
-        (arg-5 (if ly-gen-png  "--png"  "")) ;&rest...
-  (arg-6 (if ly-gen-html "--html" ""))
-        (arg-7 (if ly-use-eps  "-dbackend=eps" ""))
-        (arg-8 (if ly-gen-svg  "-dbackend=svg" ""))
-        (arg-9 (concat "--output=" (file-name-sans-extension file-name)))
-        (arg-10 file-name))
+	(arg-4 t)                      ;display
+	(arg-5 (if ly-gen-png  "--png"  "")) ;&rest...
+	(arg-6 (if ly-gen-html "--html" ""))
+        (arg-7 (if ly-gen-pdf "--pdf" ""))
+        (arg-8 (if ly-use-eps  "-dbackend=eps" ""))
+        (arg-9 (if ly-gen-svg  "-dbackend=svg" ""))
+        (arg-10 (concat "--output=" (file-name-sans-extension file-name)))
+        (arg-11 file-name))
     (if test
     (if test
-        `(,arg-1 ,arg-2 ,arg-3 ,arg-4 ,arg-5
-                 ,arg-6 ,arg-7 ,arg-8 ,arg-9 ,arg-10)
+        `(,arg-1 ,arg-2 ,arg-3 ,arg-4 ,arg-5 ,arg-6
+                 ,arg-7 ,arg-8 ,arg-9 ,arg-10 ,arg-11)
       (call-process
       (call-process
-       arg-1 arg-2 arg-3 arg-4 arg-5
-       arg-6 arg-7 arg-8 arg-9 arg-10))))
+       arg-1 arg-2 arg-3 arg-4 arg-5 arg-6
+       arg-7 arg-8 arg-9 arg-10 arg-11))))
 
 
 (defun ly-check-for-compile-error (file-name &optional test)
 (defun ly-check-for-compile-error (file-name &optional test)
   "Check for compile error.
   "Check for compile error.
@@ -307,8 +319,12 @@ If TEST is non-nil, the shell command is returned and is not run"
                  (concat (ly-determine-pdf-path) " " pdf-file)))
                  (concat (ly-determine-pdf-path) " " pdf-file)))
             (if test
             (if test
                 cmd-string
                 cmd-string
-              (shell-command cmd-string)))
-        (message  "No pdf file generated so can't display!")))))
+	      (start-process
+	       "\"Audition pdf\""
+	       "*lilypond*"
+	       (ly-determine-pdf-path)
+	       pdf-file)))
+	(message  "No pdf file generated so can't display!")))))
 
 
 (defun ly-attempt-to-play-midi (file-name &optional test)
 (defun ly-attempt-to-play-midi (file-name &optional test)
   "Attempt to play the generated MIDI file
   "Attempt to play the generated MIDI file
@@ -322,7 +338,11 @@ If TEST is non-nil, the shell command is returned and is not run"
                  (concat (ly-determine-midi-path) " " midi-file)))
                  (concat (ly-determine-midi-path) " " midi-file)))
             (if test
             (if test
                 cmd-string
                 cmd-string
-              (shell-command cmd-string)))
+              (start-process
+               "\"Audition midi\""
+               "*lilypond*"
+               (ly-determine-midi-path)
+               midi-file)))
         (message "No midi file generated so can't play!")))))
         (message "No midi file generated so can't play!")))))
 
 
 (defun ly-determine-ly-path (&optional test)
 (defun ly-determine-ly-path (&optional test)
@@ -399,6 +419,15 @@ If TEST is non-nil, it contains a simulation of the OS for test purposes"
   (message (concat "HTML generation has been "
   (message (concat "HTML generation has been "
                    (if ly-gen-html "ENABLED." "DISABLED."))))
                    (if ly-gen-html "ENABLED." "DISABLED."))))
 
 
+(defun ly-toggle-pdf-generation ()
+  "Toggle whether pdf will be generated by compilation"
+
+  (interactive)
+  (setq ly-gen-pdf
+        (not ly-gen-pdf))
+  (message (concat "PDF generation has been "
+                   (if ly-gen-pdf "ENABLED." "DISABLED."))))
+
 (defun ly-toggle-arrange-mode ()
 (defun ly-toggle-arrange-mode ()
   "Toggle whether in Arrange mode or Basic mode"
   "Toggle whether in Arrange mode or Basic mode"
 
 
@@ -428,6 +457,7 @@ mode i.e. ARRANGE-MODE is t"
          '((:tangle . "yes")
          '((:tangle . "yes")
            (:noweb . "yes")
            (:noweb . "yes")
            (:results . "silent")
            (:results . "silent")
+           (:cache . "yes")
            (:comments . "yes")))
            (:comments . "yes")))
         (t
         (t
          '((:results . "file")
          '((:results . "file")
@@ -441,6 +471,4 @@ dependent on LY-ARRANGE-MODE"
 
 
 (provide 'ob-lilypond)
 (provide 'ob-lilypond)
 
 
-
-
 ;;; ob-lilypond.el ends here
 ;;; ob-lilypond.el ends here

+ 32 - 14
lisp/ob-sh.el

@@ -56,14 +56,13 @@ This will be passed to  `shell-command-on-region'")
 This function is called by `org-babel-execute-src-block'."
 This function is called by `org-babel-execute-src-block'."
   (let* ((session (org-babel-sh-initiate-session
   (let* ((session (org-babel-sh-initiate-session
 		   (cdr (assoc :session params))))
 		   (cdr (assoc :session params))))
-         (result-params (cdr (assoc :result-params params)))
 	 (stdin ((lambda (stdin) (when stdin (org-babel-sh-var-to-string
 	 (stdin ((lambda (stdin) (when stdin (org-babel-sh-var-to-string
 					 (org-babel-ref-resolve stdin))))
 					 (org-babel-ref-resolve stdin))))
 		 (cdr (assoc :stdin params))))
 		 (cdr (assoc :stdin params))))
          (full-body (org-babel-expand-body:generic
          (full-body (org-babel-expand-body:generic
 		     body params (org-babel-variable-assignments:sh params))))
 		     body params (org-babel-variable-assignments:sh params))))
     (org-babel-reassemble-table
     (org-babel-reassemble-table
-     (org-babel-sh-evaluate session full-body result-params stdin)
+     (org-babel-sh-evaluate session full-body params stdin)
      (org-babel-pick-name
      (org-babel-pick-name
       (cdr (assoc :colname-names params)) (cdr (assoc :colnames params)))
       (cdr (assoc :colname-names params)) (cdr (assoc :colnames params)))
      (org-babel-pick-name
      (org-babel-pick-name
@@ -134,29 +133,38 @@ Emacs-lisp table, otherwise return the results as a string."
 (defvar org-babel-sh-eoe-output "org_babel_sh_eoe"
 (defvar org-babel-sh-eoe-output "org_babel_sh_eoe"
   "String to indicate that evaluation has completed.")
   "String to indicate that evaluation has completed.")
 
 
-(defun org-babel-sh-evaluate (session body &optional result-params stdin)
+(defun org-babel-sh-evaluate (session body &optional params stdin)
   "Pass BODY to the Shell process in BUFFER.
   "Pass BODY to the Shell process in BUFFER.
 If RESULT-TYPE equals 'output then return a list of the outputs
 If RESULT-TYPE equals 'output then return a list of the outputs
 of the statements in BODY, if RESULT-TYPE equals 'value then
 of the statements in BODY, if RESULT-TYPE equals 'value then
 return the value of the last statement in BODY."
 return the value of the last statement in BODY."
   ((lambda (results)
   ((lambda (results)
      (when results
      (when results
-       (if (or (member "scalar" result-params)
-	       (member "verbatim" result-params)
-	       (member "output" result-params))
-	   results
-	 (let ((tmp-file (org-babel-temp-file "sh-")))
-	   (with-temp-file tmp-file (insert results))
-	   (org-babel-import-elisp-from-file tmp-file)))))
+       (let ((result-params (cdr (assoc :result-params params))))
+	 (if (or (member "scalar" result-params)
+		 (member "verbatim" result-params)
+		 (member "output" result-params))
+	     results
+	   (let ((tmp-file (org-babel-temp-file "sh-")))
+	     (with-temp-file tmp-file (insert results))
+	     (org-babel-import-elisp-from-file tmp-file))))))
    (cond
    (cond
     (stdin				; external shell script w/STDIN
     (stdin				; external shell script w/STDIN
      (let ((script-file (org-babel-temp-file "sh-script-"))
      (let ((script-file (org-babel-temp-file "sh-script-"))
-	   (stdin-file (org-babel-temp-file "sh-stdin-")))
-       (with-temp-file script-file (insert body))
+	   (stdin-file (org-babel-temp-file "sh-stdin-"))
+	   (shebang (cdr (assoc :shebang params)))
+	   (padline (not (string= "no" (cdr (assoc :padline params))))))
+       (with-temp-file script-file
+	 (when shebang (insert (concat shebang "\n")))
+	 (when padline (insert "\n"))
+	 (insert body))
+       (set-file-modes script-file #o755)
        (with-temp-file stdin-file (insert stdin))
        (with-temp-file stdin-file (insert stdin))
        (with-temp-buffer
        (with-temp-buffer
 	 (call-process-shell-command
 	 (call-process-shell-command
-	  (format "%s %s" org-babel-sh-command script-file)
+	  (if shebang
+	      script-file
+	    (format "%s %s" org-babel-sh-command script-file))
 	  stdin-file
 	  stdin-file
 	  (current-buffer))
 	  (current-buffer))
 	 (buffer-string))))
 	 (buffer-string))))
@@ -182,7 +190,17 @@ return the value of the last statement in BODY."
 	    (list org-babel-sh-eoe-indicator))))
 	    (list org-babel-sh-eoe-indicator))))
 	2)) "\n"))
 	2)) "\n"))
     ('otherwise				; external shell script
     ('otherwise				; external shell script
-     (org-babel-eval org-babel-sh-command (org-babel-trim body))))))
+     (if (cdr (assoc :shebang params))
+	 (let ((script-file (org-babel-temp-file "sh-script-"))
+	       (shebang (cdr (assoc :shebang params)))
+	       (padline (not (string= "no" (cdr (assoc :padline params))))))
+	   (with-temp-file script-file
+	     (when shebang (insert (concat shebang "\n")))
+	     (when padline (insert "\n"))
+	     (insert body))
+	   (set-file-modes script-file #o755)
+	   (org-babel-eval script-file ""))
+       (org-babel-eval org-babel-sh-command (org-babel-trim body)))))))
 
 
 (defun org-babel-sh-strip-weird-long-prompt (string)
 (defun org-babel-sh-strip-weird-long-prompt (string)
   "Remove prompt cruft from a string of shell output."
   "Remove prompt cruft from a string of shell output."

+ 6 - 4
lisp/ob.el

@@ -59,6 +59,7 @@
 (declare-function org-cycle "org" (&optional arg))
 (declare-function org-cycle "org" (&optional arg))
 (declare-function org-uniquify "org" (list))
 (declare-function org-uniquify "org" (list))
 (declare-function org-current-level "org" ())
 (declare-function org-current-level "org" ())
+(declare-function org-strip-protective-commas "org" (beg end))
 (declare-function org-table-import "org-table" (file arg))
 (declare-function org-table-import "org-table" (file arg))
 (declare-function org-add-hook "org-compat"
 (declare-function org-add-hook "org-compat"
 		  (hook function &optional append local))
 		  (hook function &optional append local))
@@ -1874,9 +1875,9 @@ code ---- the results are extracted in the syntax of the source
 	(setq results-switches
 	(setq results-switches
 	      (if results-switches (concat " " results-switches) ""))
 	      (if results-switches (concat " " results-switches) ""))
 	(flet ((wrap (start finish)
 	(flet ((wrap (start finish)
-		     (goto-char beg) (insert (concat start "\n"))
 		     (goto-char end) (insert (concat finish "\n"))
 		     (goto-char end) (insert (concat finish "\n"))
-		     (setq end (point-marker)))
+		     (goto-char beg) (insert (concat start "\n"))
+		     (goto-char end) (setq end (point-marker)))
 	       (proper-list-p (it) (and (listp it) (null (cdr (last it))))))
 	       (proper-list-p (it) (and (listp it) (null (cdr (last it))))))
 	  ;; insert results based on type
 	  ;; insert results based on type
 	  (cond
 	  (cond
@@ -2115,7 +2116,8 @@ parameters when merging lists."
 	       (setq tangle (or (list (cdr pair)) tangle)))
 	       (setq tangle (or (list (cdr pair)) tangle)))
 	      (:noweb
 	      (:noweb
 	       (setq noweb (e-merge
 	       (setq noweb (e-merge
-			    '(("yes" "no" "tangle" "no-export" "strip-export"))
+			    '(("yes" "no" "tangle" "no-export"
+			       "strip-export" "eval"))
 			    noweb
 			    noweb
 			    (split-string (or (cdr pair) "")))))
 			    (split-string (or (cdr pair) "")))))
 	      (:cache
 	      (:cache
@@ -2159,7 +2161,7 @@ CONTEXT may be one of :tangle, :export or :eval."
 			   (intersect (cdr as) bs)))))
 			   (intersect (cdr as) bs)))))
     (intersect (case context
     (intersect (case context
                     (:tangle '("yes" "tangle" "no-export" "strip-export"))
                     (:tangle '("yes" "tangle" "no-export" "strip-export"))
-                    (:eval   '("yes" "no-export" "strip-export"))
+                    (:eval   '("yes" "no-export" "strip-export" "eval"))
                     (:export '("yes")))
                     (:export '("yes")))
                   (split-string (or (cdr (assoc :noweb params)) "")))))
                   (split-string (or (cdr (assoc :noweb params)) "")))))
 
 

+ 1 - 1
lisp/org-agenda.el

@@ -6213,7 +6213,7 @@ When this is the global TODO list, a prefix argument will be interpreted."
 (defvar org-global-tags-completion-table nil)
 (defvar org-global-tags-completion-table nil)
 (defvar org-agenda-filtered-by-category nil)
 (defvar org-agenda-filtered-by-category nil)
 (defvar org-agenda-filter-form nil)
 (defvar org-agenda-filter-form nil)
-
+(defvar org-agenda-filtered-by-category nil)
 (defun org-agenda-filter-by-category (strip)
 (defun org-agenda-filter-by-category (strip)
   "Keep only those lines in the agenda buffer that have a specific category.
   "Keep only those lines in the agenda buffer that have a specific category.
 The category is that of the current line."
 The category is that of the current line."

+ 1 - 1
lisp/org-attach.el

@@ -105,7 +105,7 @@ ln    create a hard link.  Note that this is not supported
   :type '(choice
   :type '(choice
 	  (const :tag "Don't store link" nil)
 	  (const :tag "Don't store link" nil)
 	  (const :tag "Link to origin location" t)
 	  (const :tag "Link to origin location" t)
-	  (const :tag "Link to the attach-dir location" 'attached)))
+	  (const :tag "Link to the attach-dir location" attached)))
 
 
 ;;;###autoload
 ;;;###autoload
 (defun org-attach ()
 (defun org-attach ()

+ 1 - 0
lisp/org-footnote.el

@@ -57,6 +57,7 @@
 (declare-function org-mark-ring-push "org" (&optional pos buffer))
 (declare-function org-mark-ring-push "org" (&optional pos buffer))
 (declare-function org-show-context "org" (&optional key))
 (declare-function org-show-context "org" (&optional key))
 (declare-function org-trim "org" (s))
 (declare-function org-trim "org" (s))
+(declare-function org-skip-whitespace "org" ())
 (declare-function outline-next-heading "outline")
 (declare-function outline-next-heading "outline")
 
 
 (defvar org-outline-regexp-bol)		; defined in org.el
 (defvar org-outline-regexp-bol)		; defined in org.el

+ 2 - 0
lisp/org-mobile.el

@@ -300,6 +300,8 @@ Also exclude files matching `org-mobile-files-exclude-regexp'."
 	(push (cons file link-name) rtn)))
 	(push (cons file link-name) rtn)))
     (nreverse rtn)))
     (nreverse rtn)))
 
 
+(defvar org-agenda-filter)
+
 ;;;###autoload
 ;;;###autoload
 (defun org-mobile-push ()
 (defun org-mobile-push ()
   "Push the current state of Org affairs to the WebDAV directory.
   "Push the current state of Org affairs to the WebDAV directory.

+ 5 - 0
lisp/org-pcomplete.el

@@ -50,6 +50,9 @@
   :tag "Org"
   :tag "Org"
   :group 'org)
   :group 'org)
 
 
+(defvar org-drawer-regexp)
+(defvar org-property-re)
+
 (defun org-thing-at-point ()
 (defun org-thing-at-point ()
   "Examine the thing at point and let the caller know what it is.
   "Examine the thing at point and let the caller know what it is.
 The return value is a string naming the thing at point."
 The return value is a string naming the thing at point."
@@ -247,6 +250,8 @@ This needs more work, to handle headings with lots of spaces in them."
 	     lst))
 	     lst))
    (substring pcomplete-stub 1)))
    (substring pcomplete-stub 1)))
 
 
+(defvar org-drawers)
+
 (defun pcomplete/org-mode/drawer ()
 (defun pcomplete/org-mode/drawer ()
   "Complete a drawer name."
   "Complete a drawer name."
   (let ((spc (save-excursion
   (let ((spc (save-excursion

+ 4 - 1
lisp/org-src.el

@@ -41,7 +41,8 @@
 (declare-function org-at-table.el-p "org" ())
 (declare-function org-at-table.el-p "org" ())
 (declare-function org-get-indentation "org" (&optional line))
 (declare-function org-get-indentation "org" (&optional line))
 (declare-function org-switch-to-buffer-other-window "org" (&rest args))
 (declare-function org-switch-to-buffer-other-window "org" (&rest args))
-(declare-function org-pop-to-buffer-same-window
+(declare-function org-strip-protective-commas "org" (beg end))
+(declare-function org-pop-to-buffer-same-window 
 		  "org-compat" (&optional buffer-or-name norecord label))
 		  "org-compat" (&optional buffer-or-name norecord label))
 
 
 (defcustom org-edit-src-region-extra nil
 (defcustom org-edit-src-region-extra nil
@@ -685,6 +686,8 @@ the language, a switch telling if the content should be in a single line."
   (interactive)
   (interactive)
   (org-src-in-org-buffer (save-buffer)))
   (org-src-in-org-buffer (save-buffer)))
 
 
+(declare-function org-babel-tangle "ob-tangle" (&optional only-this-block target-file lang))
+
 (defun org-src-tangle (arg)
 (defun org-src-tangle (arg)
   "Tangle the parent buffer."
   "Tangle the parent buffer."
   (interactive)
   (interactive)

+ 7 - 2
lisp/org.el

@@ -76,6 +76,7 @@
   (require 'gnus-sum))
   (require 'gnus-sum))
 
 
 (require 'calendar)
 (require 'calendar)
+(require 'format-spec)
 
 
 ;; Emacs 22 calendar compatibility:  Make sure the new variables are available
 ;; Emacs 22 calendar compatibility:  Make sure the new variables are available
 (when (fboundp 'defvaralias)
 (when (fboundp 'defvaralias)
@@ -4930,6 +4931,8 @@ sure that we are at the beginning of the line.")
   "Matches an headline, putting stars and text into groups.
   "Matches an headline, putting stars and text into groups.
 Stars are put in group 1 and the trimmed body in group 2.")
 Stars are put in group 1 and the trimmed body in group 2.")
 
 
+(defvar bidi-paragraph-direction)
+
 ;;;###autoload
 ;;;###autoload
 (define-derived-mode org-mode outline-mode "Org"
 (define-derived-mode org-mode outline-mode "Org"
   "Outline-based notes management and organizer, alias
   "Outline-based notes management and organizer, alias
@@ -12854,7 +12857,7 @@ headlines matching this string."
 				   (buffer-name (buffer-base-buffer)))))))
 				   (buffer-name (buffer-base-buffer)))))))
 	 (case-fold-search nil)
 	 (case-fold-search nil)
 	 (org-map-continue-from nil)
 	 (org-map-continue-from nil)
-         lspos tags
+         lspos tags tags-list
 	 (tags-alist (list (cons 0 org-file-tags)))
 	 (tags-alist (list (cons 0 org-file-tags)))
 	 (llast 0) rtn rtn1 level category i txt
 	 (llast 0) rtn rtn1 level category i txt
 	 todo marker entry priority)
 	 todo marker entry priority)
@@ -14986,6 +14989,7 @@ So these are more for recording a certain time/date."
 (defvar org-read-date-final-answer nil)
 (defvar org-read-date-final-answer nil)
 (defvar org-read-date-analyze-futurep nil)
 (defvar org-read-date-analyze-futurep nil)
 (defvar org-read-date-analyze-forced-year nil)
 (defvar org-read-date-analyze-forced-year nil)
+(defvar org-read-date-inactive)
 
 
 (defun org-read-date (&optional with-time to-time from-string prompt
 (defun org-read-date (&optional with-time to-time from-string prompt
 				default-time default-input inactive)
 				default-time default-input inactive)
@@ -15185,7 +15189,6 @@ user."
 (defvar def)
 (defvar def)
 (defvar defdecode)
 (defvar defdecode)
 (defvar with-time)
 (defvar with-time)
-(defvar org-read-date-inactive)
 (defun org-read-date-display ()
 (defun org-read-date-display ()
   "Display the current date prompt interpretation in the minibuffer."
   "Display the current date prompt interpretation in the minibuffer."
   (when org-read-date-display-live
   (when org-read-date-display-live
@@ -17008,6 +17011,8 @@ Some of the options can be changed using the variable
 	      (error "Unknown conversion type %s for latex fragments"
 	      (error "Unknown conversion type %s for latex fragments"
 		     processing-type)))))))))
 		     processing-type)))))))))
 
 
+(declare-function format-spec "format-spec" (format specification))
+
 (defun org-create-math-formula (latex-frag &optional mathml-file)
 (defun org-create-math-formula (latex-frag &optional mathml-file)
   "Convert LATEX-FRAG to MathML and store it in MATHML-FILE.
   "Convert LATEX-FRAG to MathML and store it in MATHML-FILE.
 Use `org-latex-to-mathml-convert-command'.  If the conversion is
 Use `org-latex-to-mathml-convert-command'.  If the conversion is

+ 20 - 2
testing/lisp/test-ob-lilypond.el

@@ -42,10 +42,10 @@
   (should (boundp 'ly-version)))
   (should (boundp 'ly-version)))
 
 
 (ert-deftest ob-lilypond/ly-version-command ()
 (ert-deftest ob-lilypond/ly-version-command ()
-  (should (equal "ob-lilypond version 0.3" (ly-version)))
+  (should (equal "ob-lilypond version 7.6" (ly-version)))
   (with-temp-buffer
   (with-temp-buffer
     (ly-version t)
     (ly-version t)
-    (should (equal "ob-lilypond version 0.3"
+    (should (equal "ob-lilypond version 7.6"
                    (buffer-substring (point-min) (point-max))))))
                    (buffer-substring (point-min) (point-max))))))
 
 
 (ert-deftest ob-lilypond/ly-compile-lilyfile ()
 (ert-deftest ob-lilypond/ly-compile-lilyfile ()
@@ -56,6 +56,7 @@
              t                          ;display
              t                          ;display
              ,(if ly-gen-png  "--png"  "") ;&rest...
              ,(if ly-gen-png  "--png"  "") ;&rest...
              ,(if ly-gen-html "--html" "")   
              ,(if ly-gen-html "--html" "")   
+             ,(if ly-gen-pdf "--pdf" "")
              ,(if ly-use-eps  "-dbackend=eps" "")
              ,(if ly-use-eps  "-dbackend=eps" "")
              ,(if ly-gen-svg  "-dbackend=svg" "")
              ,(if ly-gen-svg  "-dbackend=svg" "")
              "--output=test-file"
              "--output=test-file"
@@ -116,6 +117,9 @@
 (ert-deftest ob-lilypond/ly-gen-html ()
 (ert-deftest ob-lilypond/ly-gen-html ()
   (should (boundp 'ly-gen-html)))
   (should (boundp 'ly-gen-html)))
 
 
+(ert-deftest ob-lilypond/ly-gen-html ()
+  (should (boundp 'ly-gen-pdf)))
+
 (ert-deftest ob-lilypond/use-eps ()
 (ert-deftest ob-lilypond/use-eps ()
   (should (boundp 'ly-use-eps)))
   (should (boundp 'ly-use-eps)))
 
 
@@ -296,6 +300,18 @@
     (ly-toggle-pdf-display)
     (ly-toggle-pdf-display)
     (should (not ly-display-pdf-post-tangle))))
     (should (not ly-display-pdf-post-tangle))))
 
 
+(ert-deftest ob-lilypond/ly-toggle-pdf-generation-toggles-flag ()
+  (if ly-gen-pdf
+      (progn
+        (ly-toggle-pdf-generation)
+         (should (not ly-gen-pdf))
+        (ly-toggle-pdf-generation)
+        (should ly-gen-pdf))
+    (ly-toggle-pdf-generation)
+    (should ly-gen-pdf)
+    (ly-toggle-pdf-generation)
+    (should (not ly-gen-pdf))))
+
 (ert-deftest ob-lilypond/ly-toggle-arrange-mode ()
 (ert-deftest ob-lilypond/ly-toggle-arrange-mode ()
   (if ly-arrange-mode
   (if ly-arrange-mode
       (progn
       (progn
@@ -348,6 +364,7 @@
   (should (equal '((:tangle . "yes")
   (should (equal '((:tangle . "yes")
                    (:noweb . "yes")
                    (:noweb . "yes")
                    (:results . "silent")
                    (:results . "silent")
+                   (:cache . "yes")
                    (:comments . "yes"))
                    (:comments . "yes"))
                  (ly-set-header-args t)))
                  (ly-set-header-args t)))
   (should (equal '((:results . "file")
   (should (equal '((:results . "file")
@@ -359,6 +376,7 @@
   (should (equal '((:tangle . "yes")
   (should (equal '((:tangle . "yes")
                    (:noweb . "yes")
                    (:noweb . "yes")
                    (:results . "silent")
                    (:results . "silent")
+                   (:cache . "yes")
                    (:comments . "yes"))
                    (:comments . "yes"))
                  org-babel-default-header-args:lilypond))
                  org-babel-default-header-args:lilypond))
   (ly-set-header-args nil)
   (ly-set-header-args nil)