summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyle Meyer <kyle@kyleam.com>2014-02-02 23:59:45 -0500
committerKyle Meyer <kyle@kyleam.com>2014-02-03 00:50:18 -0500
commit5164c4d378ed8bb9a6335dd6c177be7027140014 (patch)
tree50737e5ce5987d6e1bb9867405aec539f2d79597
parentf8725fe18333d96b23e7f1473de991114f8f181a (diff)
downloadbog-5164c4d378ed8bb9a6335dd6c177be7027140014.tar.gz
Add function to create combined BibTeX file
-rw-r--r--bog-tests.el14
-rw-r--r--bog.el27
2 files changed, 41 insertions, 0 deletions
diff --git a/bog-tests.el b/bog-tests.el
index 24b5d0d..5b0cd79 100644
--- a/bog-tests.el
+++ b/bog-tests.el
@@ -157,3 +157,17 @@
(should new-buffer)
(kill-buffer new-buffer)
(delete-file new-file))))
+
+;; `bog-collect-references'
+
+(ert-deftest bog-collect-references ()
+ (with-temp-buffer
+ (insert "abc1900word\nhij2000word\nefg1800word\n")
+ (should (equal (bog-collect-references)
+ '("abc1900word" "efg1800word" "hij2000word")))))
+
+(ert-deftest bog-collect-references-no-sort ()
+ (with-temp-buffer
+ (insert "abc1900word\nhij2000word\nefg1800word\n")
+ (should (equal (bog-collect-references t)
+ '("efg1800word" "hij2000word" "abc1900word")))))
diff --git a/bog.el b/bog.el
index 7e81885..52ad8ad 100644
--- a/bog.el
+++ b/bog.el
@@ -262,6 +262,33 @@ file."
(unless was-open
(kill-buffer buffer)))))
+;;;###autoload
+(defun bog-create-combined-bib ()
+ "Create buffer that has entries for all citekeys in buffer."
+ (interactive)
+ (let ((bib-buffer (get-buffer-create "*Bib*"))
+ (refs (-map 'bog-citekey-as-bib (bog-collect-references))))
+ (--each refs (unless (file-exists-p it) (error "%s does not exist" it)))
+ (switch-to-buffer-other-window bib-buffer)
+ (--each refs
+ (insert "\n")
+ (insert-file-contents it)
+ (goto-char (point-max)))
+ (bibtex-mode)))
+
+(defun bog-collect-references (&optional no-sort)
+ "Return names in buffer that match `bog-citekey-format'.
+If NO-SORT, citekeys are returned in reverse order that they
+occur in buffer instead of alphabetical order."
+ (let (refs)
+ (save-excursion
+ (goto-char (point-min))
+ (while (re-search-forward bog-citekey-format nil t)
+ (add-to-list 'refs (match-string-no-properties 0)))
+ (if no-sort
+ refs
+ (--sort (string-lessp it other) refs)))))
+
(defun bog-citekey-as-bib (citekey)
(expand-file-name (concat citekey ".bib") bog-bib-directory))