(when (eq (preceding-char) ? )
(delete-char -1))
(insert "\n")
+ (put-text-property (1- (point)) (point) 'shr-break t)
(unless found
- (put-text-property (1- (point)) (point) 'shr-break t)
;; No space is needed at the beginning of a line.
(when (eq (following-char) ? )
(delete-char 1)))
(aset natural-widths i (max (aref natural-widths i)
(cadr column)))
(setq i (1+ i)))))
- (let ((extra (- (apply '+ (append suggested-widths nil))
- (apply '+ (append widths nil))))
- (expanded-columns 0))
+ (let* ((total-suggested (apply '+ (append suggested-widths nil)))
+ (total-actual (apply '+ (append widths nil)))
+ (extra (- total-suggested
+ total-actual
+ ;; TD separators.
+ (length widths)
+ ;; Table separators + fence.
+ 3
+ (* 2 shr-table-depth)))
+ (expanded-columns 0))
+ ;; We have extra, unused space, so divide this space amongst the
+ ;; columns.
(when (> extra 0)
+ ;; If the natural width is wider than the rendered width, we
+ ;; want to allow the column to expand.
(dotimes (i length)
- ;; If the natural width is wider than the rendered width, we
- ;; want to allow the column to expand.
- (when (> (aref natural-widths i) (aref widths i))
- (setq expanded-columns (1+ expanded-columns))))
- (dotimes (i length)
- (when (> (aref natural-widths i) (aref widths i))
- (aset widths i (min
- (1+ (aref natural-widths i))
- (+ (/ extra expanded-columns)
- (aref widths i))))))))
+ (when (> (aref natural-widths i) 0)
+ (aset widths i (+ (truncate (* (/ extra (* 1.0 total-actual))
+ (aref widths i)))
+ (aref widths i)))))))
widths))
(defun shr-make-table (cont widths &optional fill)
(let ((shr-width width)
(shr-indentation 0))
(shr-descend (cons 'td cont)))
+ ;; Delete padding at the bottom of the TDs.
(delete-region
(point)
- (+ (point)
- (skip-chars-backward " \t\n")))
+ (progn
+ (skip-chars-backward " \t\n")
+ (end-of-line)
+ (point)))
(push (list (cons width cont) (buffer-string)
(shr-overlays-in-region (point-min) (point-max)))
shr-content-cache)))
(while (not (eobp))
(end-of-line)
(setq current (+ current (current-column)))
- (unless (get-text-property (point) 'shr-break)
+ (if (get-text-property (point) 'shr-break)
+ (incf current)
(setq max (max max current)
current 0))
(forward-line 1))
(when (memq (car column) '(td th))
(let ((width (cdr (assq :width (cdr column)))))
(when (and width
- (string-match "\\([0-9]+\\)%" width))
- (aset columns i
- (/ (string-to-number (match-string 1 width))
- 100.0))))
+ (string-match "\\([0-9]+\\)%" width)
+ (not (zerop (setq width (string-to-number
+ (match-string 1 width))))))
+ (aset columns i (/ width 100.0))))
(setq i (1+ i)))))))
columns))