Function: nnatom--read-links

nnatom--read-links is a byte-compiled function defined in nnatom.el.gz.

Signature

(nnatom--read-links ARTICLE)

Documentation

Return all links contained in ARTICLE, or nil.

Source Code

;; Defined in /usr/src/emacs/lisp/gnus/nnatom.el.gz
(defun nnatom--read-links (article)
  "Return all links contained in ARTICLE, or nil."
  (let ((alt 0) (rel 0) (sel 0) (enc 0) (via 0) (aut 0))
    (mapcan
     (lambda (link)
       (when-let* ((l (car-safe link)))
         (or
          (when-let* (((eq l 'content))
                      (src (dom-attr link 'src))
                      (label (concat "Link"
                                     (and (< 1 (incf alt))
                                          (format " %s" alt)))))
            `(((("text/plain") . ,(format "%s: %s\n" label src))
               (("text/html") . ,(format "<a href=\"%s\">[%s]</a> "
                                         src label)))))
          (when-let* (((or (eq l 'author) (eq l 'contributor)))
                      (name (nnatom--dom-line (dom-child-by-tag link 'name)))
                      (name (if (string-blank-p name)
                                (concat "Author"
                                        (and (< 1 (incf aut))
                                             (format " %s" aut)))
                              name))
                      (uri (nnatom--dom-line (dom-child-by-tag link 'uri)))
                      ((not (string-blank-p uri))))
            `(((("text/plain") . ,(format "%s: %s\n" name uri))
               (("text/html") . ,(format "<a href=\"%s\">[%s]</a> "
                                         uri name)))))
          (when-let* (((eq l 'link))
                      (attrs (dom-attributes link))
                      (label (or (cdr (assq 'title attrs))
                                 (pcase (cdr (assq 'rel attrs))
                                   ("related"
                                    (concat "Related"
                                            (and (< 1 (incf rel))
                                                 (format " %s" rel))))
                                   ("self"
                                    (concat "More"
                                            (and (< 1 (incf sel))
                                                 (format " %s" sel))))
                                   ("enclosure"
                                    (concat "Enclosure"
                                            (and (< 1 (incf enc))
                                                 (format " %s" enc))))
                                   ("via"
                                    (concat "Source"
                                            (and (< 1 (incf via))
                                                 (format " %s" via))))
                                   (_ (if-let*
                                          ((lang (cdr (assq 'hreflang link))))
                                          (format "Link (%s)" lang)
                                        (concat
                                         "Link"
                                         (and (< 1 (incf alt))
                                              (format " %s" alt))))))))
                      (link (cdr (assq 'href attrs))))
            `(((("text/plain") . ,(format "%s: %s\n" label link))
               (("text/html") . ,(format "<a href=\"%s\">[%s]</a> "
                                         link label))))))))
     (dom-children (dom-child-by-tag article 'links)))))