Function: nnmail-process-babyl-mail-format
nnmail-process-babyl-mail-format is a byte-compiled function defined
in nnmail.el.gz.
Signature
(nnmail-process-babyl-mail-format FUNC ARTNUM-FUNC)
Source Code
;; Defined in /usr/src/emacs/lisp/gnus/nnmail.el.gz
(defun nnmail-process-babyl-mail-format (func artnum-func)
(let ((case-fold-search t)
(count 0)
start message-id content-length do-search end)
(while (not (eobp))
(goto-char (point-min))
(re-search-forward
"\n0, *unseen,+\n\\(\\*\\*\\* EOOH \\*\\*\\*\n\\)?" nil t)
(goto-char (match-end 0))
(delete-region (match-beginning 0) (match-end 0))
(narrow-to-region
(setq start (point))
(progn
;; Skip all the headers in case there are more "From "s...
(or (search-forward "\n\n" nil t)
(search-forward-regexp "^[^:]*\\( .*\\|\\)$" nil t)
(search-forward "\^_\^L"))
(point)))
;; Unquote the ">From " line, if any.
(goto-char (point-min))
(when (looking-at ">From ")
(replace-match "X-From-Line: ") )
(run-hooks 'nnmail-prepare-incoming-header-hook)
(goto-char (point-max))
;; Find the Message-ID header.
(save-excursion
(if (re-search-backward
"^Message-ID[ \t]*:[ \n\t]*\\(<[^>]*>\\)" nil t)
(setq message-id (buffer-substring (match-beginning 1)
(match-end 1)))
;; There is no Message-ID here, so we create one.
(save-excursion
(when (re-search-backward "^Message-ID[ \t]*:" nil t)
(beginning-of-line)
(insert "Original-")))
(forward-line -1)
(insert "Message-ID: " (setq message-id (nnmail-message-id))
"\n")))
;; Look for a Content-Length header.
(if (not (save-excursion
(and (re-search-backward
"^Content-Length:[ \t]*\\([0-9]+\\)" start t)
(setq content-length (string-to-number
(buffer-substring
(match-beginning 1)
(match-end 1))))
;; We destroy the header, since none of
;; the backends ever use it, and we do not
;; want to confuse other mailers by having
;; a (possibly) faulty header.
(progn (insert "X-") t))))
(setq do-search t)
(widen)
(if (or (= (+ (point) content-length) (point-max))
(save-excursion
(goto-char (+ (point) content-length))
(looking-at "\^_")))
(progn
(goto-char (+ (point) content-length))
(setq do-search nil))
(setq do-search t)))
(widen)
;; Go to the beginning of the next article - or to the end
;; of the buffer.
(when do-search
(if (re-search-forward "^\^_" nil t)
(goto-char (match-beginning 0))
(goto-char (1- (point-max)))))
(delete-char 1) ; delete ^_
(save-excursion
(save-restriction
(narrow-to-region start (point))
(goto-char (point-min))
(nnmail-check-duplication message-id func artnum-func)
(cl-incf count)
(setq end (point-max))))
(goto-char end))
count))