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

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

[nongnu] elpa/subed 14d52d7 089/389: Add subed--for-each-subtitle


From: ELPA Syncer
Subject: [nongnu] elpa/subed 14d52d7 089/389: Add subed--for-each-subtitle
Date: Fri, 3 Dec 2021 11:00:03 -0500 (EST)

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

    Add subed--for-each-subtitle
---
 subed/subed.el      | 20 ++++++++++++++++++++
 tests/test-subed.el | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 71 insertions(+)

diff --git a/subed/subed.el b/subed/subed.el
index cd4e76c..4b31c41 100644
--- a/subed/subed.el
+++ b/subed/subed.el
@@ -376,6 +376,26 @@ subtitles) as long the subtitle IDs don't change."
          ('beginning-of-buffer nil)
          ('end-of-buffer nil)))))
 
+(defmacro subed--for-each-subtitle (&optional beg end &rest body)
+  "Run BODY for each subtitle between the region specified by BEG and END.
+If END is nil, it defaults to `point-max'.
+If BEG and END are both nil, run BODY only on the subtitle at point.
+Before BODY is run, point is placed on the subtitle's ID."
+  (declare (indent defun))
+  `(if (not ,beg)
+       ;; Run body on subtitle at point
+       (progn (save-excursion (subed-jump-to-subtitle-id)
+                              ,@body))
+     (progn
+       ;; Run body on multiple subtitles
+       (save-excursion
+         (goto-char ,beg)
+         (subed-jump-to-subtitle-id)
+         (progn ,@body)
+         (while (and (<= (point) (or ,end (point-max)))
+                     (subed-forward-subtitle-id))
+           (progn ,@body))))))
+
 (defun subed-guess-video-file ()
   "Return path to video if replacing the buffer file name's
 extension with members of `subed-video-extensions' yields an
diff --git a/tests/test-subed.el b/tests/test-subed.el
index 438693e..00b45f8 100644
--- a/tests/test-subed.el
+++ b/tests/test-subed.el
@@ -1,5 +1,56 @@
 (add-to-list 'load-path "./subed")
 (require 'subed)
+(require 'subed-srt)
+
+(describe "Iterating over subtitles"
+          (it "without beginning and end."
+              (with-temp-buffer
+                (insert mock-srt-data)
+                (subed-jump-to-subtitle-time-stop 1)
+                (subed--for-each-subtitle nil nil
+                  (forward-line 2)
+                  (kill-line)
+                  (insert "Hello."))
+                (expect (point) :to-equal 20)
+                (expect (subed--subtitle-text 1) :to-equal "Hello.")
+                (subed-jump-to-subtitle-time-stop 2)
+                (subed--for-each-subtitle nil nil
+                  (forward-line 2)
+                  (kill-line)
+                  (insert "HEllo."))
+                (expect (point) :to-equal 60)
+                (expect (subed--subtitle-text 2) :to-equal "HEllo.")
+                (subed-jump-to-subtitle-time-stop 3)
+                (subed--for-each-subtitle nil nil
+                  (forward-line 2)
+                  (kill-line)
+                  (insert "HELlo."))
+                (expect (point) :to-equal 100)
+                (expect (subed--subtitle-text 3) :to-equal "HELlo.")))
+          (it "with only the beginning."
+              (with-temp-buffer
+                (insert mock-srt-data)
+                (subed-jump-to-subtitle-time-start 1)
+                (expect (point) :to-equal 3)
+                (subed--for-each-subtitle 71 nil
+                  (forward-line 2)
+                  (kill-line)
+                  (insert "Hello."))
+                (expect (point) :to-equal 3)
+                (expect (subed--subtitle-text 2) :to-equal "Hello.")
+                (expect (subed--subtitle-text 3) :to-equal "Hello.")))
+          (it "with beginning and end."
+              (with-temp-buffer
+                (insert mock-srt-data)
+                (subed-jump-to-subtitle-time-stop 1)
+                (subed--for-each-subtitle 71 79
+                  (forward-line 2)
+                  (kill-line)
+                  (insert "Hello."))
+                (expect (point) :to-equal 20)
+                (expect (subed--subtitle-text 2) :to-equal "Hello.")
+                (expect (subed--subtitle-text 3) :to-equal "Hello.")))
+          )
 
 (describe "Syncing player to point"
           :var (subed-mpv-playback-position)



reply via email to

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