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/ ;; http://www.lri.fr/~filliatr/bibtex2html/
;; ;;
;; It also introduces "cite" syntax for Org links.
;;
;; The usage is as follows: ;; The usage is as follows:
;; ;;
;; #+BIBLIOGRAPHY: bibfilebasename stylename optional-options ;; #+BIBLIOGRAPHY: bibfilebasename stylename optional-options
@ -64,9 +66,18 @@
;; into the TeX file when exporting. ;; into the TeX file when exporting.
;; ;;
;; For HTML export it: ;; 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, ;; 2) creates a foo.html and foo_bib.html,
;; 3) includes the contents of foo.html in the exported HTML file. ;; 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 ;;; Internal Functions
@ -109,18 +120,22 @@ contains a list of strings to be passed as options ot
(setq limit (not (equal "nil" value)))) (setq limit (not (equal "nil" value))))
((equal "option" key) (push value options))))))))) ((equal "option" key) (push value options)))))))))
(defun org-bibtex-citation-p (fragment) (defun org-bibtex-citation-p (object)
"Non-nil when a LaTeX macro is a citation. "Non-nil when OBJECT is a citation."
FRAGMENT is a `latex-fragment' type object." (case (org-element-type object)
(string-match "\\`\\\\cite{" (org-element-property :value fragment))) (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) (defun org-bibtex-get-citation-key (citation)
"Return key for a given citation, as a string. "Return key for a given citation, as a string.
CITATION is a `latex-fragment' type object satisfying to CITATION is a `latex-fragment' or `link' type object satisfying
`org-bibtex-citation-p' predicate." 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))) (let ((value (org-element-property :value citation)))
(and (string-match "\\`\\\\cite{" value) (and (string-match "\\`\\\\cite{" value)
(substring value (match-end 0) -1)))) (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)) (concat (and style (format "\\bibliographystyle{%s}\n" style))
(format "\\bibliography{%s}" file)))))))) (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-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) ",") (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-keyword)
(ad-activate 'org-html-latex-fragment) (ad-activate 'org-html-latex-fragment)
(ad-activate 'org-html-link)
;;;; Filter ;;;; Filter
@ -202,10 +243,10 @@ Return new parse tree. This function assumes current back-end is HTML."
;; argument. ;; argument.
(when (plist-get arguments :limit) (when (plist-get arguments :limit)
(let ((citations (let ((citations
(org-element-map tree 'latex-fragment (org-element-map tree '(latex-fragment link)
(lambda (fragment) (lambda (object)
(and (org-bibtex-citation-p fragment) (and (org-bibtex-citation-p object)
(org-bibtex-get-citation-key fragment)))))) (org-bibtex-get-citation-key object))))))
(with-temp-file (setq temp-file (make-temp-file "ox-bibtex")) (with-temp-file (setq temp-file (make-temp-file "ox-bibtex"))
(insert (mapconcat 'identity citations "\n"))) (insert (mapconcat 'identity citations "\n")))
(setq arguments (setq arguments