+(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
+ (if caption
+ (if header
+ (if footer
+ ;; caption + hader + body + footer
+ (if (= nheader nbody)
+ (if (= nbody nfooter)
+ `((tr (td ,@caption))
+ (tr (td (table (tbody ,@header ,@body ,@footer)))))
+ (if (= nfooter 1)
+ `((tr (td ,@caption))
+ (tr (td (table (tbody ,@header ,@body))))
+ ,@footer)
+ `((tr (td ,@caption))
+ (tr (td (table (tbody ,@header ,@body))))
+ (tr (td (table (tbody ,@footer)))))))
+ (if (= nbody nfooter)
+ `((tr (td ,@caption))
+ (tr (td (table (tbody ,@header))))
+ (tr (td (table (tbody ,@body ,@footer)))))
+ (if (= nfooter 1)
+ `((tr (td ,@caption))
+ (tr (td (table (tbody ,@header))))
+ (tr (td (table (tbody ,@body))))
+ ,@footer)
+ `((tr (td ,@caption))
+ (tr (td (table (tbody ,@header))))
+ (tr (td (table (tbody ,@body))))
+ (tr (td (table (tbody ,@footer))))))))
+ ;; caption + header + body
+ (if (= nheader nbody)
+ `((tr (td ,@caption))
+ (tr (td (table (tbody ,@header ,@body)))))
+ (if (= nheader 1)
+ `((tr (td ,@caption))
+ ,@header (tr (td (table (tbody ,@body)))))
+ `((tr (td ,@caption))
+ (tr (td (table (tbody ,@header))))
+ (tr (td (table (tbody ,@body))))))))
+ (if footer
+ ;; caption + 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)))))))
+ ;; caption + body
+ `((tr (td ,@caption))
+ (tr (td (table (tbody ,@body)))))))
+ (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))))))
+