[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/valign 65859b3 177/198: Refactor out valign--cell
From: |
Stefan Monnier |
Subject: |
[elpa] externals/valign 65859b3 177/198: Refactor out valign--cell |
Date: |
Tue, 1 Dec 2020 18:19:43 -0500 (EST) |
branch: externals/valign
commit 65859b3a4d3855eb8d463c40e55c04afd3821c5d
Author: Yuan Fu <casouri@gmail.com>
Commit: Yuan Fu <casouri@gmail.com>
Refactor out valign--cell
* valign.el (valign--cell): New function.
(valign-table-1): Use 'valign--cell'.
---
valign.el | 103 ++++++++++++++++++++++++++++++++++++++------------------------
1 file changed, 64 insertions(+), 39 deletions(-)
diff --git a/valign.el b/valign.el
index 4a5e88d..022e0ec 100644
--- a/valign.el
+++ b/valign.el
@@ -650,49 +650,74 @@ If FORCE non-nil, force align."
;; Pixel width of the cell.
(cell-width (valign--cell-content-width)))
;; Align cell.
- (cl-labels ((valign--put-ov
- (beg end xpos)
- (valign--put-overlay beg end 'display
- (valign--space xpos))))
- (pcase-let ((`(,cell-beg
- ,content-beg
- ,content-end
- ,cell-end)
- (valign--cell-content-config)))
- (cond ((= cell-beg content-beg)
- ;; This cell has only one space.
- (valign--put-ov
- cell-beg cell-end
- (+ column-start col-width space-width)))
- ;; Empty cell. Sometimes empty cells are
- ;; longer than other non-empty cells (see
- ;; `valign--cell-width'), so we put overlay on
- ;; all but the first white space.
- ((valign--cell-empty-p)
- (valign--put-ov
- content-beg cell-end
- (+ column-start col-width space-width)))
- ;; A normal cell.
- (t
- (pcase alignment
- ;; Align a left-aligned cell.
- ('left (valign--put-ov
- content-end cell-end
- (+ column-start
- col-width space-width)))
- ;; Align a right-aligned cell.
- ('right (valign--put-ov
- cell-beg content-beg
- (+ column-start
- (- col-width cell-width)))))))))
+ (pcase-let ((`(,cell-beg ,content-beg
+ ,content-end ,cell-end)
+ (valign--cell-content-config)))
+ (valign--cell col-width alignment cell-width
+ cell-beg content-beg
+ content-end cell-end
+ column-start space-width))
;; Update ‘column-start’ for the next cell.
- (setq column-start (+ column-start
- col-width
- bar-width
- space-width)))))
+ (setq column-start (+ column-start col-width
+ bar-width space-width)))))
;; Now we are at the last right bar.
(valign--maybe-render-bar (1- (point)))))))
+(defun valign--cell (col-width alignment cell-width
+ cell-beg content-beg
+ content-end cell-end
+ column-start space-width)
+ "Align the cell at point.
+
+For an example cell:
+
+| content content |
+ ↑ ↑ ↑ ↑
+ 1 2 3 4
+ <------5------>
+ <--------6---------->
+
+COL-WIDTH (6) Pixel width of the column
+ALIGNMENT 'left or 'right
+CELL-WIDTH (5) Pixel width of the cell content
+CELL-BEG (1) Beginning of the cell
+CONTENT-BEG (2) Beginning of the cell content
+CONTENT-END (3) End of the cell content
+CELL-END (4) End of the cell
+COLUMN-START (1) Pixel x-position of the beginning of the cell
+SPACE-WIDTH Pixel width of a space character
+
+Assumes point is at (2)."
+ (cl-labels ((valign--put-ov
+ (beg end xpos)
+ (valign--put-overlay beg end 'display
+ (valign--space xpos))))
+ (cond ((= cell-beg content-beg)
+ ;; This cell has only one space.
+ (valign--put-ov
+ cell-beg cell-end
+ (+ column-start col-width space-width)))
+ ;; Empty cell. Sometimes empty cells are
+ ;; longer than other non-empty cells (see
+ ;; `valign--cell-width'), so we put overlay on
+ ;; all but the first white space.
+ ((valign--cell-empty-p)
+ (valign--put-ov
+ content-beg cell-end
+ (+ column-start col-width space-width)))
+ ;; A normal cell.
+ (t
+ (pcase alignment
+ ;; Align a left-aligned cell.
+ ('left (valign--put-ov content-end cell-end
+ (+ column-start
+ col-width space-width)))
+ ;; Align a right-aligned cell.
+ ('right (valign--put-ov
+ cell-beg content-beg
+ (+ column-start
+ (- col-width cell-width)))))))))
+
(defun valign--table-2 ()
"Visually align the table.el table at point."
;; Instead of overlays, we use text properties in this function.
- [elpa] externals/valign 70b3004 141/198: * valign.el (valign-table-1): Minor change., (continued)
- [elpa] externals/valign 70b3004 141/198: * valign.el (valign-table-1): Minor change., Stefan Monnier, 2020/12/01
- [elpa] externals/valign 59dfb21 115/198: * valign.el (valign--fancy-bar-cursor-fn): Thinner bar when cursor is bar., Stefan Monnier, 2020/12/01
- [elpa] externals/valign 07585a7 142/198: Change advice, Stefan Monnier, 2020/12/01
- [elpa] externals/valign 9033d3b 128/198: Replace text property with overlay, Stefan Monnier, 2020/12/01
- [elpa] externals/valign efa9b3c 179/198: Refactor code that calculates column width, Stefan Monnier, 2020/12/01
- [elpa] externals/valign 27998c6 187/198: Update documentation, Stefan Monnier, 2020/12/01
- [elpa] externals/valign 9e1d2f4 152/198: Fix the problem where cells get too much padding, Stefan Monnier, 2020/12/01
- [elpa] externals/valign 11f02f5 193/198: Allow non-table lines at the end of the table, Stefan Monnier, 2020/12/01
- [elpa] externals/valign fcb62c4 161/198: * valign.el (valign--glyph-width-of): Fix docstring., Stefan Monnier, 2020/12/01
- [elpa] externals/valign 70c5c91 147/198: * valign.el: Remove obsolete number regexp., Stefan Monnier, 2020/12/01
- [elpa] externals/valign 65859b3 177/198: Refactor out valign--cell,
Stefan Monnier <=
- [elpa] externals/valign a0e40c5 197/198: Fix alignment in Markdown mode, Stefan Monnier, 2020/12/01
- [elpa] externals/valign 5b0c557 107/198: * README.org (Customization): Update., Stefan Monnier, 2020/12/01
- [elpa] externals/valign d37ce14 185/198: Add column padding, Stefan Monnier, 2020/12/01
- [elpa] externals/valign 58f5dc8 190/198: * valign.el: Update keywords., Stefan Monnier, 2020/12/01
- [elpa] externals/valign 666e7d7 175/198: * valign.el (valign--end-of-table): Fix infinite loop., Stefan Monnier, 2020/12/01
- [elpa] externals/valign 6a4a91b 159/198: Add a case for empty cells, Stefan Monnier, 2020/12/01
- [elpa] externals/valign 2054ccf 160/198: Fix fancy bar, Stefan Monnier, 2020/12/01
- [elpa] externals/valign 4f3eccd 166/198: Fix wrong argument nil error when valign-region receives no arguments, Stefan Monnier, 2020/12/01
- [elpa] externals/valign fe1160a 157/198: * valign.el (valign-mode): Remove obsolete code., Stefan Monnier, 2020/12/01
- [elpa] externals/valign 6e3e6ce 158/198: ; Add test file and Makefile, Stefan Monnier, 2020/12/01