[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)
- [nongnu] elpa/subed 86914b4 053/389: Add more tests for moving to next/previous subtitle ID, (continued)
- [nongnu] elpa/subed 86914b4 053/389: Add more tests for moving to next/previous subtitle ID, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 6391996 056/389: Kill debugging buffer+window in subed-disable-debugging, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 0fe0c82 059/389: When opening debug window, always split horizontally, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 4e31010 062/389: mpv returns nil as "time-pos" in at least one circumstance, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 1c8e0d1 064/389: Sanitize separator between start and stop time, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 3c1a1b4 065/389: Don't validate anything if buffer is empty, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed ce14b0d 074/389: Adjust comment, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 8fa0f6c 078/389: Remove debugging messages, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 96e7fcf 086/389: Add subed--get-seconds-move, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 189e5aa 088/389: Make more functions available format-agnosticly, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 14d52d7 089/389: Add subed--for-each-subtitle,
ELPA Syncer <=
- [nongnu] elpa/subed 7710790 090/389: Add subed-move-subtitle-forward/backward, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 3511026 091/389: Move utilities to the top, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 81aca87 008/389: Be more robust when moving forward/backward to subtitle text, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 8e4bd20 069/389: Fix indentation, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 6e525b9 079/389: Add screenshot, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed bf9ceeb 094/389: Reduce word count by 1, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 42199eb 095/389: Workaround for GitHub's lack of support for ~~/path/in/home~, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 5c51000 101/389: Call time-adjusted-hook functions with start time, not stop time, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 53d1e33 102/389: Fix error when adjusting start/stop time in empty buffer, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed a0cb0f1 108/389: Keep region active during subtitle movement, ELPA Syncer, 2021/12/03