emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 510da73: Fix problems with not rendering shr tables with rowspan


From: Lars Ingebrigtsen
Subject: master 510da73: Fix problems with not rendering shr tables with rowspan
Date: Thu, 16 Jul 2020 21:13:19 -0400 (EDT)

branch: master
commit 510da73b4a0ff77d27a208a4177ef21fcdbf766d
Author: Lars Ingebrigtsen <larsi@gnus.org>
Commit: Lars Ingebrigtsen <larsi@gnus.org>

    Fix problems with not rendering shr tables with rowspan
    
    * lisp/net/shr.el (shr-max-columns): When rowspans were in effect,
    columns would go missing from subsequent lines (bug#42194).
---
 lisp/net/shr.el | 23 ++++++++++++++++++++---
 1 file changed, 20 insertions(+), 3 deletions(-)

diff --git a/lisp/net/shr.el b/lisp/net/shr.el
index a3f0496..1ba615f 100644
--- a/lisp/net/shr.el
+++ b/lisp/net/shr.el
@@ -2576,12 +2576,29 @@ flags that control whether to collect or render 
objects."
     i))
 
 (defun shr-max-columns (dom)
-  (let ((max 0))
+  (let ((max 0)
+        (this 0)
+        (rowspans nil))
     (dolist (row (dom-children dom))
       (when (and (not (stringp row))
                 (eq (dom-tag row) 'tr))
-       (setq max (max max (+ (shr-count row 'td)
-                             (shr-count row 'th))))))
+        (setq this 0)
+        (dolist (column (dom-children row))
+          (when (and (not (stringp column))
+                     (or (eq (dom-tag column) 'td)
+                         (eq (dom-tag column) 'th)))
+            (setq this (+ (1+ this) (length rowspans)))
+            ;; We have a rowspan, which we emulate later in rendering
+            ;; by adding an extra column to the following rows.
+            (when-let* ((span (dom-attr column 'rowspan)))
+              (push (string-to-number span) rowspans))))
+       (setq max (max max this)))
+      ;; Count down the rowspans in effect.
+      (let ((new nil))
+        (dolist (span rowspans)
+          (when (> span 1)
+            (push (1- span) new)))
+        (setq rowspans new)))
     max))
 
 (provide 'shr)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]