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

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

[nongnu] elpa/subed 3561ab71c8 1/3: subed-align-region: Call new hook su


From: ELPA Syncer
Subject: [nongnu] elpa/subed 3561ab71c8 1/3: subed-align-region: Call new hook subed-align-region-hook
Date: Tue, 17 Dec 2024 16:02:54 -0500 (EST)

branch: elpa/subed
commit 3561ab71c85b7715fa95c4a017b7bb15325c5f9c
Author: Sacha Chua <sacha@sachachua.com>
Commit: Sacha Chua <sacha@sachachua.com>

    subed-align-region: Call new hook subed-align-region-hook
    
    * subed/subed-align.el (subed-align-region-hook):
    New hook.
    * subed/subed-align.el (subed-align-region):
    Handle subtitles with multiple lines.
    * subed/subed-align.el (subed-align-region): Run the hook.
    * subed/subed-waveform.el (subed-align): Refresh
    properties after aligning.
    (subed-waveform-refresh-current-subtitle): Add
    alias for convenience.
    (subed-waveform-add-to-all): Work with regions.
    (subed-waveform-refresh-after-realigning): New function.
    * subed/subed-word-data.el (subed-word-data-refresh-region):
    New function.
    * subed/subed-word-data.el (subed-align): Use subed-file-duration-ms.
---
 subed/subed-align.el     | 19 ++++++++++++-------
 subed/subed-waveform.el  | 30 +++++++++++++++++++++++-------
 subed/subed-word-data.el | 11 +++++++++++
 3 files changed, 46 insertions(+), 14 deletions(-)

diff --git a/subed/subed-align.el b/subed/subed-align.el
index 50eaacc31f..753898ed1c 100644
--- a/subed/subed-align.el
+++ b/subed/subed-align.el
@@ -41,6 +41,9 @@
 Ex: 
task_adjust_boundary_nonspeech_min=0.500|task_adjust_boundary_nonspeech_string=REMOVE
 will remove silence and other non-speech spans.")
 
+(defvar subed-align-region-hook nil "Functions to run after realigning a 
region.
+Each function will be called with BEG and END.")
+
 ;;;###autoload
 (defun subed-align-region (audio-file beg end)
   "Align just the given section."
@@ -55,10 +58,11 @@ will remove silence and other non-speech spans.")
   (let* ((format (cond
                                                                        
((derived-mode-p 'subed-vtt-mode) "VTT")
                                                                        
((derived-mode-p 'subed-srt-mode) "SRT")))
-         (temp-text-file
+         (input-mode major-mode)
+         (input-subtitles (subed-subtitle-list beg end))
+         (temp-input-file
           (make-temp-file "subed-align" nil ".txt"
-                          (subed-subtitle-list-text
-                           (subed-subtitle-list beg end))))
+                          (mapconcat (lambda (o) (elt o 3)) input-subtitles 
"\n\n")))
                                 (temp-file
           (concat (make-temp-name "subed-align")
                   "."
@@ -85,13 +89,13 @@ will remove silence and other non-speech spans.")
            t
            (append (cdr subed-align-command)
                    (list (expand-file-name audio-file)
-                         temp-text-file
+                         temp-input-file
                          (format 
"is_audio_file_head_length=%.3f|is_audio_file_process_length=%.3f|task_language=%s|os_task_file_format=%s|is_text_type=%s%s"
                                  ignore-before
                                  process-length
                                  subed-align-language
                                  (downcase format)
-                                 "plain"
+                                 "subtitles"
                                  (if subed-align-options (concat "|" 
subed-align-options) ""))
                          temp-file)))
           ;; parse the subtitles from the resulting output
@@ -100,8 +104,9 @@ will remove silence and other non-speech spans.")
             (subed-for-each-subtitle beg end nil
               (let ((current (pop results)))
                 (subed-set-subtitle-time-start (elt current 1))
-                (subed-set-subtitle-time-stop (elt current 2))))))
-      (delete-file temp-text-file)
+                (subed-set-subtitle-time-stop (elt current 2)))))
+          (run-hook-with-args 'subed-align-region-hook beg end))
+      (delete-file temp-input-file)
       (delete-file temp-file))))
 
 ;;;###autoload
diff --git a/subed/subed-waveform.el b/subed/subed-waveform.el
index 7b5cacce31..0df6e29b88 100644
--- a/subed/subed-waveform.el
+++ b/subed/subed-waveform.el
@@ -206,6 +206,9 @@ rounded to the nearest multiple of this number."
     (remove-hook 'subed-subtitle-merged-hook 'subed-waveform-subtitle-merged t)
     (remove-hook 'subed-subtitles-sorted-hook 'subed-waveform-refresh t)))
 
+(with-eval-after-load 'subed-align
+  (add-hook 'subed-align-region-hook 
#'subed-waveform-refresh-after-realigning))
+
 (defconst subed-waveform-volume-map
   (let ((map (make-sparse-keymap)))
     (define-key map (kbd "C-=") #'subed-waveform-volume-increase)
@@ -294,7 +297,7 @@ and HEIGHT are dimensions in pixels."
 (defun subed-waveform--image-parameters (&optional width height)
   "Return a plist of media-file, start, stop, width, height.
 Use WIDTH and HEIGHT if specified."
-  (let* ((duration (subed-waveform-file-duration-ms (subed-media-file)))
+  (let* ((duration (subed-file-duration-ms (subed-media-file)))
          (start (floor (max 0 (- (subed-subtitle-msecs-start) 
subed-waveform-preview-msecs-before))))
          (stop
           (min
@@ -401,7 +404,7 @@ If POSITION is nil, remove the bar."
   (setq overlay (or overlay (subed-waveform--get-current-overlay)))
   (let* ((start (subed-subtitle-msecs-start))
          (stop (min (subed-subtitle-msecs-stop)
-                    (or (subed-waveform-file-duration-ms) 
most-positive-fixnum)))
+                    (or (subed-file-duration-ms) most-positive-fixnum)))
          (start-pos (subed-waveform--position-to-percent
                      start
                      (overlay-get overlay 'waveform-start)
@@ -489,6 +492,7 @@ times per second."
     (setq subed-waveform--update-timer
           (run-with-idle-timer 0 nil 'subed-waveform-put-svg))))
 
+(defalias 'subed-waveform-refresh-current-subtitle #'subed-waveform-put-svg)
 (defun subed-waveform-put-svg (&rest _)
   "Put or update an overlay with the SVG in the current subtitle.
 Set the relevant variables if necessary.
@@ -505,14 +509,26 @@ This function ignores arguments and can be used in hooks."
           (when overlay (delete-overlay overlay))
           (setq overlay (subed-waveform--make-overlay)))))))
 
-(defun subed-waveform-add-to-all ()
-  "Update all subtitles with overlays."
-  (interactive)
-  (remove-overlays (point-min) (point-max) 'subed-waveform t)
-  (subed-for-each-subtitle (point-min) (point-max) nil
+(defun subed-waveform-add-to-all (&optional beg end)
+  "Update subtitles from BEG to END."
+  (interactive (list (if (region-active-p) (min (point) (mark)))
+                     (if (region-active-p) (max (point) (mark)))))
+  (setq beg (or beg (point-min)))
+  (setq end (or end (point-max)))
+  (remove-overlays beg end 'subed-waveform t)
+  (subed-for-each-subtitle beg end nil
     (subed-jump-to-subtitle-text)
     (subed-waveform--make-overlay)))
 
+(defun subed-waveform-refresh-after-realigning (beg end)
+  "Refresh waveforms after modifying region."
+  (when subed-waveform-minor-mode
+    (save-excursion
+      (if subed-waveform-show-all
+          (subed-waveform-add-to-all beg end)
+        (subed-waveform-remove)
+        (subed-waveform-put-svg)))))
+
 (defun subed-waveform-refresh ()
   "Add all waveforms or just the current one.
 Controlled by `subed-waveform-show-all`."
diff --git a/subed/subed-word-data.el b/subed/subed-word-data.el
index 2bb7f958cc..20cfeecaf0 100644
--- a/subed/subed-word-data.el
+++ b/subed/subed-word-data.el
@@ -274,6 +274,12 @@ Return non-nil if they are the same after normalization."
           (subed-word-data--add-word-properties (point) pos candidate)
           (setq word-data try-list))))))
 
+(defun subed-word-data-refresh-region (beg end)
+  "Refresh text properties in region."
+  (when subed-word-data--cache
+    (subed-for-each-subtitle beg end nil
+      (subed-word-data-refresh-text-properties-for-subtitle))))
+
 (defsubst subed-word-data--candidate-face (candidate)
   "Return the face to use for CANDIDATE."
   (if (and (alist-get 'score candidate)
@@ -360,5 +366,10 @@ Requires the text properties to be set."
                     max-pause pause)))
         (setq last-start-time nil)))
     (goto-char max-pos)))
+
+(with-eval-after-load 'subed-align
+  (add-hook 'subed-align-region-hook #'subed-word-data-refresh-region))
+
+
 (provide 'subed-word-data)
 ;;; subed-word-data.el ends here



reply via email to

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