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 (cl-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 (cl-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 (cl-incf rel))
                                                (format " %s" rel))))
                                  ("self"
                                   (concat "More"
                                           (and (< 1 (cl-incf sel))
                                                (format " %s" sel))))
                                  ("enclosure"
                                   (concat "Enclosure"
                                           (and (< 1 (cl-incf enc))
                                                (format " %s" enc))))
                                  ("via"
                                   (concat "Source"
                                           (and (< 1 (cl-incf via))
                                                (format " %s" via))))
                                  (_ (if-let
                                         ((lang (cdr (assq 'hreflang link))))
                                         (format "Link (%s)" lang)
                                       (concat
                                        "Link"
                                        (and (< 1 (cl-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)))))