branch: externals/denote-sequence commit 3c0d4b6d0dd4db34b6ab729f2cfe48d62fa027e6 Author: Protesilaos Stavrou <i...@protesilaos.com> Commit: Protesilaos Stavrou <i...@protesilaos.com>
Define denote-sequence-decrement function --- denote-sequence.el | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/denote-sequence.el b/denote-sequence.el index abc572aa75..1d0783ec45 100644 --- a/denote-sequence.el +++ b/denote-sequence.el @@ -314,6 +314,34 @@ STRING is part of a sequence, not the entirety of it." (apply #'concat (append (butlast letters) (list (char-to-string (+ (string-to-char last) 1)))))))))) + +(defun denote-sequence-decrement (string) + "Decrement number represented by STRING and return it as a string. +STRING is part of a sequence, not the entirety of it. + +Also see `denote-sequence-increment'." + (cond + ((denote-sequence--numeric-partial-p string) + (let ((number (string-to-number string))) + (unless (= number 1) + (number-to-string (- number 1))))) + ((denote-sequence--alphanumeric-partial-p string) + (let* ((letters (split-string string "" :omit-nulls)) + (length-1-p (= (length letters) 1)) + (first (car letters)) + (reverse (nreverse (copy-sequence letters))) + (last (car reverse))) + (cond + ((and length-1-p (string= "a" first)) + nil) + (length-1-p + (char-to-string (- (string-to-char first) 1))) + ((string= "a" last) + (apply #'concat (butlast letters))) + (t + (apply #'concat + (append (butlast letters) + (list (char-to-string (- (string-to-char last) 1))))))))) (t (error "The string `%s' must contain only numbers or letters" string))))