Function: gnus-picon-transform-address

gnus-picon-transform-address is a byte-compiled function defined in gnus-picon.el.gz.

Signature

(gnus-picon-transform-address HEADER CATEGORY)

Source Code

;; Defined in /usr/src/emacs/lisp/gnus/gnus-picon.el.gz
(defun gnus-picon-transform-address (header category)
  (gnus-with-article-headers
   (let ((addresses
	  (mail-header-parse-addresses
	   ;; mail-header-parse-addresses does not work (reliably) on
	   ;; decoded headers.
	   (or
	    (ignore-errors
	     (mail-encode-encoded-word-string
	      (or (mail-fetch-field header) "")))
	    (mail-fetch-field header))))
	 spec file point cache len)
     (dolist (address addresses)
       (setq address (car address))
       (when (and (stringp address)
		  (setq spec (gnus-picon-split-address address)))
	 (if (setq cache (cdr (assoc address gnus-picon-cache)))
	     (setq spec cache)
	   (when (setq file (or (gnus-picon-find-face
				 address gnus-picon-user-directories)
				(gnus-picon-find-face
				 (concat "unknown@"
					 (mapconcat
					  #'identity (cdr spec) "."))
				 gnus-picon-user-directories)))
	     (setcar spec (cons (gnus-picon-create-glyph file)
				(car spec))))

	   (dotimes (i (- (length spec)
			  (if gnus-picon-inhibit-top-level-domains
			      2 1)))
	     (when (setq file (gnus-picon-find-face
			       (concat "unknown@"
				       (mapconcat
					#'identity (nthcdr (1+ i) spec) "."))
			       gnus-picon-domain-directories t))
	       (setcar (nthcdr (1+ i) spec)
		       (cons (gnus-picon-create-glyph file)
			     (nth (1+ i) spec)))))
	   (setq spec (nreverse spec))
	   (push (cons address spec) gnus-picon-cache))

	 (gnus-article-goto-header header)
	 (mail-header-narrow-to-field)
	 (cl-case gnus-picon-style
	       (right
		(when (= (length addresses) 1)
		  (setq len (apply #'+ (mapcar (lambda (x)
						 (condition-case nil
						     (car (image-size (car x)))
						   (error 0)))
					       spec)))
		  (when (> len 0)
                    (goto-char (line-end-position))
		    (insert (propertize
			     " " 'display
			     (cons 'space
				   (list :align-to (- (window-width) 1 len))))))
                  (goto-char (line-end-position))
                  (setq point (line-end-position))
		  (dolist (image spec)
		    (unless (stringp image)
		      (goto-char point)
		      (gnus-picon-insert-glyph image category 'nostring)))))
	       (inline
		 (when (search-forward address nil t)
		   (delete-region (match-beginning 0) (match-end 0))
		   (setq point (point))
		   (while spec
		     (goto-char point)
		     (if (> (length spec) 2)
			 (insert ".")
		       (if (= (length spec) 2)
			   (insert "@")))
		     (gnus-picon-insert-glyph (pop spec) category))))))))))