From: hanwen Date: Sun, 18 Jan 2004 16:46:13 +0000 (+0000) Subject: * input/regression/rehearsal-mark-letter.ly: new file. X-Git-Tag: release/2.1.12~10 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=2d961a4be29749d5574b9968f4e32bb464dd9ccc;p=lilypond.git * input/regression/rehearsal-mark-letter.ly: new file. * scm/translation-functions.scm (number->mark-string): new function (format-mark-letters): new function (format-mark-numbers): new function --- diff --git a/input/regression/rehearsal-mark-letter.ly b/input/regression/rehearsal-mark-letter.ly index 48fbe81766..b28c22156f 100644 --- a/input/regression/rehearsal-mark-letter.ly +++ b/input/regression/rehearsal-mark-letter.ly @@ -7,12 +7,15 @@ with @code{\mark NUMBER}, or with @code{Score.rehearsalMark}." \version "2.1.7" \score { \notes \relative c'' { - c1 | \mark #6 - c1 | \mark \default - c1 | \mark \default - c1 | \mark \default + c1 \mark \default + c1 \mark #7 + c1 \mark \default + c1 \mark \default + c1 \mark \default \property Score.rehearsalMark = #24 - c1 | \mark \default - c1 | \mark \default + c1 \mark \default + c1 \mark \default + c1 \mark \default + c1 \mark \default } } diff --git a/lily/parser.yy b/lily/parser.yy index fc618acb5e..91fd3b613f 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -1391,6 +1391,15 @@ command_element: scm_gc_protect_object (result); $$ = unsmob_music (result); } + | MARK scalar { + static SCM proc; + if (!proc) + proc = scm_c_eval_string ("make-mark-set"); + + SCM result = scm_call_1 (proc, $2); + scm_gc_protect_object (result); + $$ = unsmob_music (result); + } ; command_req: @@ -1415,11 +1424,7 @@ verbose_command_req: Music * m = MY_MAKE_MUSIC("MarkEvent"); $$ = m; } - | MARK scalar { - Music *m = MY_MAKE_MUSIC("MarkEvent"); - m->set_mus_property ("label", $2); - $$ = m; - } + | SKIP duration_length { Music * skip = MY_MAKE_MUSIC("SkipEvent"); skip->set_mus_property ("duration", $2); diff --git a/scm/music-functions.scm b/scm/music-functions.scm index 5159d13b7a..cf9ecd7e55 100644 --- a/scm/music-functions.scm +++ b/scm/music-functions.scm @@ -436,6 +436,30 @@ Rest can contain a list of beat groupings (context-spec-music (make-sequential-music basic) 'Timing))) +(define-public (make-mark-set label) + " Set properties for time signature NUM/DEN. +Rest can contain a list of beat groupings + +" + + (let* + ((set (if (integer? label) + (context-spec-music (make-property-set 'rehearsalMark label) + 'Score) + #f)) + (ev (make-music-by-name 'MarkEvent)) + (ch (make-event-chord (list ev))) + ) + + + (if set + (make-sequential-music (list set ch)) + (begin + (ly:set-mus-property! ev 'label label) + ch)))) + + + (define-public (set-time-signature num den . rest) (ly:export (apply make-time-signature-set `(,num ,den . ,rest)))) diff --git a/scm/new-markup.scm b/scm/new-markup.scm index aef4bb31f6..65e608c877 100644 --- a/scm/new-markup.scm +++ b/scm/new-markup.scm @@ -499,6 +499,36 @@ any sort of property supported by @ref{font-interface} and (ly:molecule-set-extent! m X '(1000 . -1000)) m)) + +(define number->mark-letter-vector (make-vector 25 #\A)) + +(do ((i 0 (1+ i)) + (j 0 (1+ j)) ) + ((>= i 26)) + (if (= i (- (char->integer #\I) (char->integer #\A))) + (set! i (1+ i))) + (vector-set! number->mark-letter-vector j + (integer->char (+ i (char->integer #\A)))) ) + +(define (number->markletter-string n) + "Double letters for big marks." + (let* + ((l (vector-length number->mark-letter-vector))) + + (if (>= n l) + (string-append (number->markletter-string (1- (quotient n l))) + (number->markletter-string (remainder n l))) + (make-string 1 (vector-ref number->mark-letter-vector n))))) + + +(define-public (markletter-markup paper props . rest) + "Markup letters: skip I and do double letters for big marks. +Syntax: \\markletter #25" + + (Text_item::interpret_markup paper props + (number->markletter-string (car rest)) + )) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -644,7 +674,7 @@ any sort of property supported by @ref{font-interface} and (cons note-markup (list string? number?)) (cons note-by-number-markup (list number? number? number?)) (cons fraction-markup (list markup? markup?)) - + (cons markletter-markup (list number?)) (cons column-markup (list markup-list?)) (cons dir-column-markup (list markup-list?)) (cons center-markup (list markup-list?)) diff --git a/scm/translation-functions.scm b/scm/translation-functions.scm index eec3029702..0dd2787a4c 100644 --- a/scm/translation-functions.scm +++ b/scm/translation-functions.scm @@ -29,31 +29,8 @@ -(define number->mark-letter-vector (make-vector 25 #\A)) - -(do ((i 0 (1+ i)) - (j 0 (1+ j)) ) - ((>= i 26)) - (if (= i (- (char->integer #\I) (char->integer #\A))) - (set! i (1+ i))) - (vector-set! number->mark-letter-vector j - (integer->char (+ i (char->integer #\A)))) ) - -(define-public (number->mark-string n) - "Double letters for big marks." - (let* - ((l (vector-length number->mark-letter-vector))) - (display n) (newline) - (display l) (newline) - - (if (>= n l) - (string-append (number->mark-string (1- (quotient n l))) - (number->mark-string (remainder n l))) - (make-string 1 (vector-ref number->mark-letter-vector n))))) - - (define-public (format-mark-letters mark context) - (make-bold-markup (number->mark-string (1- mark)))) + (make-bold-markup (make-markletter-markup (1- mark)))) (define-public (format-mark-numbers mark context) (make-bold-markup (number->string mark)))