(require 'helm-config)
(require 'helm-bibtex)
(require 'org)
+(require 'org-element)
;; * Custom variables
(defgroup org-ref nil
":\\([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
((= l ?E) (car (reftex-get-bib-names "editor" entry)))
((= l ?h) (org-ref-reftex-get-bib-field "howpublished" entry))
((= l ?i) (org-ref-reftex-get-bib-field "institution" entry))
- ((= l ?j) (org-ref-reftex-get-bib-field "journal" entry))
- ((= l ?k) (org-ref-reftex-get-bib-field "key" entry))
+ ((= l ?j) (let ((jt (reftex-get-bib-field "journal" entry)))
+ (if (string= "" jt)
+ (reftex-get-bib-field "journaltitle" entry)
+ jt)))
+ ((= l ?k) (org-ref-reftex-get-bib-field "=key=" entry))
((= l ?m) (org-ref-reftex-get-bib-field "month" entry))
((= l ?n) (org-ref-reftex-get-bib-field "number" entry))
((= l ?o) (org-ref-reftex-get-bib-field "organization" entry))
(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 (parsebib-find-bibtex-dialect) t)
(bibtex-search-entry key nil 0)
(setq bibtex-entry (bibtex-parse-entry))
;; downcase field names so they work in the format-citation code
(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 (parsebib-find-bibtex-dialect) t)
(bibtex-search-entry key nil 0)
(setq entry (bibtex-parse-entry))
(format "** %s - %s
(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)
(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)
(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)
(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
(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"
(org-ref-count-labels label))))
(lambda (keyword desc format)
(cond
- ((eq format 'html) (format "(<label>%s</label>)" path))
+ ((eq format 'html) (format "<div id=\"%s\">" keyword))
((eq format 'latex)
(format "\\label{%s}" keyword)))))
;formatting
(lambda (keyword desc format)
(cond
- ((eq format 'html) (format "(<ref>%s</ref>)" path))
+ ((eq format 'html) (format "<a href=\"#%s\">%s</a>" keyword keyword))
((eq format 'latex)
(format "\\ref{%s}" keyword)))))
(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)
;; 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)))
(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
(save-excursion
(with-temp-buffer
(insert-file-contents bibfile)
+ (bibtex-set-dialect (parsebib-find-bibtex-dialect) t)
(bibtex-search-entry key)
;; I like this better than bibtex-url which does not always find
;; the urls
(save-excursion
(with-temp-buffer
(insert-file-contents bibfile)
+ (bibtex-set-dialect (parsebib-find-bibtex-dialect) t)
(bibtex-search-entry key)
(org-ref-open-bibtex-notes)))))
(message "%s" (progn
(with-temp-buffer
(insert-file-contents bibfile)
+ (bibtex-set-dialect (parsebib-find-bibtex-dialect) t)
(bibtex-search-entry key)
(org-ref-bib-citation))))))
(save-excursion
(with-temp-buffer
(insert-file-contents bibfile)
+ (bibtex-set-dialect (parsebib-find-bibtex-dialect) t)
(bibtex-search-entry key)
(setq doi (bibtex-autokey-get-field "doi"))
;; in case doi is a url, remove the url part.
(url (save-excursion
(with-temp-buffer
(insert-file-contents bibfile)
+ (bibtex-set-dialect (parsebib-find-bibtex-dialect) t)
(bibtex-search-entry key)
(bibtex-autokey-get-field "url"))))
(doi (save-excursion
(with-temp-buffer
(insert-file-contents bibfile)
+ (bibtex-set-dialect (parsebib-find-bibtex-dialect) t)
(bibtex-search-entry key)
;; I like this better than bibtex-url which does not always find
;; the urls
(save-excursion
(with-temp-buffer
(insert-file-contents bibfile)
+ (bibtex-set-dialect (parsebib-find-bibtex-dialect) t)
(bibtex-search-entry key)
(org-ref-bib-citation))))
"\n"
(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)))
(key (reftex-get-bib-field "=key=" entry))
- (journal (reftex-get-bib-field "journal" entry))
+ (journal (let ((jt (reftex-get-bib-field "journal" entry)))
+ (if (string= "" jt)
+ (reftex-get-bib-field "journaltitle" entry)
+ jt)))
(volume (reftex-get-bib-field "volume" entry))
(pages (reftex-get-bib-field "pages" entry))
(doi (reftex-get-bib-field "doi" entry))
(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)))
(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)))
(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
(bibfile (cdr results)))
(with-temp-buffer
(insert-file-contents bibfile)
+ (bibtex-set-dialect (parsebib-find-bibtex-dialect) t)
(bibtex-search-entry key nil 0)
(prog1 (reftex-get-bib-field "year" (bibtex-parse-entry t))
))))
(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)
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")
(save-excursion
(with-temp-buffer
(insert-file-contents bibfile)
+ (bibtex-set-dialect (parsebib-find-bibtex-dialect) t)
(bibtex-search-entry key)
(org-ref-bib-citation)))
"!!! No entry found !!!" )))
(url (save-excursion
(with-temp-buffer
(insert-file-contents bibfile)
+ (bibtex-set-dialect (parsebib-find-bibtex-dialect) t)
(bibtex-search-entry key)
(bibtex-autokey-get-field "url"))))
(doi (save-excursion
(with-temp-buffer
(insert-file-contents bibfile)
+ (bibtex-set-dialect (parsebib-find-bibtex-dialect) t)
(bibtex-search-entry key)
;; I like this better than bibtex-url which does not always find
;; the urls
(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 '()