[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/subed 08e9762 188/389: Add option to ignore negative durat
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/subed 08e9762 188/389: Add option to ignore negative duration when adjusting start/stop time |
Date: |
Fri, 3 Dec 2021 11:00:23 -0500 (EST) |
branch: elpa/subed
commit 08e97626d086de88bc12265c2b4a9c5518d11b3c
Author: Random User <rndusr@posteo.de>
Commit: Random User <rndusr@posteo.de>
Add option to ignore negative duration when adjusting start/stop time
---
subed/subed-srt.el | 86 ++++++++++++++++++++++++++++-------------------
tests/test-subed-srt.el | 88 +++++++++++++++++++++++++++++++------------------
2 files changed, 108 insertions(+), 66 deletions(-)
diff --git a/subed/subed-srt.el b/subed/subed-srt.el
index c87772d..b9456c9 100644
--- a/subed/subed-srt.el
+++ b/subed/subed-srt.el
@@ -315,29 +315,39 @@ Return point or nil if there is no previous subtitle."
;;; Manipulation
-(defun subed-srt--adjust-subtitle-start (msecs &optional ignore-spacing)
+(defun subed-srt--adjust-subtitle-start (msecs &optional
+ ignore-negative-duration
+ ignore-spacing)
"Add MSECS milliseconds to start time (use negative value to subtract).
-If the adjustment would result in overlapping subtitles, reduce
-MSECS so that there are at least `subed-subtitle-spacing'
-milliseconds between subtitles. If IGNORE-SPACING is non-nil
-this limitation is disabled.
+Unless IGNORE-NEGATIVE-DURATION is non-nil, recude MSECS so that
+the start time isn't larger than the stop time. Zero-length
+subtiltes are always allowed.
+
+Unless IGNORE-SPACING is non-nil, if the adjustment would result
+in gaps between subtitles being smaller than
+`subed-subtitle-spacing', reduce MSECS so that this doesn't
+happen.
Return the number of milliseconds the start time was adjusted or
-nil if nothing was adjusted."
+nil if nothing changed."
(subed-disable-sync-point-to-player-temporarily)
(let* ((msecs-start (subed-srt--subtitle-msecs-start))
- (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 ignore-spacing nil (if msecs-prev (+ msecs-prev
subed-subtitle-spacing) 0)))
- (msecs-max (if ignore-spacing nil (subed-srt--subtitle-msecs-stop))))
+ (msecs-new (when msecs-start (+ msecs-start msecs))))
(when msecs-new
- (when (and msecs-min (< msecs-new msecs-min))
- (setq msecs-new msecs-min))
- (when (and msecs-max (> msecs-new msecs-max))
- (setq msecs-new msecs-max))
+ (if (> msecs 0)
+ ;; Adding to start time
+ (unless ignore-negative-duration
+ (let ((msecs-stop (subed-srt--subtitle-msecs-stop)))
+ (setq msecs-new (min msecs-new msecs-stop))))
+ ;; Subtracting from start time
+ (unless ignore-spacing
+ (let* ((msecs-prev-stop (save-excursion (when
(subed-srt--backward-subtitle-id)
+
(subed-srt--subtitle-msecs-stop))))
+ (msecs-min (if msecs-prev-stop
+ (+ msecs-prev-stop subed-subtitle-spacing) 0)))
+ (when msecs-min
+ (setq msecs-new (max msecs-new msecs-min))))))
;; msecs-new must be bigger than the current start time if we are adding
;; or smaller if we are subtracting.
(when (or (and (> msecs 0) (> msecs-new msecs-start)) ;; Adding
@@ -349,31 +359,39 @@ nil if nothing was adjusted."
(subed--run-subtitle-time-adjusted-hook)
(- msecs-new msecs-start)))))))
-(defun subed-srt--adjust-subtitle-stop (msecs &optional ignore-spacing)
+(defun subed-srt--adjust-subtitle-stop (msecs &optional
+ ignore-negative-duration
+ ignore-spacing)
"Add MSECS milliseconds to stop time (use negative value to subtract).
-If the adjustment would result in overlapping subtitles, reduce
-MSECS so that there are at least `subed-subtitle-spacing'
-milliseconds between subtitles. If IGNORE-SPACING is non-nil
-this limitation is disabled.
+Unless IGNORE-NEGATIVE-DURATION is non-nil, increase MSECS so
+that the stop time isn't smaller than the start time.
+Zero-length subtiltes are always allowed.
+
+Unless IGNORE-SPACING is non-nil, if the adjustment would result
+in gaps between subtitles being smaller than
+`subed-subtitle-spacing', reduce MSECS so that this doesn't
+happen.
Return the number of milliseconds the stop time was adjusted or
-nil if nothing was adjusted."
+nil if nothing changed."
(subed-disable-sync-point-to-player-temporarily)
(let* ((msecs-stop (subed-srt--subtitle-msecs-stop))
- (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 (if ignore-spacing nil (subed-srt--subtitle-msecs-start)))
- (msecs-max (if ignore-spacing nil (when msecs-next
- (- msecs-next
subed-subtitle-spacing)))))
- (message "min:%S max:%S" msecs-min msecs-max)
+ (msecs-new (when msecs-stop (+ msecs-stop msecs))))
(when msecs-new
- (when (and msecs-min (< msecs-new msecs-min))
- (setq msecs-new msecs-min))
- (when (and msecs-max (> msecs-new msecs-max))
- (setq msecs-new msecs-max))
+ (if (> msecs 0)
+ ;; Adding to stop time
+ (unless ignore-spacing
+ (let* ((msecs-next-start (save-excursion (when
(subed-srt--forward-subtitle-id)
+
(subed-srt--subtitle-msecs-start))))
+ (msecs-max (when msecs-next-start
+ (- msecs-next-start subed-subtitle-spacing))))
+ (when msecs-max
+ (setq msecs-new (min msecs-new msecs-max)))))
+ ;; Subtracting from stop time
+ (unless ignore-negative-duration
+ (let ((msecs-start (subed-srt--subtitle-msecs-start)))
+ (setq msecs-new (max msecs-new msecs-start)))))
;; msecs-new must be bigger than the current stop time if we are adding
or
;; smaller if we are subtracting.
(when (or (and (> msecs 0) (> msecs-new msecs-stop)) ;; Adding
diff --git a/tests/test-subed-srt.el b/tests/test-subed-srt.el
index 08106d8..0475476 100644
--- a/tests/test-subed-srt.el
+++ b/tests/test-subed-srt.el
@@ -655,38 +655,6 @@ Baz.
(expect (save-excursion (subed-srt--jump-to-subtitle-time-stop)
(thing-at-point 'line)) :to-equal
"00:03:03,550 --> 00:03:15,400\n")))
(describe "enforces limits"
- (describe "unless the second argument is truthy"
- (it "when adjusting start time."
- (with-temp-buffer
- (insert (concat "1\n"
- "00:00:01,000 -->
00:00:02,000\n"
- "Foo.\n\n"
- "2\n"
- "00:00:02,100 -->
00:00:03,000\n"
- "Bar.\n"))
- (subed-srt--jump-to-subtitle-id 2)
- (expect (subed-srt--adjust-subtitle-start
-100 :ignore-spacing) :to-be -100)
- (expect (subed-srt--subtitle-msecs-start
2) :to-be 2000)
- (expect (subed-srt--subtitle-msecs-stop 1)
:to-be 2000)
- (expect (subed-srt--adjust-subtitle-start
-200 :ignore-spacing) :to-be -200)
- (expect (subed-srt--subtitle-msecs-start
2) :to-be 1800)
- (expect (subed-srt--subtitle-msecs-stop 1)
:to-be 2000)))
- (it "when adjusting stop time."
- (with-temp-buffer
- (insert (concat "1\n"
- "00:00:01,000 -->
00:00:02,000\n"
- "Foo.\n\n"
- "2\n"
- "00:00:02,100 -->
00:00:03,000\n"
- "Bar.\n"))
- (subed-srt--jump-to-subtitle-id 1)
- (expect (subed-srt--adjust-subtitle-stop
100 :ignore-spacing) :to-be 100)
- (expect (subed-srt--subtitle-msecs-stop 1)
:to-be 2100)
- (expect (subed-srt--subtitle-msecs-start
2) :to-be 2100)
- (expect (subed-srt--adjust-subtitle-stop
200 :ignore-spacing) :to-be 200)
- (expect (subed-srt--subtitle-msecs-stop 1)
:to-be 2300)
- (expect (subed-srt--subtitle-msecs-start
2) :to-be 2100)))
- )
(describe "when decreasing start time"
(it "of the first subtitle."
(with-temp-buffer
@@ -797,6 +765,62 @@ Baz.
(expect (subed-srt--adjust-subtitle-start -1) :to-be
nil)
(expect (subed-subtitle-msecs-start) :to-equal
2000)))
)
+ (describe "ignores negative duration if the first argument is truthy"
+ (it "when adjusting start time."
+ (with-temp-buffer
+ (insert (concat "1\n"
+ "00:00:01,000 --> 00:00:02,000\n"
+ "Foo.\n\n"))
+ (expect (subed-srt--adjust-subtitle-start 2000 t)
:to-be 2000)
+ (expect (subed-srt--subtitle-msecs-start) :to-be
3000)
+ (expect (subed-srt--subtitle-msecs-stop) :to-be 2000)
+ (expect (subed-srt--adjust-subtitle-start -500 t)
:to-be -500)
+ (expect (subed-srt--subtitle-msecs-start) :to-be
2500)
+ (expect (subed-srt--subtitle-msecs-stop) :to-be
2000)))
+ (it "when adjusting stop time."
+ (with-temp-buffer
+ (insert (concat "1\n"
+ "00:00:01,000 --> 00:00:02,000\n"
+ "Foo.\n\n"))
+ (expect (subed-srt--adjust-subtitle-stop -1500 t)
:to-be -1500)
+ (expect (subed-srt--subtitle-msecs-stop) :to-be 500)
+ (expect (subed-srt--subtitle-msecs-start) :to-be
1000)
+ (expect (subed-srt--adjust-subtitle-stop 200 t)
:to-be 200)
+ (expect (subed-srt--subtitle-msecs-stop) :to-be 700)
+ (expect (subed-srt--subtitle-msecs-start) :to-be
1000)))
+ )
+ (describe "ignores subtitle spacing if the second argument is truthy"
+ (it "when adjusting start time."
+ (with-temp-buffer
+ (insert (concat "1\n"
+ "00:00:01,000 --> 00:00:02,000\n"
+ "Foo.\n\n"
+ "2\n"
+ "00:00:02,200 --> 00:00:03,000\n"
+ "Bar.\n"))
+ (subed-srt--jump-to-subtitle-id 2)
+ (expect (subed-srt--adjust-subtitle-start -150 nil
t) :to-be -150)
+ (expect (subed-srt--subtitle-msecs-start 2) :to-be
2050)
+ (expect (subed-srt--subtitle-msecs-stop 1) :to-be
2000)
+ (expect (subed-srt--adjust-subtitle-start -51 nil t)
:to-be -51)
+ (expect (subed-srt--subtitle-msecs-start 2) :to-be
1999)
+ (expect (subed-srt--subtitle-msecs-stop 1) :to-be
2000)))
+ (it "when adjusting stop time."
+ (with-temp-buffer
+ (insert (concat "1\n"
+ "00:00:01,000 --> 00:00:02,000\n"
+ "Foo.\n\n"
+ "2\n"
+ "00:00:02,200 --> 00:00:03,000\n"
+ "Bar.\n"))
+ (subed-srt--jump-to-subtitle-id 1)
+ (expect (subed-srt--adjust-subtitle-stop 150 nil t)
:to-be 150)
+ (expect (subed-srt--subtitle-msecs-stop 1) :to-be
2150)
+ (expect (subed-srt--subtitle-msecs-start 2) :to-be
2200)
+ (expect (subed-srt--adjust-subtitle-stop 51 nil t)
:to-be 51)
+ (expect (subed-srt--subtitle-msecs-stop 1) :to-be
2201)
+ (expect (subed-srt--subtitle-msecs-start 2) :to-be
2200)))
+ )
(it "does nothing if no timestamp can be found."
(with-temp-buffer
(insert "foo")
- [nongnu] elpa/subed 3792b4b 178/389: subed-move-subtitle: Adjust docstring, (continued)
- [nongnu] elpa/subed 3792b4b 178/389: subed-move-subtitle: Adjust docstring, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 0e6ba37 180/389: Add option to ignore subtitle spacing when adjusting start/stop time, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed a7fa089 202/389: Remove unused variable err when parsing JSON response, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 41fa03d 195/389: Use temporary-file-directory for mpv socket, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed c326079 185/389: subed-guess-video-file: Handle language name in subtitle file name, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 300341a 186/389: subed-guess-video-file: Elaborate docstring, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed ab651e8 217/389: Rename subed-srt--max-subtitle-id to subed-srt--subtitle-id-max, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 909cffd 216/389: Use generic function subed-subtitle-text in test-subed.el, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 1654a08 207/389: Properly indent tests, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 3bab6b7 196/389: Use subed-mpv-socket-dir for subed-mpv--socket, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 08e9762 188/389: Add option to ignore negative duration when adjusting start/stop time,
ELPA Syncer <=
- [nongnu] elpa/subed 06aa155 187/389: Remove debugging messages from tests, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 8bebab8 199/389: Report error when mpv socket file already exists, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed fbadab7 198/389: Add function subed--buffer-file-name, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed cd972bd 191/389: (not ...) instead of (eq ... nil), ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 1821ccd 190/389: (not ...) instead of (eq ... nil), ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 37545d9 201/389: Call subed-mpv-kill when Emacs exits, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed fafff02 221/389: subed-srt--jump-to-subtitle-id: Remove useless progn, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed dbc8394 222/389: Prevent extra goto-char when jumping to specific subtitle ID, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 7e2fe58 230/389: lint guards, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 77c206e 237/389: Remove redundant jumps, ELPA Syncer, 2021/12/03