]> git.eshelyaron.com Git - emacs.git/commitdiff
Further eww dom.el cleanups
authorLars Magne Ingebrigtsen <larsi@gnus.org>
Wed, 26 Nov 2014 21:08:44 +0000 (22:08 +0100)
committerLars Magne Ingebrigtsen <larsi@gnus.org>
Wed, 26 Nov 2014 21:08:52 +0000 (22:08 +0100)
* net/eww.el (eww-tag-title): Use `dom-text'.

* dom.el (dom-by-tag): Use `equal' for comparisons so that tags
can be strings.
(dom-elements): Protect against non-text nodes.
(dom-non-text-children): New function.

lisp/ChangeLog
lisp/dom.el
lisp/net/eww.el

index 1698eb7631e1730e3e2cfc3d9311021a05a3f8be..4884d5ca9c11bca509b09f4b68ec748dbcc9f0a4 100644 (file)
@@ -1,3 +1,12 @@
+2014-11-26  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * dom.el (dom-by-tag): Use `equal' for comparisons so that tags
+       can be strings.
+       (dom-elements): Protect against non-text nodes.
+       (dom-non-text-children): New function.
+
+       * net/eww.el (eww-tag-title): Use `dom-text'.
+
 2014-11-26  Sam Steingold  <sds@gnu.org>
 
        * textmodes/sgml-mode.el (sgml-validate-command): Pass -utf8 to tidy.
index 3157e0b2f2a63b4a35e8199325f81882c2f75b6b..04d6c219ec001c23ab0acca60ab832cc11347d23 100644 (file)
       (cddr (car node))
     (cddr node)))
 
+(defun dom-non-text-children (node)
+  "Return all non-text-node children of NODE."
+  (cl-loop for child in (dom-children node)
+          unless (stringp child)
+          collect child))
+
 (defun dom-set-attributes (node attributes)
   "Set the attributes of NODE to ATTRIBUTES."
   (setq node (dom-ensure-node node))
@@ -93,7 +99,7 @@ A name is a symbol like `td'."
                                             (dom-by-tag child tag))
                          when matches
                          append matches)))
-    (if (eq (dom-tag dom) tag)
+    (if (equal (dom-tag dom) tag)
        (cons dom matches)
       matches)))
 
@@ -113,7 +119,9 @@ A name is a symbol like `td'."
   "Find elements matching MATCH (a regexp) in ATTRIBUTE.
 ATTRIBUTE would typically be `class', `id' or the like."
   (let ((matches (cl-loop for child in (dom-children dom)
-                         for matches = (dom-elements child attribute match)
+                         for matches = (and (not (stringp child))
+                                            (dom-elements child attribute
+                                                          match))
                          when matches
                          append matches))
        (attr (dom-attr dom attribute)))
index a1460a8f557e9f061f6ba9ff80c62fc1b6dac6fb..10298b109d1135473ac51279012563dba1d356e2 100644 (file)
@@ -453,14 +453,10 @@ See the `eww-search-prefix' variable for the search engine used."
     (setq header-line-format nil)))
 
 (defun eww-tag-title (dom)
-  (let ((title ""))
-    (dolist (sub (dom-children dom))
-      (when (stringp sub)
-       (setq title (concat title sub))))
-    (plist-put eww-data :title
-              (replace-regexp-in-string
-               "^ \\| $" ""
-               (replace-regexp-in-string "[ \t\r\n]+" " " title))))
+  (plist-put eww-data :title
+            (replace-regexp-in-string
+             "^ \\| $" ""
+             (replace-regexp-in-string "[ \t\r\n]+" " " (dom-text dom))))
   (eww-update-header-line-format))
 
 (defun eww-tag-body (dom)
@@ -589,14 +585,13 @@ the like."
 (defun eww-highest-readability (node)
   (let ((result node)
        highest)
-    (dolist (elem (dom-children node))
-      (when (and (not (stringp elem))
-                (> (or (dom-attr
-                        (setq highest (eww-highest-readability elem))
-                        :eww-readability-score)
-                       most-negative-fixnum)
-                   (or (dom-attr result :eww-readability-score)
-                       most-negative-fixnum)))
+    (dolist (elem (dom-non-text-children node))
+      (when (> (or (dom-attr
+                   (setq highest (eww-highest-readability elem))
+                   :eww-readability-score)
+                  most-negative-fixnum)
+              (or (dom-attr result :eww-readability-score)
+                  most-negative-fixnum))
        (setq result highest)))
     result))