X-Git-Url: https://git.donarmstrong.com/?p=org-ref.git;a=blobdiff_plain;f=org-ref.el;h=f866ab975b4667bb7fe5db8e82e762e37eac2b38;hp=71252ebccd34183bb0a2f0db2b6d32177622dbd5;hb=8e149d3157543add01560c9e5face7a75cbb8b18;hpb=5f80ebd42388dea16aeb397e0685500c4101f9cf diff --git a/org-ref.el b/org-ref.el index 71252eb..f866ab9 100644 --- a/org-ref.el +++ b/org-ref.el @@ -328,12 +328,12 @@ You will see a message in the minibuffer when on a cite, ref or label link." ":\\([a-zA-Z0-9-_:\\./]*,?\\)*")) -(setq org-ref-label-re - "label:\\([a-zA-Z0-9-_:]*,?\\)*") +(defvar org-ref-label-re + "label:\\([a-zA-Z0-9-_:]*,?\\)*") -(setq org-ref-ref-re - "\\(eq\\)?ref:\\([a-zA-Z0-9-_:]*,?\\)*") +(defvar org-ref-ref-re + "\\(eq\\)?ref:\\([a-zA-Z0-9-_:]*,?\\)*") (defface org-ref-cite-face @@ -499,14 +499,15 @@ Format according to the type in `org-ref-bibliography-entry-format'." (file) (entry) (bibtex-entry) (entry-type) (format)) (setq file (catch 'result - (loop for file in org-ref-bibliography-files do - (if (org-ref-key-in-file-p key (file-truename file)) - (throw 'result file) - (message "%s not found in %s" - key (file-truename file)))))) + (cl-loop for file in org-ref-bibliography-files do + (if (org-ref-key-in-file-p key (file-truename file)) + (throw 'result file) + (message "%s not found in %s" + key (file-truename file)))))) (with-temp-buffer (insert-file-contents file) + (bibtex-set-dialect nil t) (bibtex-search-entry key nil 0) (setq bibtex-entry (bibtex-parse-entry)) ;; downcase field names so they work in the format-citation code @@ -574,13 +575,14 @@ Format according to the type in `org-ref-bibliography-entry-format'." (file) (entry) (bibtex-entry) (entry-type) (format)) (setq file (catch 'result - (loop for file in org-ref-bibliography-files do + (cl-loop for file in org-ref-bibliography-files do (if (org-ref-key-in-file-p key (file-truename file)) (throw 'result file) (message "%s not found in %s" key (file-truename file)))))) (with-temp-buffer (insert-file-contents file) + (bibtex-set-dialect nil t) (bibtex-search-entry key nil 0) (setq entry (bibtex-parse-entry)) (format "** %s - %s @@ -653,26 +655,27 @@ Format according to the type in `org-ref-bibliography-entry-format'." (split-string (org-element-property :path object) ",")) - ;; now if we have comma separated bibliographies - ;; we find the one clicked on. we want to - ;; search forward to next comma from point - (save-excursion - (if (search-forward "," link-string-end 1 1) - ;; we found a match - (setq key-end (- (match-end 0) 1)) - ;; no comma found so take the point - (setq key-end (point)))) - ;; and backward to previous comma from point - (save-excursion - (if (search-backward "," link-string-beginning 1 1) - ;; we found a match - (setq key-beginning (+ (match-beginning 0) 1)) - (setq key-beginning (point)))) ; no match found + (let (key-beginning key-end) + ;; now if we have comma separated bibliographies + ;; we find the one clicked on. we want to + ;; search forward to next comma from point + (save-excursion + (if (search-forward "," link-string-end 1 1) + ;; we found a match + (setq key-end (- (match-end 0) 1)) + ;; no comma found so take the point + (setq key-end (point)))) + ;; and backward to previous comma from point + (save-excursion + (if (search-backward "," link-string-beginning 1 1) + ;; we found a match + (setq key-beginning (+ (match-beginning 0) 1)) + (setq key-beginning (point)))) ; no match found ;; save the key we clicked on. - (setq bibfile (org-ref-strip-string - (buffer-substring key-beginning key-end))) - ;; open file on click - (find-file bibfile))) + (setq bibfile (org-ref-strip-string + (buffer-substring key-beginning key-end))) + ;; open file on click + (find-file bibfile)))) ;; formatting code (lambda (keyword desc format) @@ -719,21 +722,22 @@ Format according to the type in `org-ref-bibliography-entry-format'." (set (make-local-variable 'reftex-default-bibliography) (split-string (org-element-property :path object) ",")) - ;; now if we have comma separated bibliographies - ;; we find the one clicked on. we want to - ;; search forward to next comma from point - (save-excursion - (if (search-forward "," link-string-end 1 1) - (setq key-end (- (match-end 0) 1)) ; we found a match - (setq key-end (point)))) ; no comma found so take the point - ;; and backward to previous comma from point - (save-excursion - (if (search-backward "," link-string-beginning 1 1) - (setq key-beginning (+ (match-beginning 0) 1)) ; we found a match - (setq key-beginning (point)))) ; no match found - ;; save the key we clicked on. - (setq bibfile (org-ref-strip-string (buffer-substring key-beginning key-end))) - (find-file bibfile))) ; open file on click + (let (key-beginning key-end) + ;; now if we have comma separated bibliographies + ;; we find the one clicked on. we want to + ;; search forward to next comma from point + (save-excursion + (if (search-forward "," link-string-end 1 1) + (setq key-end (- (match-end 0) 1)) ; we found a match + (setq key-end (point)))) ; no comma found so take the point + ;; and backward to previous comma from point + (save-excursion + (if (search-backward "," link-string-beginning 1 1) + (setq key-beginning (+ (match-beginning 0) 1)) ; we found a match + (setq key-beginning (point)))) ; no match found + ;; save the key we clicked on. + (setq bibfile (org-ref-strip-string (buffer-substring key-beginning key-end))) + (find-file bibfile)))) ; open file on click ;; formatting code (lambda (keyword desc format) @@ -825,21 +829,22 @@ ARG does nothing." (set (make-local-variable 'reftex-default-addbibresource) (split-string (org-element-property :path object) ",")) - ;; now if we have comma separated bibliographies - ;; we find the one clicked on. we want to - ;; search forward to next comma from point - (save-excursion - (if (search-forward "," link-string-end 1 1) - (setq key-end (- (match-end 0) 1)) ; we found a match - (setq key-end (point)))) ; no comma found so take the point - ;; and backward to previous comma from point - (save-excursion - (if (search-backward "," link-string-beginning 1 1) - (setq key-beginning (+ (match-beginning 0) 1)) ; we found a match - (setq key-beginning (point)))) ; no match found - ;; save the key we clicked on. - (setq bibfile (org-ref-strip-string (buffer-substring key-beginning key-end))) - (find-file bibfile))) ; open file on click + (let (key-beginning key-end) + ;; now if we have comma separated bibliographies + ;; we find the one clicked on. we want to + ;; search forward to next comma from point + (save-excursion + (if (search-forward "," link-string-end 1 1) + (setq key-end (- (match-end 0) 1)) ; we found a match + (setq key-end (point)))) ; no comma found so take the point + ;; and backward to previous comma from point + (save-excursion + (if (search-backward "," link-string-beginning 1 1) + (setq key-beginning (+ (match-beginning 0) 1)) ; we found a match + (setq key-beginning (point)))) ; no match found + ;; save the key we clicked on. + (setq bibfile (org-ref-strip-string (buffer-substring key-beginning key-end))) + (find-file bibfile)))) ; open file on click ;; formatting code (lambda (keyword desc format) @@ -866,11 +871,11 @@ ARG does nothing." (string-match-p "[^.]*\\.\\(png\\|jpg\\|eps\\|pdf\\)$" (org-element-property :path link))) - (incf counter) + (cl-incf counter) (let* ((start (org-element-property :begin link)) (parent (car (cdr (org-element-property :parent link)))) - (caption (caaar (plist-get parent :caption))) + (caption (cl-caaar (plist-get parent :caption))) (name (plist-get parent :name))) (if caption (format @@ -909,10 +914,10 @@ ARG does nothing." (org-element-map (org-element-parse-buffer 'element) 'table (lambda (table) "create a link for to the table" - (incf counter) + (cl-incf counter) (let ((start (org-element-property :begin table)) (name (org-element-property :name table)) - (caption (caaar (org-element-property :caption table)))) + (caption (cl-caaar (org-element-property :caption table)))) (if caption (format "[[elisp:(progn (switch-to-buffer \"%s\")(widen)(goto-char %s))][table %s: %s]] %s\n" @@ -969,7 +974,7 @@ ARG does nothing." (org-ref-count-labels label)))) (lambda (keyword desc format) (cond - ((eq format 'html) (format "()" path)) + ((eq format 'html) (format "()" keyword)) ((eq format 'latex) (format "\\label{%s}" keyword))))) @@ -1048,7 +1053,7 @@ ARG does nothing." ;formatting (lambda (keyword desc format) (cond - ((eq format 'html) (format "(%s)" path)) + ((eq format 'html) (format "%s" keyword keyword)) ((eq format 'latex) (format "\\ref{%s}" keyword))))) @@ -1223,19 +1228,19 @@ Use C-u C-u to insert a [[#custom-id]] link" (helm :input (thing-at-point 'word) :sources `(((name . "Available labels to ref") - (candidates . ,(loop for label in labels - for context in contexts - ;; we do some kludgy adding spaces - ;; and bars to make it "easier" to - ;; see in helm. - collect (cons (concat - label "\n" - (mapconcat - (lambda (x) - (concat " |" x)) - (split-string context "\n") - "\n" - ) "\n\n") label))) + (candidates . ,(cl-loop for label in labels + for context in contexts + ;; we do some kludgy adding spaces + ;; and bars to make it "easier" to + ;; see in helm. + collect (cons (concat + label "\n" + (mapconcat + (lambda (x) + (concat " |" x)) + (split-string context "\n") + "\n" + ) "\n\n") label))) ;; default action to replace or insert ref link. (action . (lambda (label) (switch-to-buffer ,cb) @@ -1419,28 +1424,30 @@ keyword we clicked on. We also strip the text properties." ;; this means no description in the link (progn ;; we need the link path start and end - (save-excursion - (goto-char (org-element-property :begin object)) - (search-forward link-string nil nil 1) - (setq link-string-beginning (match-beginning 0)) - (setq link-string-end (match-end 0))) + (let (link-string-beginning link-string-end) + (save-excursion + (goto-char (org-element-property :begin object)) + (search-forward link-string nil nil 1) + (setq link-string-beginning (match-beginning 0)) + (setq link-string-end (match-end 0))) - ;; The key is the text between commas, or the link boundaries - (save-excursion - (if (search-forward "," link-string-end t 1) - (setq key-end (- (match-end 0) 1)) ; we found a match - (setq key-end link-string-end))) ; no comma found so take the end - ;; and backward to previous comma from point which defines the start character - (save-excursion - (if (search-backward "," link-string-beginning 1 1) - (setq key-beginning (+ (match-beginning 0) 1)) ; we found a match - (setq key-beginning link-string-beginning))) ; no match found - ;; save the key we clicked on. - (setq bibtex-key - (org-ref-strip-string - (buffer-substring key-beginning key-end))) - (set-text-properties 0 (length bibtex-key) nil bibtex-key) - bibtex-key) + (let (key-beginning key-end) + ;; The key is the text between commas, or the link boundaries + (save-excursion + (if (search-forward "," link-string-end t 1) + (setq key-end (- (match-end 0) 1)) ; we found a match + (setq key-end link-string-end))) ; no comma found so take the end + ;; and backward to previous comma from point which defines the start character + (save-excursion + (if (search-backward "," link-string-beginning 1 1) + (setq key-beginning (+ (match-beginning 0) 1)) ; we found a match + (setq key-beginning link-string-beginning))) ; no match found + ;; save the key we clicked on. + (let ((bibtex-key + (org-ref-strip-string + (buffer-substring key-beginning key-end)))) + (set-text-properties 0 (length bibtex-key) nil bibtex-key) + bibtex-key)))) ;; link with description. assume only one key link-string))) @@ -1507,9 +1514,9 @@ falling back to what the user has set in `org-ref-default-bibliography'" (unless key (setq key (org-ref-get-bibtex-key-under-cursor))) (setq file (catch 'result - (loop for file in org-ref-bibliography-files do - (if (org-ref-key-in-file-p key (file-truename file)) - (throw 'result file))))) + (cl-loop for file in org-ref-bibliography-files do + (if (org-ref-key-in-file-p key (file-truename file)) + (throw 'result file))))) (cons key file))) ;; *** key at point functions @@ -1534,6 +1541,7 @@ falling back to what the user has set in `org-ref-default-bibliography'" (save-excursion (with-temp-buffer (insert-file-contents bibfile) + (bibtex-set-dialect nil t) (bibtex-search-entry key) ;; I like this better than bibtex-url which does not always find ;; the urls @@ -1560,6 +1568,7 @@ falling back to what the user has set in `org-ref-default-bibliography'" (save-excursion (with-temp-buffer (insert-file-contents bibfile) + (bibtex-set-dialect nil t) (bibtex-search-entry key) (org-ref-open-bibtex-notes))))) @@ -1574,6 +1583,7 @@ falling back to what the user has set in `org-ref-default-bibliography'" (message "%s" (progn (with-temp-buffer (insert-file-contents bibfile) + (bibtex-set-dialect nil t) (bibtex-search-entry key) (org-ref-bib-citation)))))) @@ -1646,6 +1656,7 @@ Prompt for NEW-FILE includes bib files in `org-ref-default-bibliography', and bi (save-excursion (with-temp-buffer (insert-file-contents bibfile) + (bibtex-set-dialect nil t) (bibtex-search-entry key) (setq doi (bibtex-autokey-get-field "doi")) ;; in case doi is a url, remove the url part. @@ -1703,11 +1714,13 @@ get a lot of options. LINK-STRING is used by the link function." (url (save-excursion (with-temp-buffer (insert-file-contents bibfile) + (bibtex-set-dialect nil t) (bibtex-search-entry key) (bibtex-autokey-get-field "url")))) (doi (save-excursion (with-temp-buffer (insert-file-contents bibfile) + (bibtex-set-dialect nil t) (bibtex-search-entry key) ;; I like this better than bibtex-url which does not always find ;; the urls @@ -1784,6 +1797,7 @@ get a lot of options. LINK-STRING is used by the link function." (save-excursion (with-temp-buffer (insert-file-contents bibfile) + (bibtex-set-dialect nil t) (bibtex-search-entry key) (org-ref-bib-citation)))) "\n" @@ -2088,12 +2102,12 @@ arg (ALTERNATIVE-CITE) to get a menu of citation types." (defun org-ref-bib-citation () "From a bibtex entry, create and return a simple citation string. This assumes you are in an article." - + (bibtex-set-dialect nil t) (bibtex-beginning-of-entry) (let* ((cb (current-buffer)) (bibtex-expand-strings t) - (entry (loop for (key . value) in (bibtex-parse-entry t) - collect (cons (downcase key) value))) + (entry (cl-loop for (key . value) in (bibtex-parse-entry t) + collect (cons (downcase key) value))) (title (replace-regexp-in-string "\n\\|\t\\|\s+" " " (reftex-get-bib-field "title" entry))) (year (reftex-get-bib-field "year" entry)) (author (replace-regexp-in-string "\n\\|\t\\|\s+" " " (reftex-get-bib-field "author" entry))) @@ -2113,8 +2127,8 @@ This assumes you are in an article." (bibtex-beginning-of-entry) (let* ((cb (current-buffer)) (bibtex-expand-strings t) - (entry (loop for (key . value) in (bibtex-parse-entry t) - collect (cons (downcase key) value))) + (entry (cl-loop for (key . value) in (bibtex-parse-entry t) + collect (cons (downcase key) value))) (title (replace-regexp-in-string "\n\\|\t\\|\s+" " " (reftex-get-bib-field "title" entry))) (year (reftex-get-bib-field "year" entry)) (author (replace-regexp-in-string "\n\\|\t\\|\s+" " " (reftex-get-bib-field "author" entry))) @@ -2164,8 +2178,8 @@ construct the heading by hand." (bibtex-beginning-of-entry) (let* ((cb (current-buffer)) (bibtex-expand-strings t) - (entry (loop for (key . value) in (bibtex-parse-entry t) - collect (cons (downcase key) value))) + (entry (cl-loop for (key . value) in (bibtex-parse-entry t) + collect (cons (downcase key) value))) (title (replace-regexp-in-string "\n\\|\t\\|\s+" " " (reftex-get-bib-field "title" entry))) (year (reftex-get-bib-field "year" entry)) (author (replace-regexp-in-string "\n\\|\t\\|\s+" " " (reftex-get-bib-field "author" entry))) @@ -2222,7 +2236,7 @@ key author journal year volume pages doi url key org-ref-pdf-directory key)) (re-search-forward (format ":Custom_ID: %s$" - (first (reftex-citation t)) nil 'end)) + (cl-first (reftex-citation t)) nil 'end)) (funcall org-ref-open-notes-function)) ;; ** Open bibtex entry in browser @@ -2735,6 +2749,7 @@ Shows bad citations, ref links and labels" (bibfile (cdr results))) (with-temp-buffer (insert-file-contents bibfile) + (bibtex-set-dialect nil t) (bibtex-search-entry key nil 0) (prog1 (reftex-get-bib-field "year" (bibtex-parse-entry t)) )))) @@ -2926,26 +2941,27 @@ Shows bad citations, ref links and labels" (when (> link-string-beginning (point)) (goto-char link-string-beginning)) - ;; now if we have comma separated bibliographies - ;; we find the one clicked on. we want to - ;; search forward to next comma from point - (save-excursion - (if (search-forward "," link-string-end 1 1) - (setq key-end (- (match-end 0) 1)) ; we found a match - (setq key-end (point)))) ; no comma found so take the point + (let (key-beginning key-end) + ;; now if we have comma separated bibliographies + ;; we find the one clicked on. we want to + ;; search forward to next comma from point + (save-excursion + (if (search-forward "," link-string-end 1 1) + (setq key-end (- (match-end 0) 1)) ; we found a match + (setq key-end (point)))) ; no comma found so take the point - ;; and backward to previous comma from point - (save-excursion - (if (search-backward "," link-string-beginning 1 1) - (setq key-beginning (+ (match-beginning 0) 1)) ; we found a match - (setq key-beginning (point)))) ; no match found - ;; save the key we clicked on. - (setq bibfile - (org-ref-strip-string - (buffer-substring key-beginning key-end))) - (if (file-exists-p bibfile) - (message "%s exists." bibfile) - (message "!!! %s NOT FOUND !!!" bibfile)))))))))) + ;; and backward to previous comma from point + (save-excursion + (if (search-backward "," link-string-beginning 1 1) + (setq key-beginning (+ (match-beginning 0) 1)) ; we found a match + (setq key-beginning (point)))) ; no match found + ;; save the key we clicked on. + (setq bibfile + (org-ref-strip-string + (buffer-substring key-beginning key-end))) + (if (file-exists-p bibfile) + (message "%s exists." bibfile) + (message "!!! %s NOT FOUND !!!" bibfile))))))))))) ;; ** aliases (defalias 'oro 'org-ref-open-citation-at-point) @@ -3081,16 +3097,16 @@ User is prompted for tags. This function is called from `helm-bibtex'. Argument CANDIDATES helm candidates." (message "") (let ((keywords (read-string "Keywords (comma separated): "))) - (loop for key in (helm-marked-candidates) - do - (save-window-excursion - (helm-bibtex-show-entry key) - (bibtex-set-field - "keywords" - (concat - keywords - ", " (bibtex-autokey-get-field "keywords"))) - (save-buffer))))) + (cl-loop for key in (helm-marked-candidates) + do + (save-window-excursion + (helm-bibtex-show-entry key) + (bibtex-set-field + "keywords" + (concat + keywords + ", " (bibtex-autokey-get-field "keywords"))) + (save-buffer))))) (setq helm-source-bibtex '((name . "BibTeX entries") @@ -3221,6 +3237,7 @@ With two prefix args, insert a label link." (save-excursion (with-temp-buffer (insert-file-contents bibfile) + (bibtex-set-dialect nil t) (bibtex-search-entry key) (org-ref-bib-citation))) "!!! No entry found !!!" ))) @@ -3236,11 +3253,13 @@ Checks for pdf and doi, and add appropriate functions." (url (save-excursion (with-temp-buffer (insert-file-contents bibfile) + (bibtex-set-dialect nil t) (bibtex-search-entry key) (bibtex-autokey-get-field "url")))) (doi (save-excursion (with-temp-buffer (insert-file-contents bibfile) + (bibtex-set-dialect nil t) (bibtex-search-entry key) ;; I like this better than bibtex-url which does not always find ;; the urls @@ -3316,10 +3335,10 @@ Checks for pdf and doi, and add appropriate functions." (email-bibtex-entry)))) t) ;; finally return a numbered list of the candidates - (loop for i from 0 - for cell in candidates - collect (cons (format "%2s. %s" i (car cell)) - (cdr cell))))) + (cl-loop for i from 0 + for cell in candidates + collect (cons (format "%2s. %s" i (car cell)) + (cdr cell))))) (defvar org-ref-helm-user-candidates '()