I use the same regexp that I did in the previous article so it links on CamelCase. To change the link style you just change the regexp. If you end up writing too many support functions then you may want to use that "variable" thing that all the cool kids are talking about.
(defun list-active-links (link-re &optional is-active-link-p)
"Scan a buffer looking for links and list all the active links.
LINK-RE is a regular expression which matches the link text.
IS-ACTIVE-LINK-P is an optional function which takes the link text and
returns true if the link is active. If not provided, `file-exists-p' is
(let ((buffer-name "*ActiveLinks*")
(if (not is-active-link-p)
(setq is-active-link-p 'file-exists-p))
;; Gather up all the potential links and whether they're active.
(while (re-search-forward link-re nil t)
(let ((link-text (match-string-no-properties 0)))
;; If the link hasn't been checked, then save its value
;; and whether or not it has an existing destination.
(if (not (assoc link-text found-links))
(cons (cons link-text
(funcall is-active-link-p link-text))
;; Now list out the active links.
(if (get-buffer buffer-name)
;; Remove any links that don't have an associated file.
(delq nil (mapcar (lambda (x) (and (cdr x) (car x)))
(insert "#\n# The following links have destinations.\n#\n")
(insert (mapconcat 'identity (sort active-links 'string<) "\n")))
(message "%d matches found." (length active-links)))))
(defun check-active-links ()
(let ((link-re "\\<[A-Z][a-z]+\\([A-Z][a-z]+\\)+\\>"))
;; Note: At this point we're in the "*ActiveLinks* buffer.
(set (make-local-variable 'link-to-re) link-re)
(kbd "C-c C-o")
(link-to link-to-re "\\<")))))