From 2d961a4be29749d5574b9968f4e32bb464dd9ccc Mon Sep 17 00:00:00 2001
From: hanwen <hanwen>
Date: Sun, 18 Jan 2004 16:46:13 +0000
Subject: [PATCH] * 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
---
 input/regression/rehearsal-mark-letter.ly | 15 ++++++-----
 lily/parser.yy                            | 15 +++++++----
 scm/music-functions.scm                   | 24 +++++++++++++++++
 scm/new-markup.scm                        | 32 ++++++++++++++++++++++-
 scm/translation-functions.scm             | 25 +-----------------
 5 files changed, 75 insertions(+), 36 deletions(-)

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)))
-- 
2.39.5