Function: mml-expand-html-into-multipart-related

mml-expand-html-into-multipart-related is a byte-compiled function defined in mml.el.gz.

Signature

(mml-expand-html-into-multipart-related CONT)

Source Code

;; Defined in /usr/src/emacs/lisp/gnus/mml.el.gz
(defun mml-expand-html-into-multipart-related (cont)
  (let ((new-parts nil)
	(cid 1))
    (mm-with-multibyte-buffer
      (insert (cdr (assq 'contents cont)))
      (goto-char (point-min))
      (with-syntax-table mml-syntax-table
	(while (re-search-forward "<img\\b" nil t)
	  (goto-char (match-beginning 0))
	  (let* ((start (point))
		 (img (nth 2
			   (nth 2
				(libxml-parse-html-region
				 (point) (progn (forward-sexp) (point))))))
		 (end (point))
		 (parsed (url-generic-parse-url (cdr (assq 'src (cadr img))))))
	    (when (and (null (url-type parsed))
                       (not (zerop (length (url-filename parsed))))
		       (file-exists-p (url-filename parsed)))
	      (goto-char start)
	      (when (search-forward (url-filename parsed) end t)
		(let ((cid (format "fsf.%d" cid)))
		  (replace-match (concat "cid:" cid) t t)
		  (push (list cid (url-filename parsed)
			      (get-text-property start 'display))
			new-parts))
		(setq cid (1+ cid)))))))
      ;; We have local images that we want to include.
      (when new-parts
	(setcdr (assq 'contents cont) (buffer-string))
	(setq cont
	      (nconc (list 'multipart (cons 'type "related"))
		     (list cont)))
	(dolist (new-part (nreverse new-parts))
	  (setq cont
		(nconc cont
		       (list `(part (type . "image/png")
				    ,@(mml--possibly-alter-image
				       (nth 1 new-part)
				       (nth 2 new-part))
				    (id . ,(concat "<" (nth 0 new-part)
						   ">"))))))))
      cont)))