[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/denote f9f779847c 2/3: Make denote-sequence--get-larges
From: |
ELPA Syncer |
Subject: |
[elpa] externals/denote f9f779847c 2/3: Make denote-sequence--get-largest more robust when getting a child |
Date: |
Mon, 13 Jan 2025 06:58:09 -0500 (EST) |
branch: externals/denote
commit f9f779847caecb1e97a039c217ebd5c6805b7e83
Author: Protesilaos Stavrou <info@protesilaos.com>
Commit: Protesilaos Stavrou <info@protesilaos.com>
Make denote-sequence--get-largest more robust when getting a child
---
denote-sequence.el | 37 ++++++++++++++++++++++++++++++++++---
tests/denote-test.el | 6 ++++--
2 files changed, 38 insertions(+), 5 deletions(-)
diff --git a/denote-sequence.el b/denote-sequence.el
index b000ddd80f..00d218f5e0 100644
--- a/denote-sequence.el
+++ b/denote-sequence.el
@@ -418,9 +418,8 @@ means to pad the full length of the sequence."
"=")
(string-pad s 32 32 :pad-from-start))))
-(defun denote-sequence--get-largest (sequences type)
- "Return largest sequence in SEQUENCES given TYPE.
-TYPE is a symbol among `denote-sequence-types'."
+(defun denote-sequence--get-largest-by-order (sequences type)
+ "Sort SEQUENCES of TYPE to get largest in order, using
`denote-sequence--pad'."
(car
(reverse
(sort sequences
@@ -429,6 +428,38 @@ TYPE is a symbol among `denote-sequence-types'."
(denote-sequence--pad s1 type)
(denote-sequence--pad s2 type)))))))
+(defun denote-sequence--string-length-sans-delimiter (string)
+ "Return length of STRING without the equals sign."
+ (if (eq denote-sequence-scheme 'numeric)
+ (length (replace-regexp-in-string "=" "" string))
+ (length string)))
+
+(defun denote-sequence--get-largest-by-length (sequences)
+ "Compare length of SEQUENCES to determine the largest among them.
+If there are more than one sequences of equal length, return them."
+ (let* ((seqs-with-length (mapcar (lambda (sequence)
+ (cons
(denote-sequence--string-length-sans-delimiter sequence) sequence))
+ sequences))
+ (longest (apply #'max (mapcar #'car seqs-with-length)))
+ (largest-sequence (delq nil
+ (mapcar (lambda (element)
+ (unless (< (car element) longest)
+ (cdr element)))
+ seqs-with-length))))
+ (if (= (length largest-sequence) 1)
+ (car largest-sequence)
+ largest-sequence)))
+
+(defun denote-sequence--get-largest (sequences type)
+ "Return largest sequence in SEQUENCES given TYPE.
+TYPE is a symbol among `denote-sequence-types'."
+ (if (eq type 'child)
+ (let ((largest (denote-sequence--get-largest-by-length sequences)))
+ (if (listp largest)
+ (denote-sequence--get-largest-by-order largest type)
+ largest))
+ (denote-sequence--get-largest-by-order sequences type)))
+
(defun denote-sequence--tail-alphanumeric-p (sequence)
"Return non-nil if the last character of SEQUENCE is alphanumeric.
This is for use in `denote-sequence--get-start'."
diff --git a/tests/denote-test.el b/tests/denote-test.el
index f094f6bff1..d44212ba26 100644
--- a/tests/denote-test.el
+++ b/tests/denote-test.el
@@ -614,6 +614,7 @@ This is done using the numeric `denote-sequence-scheme'."
"20241230T075023==1=1=2--test__testing.txt"
"20241230T075023==1=2--test__testing.txt"
"20241230T075023==1=2=1--test__testing.txt"
+ "20241230T075023==1=2=1=1--test__testing.txt"
"20241230T075023==2--test__testing.txt")))
(sequences (denote-sequence-get-all-sequences files)))
(let ((denote-sequence-scheme 'numeric))
@@ -623,7 +624,7 @@ This is done using the numeric `denote-sequence-scheme'."
(equal (denote-sequence--get-new-child "1=1" sequences) "1=1=3")
(equal (denote-sequence--get-new-child "1=1=2" sequences) "1=1=2=1")
(equal (denote-sequence--get-new-child "1=2" sequences) "1=2=2")
- (equal (denote-sequence--get-new-child "1=2=1" sequences) "1=2=1=1")
+ (equal (denote-sequence--get-new-child "1=2=1" sequences) "1=2=1=2")
(equal (denote-sequence--get-new-child "2" sequences) "2=1")))
(should-error (denote-sequence--get-new-child "3" sequences)))
(delete-directory denote-directory :delete-contents-as-well)))
@@ -648,6 +649,7 @@ This is done using the alphanumeric
`denote-sequence-scheme'."
"20241230T075023==1a2--test__testing.txt"
"20241230T075023==1b--test__testing.txt"
"20241230T075023==1b1--test__testing.txt"
+ "20241230T075023==1b1a--test__testing.txt"
"20241230T075023==2--test__testing.txt")))
(sequences (denote-sequence-get-all-sequences files)))
(let ((denote-sequence-scheme 'alphanumeric))
@@ -657,7 +659,7 @@ This is done using the alphanumeric
`denote-sequence-scheme'."
(equal (denote-sequence--get-new-child "1a" sequences) "1a3")
(equal (denote-sequence--get-new-child "1a2" sequences) "1a2a")
(equal (denote-sequence--get-new-child "1b" sequences) "1b2")
- (equal (denote-sequence--get-new-child "1b1" sequences) "1b1a")
+ (equal (denote-sequence--get-new-child "1b1" sequences) "1b1b")
(equal (denote-sequence--get-new-child "2" sequences) "2a")))
(should-error (denote-sequence--get-new-child "3" sequences)))
(delete-directory denote-directory :delete-contents-as-well)))