(replace-regexp-in-string "\*" "\\\\*" x)
)
org-ref-cite-types "\\|") "\\)"
- ":\\([a-zA-Z0-9-_:]*,?\\)*"))
+ ":\\([a-zA-Z0-9-_:\\./]*,?\\)*"))
(setq org-ref-label-re
(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))))))
+ (message "%s not found in %s"
+ key (file-truename file))))))
(with-temp-buffer
(insert-file-contents file)
"on clicking goto the label. Navigate back with C-c &"
(org-mark-ring-push)
;; next search from beginning of the buffer
-
;; it is possible you would not find the label if narrowing is in effect
(widen)
-
(unless
(or
;; our label links
;; #+label: name org-definition
(progn
(goto-char (point-min))
- (re-search-forward (format "^#\\+label:\\s-*\\(%s\\)\\b" label) nil t))
+ (re-search-forward
+ (format "^#\\+label:\\s-*\\(%s\\)\\b" label) nil t))
;; org tblname
(progn
(goto-char (point-min))
- (re-search-forward (format "^#\\+tblname:\\s-*\\(%s\\)\\b" label) nil t))
+ (re-search-forward
+ (format "^#\\+tblname:\\s-*\\(%s\\)\\b" label) nil t)))
;; we did not find anything, so go back to where we came
(org-mark-ring-goto)
(kill-buffer "*Missing citations*"))
(message "No bad cite links found"))))
-;; ** helm interface to bad citations, labels, refs in orgfile
+;; ** helm interface to bad citations, labels, refs and files in orgfile
(defun org-ref-bad-cite-candidates ()
"Return a list of conses (key . marker) where key does not exist in the known bibliography files, and marker points to the key."
(let* ((cp (point)) ; save to return to later
(goto-char cp)))))
multiple-labels))
+(defun org-ref-bad-file-link-candidates ()
+ "Return list of conses (link . marker) wehre the file in the link does not exist."
+ (let* ((bad-files '()))
+ (org-element-map (org-element-parse-buffer) 'link
+ (lambda (link)
+ (let ((type (org-element-property :type link)))
+ (when (or (string= "file" type)
+ (string= "attachfile" type))
+ (unless (file-exists-p (org-element-property :path link))
+ (add-to-list 'bad-files
+ (cons (org-element-property :path link)
+ (save-excursion
+ (goto-char
+ (org-element-property :begin link))
+ (point-marker)))))))))
+ ;; Let us also check \attachfile{fname}
+ (save-excursion
+ (goto-char (point-min))
+ (while (re-search-forward "\\attachfile{\\(.*\\)}" nil t)
+ (unless (file-exists-p (match-string 1))
+ (add-to-list 'bad-files (cons (match-string 1) (point-marker))))))
+ bad-files))
+
;;;###autoload
(defun org-ref ()
"Opens a helm interface to actions for org-ref.
(let ((cb (current-buffer))
(bad-citations (org-ref-bad-cite-candidates))
(bad-refs (org-ref-bad-ref-candidates))
- (bad-labels (org-ref-bad-label-candidates)))
+ (bad-labels (org-ref-bad-label-candidates))
+ (bad-files (org-ref-bad-file-link-candidates)))
(helm :sources `(((name . "Bad citations")
(candidates . ,bad-citations)
(switch-to-buffer (marker-buffer marker))
(goto-char marker))))
;;
+ ((name . "Bad file links")
+ (candidates . ,bad-files)
+ (lambda (marker)
+ (switch-to-buffer (marker-buffer marker))
+ (goto-char marker)))
+ ;;
((name . "Utilities")
(candidates . (("Check buffer again" . org-ref)
("Insert citation" . helm-bibtex)
))
(action . (lambda (x)
(switch-to-buffer ,cb)
- (funcall x))))
- ))))
+ (funcall x))))))))
;; ** Find non-ascii charaters
(defun org-ref-find-non-ascii-characters ()
(defun org-ref-link-message ()
"Print a minibuffer message about the link that point is on."
(interactive)
- (when (eq major-mode 'org-mode)
- (let* ((object (org-element-context))
- (type (org-element-property :type object)))
- (save-excursion
- (cond
- ;; cite links
- ((-contains? org-ref-cite-types type)
- (message (org-ref-get-citation-string-at-point)))
-
- ;; message some context about the label we are referring to
- ((string= type "ref")
- (message "%scount: %s"
- (org-ref-get-label-context
- (org-element-property :path object))
- (org-ref-count-labels
- (org-element-property :path object))))
-
- ((string= type "eqref")
- (message "%scount: %s"
- (org-ref-get-label-context
- (org-element-property :path object))
- (org-ref-count-labels
- (org-element-property :path object))))
-
- ;; message the count
- ((string= type "label")
- (let ((count (org-ref-count-labels
- (org-element-property :path object))))
- ;; get plurality on occurrence correct
- (message (concat
- (number-to-string count)
- " occurence"
- (when (or (= count 0)
- (> count 1))
- "s")))))
-
- ((string= type "custom-id")
- (save-excursion
- (org-open-link-from-string
- (format "[[#%s]]" (org-element-property :path object)))
- (message "%s" (org-get-heading))))
-
- ;; check if the bibliography files exist.
- ((string= type "bibliography")
- (let* ((bibfile)
- ;; object is the link you clicked on
- (object (org-element-context))
- (link-string (org-element-property :path object))
- (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)))
-
- ;; make sure we are in link and not before the :
- (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-restriction
+ (widen)
+ (when (eq major-mode 'org-mode)
+ (let* ((object (org-element-context))
+ (type (org-element-property :type object)))
+ (save-excursion
+ (cond
+ ;; cite links
+ ((-contains? org-ref-cite-types type)
+ (message (org-ref-get-citation-string-at-point)))
+
+ ;; message some context about the label we are referring to
+ ((string= type "ref")
+ (message "%scount: %s"
+ (org-ref-get-label-context
+ (org-element-property :path object))
+ (org-ref-count-labels
+ (org-element-property :path object))))
+
+ ((string= type "eqref")
+ (message "%scount: %s"
+ (org-ref-get-label-context
+ (org-element-property :path object))
+ (org-ref-count-labels
+ (org-element-property :path object))))
+
+ ;; message the count
+ ((string= type "label")
+ (let ((count (org-ref-count-labels
+ (org-element-property :path object))))
+ ;; get plurality on occurrence correct
+ (message (concat
+ (number-to-string count)
+ " occurence"
+ (when (or (= count 0)
+ (> count 1))
+ "s")))))
+
+ ((string= type "custom-id")
(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
+ (org-open-link-from-string
+ (format "[[#%s]]" (org-element-property :path object)))
+ (message "%s" (org-get-heading))))
+
+ ;; check if the bibliography files exist.
+ ((string= type "bibliography")
+ (let* ((bibfile)
+ ;; object is the link you clicked on
+ (object (org-element-context))
+ (link-string (org-element-property :path object))
+ (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)))
+
+ ;; make sure we are in link and not before the :
+ (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
- ;; 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)