From d89ab2fcbc404a68770ea41256430f2643052c2a Mon Sep 17 00:00:00 2001 From: Sacha Chua Date: Sun, 22 Oct 2023 08:47:00 -0400 Subject: matching subtitles --- emacsconf-subed.el | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 91 insertions(+), 1 deletion(-) diff --git a/emacsconf-subed.el b/emacsconf-subed.el index 6369cdd..745ed51 100644 --- a/emacsconf-subed.el +++ b/emacsconf-subed.el @@ -298,7 +298,8 @@ Create it if necessary." (interactive "e") (goto-char (posn-point (event-start event))) (skip-syntax-backward "w") - (subed-split-subtitle)) + (subed-split-subtitle) + (recenter)) (defun emacsconf-subed-merge-and-fill () "Merge this subtitle with the next one." @@ -316,11 +317,100 @@ Create it if necessary." (define-key map [up-1] #'ignore) (define-key map [drag-mouse-1] #'ignore) (define-key map [mouse-movement] #'ignore) + (define-key map (kbd "") #'scroll-up) (define-key map "q" #'fill-paragraph) (define-key map "." #'emacsconf-subed-merge-and-fill) + (define-key map "u" #'undo) (define-key map (kbd "SPC") #'scroll-up) map) t)) +(defun emacsconf-subed-intro-subtitles () + "Create the introduction as subtitles." + (interactive) + (subed-auto-insert) + (let ((emacsconf-publishing-phase 'conference)) + (mapc + (lambda (sub) (apply #'subed-append-subtitle nil (cdr sub))) + (seq-map-indexed + (lambda (talk i) + (list + nil + (* i 5000) + (1- (* i 5000)) + (format "#+OUTPUT: %s.webm\n[[file:%s]]\n%s" + (plist-get talk :slug) + (expand-file-name + (concat (plist-get talk :slug) ".svg.png") + (expand-file-name "in-between" emacsconf-stream-asset-dir)) + (emacsconf-pad-expand-intro talk)))) + (emacsconf-publish-prepare-for-display (emacsconf-get-talk-info)))))) + +(defvar-local emacsconf-subed-subtitle-source nil "Buffer with the intended subtitles.") + +(defun emacsconf-subed-prepare-string-for-matching (s) + (downcase + (replace-regexp-in-string "[^A-Za-z0-9]" "" + (replace-regexp-in-string "^\\(\\[\\[.*?\]\\]\\|#\\+.*?\\)\\(\n\\|$\\)" "" s)))) + +(defun emacsconf-subed-similar-p (source current) + (let* ((current-stripped (emacsconf-subed-prepare-string-for-matching current)) + (distance (string-distance current-stripped + (emacsconf-subed-prepare-string-for-matching source))) + (ratio (/ (* 100.0 distance) (length current-stripped))) + (threshold 10)) + (< ratio threshold))) + +(defun emacsconf-subed-source-backward () + (interactive) + (with-current-buffer (get-buffer emacsconf-subed-subtitle-source) + (subed-backward-subtitle-end) + (set-mark (point)) + (subed-jump-to-subtitle-text) + (when (get-buffer-window (current-buffer)) + (set-window-point + (get-buffer-window (current-buffer)) (point)) + (with-selected-window (get-buffer-window (current-buffer)) + (recenter))))) + +(defun emacsconf-subed-source-forward () + (interactive) + (with-current-buffer (get-buffer emacsconf-subed-subtitle-source) + (subed-forward-subtitle-end) + (set-mark (point)) + (subed-jump-to-subtitle-text) + (when (get-buffer-window (current-buffer)) + (set-window-point + (get-buffer-window (current-buffer)) (point)) + (with-selected-window (get-buffer-window (current-buffer)) + (recenter))))) + +(defun emacsconf-subed-match-up-subtitles () + (interactive) + (let* ((source + (with-current-buffer (get-buffer emacsconf-subed-subtitle-source) + (or (subed-subtitle-text) (subed-forward-subtitle-text) (subed-subtitle-text))))) + (subed-set-subtitle-text source) + (subed-forward-subtitle-text) + (emacsconf-subed-source-forward))) + +(defun emacsconf-subed-match-multiple (prefix) + "Set up for matching multiple subtitles." + (interactive "p") + (when (or (>= prefix 4) (null emacsconf-subed-subtitle-source)) + (setq-local emacsconf-subed-subtitle-source (read-buffer "Source subtitles: " nil t))) + (set-transient-map + (let ((map (make-sparse-keymap))) + (define-key map (kbd "RET") #'emacsconf-subed-match-up-subtitles) + (define-key map (kbd "SPC") #'emacsconf-subed-match-up-subtitles) + (define-key map (kbd "") #'subed-backward-subtitle-text) + (define-key map (kbd "") #'subed-forward-subtitle-text) + (define-key map (kbd "") #'emacsconf-subed-source-backward) + (define-key map (kbd "") #'emacsconf-subed-source-forward) + (define-key map "k" #'subed-kill-subtitle) + (define-key map "m" #'emacsconf-subed-merge-and-fill) + map) + t)) + (provide 'emacsconf-subed) ;;; emacsconf-subed.el ends here -- cgit v1.2.3