+(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))
+