From unknown Sat Aug 16 23:44:30 2025 X-Loop: help-debbugs@gnu.org Subject: bug#15709: [PATCH 7/8] shr: Handle tag for video/audio elements. Resent-From: =?UTF-8?Q?R=C3=BCdiger?= Sonderfeld Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 24 Oct 2013 23:45:09 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 15709 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: 15709@debbugs.gnu.org Cc: Lars Magne Ingebrigtsen X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.138265830622920 (code B ref -1); Thu, 24 Oct 2013 23:45:09 +0000 Received: (at submit) by debbugs.gnu.org; 24 Oct 2013 23:45:06 +0000 Received: from localhost ([127.0.0.1]:42089 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1VZUaO-0005xO-Pu for submit@debbugs.gnu.org; Thu, 24 Oct 2013 19:45:05 -0400 Received: from eggs.gnu.org ([208.118.235.92]:59751) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1VZUaL-0005wU-Hz for submit@debbugs.gnu.org; Thu, 24 Oct 2013 19:45:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VZUa8-0007HL-L7 for submit@debbugs.gnu.org; Thu, 24 Oct 2013 19:44:56 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50 autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:37783) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VZUa8-0007HH-Hm for submit@debbugs.gnu.org; Thu, 24 Oct 2013 19:44:48 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33197) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VZUa2-0006Jl-FK for bug-gnu-emacs@gnu.org; Thu, 24 Oct 2013 19:44:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VZUZw-0007F7-Ey for bug-gnu-emacs@gnu.org; Thu, 24 Oct 2013 19:44:42 -0400 Received: from ptmx.org ([178.63.28.110]:41474) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VZUZw-0007F2-4N for bug-gnu-emacs@gnu.org; Thu, 24 Oct 2013 19:44:36 -0400 Received: from localhost (localhost [127.0.0.1]) by ptmx.org (Postfix) with ESMTP id 6399E2B155; Fri, 25 Oct 2013 01:44:35 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at ptmx.org Received: from ptmx.org ([127.0.0.1]) by localhost (ptmx.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id jOv5jy-TkJVI; Fri, 25 Oct 2013 01:44:32 +0200 (CEST) Received: from descartes.localnet (chello080108246092.7.14.vie.surfer.at [80.108.246.92]) by ptmx.org (Postfix) with ESMTPSA id 98B1E2AEE8; Fri, 25 Oct 2013 01:44:32 +0200 (CEST) From: =?UTF-8?Q?R=C3=BCdiger?= Sonderfeld Date: Fri, 25 Oct 2013 01:44:28 +0200 Message-ID: <5299998.LUXqVN3kMR@descartes> User-Agent: KMail/4.11.2 (Linux/3.11.0-12-generic; KDE/4.11.2; x86_64; ; ) In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2001:4830:134:3::11 X-Spam-Score: -5.0 (-----) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -5.0 (-----) * lisp/net/shr.el (shr-prefer-media-type-alist): New customizable variable. (shr--get-media-pref): New function. (shr--extract-best-source): New function. (shr-tag-video, shr-tag-audio): Use `shr--extract-best-source' when no :src tag was specified. Signed-off-by: R=C3=BCdiger Sonderfeld --- lisp/net/shr.el | 63 +++++++++++++++++++++++++++++++++++++++++++++++++= ++++++-- 1 file changed, 61 insertions(+), 2 deletions(-) diff --git a/lisp/net/shr.el b/lisp/net/shr.el index 3ea2829..0015bd4 100644 --- a/lisp/net/shr.el +++ b/lisp/net/shr.el @@ -1097,10 +1097,67 @@ (defun shr-tag-object (cont) (shr-urlify start (shr-expand-url url))) (shr-generic cont))) =20 +(defcustom shr-prefer-media-type-alist '(("webm" . 1.0) + ("ogv" . 1.0) + ("ogg" . 1.0) + ("opus" . 1.0) + ("flac" . 0.9) + ("wav" . 0.5)) + "Preferences for media types. +The key element should be a regexp matched against the type of the sou= rce or +url if no type is specified. The value should be a float in the range= 0.0 to +1.0. Media elements with higher value are preferred." + :version "24.4" + :group 'shr + :type '(alist :key-type regexp :value-type float)) + +(defun shr--get-media-pref (elem) + "Determine the preference for ELEM. +The preference is a float determined from `shr-prefer-media-type'." + (let ((type (cdr (assq :type elem))) + (p 0.0)) + (unless type + (setq type (cdr (assq :src elem)))) + (when type + (dolist (pref shr-prefer-media-type-alist) + (when (and + (> (cdr pref) p) + (string-match-p (car pref) type)) + (setq p (cdr pref))))) + p)) + +(defun shr--extract-best-source (cont &optional url pref) + "Extract the best `:src' property from blocks in CONT." + (setq pref (or pref -1.0)) + (let (new-pref) + (dolist (elem cont) + (when (and (listp elem) + (not (keywordp (car elem)))) ;; skip attributes + (when (and (eq (car elem) 'source) + (< pref + (setq new-pref + (shr--get-media-pref elem)))) + (setq pref new-pref + url (cdr (assq :src elem))) + (message "new %s %s" url pref)) + ;; libxml's html parser isn't HML5 compliant and non terminate= d + ;; source tags might end up as children. So recursion it is..= . + (dolist (child (cdr elem)) + (when (and (listp child) + (not (keywordp (car child))) ;; skip attributes + (eq (car child) 'source)) + (let ((ret (shr--extract-best-source (list child) url pref= ))) + (when (< pref (cdr ret)) + (setq url (car ret) + pref (cdr ret))))))))) + (cons url pref)) + (defun shr-tag-video (cont) (let ((image (cdr (assq :poster cont))) -=09(url (cdr (assq :src cont))) -=09(start (point))) + (url (cdr (assq :src cont))) + (start (point))) + (unless url + (setq url (car (shr--extract-best-source cont)))) (if image (shr-tag-img nil image) (shr-insert " [video] ")) @@ -1109,6 +1166,8 @@ (defun shr-tag-video (cont) (defun shr-tag-audio (cont) (let ((url (cdr (assq :src cont))) (start (point))) + (unless url + (setq url (car (shr--extract-best-source cont)))) (shr-insert " [audio] ") (shr-urlify start (shr-expand-url url)))) =20 --=20 1.8.4.1 From debbugs-submit-bounces@debbugs.gnu.org Thu Oct 24 19:54:19 2013 Received: (at control) by debbugs.gnu.org; 24 Oct 2013 23:54:19 +0000 Received: from localhost ([127.0.0.1]:42125 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1VZUjK-0006D0-UE for submit@debbugs.gnu.org; Thu, 24 Oct 2013 19:54:19 -0400 Received: from fencepost.gnu.org ([208.118.235.10]:34179 ident=Debian-exim) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1VZUjJ-0006Cr-Kw for control@debbugs.gnu.org; Thu, 24 Oct 2013 19:54:18 -0400 Received: from rgm by fencepost.gnu.org with local (Exim 4.71) (envelope-from ) id 1VZUjJ-00056p-3X for control@debbugs.gnu.org; Thu, 24 Oct 2013 19:54:17 -0400 Date: Thu, 24 Oct 2013 19:54:17 -0400 Message-Id: Subject: control message for bug 15710 To: X-Mailer: mail (GNU Mailutils 2.1) From: Glenn Morris X-Spam-Score: -5.4 (-----) X-Debbugs-Envelope-To: control X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -5.4 (-----) merge 15702 15703 15704 15705 15706 15707 15708 15709 15710 From debbugs-submit-bounces@debbugs.gnu.org Sun Dec 01 10:53:40 2013 Received: (at control) by debbugs.gnu.org; 1 Dec 2013 15:53:41 +0000 Received: from localhost ([127.0.0.1]:53314 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1Vn9L2-0005R2-Ai for submit@debbugs.gnu.org; Sun, 01 Dec 2013 10:53:40 -0500 Received: from hermes.netfonds.no ([80.91.224.195]:48342) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1Vn9L0-0005Qt-I4 for control@debbugs.gnu.org; Sun, 01 Dec 2013 10:53:38 -0500 Received: from cm-84.215.51.58.getinternet.no ([84.215.51.58] helo=stories.gnus.org) by hermes.netfonds.no with esmtpsa (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.72) (envelope-from ) id 1Vn9Km-0006mW-RL for control@debbugs.gnu.org; Sun, 01 Dec 2013 16:53:24 +0100 Date: Sun, 01 Dec 2013 16:53:24 +0100 Message-Id: To: control@debbugs.gnu.org From: Lars Magne Ingebrigtsen Subject: control message for bug #15708 X-MailScanner-ID: 1Vn9Km-0006mW-RL X-Netfonds-MailScanner: Found to be clean X-Netfonds-MailScanner-From: larsi@gnus.org MailScanner-NULL-Check: 1386518005.81136@CFIiy/IGdow13yc6LadfOA X-Spam-Status: No X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: control X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 0.0 (/) tags 15708 fixed close 15708 24.4