emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] /srv/bzr/emacs/trunk r102016: shr.el: (shr-tag-table): Sup


From: Katsumi Yamaoka
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r102016: shr.el: (shr-tag-table): Support caption, thead, and tfoot.
Date: Wed, 20 Oct 2010 07:31:25 +0000
User-agent: Bazaar (2.0.3)

------------------------------------------------------------
revno: 102016
committer: Katsumi Yamaoka <address@hidden>
branch nick: trunk
timestamp: Wed 2010-10-20 07:31:25 +0000
message:
  shr.el: (shr-tag-table): Support caption, thead, and tfoot.
modified:
  lisp/gnus/ChangeLog
  lisp/gnus/shr.el
=== modified file 'lisp/gnus/ChangeLog'
--- a/lisp/gnus/ChangeLog       2010-10-20 00:44:28 +0000
+++ b/lisp/gnus/ChangeLog       2010-10-20 07:31:25 +0000
@@ -2,6 +2,8 @@
 
        * shr.el (shr-find-fill-point): Shorten line if the preceding char is
        kinsoku-eol regardless of shr-kinsoku-shorten.
+       (shr-tag-table-1): Rename from shr-tag-table; make it a subroutine.
+       (shr-tag-table): Support caption, thead, and tfoot.
 
 2010-10-19  Lars Magne Ingebrigtsen  <address@hidden>
 

=== modified file 'lisp/gnus/shr.el'
--- a/lisp/gnus/shr.el  2010-10-20 00:44:28 +0000
+++ b/lisp/gnus/shr.el  2010-10-20 07:31:25 +0000
@@ -593,8 +593,7 @@
 ;; main buffer).  Now we know how much space each TD really takes, so
 ;; we then render everything again with the new widths, and finally
 ;; insert all these boxes into the main buffer.
-(defun shr-tag-table (cont)
-  (shr-ensure-paragraph)
+(defun shr-tag-table-1 (cont)
   (setq cont (or (cdr (assq 'tbody cont))
                 cont))
   (let* ((shr-inhibit-images t)
@@ -622,6 +621,56 @@
   (dolist (elem (shr-find-elements cont 'img))
     (shr-tag-img (cdr elem))))
 
+(defun shr-tag-table (cont)
+  (shr-ensure-paragraph)
+  (let* ((caption (cdr (assq 'caption cont)))
+        (header (cdr (assq 'thead cont)))
+        (body (or (cdr (assq 'tbody cont)) cont))
+        (footer (cdr (assq 'tfoot cont)))
+        (nheader (if header (shr-max-columns header)))
+        (nbody (if body (shr-max-columns body)))
+        (nfooter (if footer (shr-max-columns footer))))
+    (shr-tag-table-1
+     (nconc
+      (if caption `((tr (td ,@caption))))
+      (if header
+         (if footer
+             ;; header + body + footer
+             (if (= nheader nbody)
+                 (if (= nbody nfooter)
+                     `((tr (td (table (tbody ,@header ,@body ,@footer)))))
+                   (if (= nfooter 1)
+                       `((tr (td (table (tbody ,@header ,@body))))
+                         ,@footer)
+                     `((tr (td (table (tbody ,@header ,@body))))
+                       (tr (td (table (tbody ,@footer)))))))
+               (if (= nbody nfooter)
+                   `((tr (td (table (tbody ,@header))))
+                     (tr (td (table (tbody ,@body ,@footer)))))
+                 (if (= nfooter 1)
+                     `((tr (td (table (tbody ,@header))))
+                       (tr (td (table (tbody ,@body))))
+                       ,@footer)
+                   `((tr (td (table (tbody ,@header))))
+                     (tr (td (table (tbody ,@body))))
+                     (tr (td (table (tbody ,@footer))))))))
+           ;; header + body
+           (if (= nheader nbody)
+               `((tr (td (table (tbody ,@header ,@body)))))
+             (if (= nheader 1)
+                 `(,@header (tr (td (table (tbody ,@body)))))
+               `((tr (td (table (tbody ,@header))))
+                 (tr (td (table (tbody ,@body))))))))
+       (if footer
+           ;; body + footer
+           (if (= nbody nfooter)
+               `((tr (td (table (tbody ,@body ,@footer)))))
+             (if (= nfooter 1)
+                 `((tr (td (table (tbody ,@body)))) ,@footer)
+               `((tr (td (table (tbody ,@body))))
+                 (tr (td (table (tbody ,@footer)))))))
+         body))))))
+
 (defun shr-find-elements (cont type)
   (let (result)
     (dolist (elem cont)


reply via email to

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