Function: shr-insert-table
shr-insert-table is a byte-compiled function defined in shr.el.gz.
Signature
(shr-insert-table TABLE WIDTHS)
Source Code
;; Defined in /usr/src/emacs/lisp/net/shr.el.gz
(defun shr-insert-table (table widths)
(let* ((collapse (equal (cdr (assq 'border-collapse shr-stylesheet))
"collapse"))
(shr-table-separator-length (if collapse 0 1))
(shr-table-vertical-line (if collapse "" shr-table-vertical-line))
(start (point)))
(setq shr-table-id (1+ shr-table-id))
(unless collapse
(shr-insert-table-ruler widths))
(dolist (row table)
(let ((start (point))
(align 0)
(column-number 0)
(height (let ((max 0))
(dolist (column row)
(setq max (max max (nth 2 column))))
max)))
(dotimes (_ (max height 1))
(when (bolp)
(shr-indent))
(insert shr-table-vertical-line "\n"))
(dolist (column row)
(when (> (nth 2 column) -1)
(goto-char start)
;; Sum up all the widths from the column. (There may be
;; more than one if this is a "colspan" column.)
(dotimes (_ (nth 4 column))
;; The colspan directive may be wrong and there may not be
;; that number of columns.
(when (<= column-number (1- (length widths)))
(setq align (+ align
(aref widths column-number)
(* 2 shr-table-separator-pixel-width))))
(setq column-number (1+ column-number)))
(let ((lines (nth 3 column))
(pixel-align (if (not shr-use-fonts)
(* align (frame-char-width))
align)))
(dolist (line lines)
(end-of-line)
(let ((start (point))
(background (and (> (length line) 0)
(shr-face-background
(get-text-property
(1- (length line)) 'face line))))
(space (propertize
" "
'display `(space :align-to (,pixel-align))
'shr-table-indent shr-table-id)))
(when background
(setq space (propertize space 'face background)))
(insert line space shr-table-vertical-line)
(shr-colorize-region
start (1- (point)) (nth 5 column) (nth 6 column)))
(forward-line 1))
;; Add blank lines at padding at the bottom of the TD,
;; possibly.
(dotimes (_ (- height (length lines)))
(end-of-line)
(let ((start (point)))
(insert (propertize " "
'display `(space :align-to (,pixel-align))
'shr-table-indent shr-table-id)
shr-table-vertical-line)
(shr-colorize-region
start (1- (point)) (nth 5 column) (nth 6 column)))
(forward-line 1))))))
(unless collapse
(shr-insert-table-ruler widths)))
(unless (= start (point))
(put-text-property start (1+ start) 'shr-table-id shr-table-id))))