(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 ()
(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 "}"))
(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.