X-Git-Url: https://git.hcoop.net/bpt/emacs.git/blobdiff_plain/09d9db2c4921cb2eb0974892164dd03d6bffdd80..acaf905b1130aae80fa59d2c861ffd4c8eb75486:/lisp/align.el diff --git a/lisp/align.el b/lisp/align.el index 83e27daece..19fd85351f 100644 --- a/lisp/align.el +++ b/lisp/align.el @@ -1,6 +1,6 @@ ;;; align.el --- align text to a specific column, by regexp -;; Copyright (C) 1999-2011 Free Software Foundation, Inc. +;; Copyright (C) 1999-2012 Free Software Foundation, Inc. ;; Author: John Wiegley ;; Maintainer: FSF @@ -109,7 +109,7 @@ ;; simple algorithm that understand only basic regular expressions. ;; Parts of the code were broken up and included in vhdl-mode.el ;; around this time. After several comments from users, and a need to -;; find a more robust, performant algorithm, 2.0 was born in late +;; find a more robust, higher performing algorithm, 2.0 was born in late ;; 1998. Many different approaches were taken (mostly due to the ;; complexity of TeX tables), but finally a scheme was discovered ;; which worked fairly well for most common usage cases. Development @@ -1106,7 +1106,7 @@ documentation for `align-region-separate' for more details." (setq seps (cdr seps)))) yes)))) -(defun align-adjust-col-for-rule (column rule spacing tab-stop) +(defun align-adjust-col-for-rule (column _rule spacing tab-stop) "Adjust COLUMN according to the given RULE. SPACING specifies how much spacing to use. TAB-STOP specifies whether SPACING refers to tab-stop boundaries." @@ -1161,7 +1161,7 @@ have been aligned. No changes will be made to the buffer." (justify (cdr (assq 'justify rule))) (col (or fixed 0)) (width 0) - ecol change look) + ecol change) ;; Determine the alignment column. (let ((a areas)) @@ -1246,6 +1246,13 @@ have been aligned. No changes will be made to the buffer." (car props) (cdr props))))))))))) (setq areas (cdr areas)))))) +(defmacro align--set-marker (marker-var pos &optional type) + "If MARKER-VAR is a marker, move it to position POS. +Otherwise, create a new marker at position POS, with type TYPE." + `(if (markerp ,marker-var) + (move-marker ,marker-var ,pos) + (setq ,marker-var (copy-marker ,pos ,type)))) + (defun align-region (beg end separate rules exclude-rules &optional func) "Align a region based on a given set of alignment rules. @@ -1285,7 +1292,6 @@ purpose where you might want to know where the regions that the aligner would have dealt with are." (let ((end-mark (and end (copy-marker end t))) (real-beg beg) - (real-end end) (report (and (not func) align-large-region beg end (>= (- end beg) align-large-region))) (rule-index 1) @@ -1314,7 +1320,7 @@ aligner would have dealt with are." tab-stop tab-stop-c repeat repeat-c valid valid-c - pos-list first + first regions index last-point b e save-match-data @@ -1371,8 +1377,8 @@ aligner would have dealt with are." (if (not here) (goto-char end)) (forward-line) - (setq end (point) - end-mark (copy-marker end t)) + (setq end (point)) + (align--set-marker end-mark end t) (goto-char beg))) ;; If we have a region to align, and `func' is set and @@ -1468,10 +1474,9 @@ aligner would have dealt with are." ;; test whether we have found a match on the same ;; line as a previous match (if (> (point) eol) - (setq same nil - eol (save-excursion - (end-of-line) - (point-marker)))) + (progn + (setq same nil) + (align--set-marker eol (line-end-position)))) ;; lookup the `repeat' attribute the first time (or repeat-c @@ -1505,10 +1510,9 @@ aligner would have dealt with are." (progn (align-regions regions align-props rule func) - (setq last-point (copy-marker b t) - regions nil - align-props nil)) - (setq last-point (copy-marker b t))) + (setq regions nil) + (setq align-props nil))) + (align--set-marker last-point b t) ;; restore the match data (set-match-data save-match-data)