Don't collect strings existing out of <tr>...</tr>
authorKatsumi Yamaoka <yamaoka@jpl.org>
Mon, 21 Nov 2016 08:21:27 +0000 (08:21 +0000)
committerKatsumi Yamaoka <yamaoka@jpl.org>
Mon, 21 Nov 2016 08:21:27 +0000 (08:21 +0000)
* lisp/net/shr.el (shr-collect-extra-strings-in-table):
Don't collect strings existing out of <tr>...</tr> to avoid
duplication with what `shr-tag-table' renders.

lisp/net/shr.el

index f1b0087f9be7fec00ca063f7ef2b50e9f2690b7b..75e55801864dd64129066bbda6ba7ad1e7f001f7 100644 (file)
@@ -1899,20 +1899,21 @@ The preference is a float determined from `shr-prefer-media-type'."
     (when (zerop shr-table-depth)
       (save-excursion
        (shr-expand-alignments start (point)))
-      (save-restriction
-       (narrow-to-region (point) (point))
-       (insert (mapconcat #'identity
-                          (shr-collect-extra-strings-in-table dom)
-                          "\n"))
-       (shr-fill-lines (point-min) (point-max))))))
+      (let ((strings (shr-collect-extra-strings-in-table dom)))
+       (when strings
+         (save-restriction
+           (narrow-to-region (point) (point))
+           (insert (mapconcat #'identity strings "\n"))
+           (shr-fill-lines (point-min) (point-max))))))))
 
 (defun shr-collect-extra-strings-in-table (dom &optional flags)
   "Return extra strings in DOM of which the root is a table clause.
 Render <img>s and <object>s, and strings and child <table>s of which
-the parent is not <td> or <th> as well.  FLAGS is a cons of two
-boolean flags that control whether to collect or render objects."
-  ;; As for strings and child <table>s, it runs recursively and
-  ;; collects or renders those objects if the cdr of FLAGS is nil.
+the parent <td> or <th> is lacking.  FLAGS is a cons of two boolean
+flags that control whether to collect or render objects."
+  ;; This function runs recursively and collects strings if the cdr of
+  ;; FLAGS is nil and the car is not nil, and it renders also child
+  ;; <table>s if the cdr is nil.  Note: FLAGS may be nil, not a cons.
   ;; FLAGS becomes (t . nil) if a <tr> clause is found in the children
   ;; of DOM, and becomes (t . t) if a <td> or a <th> clause is found
   ;; and the car is t then.  When a <table> clause is found, FLAGS
@@ -1921,7 +1922,7 @@ boolean flags that control whether to collect or render objects."
   (cl-loop for child in (dom-children dom) with recurse with tag
           do (setq recurse nil)
           if (stringp child)
-            unless (cdr flags)
+            unless (or (not (car flags)) (cdr flags))
               when (string-match "\\(?:[^\t\n\r ]+[\t\n\r ]+\\)*[^\t\n\r ]+"
                                  child)
                 collect (match-string 0 child)