ascii export backend support to ox-bibtex w/pandoc
This commit is contained in:
parent
baa44f6542
commit
e2ab44d9fb
|
@ -23,11 +23,15 @@
|
|||
|
||||
;;; Commentary:
|
||||
;;
|
||||
;; This is an utility to handle BibTeX export to both LaTeX and html
|
||||
;; exports. It uses the bibtex2html software from:
|
||||
;; This is an utility to handle BibTeX export to LaTeX, html and ascii
|
||||
;; exports. For HTML and ascii it uses the bibtex2html software from:
|
||||
;;
|
||||
;; http://www.lri.fr/~filliatr/bibtex2html/
|
||||
;;
|
||||
;; For ascii it uses the pandoc software from:
|
||||
;;
|
||||
;; http://johnmacfarlane.net/pandoc/
|
||||
;;
|
||||
;; It also introduces "cite" syntax for Org links.
|
||||
;;
|
||||
;; The usage is as follows:
|
||||
|
@ -71,6 +75,12 @@
|
|||
;; 2) creates a foo.html and foo_bib.html,
|
||||
;; 3) includes the contents of foo.html in the exported HTML file.
|
||||
;;
|
||||
;; For ascii export it:
|
||||
;; 1) converts all \cite{foo} and [[cite:foo]] to links to the
|
||||
;; bibliography,
|
||||
;; 2) creates a foo.txt and foo_bib.html,
|
||||
;; 3) includes the contents of foo.txt in the exported ascii file.
|
||||
;;
|
||||
;; For LaTeX export it:
|
||||
;; 1) converts all [[cite:foo]] to \cite{foo}.
|
||||
|
||||
|
@ -144,7 +154,8 @@ to `org-bibtex-citation-p' predicate."
|
|||
(defun org-bibtex-process-bib-files (tree backend info)
|
||||
"Send each bibliography in parse tree to \"bibtex2html\" process.
|
||||
Return new parse tree."
|
||||
(when (org-export-derived-backend-p backend 'html)
|
||||
(when (or (org-export-derived-backend-p backend 'html)
|
||||
(org-export-derived-backend-p backend 'ascii))
|
||||
;; Initialize dynamically scoped variables. The first one
|
||||
;; contain an alist between keyword objects and their HTML
|
||||
;; translation. The second one will contain an alist between
|
||||
|
@ -183,21 +194,45 @@ Return new parse tree."
|
|||
(list (concat file ".bib")))))
|
||||
(error "Executing bibtex2html failed"))
|
||||
(and temp-file (delete-file temp-file))
|
||||
;; Open produced HTML file, wrap references within a block and
|
||||
;; return it.
|
||||
;; Open produced HTML file, and collect Bibtex key names
|
||||
(with-temp-buffer
|
||||
(insert "<div id=\"bibliography\">\n<h2>References</h2>\n")
|
||||
(insert-file-contents (concat file ".html"))
|
||||
(insert "\n</div>")
|
||||
;; Update `org-bibtex-html-keywords-alist'.
|
||||
(push (cons keyword (buffer-string))
|
||||
org-bibtex-html-keywords-alist)
|
||||
;; Update `org-bibtex-html-entries-alist'.
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward
|
||||
"a name=\"\\([-_a-zA-Z0-9:]+\\)\">\\(\\w+\\)" nil t)
|
||||
(push (cons (match-string 1) (match-string 2))
|
||||
org-bibtex-html-entries-alist))))))))
|
||||
org-bibtex-html-entries-alist)))
|
||||
;; Open produced HTML file, wrap references within a block and
|
||||
;; return it.
|
||||
(with-temp-buffer
|
||||
(cond
|
||||
((org-export-derived-backend-p backend 'html)
|
||||
(insert "<div id=\"bibliography\">\n<h2>References</h2>\n")
|
||||
(insert-file-contents (concat file ".html"))
|
||||
(insert "\n</div>"))
|
||||
((org-export-derived-backend-p backend 'ascii)
|
||||
;; convert HTML references to text w/pandoc
|
||||
(unless (eq 0 (call-process "pandoc" nil nil nil
|
||||
(concat file ".html")
|
||||
"-o"
|
||||
(concat file ".txt")))
|
||||
(error "Executing pandoc failed"))
|
||||
(insert "References\n==========\n\n")
|
||||
(insert-file-contents (concat file ".txt"))
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward
|
||||
"\\[ \\[bib\\][^ ]+ \\(\\]\\||[\n\r]\\)" nil t)
|
||||
(replace-match ""))
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward "\\( \\]\\| \\]\\| |\\)" nil t)
|
||||
(replace-match ""))
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward "[\n\r]\\([\n\r][\n\r]\\)" nil t)
|
||||
(replace-match "\\1"))))
|
||||
;; Update `org-bibtex-html-keywords-alist'.
|
||||
(push (cons keyword (buffer-string))
|
||||
org-bibtex-html-keywords-alist)))))))
|
||||
;; Return parse tree unchanged.
|
||||
tree)
|
||||
|
||||
|
@ -205,7 +240,7 @@ Return new parse tree."
|
|||
"Merge all contiguous citation in parse tree.
|
||||
As a side effect, this filter will also turn all \"cite\" links
|
||||
into \"\\cite{...}\" LaTeX fragments."
|
||||
(when (org-export-derived-backend-p backend 'html 'latex)
|
||||
(when (org-export-derived-backend-p backend 'html 'latex 'ascii)
|
||||
(org-element-map tree '(link latex-fragment)
|
||||
(lambda (object)
|
||||
(when (org-bibtex-citation-p object)
|
||||
|
@ -303,6 +338,33 @@ Fallback to `html' back-end for other keywords."
|
|||
(ad-activate 'org-html-keyword)
|
||||
(ad-activate 'org-html-latex-fragment)
|
||||
|
||||
|
||||
;;; Ascii Part
|
||||
(defadvice org-ascii-keyword (around bibtex-keyword)
|
||||
"Translate \"BIBLIOGRAPHY\" keywords into ascii syntax.
|
||||
Fallback to `ascii' back-end for other keywords."
|
||||
(let ((keyword (ad-get-arg 0)))
|
||||
(if (not (equal (org-element-property :key keyword) "BIBLIOGRAPHY"))
|
||||
ad-do-it
|
||||
(setq ad-return-value
|
||||
(cdr (assq keyword org-bibtex-html-keywords-alist))))))
|
||||
|
||||
(defadvice org-ascii-latex-fragment (around bibtex-citation)
|
||||
"Translate \"\\cite\" LaTeX fragments into ascii syntax.
|
||||
Fallback to `ascii' back-end for other keywords."
|
||||
(let ((fragment (ad-get-arg 0)))
|
||||
(if (not (org-bibtex-citation-p fragment)) ad-do-it
|
||||
(setq ad-return-value
|
||||
(format "[%s]"
|
||||
(mapconcat
|
||||
(lambda (key)
|
||||
(or (cdr (assoc key org-bibtex-html-entries-alist))
|
||||
key))
|
||||
(org-split-string
|
||||
(org-bibtex-get-citation-key fragment) ",") ","))))))
|
||||
|
||||
(ad-activate 'org-ascii-keyword)
|
||||
(ad-activate 'org-ascii-latex-fragment)
|
||||
|
||||
(provide 'ox-bibtex)
|
||||
|
||||
|
|
Loading…
Reference in New Issue