+ (setcdr current
+ (gnus-set-difference (cdr current) numbers)))))))))
+
+(defun gnus-cite-parse-attributions ()
+ (let (al-alist)
+ ;; Parse attributions
+ (while (re-search-forward gnus-cite-attribution-suffix (point-max) t)
+ (let* ((start (match-beginning 0))
+ (end (match-end 0))
+ (wrote (count-lines (point-min) end))
+ (prefix (gnus-cite-find-prefix wrote))
+ ;; Check previous line for an attribution leader.
+ (tag (progn
+ (beginning-of-line 1)
+ (when (looking-at gnus-supercite-secondary-regexp)
+ (buffer-substring (match-beginning 1)
+ (match-end 1)))))
+ (in (progn
+ (goto-char start)
+ (and (re-search-backward gnus-cite-attribution-prefix
+ (save-excursion
+ (beginning-of-line 0)
+ (point))
+ t)
+ (not (re-search-forward gnus-cite-attribution-suffix
+ start t))
+ (count-lines (point-min) (1+ (point)))))))
+ (when (eq wrote in)
+ (setq in nil))
+ (goto-char end)
+ ;; don't add duplicates
+ (let ((al (buffer-substring (save-excursion (beginning-of-line 0)
+ (1+ (point)))
+ end)))
+ (if (not (assoc al al-alist))
+ (progn
+ (push (list wrote in prefix tag)
+ gnus-cite-loose-attribution-alist)
+ (push (cons al t) al-alist))))))))
+
+(defun gnus-cite-connect-attributions ()
+ ;; Connect attributions to citations
+