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

This commit is contained in:
Bastien Guerry 2013-07-10 12:11:32 +02:00
commit e29a4703c7
1 changed files with 55 additions and 14 deletions

View File

@ -28,6 +28,8 @@
;;
;; http://www.lri.fr/~filliatr/bibtex2html/
;;
;; It also introduces "cite" syntax for Org links.
;;
;; The usage is as follows:
;;
;; #+BIBLIOGRAPHY: bibfilebasename stylename optional-options
@ -64,9 +66,18 @@
;; into the TeX file when exporting.
;;
;; For HTML export it:
;; 1) converts all \cite{foo} to links to the bibliography,
;; 1) converts all \cite{foo} and [[cite:foo]] to links to the
;; bibliography,
;; 2) creates a foo.html and foo_bib.html,
;; 3) includes the contents of foo.html in the exported HTML file.
;;
;; For LaTeX export it:
;; 1) converts all [[cite:foo]] to \cite{foo}.
;; Initialization
(eval-when-compile (require 'cl))
(org-add-link-type "cite" 'ebib)
;;; Internal Functions
@ -109,18 +120,22 @@ contains a list of strings to be passed as options ot
(setq limit (not (equal "nil" value))))
((equal "option" key) (push value options)))))))))
(defun org-bibtex-citation-p (fragment)
"Non-nil when a LaTeX macro is a citation.
FRAGMENT is a `latex-fragment' type object."
(string-match "\\`\\\\cite{" (org-element-property :value fragment)))
(defun org-bibtex-citation-p (object)
"Non-nil when OBJECT is a citation."
(case (org-element-type object)
(link (equal (org-element-property :type object) "cite"))
(latex-fragment
(string-match "\\`\\\\cite{" (org-element-property :value object)))))
(defun org-bibtex-get-citation-key (citation)
"Return key for a given citation, as a string.
CITATION is a `latex-fragment' type object satisfying to
`org-bibtex-citation-p' predicate."
(let ((value (org-element-property :value citation)))
(and (string-match "\\`\\\\cite{" value)
(substring value (match-end 0) -1))))
CITATION is a `latex-fragment' or `link' type object satisfying
to `org-bibtex-citation-p' predicate."
(if (eq (org-element-type citation) 'link)
(org-element-property :path citation)
(let ((value (org-element-property :value citation)))
(and (string-match "\\`\\\\cite{" value)
(substring value (match-end 0) -1)))))
@ -139,7 +154,16 @@ Fallback to `latex' back-end for other keywords."
(concat (and style (format "\\bibliographystyle{%s}\n" style))
(format "\\bibliography{%s}" file))))))))
(defadvice org-latex-link (around bibtex-link)
"Translate \"cite\" type links into LaTeX syntax.
Fallback to `latex' back-end for other keywords."
(let ((link (ad-get-arg 0)))
(if (not (org-bibtex-citation-p link)) ad-do-it
(setq ad-return-value
(format "\\cite{%s}" (org-bibtex-get-citation-key link))))))
(ad-activate 'org-latex-keyword)
(ad-activate 'org-latex-link)
@ -176,8 +200,25 @@ Fallback to `html' back-end for other keywords."
(org-split-string (org-bibtex-get-citation-key fragment) ",")
"")))))
(defadvice org-html-link (around bibtex-link)
"Translate \"cite:\" type links into HTML syntax.
Fallback to `html' back-end for other types."
(let ((link (ad-get-arg 0)))
(if (not (org-bibtex-citation-p link)) ad-do-it
(setq ad-return-value
(mapconcat
(lambda (key)
(format "[<a href=\"#%s\">%s</a>]"
key
(or (cdr (assoc key org-bibtex-html-entries-alist))
key)))
(org-split-string (org-bibtex-get-citation-key link)
"[ \t]*,[ \t]*")
"")))))
(ad-activate 'org-html-keyword)
(ad-activate 'org-html-latex-fragment)
(ad-activate 'org-html-link)
;;;; Filter
@ -202,10 +243,10 @@ Return new parse tree. This function assumes current back-end is HTML."
;; argument.
(when (plist-get arguments :limit)
(let ((citations
(org-element-map tree 'latex-fragment
(lambda (fragment)
(and (org-bibtex-citation-p fragment)
(org-bibtex-get-citation-key fragment))))))
(org-element-map tree '(latex-fragment link)
(lambda (object)
(and (org-bibtex-citation-p object)
(org-bibtex-get-citation-key object))))))
(with-temp-file (setq temp-file (make-temp-file "ox-bibtex"))
(insert (mapconcat 'identity citations "\n")))
(setq arguments