From: Katsumi Yamaoka Date: Wed, 20 Oct 2010 07:31:25 +0000 (+0000) Subject: shr.el: (shr-tag-table): Support caption, thead, and tfoot. X-Git-Tag: emacs-pretest-24.0.90~104^2~275^2~438^2~45^2~548 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=6c7693116bd40663a3c2c05d652de3c8b51b5cf3;p=emacs.git shr.el: (shr-tag-table): Support caption, thead, and tfoot. --- diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 9194c70be45..11244224452 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -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 diff --git a/lisp/gnus/shr.el b/lisp/gnus/shr.el index d7a5fb33f66..9183e985fe6 100644 --- a/lisp/gnus/shr.el +++ b/lisp/gnus/shr.el @@ -593,8 +593,7 @@ Return a string with image data." ;; 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 @@ Return a string with image data." (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)