]> git.donarmstrong.com Git - lilypond.git/commitdiff
Revert "Issue 1471: Invalidate alterations upon key change rather than forgetting...
authorDavid Kastrup <dak@gnu.org>
Thu, 7 Apr 2011 19:18:58 +0000 (21:18 +0200)
committerDavid Kastrup <dak@gnu.org>
Thu, 7 Apr 2011 19:18:58 +0000 (21:18 +0200)
This reverts commit 197e3ae339de2d7359b071fd845266b4697df76f.

lily/clef-engraver.cc
scm/music-functions.scm

index 5ddfea627e0869149ecc4e1c7d65522d437e1a2f..5551cbc07c6eac64e15f22f47f7060aa96dced9e 100644 (file)
@@ -138,15 +138,6 @@ Clef_engraver::process_music ()
   inspect_clef_properties ();
 }
 
-static void apply_on_children (Context *context, SCM fun)
-{
-  scm_call_1(fun, context->self_scm());
-  for (SCM s = context->children_contexts ();
-       scm_is_pair(s); s = scm_cdr (s))
-    apply_on_children(unsmob_context (scm_car(s)), fun);
-}
-  
-
 void
 Clef_engraver::inspect_clef_properties ()
 {
@@ -161,8 +152,9 @@ Clef_engraver::inspect_clef_properties ()
       || scm_equal_p (octavation, prev_octavation_) == SCM_BOOL_F
       || to_boolean (force_clef))
     {
-      apply_on_children(context (),
-                       ly_lily_module_constant ("invalidate-alterations"));
+      set_context_property_on_children (context (),
+                                       ly_symbol2scm ("localKeySignature"),
+                                       get_property ("keySignature"));
       
       set_glyph ();
       if (prev_cpos_ != SCM_BOOL_F || to_boolean (get_property ("firstClef")))
index 25b223bbe9826016cf692c5e3c4f14624aa72176..9790cbf1a3d145a8524b3e20b1b874c59c117de6 100644 (file)
@@ -1004,18 +1004,12 @@ then revert skipTypesetting."
       (equal? laziness #t)
       (<= bar-number (+ (cadr alteration-def) laziness))))
 
-(define (accidental-voided? alteration-def)
-  "Checks an alteration entry for being voided.
-
-Non-key alterations are voided when tying into the next bar or when
-there is a clef change, since neither repetition nor cancellation can
-be omitted when the same note occurs again.
-
-Returns @code{#f} or the reason for the voiding, a symbol."
+(define (is-tied? alteration-def)
   (let* ((def (if (pair? alteration-def)
-                 (car alteration-def)
-                 alteration-def)))
-    (and (symbol? def) def)))
+                (car alteration-def)
+                alteration-def)))
+
+    (if (equal? def 'tied) #t #f)))
 
 (define (extract-alteration alteration-def)
   (cond ((number? alteration-def)
@@ -1083,7 +1077,7 @@ specifies whether accidentals should be canceled in different octaves."
      (from-key-sig
       (set! previous-alteration from-key-sig)))
 
-    (if (accidental-voided? previous-alteration)
+    (if (is-tied? previous-alteration)
        (set! need-accidental #t)
 
        (let* ((prev-alt (extract-alteration previous-alteration))
@@ -1141,14 +1135,10 @@ immediately', that is, only look at key signature.  @code{#t} is `forever'."
   (and (pair? (car entry)) (cdddr entry)))
 
 (define (key-entry-alteration entry)
-  "Return the alteration of an entry in localKeySignature.
-
-For convenience, returns @code{0} if entry is @code{#f}."
-  (if entry
-      (if (number? (car entry))
-         (cdr entry)
-         (cadr entry))
-      0))
+  "Return the alteration of an entry in localKeySignature."
+  (if (number? (car entry))
+      (cdr entry)
+      (cadr entry)))
 
 (define-public (find-pitch-entry keysig pitch accept-global accept-local)
   "Return the first entry in @var{keysig} that matches @var{pitch}.
@@ -1177,7 +1167,9 @@ look at bar lines nor different accidentals at the same note name."
     (if (not entry)
        (cons #f #f)
        (let* ((global-entry (find-pitch-entry keysig pitch #t #f))
-              (key-acc (key-entry-alteration global-entry))
+              (key-acc (if (equal? global-entry #f)
+                           0
+                           (key-entry-alteration global-entry)))
               (acc (ly:pitch-alteration pitch))
               (entrymp (key-entry-measure-position entry))
               (entrybn (key-entry-bar-number entry)))
@@ -1193,7 +1185,9 @@ on the same staff line."
     (if (not entry)
        (cons #f #f)
        (let* ((global-entry (find-pitch-entry keysig pitch #f #f))
-              (key-acc (key-entry-alteration global-entry))
+              (key-acc (if (equal? global-entry #f)
+                           0
+                           (key-entry-alteration global-entry)))
               (acc (ly:pitch-alteration pitch))
               (entrymp (key-entry-measure-position entry))
               (entrybn (key-entry-bar-number entry)))
@@ -1377,36 +1371,6 @@ as a context."
        (ly:warning (_ "unknown accidental style: ~S") style)
        (make-sequential-music '()))))))
 
-(define-public (invalidate-alterations context)
-  "Invalidate alterations in @var{context}.
-
-Elements of @code{'localKeySignature} corresponding to local
-alterations of the key signature have the form
-@code{'((octave . notename) . (alter barnum . measurepos))}.
-Replace them with a version where @code{alter} is set to @code{'clef}
-to force a repetition of accidentals.
-
-Entries that conform with the current key signature are not invalidated."
-  (let* ((keysig (ly:context-property context 'keySignature)))
-    (set! (ly:context-property context 'localKeySignature)
-         (map-in-order
-          (lambda (entry)
-            (let* ((localalt (key-entry-alteration entry))
-                   (localoct (key-entry-octave entry)))
-              (if (or (accidental-voided? localalt)
-                      (not localoct)
-                      (= localalt
-                         (key-entry-alteration
-                          (find-pitch-entry
-                           keysig
-                           (ly:make-pitch localoct
-                                          (key-entry-notename entry)
-                                          0)
-                           #t #t))))
-                  entry
-                  (cons (car entry) (cons 'clef (cddr entry))))))
-          (ly:context-property context 'localKeySignature)))))
-                   
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 (define-public (skip-of-length mus)