Function: shr-descend

shr-descend is a byte-compiled function defined in shr.el.gz.

Signature

(shr-descend DOM)

Source Code

;; Defined in /usr/src/emacs/lisp/net/shr.el.gz
(defun shr-descend (dom)
  (let ((function
         (intern (concat "shr-tag-" (symbol-name (dom-tag dom))) obarray))
        ;; Allow other packages to override (or provide) rendering
        ;; of elements.
        (external (cdr (assq (dom-tag dom) shr-external-rendering-functions)))
	(style (dom-attr dom 'style))
	(shr-stylesheet shr-stylesheet)
	(shr-depth (1+ shr-depth))
	(start (point)))
    (when style
      (if (string-match-p "color\\|display\\|border-collapse" style)
	  (setq shr-stylesheet (nconc (shr-parse-style style)
				      shr-stylesheet))
	(setq style nil)))
    ;; If we have a display:none, then just ignore this part of the DOM.
    (unless (or (equal (cdr (assq 'display shr-stylesheet)) "none")
                (and shr-discard-aria-hidden
                     (equal (dom-attr dom 'aria-hidden) "true")))
      ;; We don't use shr-indirect-call here, since shr-descend is
      ;; the central bit of shr.el, and should be as fast as
      ;; possible.  Having one more level of indirection with its
      ;; negative effect on performance is deemed unjustified in
      ;; this case.
      (cond (external
             (funcall external dom))
            ((fboundp function)
             (funcall function dom))
            (t
             (shr-generic dom)))
      (when-let* ((id (dom-attr dom 'id)))
        (push (cons id (set-marker (make-marker) start)) shr--link-targets))
      ;; If style is set, then this node has set the color.
      (when style
	(shr-colorize-region
	 start (point)
	 (cdr (assq 'color shr-stylesheet))
	 (cdr (assq 'background-color shr-stylesheet)))))))