| 
					
				 | 
			
			
				@@ -103,9 +103,9 @@ return nil instead." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (defun org-bibtex-get-arguments (keyword) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   "Return \"bibtex2html\" arguments specified by the user. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 KEYWORD is a \"BIBLIOGRAPHY\" keyword. Return value is a plist 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-containing `:options' and `:limit' properties. The former 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-contains a list of strings to be passed as options ot 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-\"bibtex2html\" process. The latter contains a boolean." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+containing `:options' and `:limit' properties.  The former 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+contains a list of strings to be passed as options to 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+\"bibtex2html\" process.  The latter contains a boolean." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   (let ((value (org-element-property :value keyword))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     (and value 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          (string-match "\\(\\S-+\\)[ \t]+\\(\\S-+\\)\\(.*\\)" value) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -201,9 +201,50 @@ Return new parse tree." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ;; Return parse tree unchanged. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   tree) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+(defun org-bibtex-merge-contiguous-citations (tree backend info) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  "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) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    (org-element-map tree '(link latex-fragment) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      (lambda (object) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	(when (org-bibtex-citation-p object) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (let ((new-citation (list 'latex-fragment 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				    (list :value "" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					  :post-blank (org-element-property 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						       :post-blank object))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    ;; Insert NEW-CITATION right before OBJECT. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (org-element-insert-before new-citation object) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    ;; Remove all subsequent contiguous citations from parse 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    ;; tree, keeping only their citation key. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (let ((keys (list (org-bibtex-get-citation-key object))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		  next) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	      (while (and (setq next (org-export-get-next-element object info)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			  (or (and (stringp next) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				   (not (org-string-match-p "\\S-" next))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			      (org-bibtex-citation-p next))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		(unless (stringp next) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		  (push (org-bibtex-get-citation-key next) keys)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		(org-element-extract-element object) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		(setq object next)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	      (org-element-extract-element object) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	      ;; Eventually merge all keys within NEW-CITATION.  Also 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	      ;; ensure NEW-CITATION has the same :post-blank property 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	      ;; as the last citation removed. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	      (org-element-put-property 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	       new-citation 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	       :post-blank (org-element-property :post-blank object)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	      (org-element-put-property 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	       new-citation 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	       :value (format "\\cite{%s}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			      (mapconcat 'identity (nreverse keys) ","))))))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  tree) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (eval-after-load 'ox 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  '(add-to-list 'org-export-filter-parse-tree-functions 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                'org-bibtex-process-bib-files)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  '(progn (add-to-list 'org-export-filter-parse-tree-functions 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		       'org-bibtex-process-bib-files) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (add-to-list 'org-export-filter-parse-tree-functions 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		       'org-bibtex-merge-contiguous-citations))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -222,16 +263,7 @@ 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) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -258,35 +290,18 @@ Fallback to `html' 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 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (mapconcat 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-             (lambda (key) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-               (let ((key (org-trim 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 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]*") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	     ""))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            (format "[%s]" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		    (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 fragment) ",") ",")))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (ad-activate 'org-html-keyword) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (ad-activate 'org-html-latex-fragment) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-(ad-activate 'org-html-link) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (provide 'ox-bibtex) 
			 |