emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/subed 06851d8 143/389: Prevent overlapping when adjusting


From: ELPA Syncer
Subject: [nongnu] elpa/subed 06851d8 143/389: Prevent overlapping when adjusting subtitle start/stop time
Date: Fri, 3 Dec 2021 11:00:14 -0500 (EST)

branch: elpa/subed
commit 06851d89734c030ead5ce973e2717ab24be4cba6
Author: Random User <rndusr@posteo.de>
Commit: Random User <rndusr@posteo.de>

    Prevent overlapping when adjusting subtitle start/stop time
---
 README.org              |  8 ++---
 subed/subed-config.el   |  4 +--
 subed/subed-srt.el      | 22 ++++++++++--
 tests/test-subed-srt.el | 93 +++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 119 insertions(+), 8 deletions(-)

diff --git a/README.org b/README.org
index e51c28b..a52dcdc 100644
--- a/README.org
+++ b/README.org
@@ -12,11 +12,11 @@ subed is still alpha software.  Expect it to kill your 
Emacs session.
    - Quickly jump to the beginning (~C-M-a~) and end (~C-M-e~) of the current
      subtitle's text.
    - Insert (~M-i~) and kill (~M-k~) subtitles.
-   - Freely adjust subtitle start (~M-[~ / ~M-]~) and stop (~M-{~ / ~M-}~) 
time.
-     A prefix argument sets the number of milliseconds for the current session
+   - Adjust subtitle start (~M-[~ / ~M-]~) and stop (~M-{~ / ~M-}~) time.  A
+     prefix argument sets the number of milliseconds for the current session
      (e.g. ~C-u 1000 M-[ M-[ M-[~ decreases start time by 3 seconds).
-   - Freely move the current subtitle or all marked subtitles forward (~C-M-n~)
-     or backward (~C-M-p~) in time without changing subtitle duration.  A 
prefix
+   - Move the current subtitle or all marked subtitles forward (~C-M-n~) or
+     backward (~C-M-p~) in time without changing subtitle duration.  A prefix
      argument sets the number of milliseconds for the current session (e.g. 
~C-u
      500 C-M-n C-M-n~ moves the current subtitle 1 second forward).
    - Shift the current subtitle forward (~C-M-f~) or backward (~C-M-b~) 
together
diff --git a/subed/subed-config.el b/subed/subed-config.el
index 75c6e23..010f229 100644
--- a/subed/subed-config.el
+++ b/subed/subed-config.el
@@ -161,8 +161,8 @@ typed something.")
 
 
 (defcustom subed-subtitle-spacing 100
-  "How many milliseconds to keep between subtitles when inserting
-subtitles."
+  "How many milliseconds to keep between subtitles when adjusting
+or inserting subtitles."
   :type 'integer
   :group 'subed)
 
diff --git a/subed/subed-srt.el b/subed/subed-srt.el
index 372699e..9f71320 100644
--- a/subed/subed-srt.el
+++ b/subed/subed-srt.el
@@ -300,8 +300,17 @@ Return point or nil if there is no previous subtitle."
   "Add MSECS milliseconds to start time (use negative value to subtract)."
   (subed-disable-sync-point-to-player-temporarily)
   (let* ((msecs-start (subed-srt--subtitle-msecs-start))
-         (msecs-new (when msecs-start (+ msecs-start msecs))))
+         (msecs-new (when msecs-start (+ msecs-start msecs)))
+         (msecs-prev (save-excursion
+                       (when (subed-srt-backward-subtitle-id)
+                         (subed-srt--subtitle-msecs-stop))))
+         (msecs-min (if msecs-prev (+ msecs-prev subed-subtitle-spacing) 0))
+         (msecs-max (subed-srt--subtitle-msecs-stop)))
     (when msecs-new
+      (when (and msecs-min (< msecs-new msecs-min))
+        (setq msecs-new msecs-min))
+      (when (> msecs-new msecs-max)
+        (setq msecs-new msecs-max))
       (save-excursion
         (subed-srt-jump-to-subtitle-time-start)
         (when (looking-at subed-srt--regexp-timestamp)
@@ -312,8 +321,17 @@ Return point or nil if there is no previous subtitle."
   "Add MSECS milliseconds to stop time (use negative value to subtract)."
   (subed-disable-sync-point-to-player-temporarily)
   (let* ((msecs-stop (subed-srt--subtitle-msecs-stop))
-         (msecs-new (when msecs-stop (+ msecs-stop msecs))))
+         (msecs-new (when msecs-stop (+ msecs-stop msecs)))
+         (msecs-next (save-excursion
+                       (when (subed-srt-forward-subtitle-id)
+                         (subed-srt--subtitle-msecs-start))))
+         (msecs-min (subed-srt--subtitle-msecs-start))
+         (msecs-max (when msecs-next (- msecs-next subed-subtitle-spacing))))
     (when msecs-new
+      (when (< msecs-new msecs-min)
+        (setq msecs-new msecs-min))
+      (when (and msecs-max (> msecs-new msecs-max))
+        (setq msecs-new msecs-max))
       (save-excursion
         (subed-srt-jump-to-subtitle-time-stop)
         (when (looking-at subed-srt--regexp-timestamp)
diff --git a/tests/test-subed-srt.el b/tests/test-subed-srt.el
index 76cf623..9e671f8 100644
--- a/tests/test-subed-srt.el
+++ b/tests/test-subed-srt.el
@@ -678,6 +678,99 @@ Baz.
                 (subed-srt-increase-stop-time)
                 (expect (save-excursion (subed-srt-jump-to-subtitle-time-start)
                                         (thing-at-point 'line)) :to-equal 
"00:01:01,500 --> 00:01:06,123\n")))
+          (describe "enforces limits"
+                    (describe "when decreasing start time"
+                              (it "of the first subtitle."
+                                  (with-temp-buffer
+                                    (insert mock-srt-data)
+                                    (subed-srt-jump-to-subtitle-id 1)
+                                    (subed-srt-decrease-start-time 60999)
+                                    (expect (subed-srt--subtitle-msecs-start) 
:to-be 1)
+                                    (subed-srt-decrease-start-time 1)
+                                    (expect (subed-srt--subtitle-msecs-start) 
:to-be 0)
+                                    (subed-srt-decrease-start-time 1)
+                                    (expect (subed-srt--subtitle-msecs-start) 
:to-be 0)))
+                              (it "of a non-first subtitle."
+                                  (with-temp-buffer
+                                    (insert mock-srt-data)
+                                    (subed-srt-jump-to-subtitle-id 2)
+                                    (subed-srt-decrease-start-time (- 
(subed-srt--subtitle-msecs-start 2)
+                                                                      
(subed-srt--subtitle-msecs-stop 1)
+                                                                      
subed-subtitle-spacing
+                                                                      1))
+                                    (expect (subed-srt--subtitle-msecs-start) 
:to-be (+ (subed-srt--subtitle-msecs-stop 1)
+                                                                               
         subed-subtitle-spacing
+                                                                               
         1))
+                                    (subed-srt-decrease-start-time 1)
+                                    (expect (subed-srt--subtitle-msecs-start) 
:to-be (+ (subed-srt--subtitle-msecs-stop 1)
+                                                                               
         subed-subtitle-spacing))
+                                    (subed-srt-decrease-start-time 1)
+                                    (expect (subed-srt--subtitle-msecs-start) 
:to-be (+ (subed-srt--subtitle-msecs-stop 1)
+                                                                               
         subed-subtitle-spacing))))
+                              )
+                    (it "when increasing start time."
+                        (with-temp-buffer
+                          (insert mock-srt-data)
+                          (subed-srt-jump-to-subtitle-id 2)
+                          (subed-srt-increase-start-time (- 
(subed-srt--subtitle-msecs-stop 2)
+                                                            
(subed-srt--subtitle-msecs-start 2)
+                                                            1))
+                          (expect (subed-srt--subtitle-msecs-start 2) :to-be 
(- (subed-srt--subtitle-msecs-stop 2) 1))
+                          (subed-srt-increase-start-time 1)
+                          (expect (subed-srt--subtitle-msecs-start 2) :to-be 
(subed-srt--subtitle-msecs-stop 2))
+                          (subed-srt-increase-start-time 1)
+                          (expect (subed-srt--subtitle-msecs-start 2) :to-be 
(subed-srt--subtitle-msecs-stop 2))))
+                    (it "when decreasing stop time."
+                        (with-temp-buffer
+                          (insert mock-srt-data)
+                          (subed-srt-jump-to-subtitle-id 2)
+                          (subed-srt-decrease-stop-time (- 
(subed-srt--subtitle-msecs-stop 2)
+                                                           
(subed-srt--subtitle-msecs-start 2)
+                                                           1))
+                          (expect (subed-srt--subtitle-msecs-stop 2) :to-be (+ 
(subed-srt--subtitle-msecs-start 2) 1))
+                          (subed-srt-decrease-stop-time 1)
+                          (expect (subed-srt--subtitle-msecs-stop 2) :to-be 
(subed-srt--subtitle-msecs-start 2))
+                          (subed-srt-decrease-stop-time 1)
+                          (expect (subed-srt--subtitle-msecs-stop 2) :to-be 
(subed-srt--subtitle-msecs-start 2))))
+                    (describe "when increasing stop time"
+                              (it "of the last subtitle."
+                                  (with-temp-buffer
+                                    (insert mock-srt-data)
+                                    (subed-srt-jump-to-subtitle-id 3)
+                                    (subed-srt-increase-stop-time (- (* 99 
3600000)
+                                                                     
(subed-srt--subtitle-msecs-stop 3)))
+                                    (expect (subed-srt--subtitle-msecs-stop 3) 
:to-be (* 99 3600000))
+                                    (subed-srt-increase-stop-time (* 59 60000))
+                                    (expect (subed-srt--subtitle-msecs-stop 3) 
:to-be (+ (* 99 3600000)
+                                                                               
          (* 59 60000)))
+                                    (subed-srt-increase-stop-time (* 59 1000))
+                                    (expect (subed-srt--subtitle-msecs-stop 3) 
:to-be (+ (* 99 3600000)
+                                                                               
          (* 59 60000)
+                                                                               
          (* 59 1000)))
+                                    (subed-srt-increase-stop-time 999)
+                                    (expect (subed-srt--subtitle-msecs-stop 3) 
:to-be (+ (* 99 3600000)
+                                                                               
          (* 59 60000)
+                                                                               
          (* 59 1000)
+                                                                               
          999))))
+                              (it "of a non-last subtitle."
+                                  (with-temp-buffer
+                                    (insert mock-srt-data)
+                                    (subed-srt-jump-to-subtitle-id 2)
+                                    (subed-srt-increase-stop-time (- 
(subed-srt--subtitle-msecs-start 3)
+                                                                     
(subed-srt--subtitle-msecs-stop 2)
+                                                                     
subed-subtitle-spacing
+                                                                     1))
+                                    (expect (subed-srt--subtitle-msecs-stop 2) 
:to-be (- (subed-srt--subtitle-msecs-start 3)
+                                                                               
          subed-subtitle-spacing
+                                                                               
          1))
+                                    (subed-srt-increase-stop-time 1)
+                                    (expect (subed-srt--subtitle-msecs-stop 2) 
:to-be (- (subed-srt--subtitle-msecs-start 3)
+                                                                               
          subed-subtitle-spacing))
+                                    (subed-srt-increase-stop-time 1)
+                                    (expect (subed-srt--subtitle-msecs-stop 2) 
:to-be (- (subed-srt--subtitle-msecs-start 3)
+                                                                               
          subed-subtitle-spacing))))
+                              )
+                    )
           (it "does nothing if no timestamp can be found."
               (with-temp-buffer
                 (insert "foo")



reply via email to

[Prev in Thread] Current Thread [Next in Thread]