]> git.donarmstrong.com Git - lilypond.git/blobdiff - elisp/lilypond-what-beat.el
lilypond-manuals.css: edit color scheme and some spacing
[lilypond.git] / elisp / lilypond-what-beat.el
index 7612138fec174c9f7b79951d936314d2c4546f46..e42f171e53b93d33dee4126f0f11898bf32111c9 100644 (file)
 (defun parse-duration (duration)
   "Returns a duration string parsed as '(numerator denominator)"
   (string-match duration-regex duration)
-  (let ((result (list 1 (string-to-int (extract-match duration 2))))
+  (let ((result (list 1 (string-to-number (extract-match duration 2))))
        (dots (extract-match duration 4))
        (numerator (or (extract-match duration 6) "1"))
        (denominator (or (extract-match duration 8) "1")))
     (if (and (not (null dots)) (< 0 (string-width dots)))
        (dotimes (dummy (string-width dots))
          (setq result (list (1+ (* 2 (car result))) (* 2 (cadr result))))))
-    (list (* (string-to-int numerator) (car result))
-         (* (string-to-int denominator) (cadr result)))
+    (list (* (string-to-number numerator) (car result))
+         (* (string-to-number denominator) (cadr result)))
 ))
 
 (defun walk-note-duration ()
@@ -199,18 +199,20 @@ If next note has no duration, returns t"
             (result '(0 1)))           ; 0 in fraction form
        (if (= measure-start -1)
            (message "No | before point")
-         (progn
-           (goto-char (1+ measure-start))
-           (goto-note-begin)
-           (while (< (point) end)
-             (setq new-duration (walk-note-duration))
+         (goto-char (1+ measure-start))
+         (goto-note-begin)
+         (while (< (point) end)
+           (let ((new-duration (walk-note-duration)))
              (if (null new-duration)
-                 (if (not (looking-at "\\\\times[ \t]*\\([1-9]*\\)/\\([1-9]*\\)[ \t\n]*{"))
+                 (if (not (looking-at
+                           (concat "\\\\t\\(?:\\(imes\\)\\|uplet\\)[ \t]*\\([0-9]+\\)/\\([0-9]+\\)\\(?:[ \t\n]"
+                                   duration-regex "\\)?[ \t\n]*{")))
                      (skip-good-keywords)
 
-                                       ; handle \times specially
-                   (let ((numerator (string-to-int (match-string 1)))
-                         (denominator (string-to-int (match-string 2))))
+                                       ; handle \times/\tuplet specially
+                   (let* ((times-p (match-beginning 1))
+                          (numerator (string-to-number (match-string (if times-p 2 3))))
+                          (denominator (string-to-number (match-string (if times-p 3 2)))))
                      (goto-char (match-end 0))
                      (goto-note-begin)
                      (while (and (not (looking-at "}"))
@@ -232,10 +234,9 @@ If next note has no duration, returns t"
                (if (not (eq new-duration t))
                    (setq duration new-duration))
                (setq result (add-fractions result duration)))
-             (goto-note-begin))
+             (goto-note-begin)))
 
-           result
-))))))
+         result)))))
 
 (defun LilyPond-what-beat ()
   "Returns how much of a measure lies between last measaure '|' and point.