[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/evil-numbers b98a3dccd3 104/145: Cleanup: forward limits t
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/evil-numbers b98a3dccd3 104/145: Cleanup: forward limits to evil-numbers--search-and-replace |
Date: |
Thu, 6 Jan 2022 03:00:22 -0500 (EST) |
branch: elpa/evil-numbers
commit b98a3dccd35af2b49784a7bd081e225146cdf360
Author: Campbell Barton <ideasman42@gmail.com>
Commit: Campbell Barton <ideasman42@gmail.com>
Cleanup: forward limits to evil-numbers--search-and-replace
Since the caller takes limits, it makes sense to forward them
to evil-numbers--search-and-replace instead of using the line bounds.
---
evil-numbers.el | 177 +++++++++++++++++++++++++++++---------------------------
1 file changed, 93 insertions(+), 84 deletions(-)
diff --git a/evil-numbers.el b/evil-numbers.el
index 3e1118792e..58276c76cb 100644
--- a/evil-numbers.el
+++ b/evil-numbers.el
@@ -135,82 +135,84 @@ Keep padding when PADDED is non-nil.
Return non-nil on success, leaving the point at the end of the number."
(save-match-data
- (cond
- ;; Failure (caller may error).
- ((not (evil-numbers--search-number beg end))
- nil)
-
- ;; Find binary literals.
- ((evil-numbers--search-and-replace
- '(("+-" . \?)
- ("0" . 1)
- ("bB" . 1)
- ("01" . +))
- 1 ;; Sign group.
- 4 ;; Number group.
- amount 2 padded
- #'identity #'identity)
- t)
-
- ;; Find octal literals.
- ((evil-numbers--search-and-replace
- '(("+-" . \?)
- ("0" . 1)
- ("oO" . 1)
- ("0-7" . +))
- 1 ;; Sign group.
- 4 ;; Number group.
- amount 8 padded
- #'identity #'identity)
- t)
-
- ;; Find hex literals.
- ((evil-numbers--search-and-replace
- '(("+-" . \?)
- ("0" . 1)
- ("xX" . 1)
- ("[:xdigit:]" . +))
- 1 ;; Sign group.
- 4 ;; Number group.
- amount 16 padded
- #'identity #'identity)
- t)
-
- ;; Find decimal literals.
- ((evil-numbers--search-and-replace
- '(("+-" . \?)
- ("0123456789" . +))
- 1 ;; Sign group.
- 2 ;; Number group.
- amount 10 padded
- #'identity #'identity)
- t)
-
- ;; Find decimal literals (super-script).
- ((evil-numbers--search-and-replace
- '(("⁺⁻" . \?)
- ("⁰¹²³⁴⁵⁶⁷⁸⁹" . +))
- 1 ;; Sign group.
- 2 ;; Number group.
- amount 10 padded
- #'evil-numbers--decode-super
- #'evil-numbers--encode-super)
- t)
-
- ;; Find decimal literals (sub-script).
- ((evil-numbers--search-and-replace
- '(("₊₋" . \?)
- ("₀₁₂₃₄₅₆₇₈₉" . +))
- 1 ;; Sign group.
- 2 ;; Number group.
- amount 10 padded
- #'evil-numbers--decode-sub
- #'evil-numbers--encode-sub)
- t)
-
- ;; Failure (caller may error).
- (t
- nil))))
+ (when (evil-numbers--search-number beg end)
+
+ ;; Clamp limits to line bounds.
+ ;; The caller may use a range that spans lines to allow searching and
+ ;; finding items across multiple lines (currently used for selection).
+ (setq beg (max beg (point-at-bol)))
+ (setq end (min end (point-at-eol)))
+
+ (cond
+ ;; Find binary literals.
+ ((evil-numbers--search-and-replace
+ '(("+-" . \?)
+ ("0" . 1)
+ ("bB" . 1)
+ ("01" . +))
+ 1 ;; Sign group.
+ 4 ;; Number group.
+ amount 2 beg end padded
+ #'identity #'identity)
+ t)
+
+ ;; Find octal literals.
+ ((evil-numbers--search-and-replace
+ '(("+-" . \?)
+ ("0" . 1)
+ ("oO" . 1)
+ ("0-7" . +))
+ 1 ;; Sign group.
+ 4 ;; Number group.
+ amount 8 beg end padded
+ #'identity #'identity)
+ t)
+
+ ;; Find hex literals.
+ ((evil-numbers--search-and-replace
+ '(("+-" . \?)
+ ("0" . 1)
+ ("xX" . 1)
+ ("[:xdigit:]" . +))
+ 1 ;; Sign group.
+ 4 ;; Number group.
+ amount 16 beg end padded
+ #'identity #'identity)
+ t)
+
+ ;; Find decimal literals.
+ ((evil-numbers--search-and-replace
+ '(("+-" . \?)
+ ("0123456789" . +))
+ 1 ;; Sign group.
+ 2 ;; Number group.
+ amount 10 beg end padded
+ #'identity #'identity)
+ t)
+
+ ;; Find decimal literals (super-script).
+ ((evil-numbers--search-and-replace
+ '(("⁺⁻" . \?)
+ ("⁰¹²³⁴⁵⁶⁷⁸⁹" . +))
+ 1 ;; Sign group.
+ 2 ;; Number group.
+ amount 10 beg end padded
+ #'evil-numbers--decode-super #'evil-numbers--encode-super)
+ t)
+
+ ;; Find decimal literals (sub-script).
+ ((evil-numbers--search-and-replace
+ '(("₊₋" . \?)
+ ("₀₁₂₃₄₅₆₇₈₉" . +))
+ 1 ;; Sign group.
+ 2 ;; Number group.
+ amount 10 beg end padded
+ #'evil-numbers--decode-sub #'evil-numbers--encode-sub)
+ t)
+
+ ;; Failure (caller may error).
+ (t
+ nil)))))
;;;###autoload (autoload 'evil-numbers/inc-at-pt "evil-numbers" nil t)
(evil-define-operator evil-numbers/inc-at-pt
@@ -353,8 +355,8 @@ note that searching still starts at POINT."
;; Skip format specifiers and interpret as boolean.
(<= 0 (skip-chars-forward "bBoOxX" end))))))
-(defun evil-numbers--match-from-skip-chars (skip-chars dir do-check do-match)
- "Match SKIP-CHARS in DIR (-1 or 1).
+(defun evil-numbers--match-from-skip-chars (skip-chars dir limit do-check
do-match)
+ "Match SKIP-CHARS in DIR (-1 or 1), until LIMIT.
When DO-CHECK is non-nil, any failure to match returns nil.
When DO-MATCH is non-nil, match data is set.
@@ -375,12 +377,14 @@ Each item in SKIP-CHARS is a cons pair.
(clamp-fn (if is-forward
#'min
#'max))
- (limit (if is-forward
- (line-end-position)
- (line-beginning-position)))
(point-init (point))
;; Fill when `do-match' is set.
(match-list (list)))
+
+ ;; Sanity check.
+ (when (if is-forward (> (point) limit) (< (point) limit))
+ (error "Limit is on wrong side of point (internal error)"))
+
(dolist (ch-pair (if is-forward
skip-chars
(reverse skip-chars)))
@@ -443,7 +447,12 @@ Each item in SKIP-CHARS is a cons pair.
t))
(defun evil-numbers--search-and-replace
- (skip-chars sign-group num-group amount base padded decode-fn encode-fn)
+ (skip-chars
+ sign-group num-group
+ amount base
+ beg end
+ padded
+ decode-fn encode-fn)
"Perform the increment/decrement on the current line.
For SKIP-CHARS docs see `evil-numbers--match-from-skip-chars'.
@@ -459,9 +468,9 @@ replace number incremented by AMOUNT in BASE and return
non-nil."
(when (save-excursion
;; Skip backwards (as needed), there may be no
;; characters to skip back, so don't check the result.
- (evil-numbers--match-from-skip-chars skip-chars -1 nil nil)
+ (evil-numbers--match-from-skip-chars skip-chars -1 beg nil nil)
;; Skip forwards from the beginning, setting match data.
- (evil-numbers--match-from-skip-chars skip-chars 1 t t))
+ (evil-numbers--match-from-skip-chars skip-chars 1 end t t))
(goto-char (match-end num-group))
(let* ((num-prev
- [nongnu] elpa/evil-numbers 4308935a03 061/145: Resolve looking-back warnings, (continued)
- [nongnu] elpa/evil-numbers 4308935a03 061/145: Resolve looking-back warnings, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers aa94cd1b26 063/145: Merge pull request #11 from ideasman42/patch-1, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers 5356111930 077/145: Cleanup: avoid let binding to set default values for arguments, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers b54cc5ba35 076/145: Fix spelling, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers c37a4cf92a 092/145: Fix padding being ignored with block selection, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers e8dfba58c9 081/145: Cleanup: split skip characters matching out into a function, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers 7602f3b484 101/145: Cleanup: split number incrementing into it's own function, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers 3fe56219af 091/145: Cleanup: docstring, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers b2397f278a 094/145: Cleanup: move forward character check in evil-numbers--search-number, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers 6093a5e039 085/145: Cleanup: use identity functions, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers b98a3dccd3 104/145: Cleanup: forward limits to evil-numbers--search-and-replace,
ELPA Syncer <=
- [nongnu] elpa/evil-numbers cb9eb99998 141/145: Tests: add simple-nop-non-number-with-newline-after test, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers 29859e64c0 138/145: Add automated tests, resolve #22, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers 95fd1faf90 006/145: Use `while' instead of `do'., ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers b84ee09de1 012/145: Fix license., ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers 83b2ad44ff 010/145: Use lowercase and uppercase example., ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers bd2359c96f 003/145: Fix provide., ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers 2301d66203 009/145: Fix docstrings of inc and dec., ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers 88de7e9622 007/145: Extract number search., ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers b3e906f734 022/145: Fix last glitches., ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-numbers 6e13c0450a 030/145: Update documentation., ELPA Syncer, 2022/01/06