From 9c4b0d53715d94ee923729eb40416ea90f71516c Mon Sep 17 00:00:00 2001
From: Joe Neeman <joeneeman@gmail.com>
Date: Thu, 21 Aug 2008 09:26:27 -0700
Subject: [PATCH] Small cleanups due to Han-Wen's comments.

---
 input/regression/accidental-contemporary.ly | 27 +++++++++++++++------
 lily/accidental-engraver.cc                 | 16 ++++--------
 lily/context.cc                             | 15 ++++++++++++
 lily/include/context.hh                     |  6 +++--
 lily/scale.cc                               |  2 +-
 5 files changed, 45 insertions(+), 21 deletions(-)

diff --git a/input/regression/accidental-contemporary.ly b/input/regression/accidental-contemporary.ly
index 145c96a987..926c9ffc62 100644
--- a/input/regression/accidental-contemporary.ly
+++ b/input/regression/accidental-contemporary.ly
@@ -16,18 +16,31 @@ immediately repeated
 'neo-modern-cautionary style acts like neo-modern,
 adding cautionary parentheses around accidentals.
 @end itemize
+
+Both scores should show the same accidentals.
 "
 
 }
 
 \layout { ragged-right = ##t }
 
-\relative c'' {
-  #(set-accidental-style 'dodecaphonic)
-  gis4 a g gisis
-  #(set-accidental-style 'neo-modern)
-  gis8 a gis gis g' gis gis,, a'
-  #(set-accidental-style 'neo-modern-cautionary)
-  eis fis eis eis g2
+\score {
+  \relative c'' {
+    #(set-accidental-style 'dodecaphonic)
+    gis4 a g gisis
+    #(set-accidental-style 'neo-modern)
+    gis8 a gis gis g' gis gis,, a'
+    #(set-accidental-style 'neo-modern-cautionary)
+    eis fis eis eis g2
+  }
 }
 
+\score {
+  \relative c'' {
+    \set Staff.autoAccidentals = #'()
+    \set Staff.autoCautionaries = #'()
+    gis!4 a! g! gisis!
+    gis!8 a gis! gis g'! gis! gis,,! a'
+    eis! fis! eis? eis g?2
+  }
+}
diff --git a/lily/accidental-engraver.cc b/lily/accidental-engraver.cc
index 4d8fbc06a1..f93fcca465 100644
--- a/lily/accidental-engraver.cc
+++ b/lily/accidental-engraver.cc
@@ -257,7 +257,7 @@ check_pitch_against_signature (SCM key_signature, Pitch const &pitch,
 // TODO: consider moving check_pitch_against_signature to SCM (in which case
 // we can delete this function).
 LY_DEFINE (ly_find_accidentals_simple, "ly:find-accidentals-simple", 5, 0, 0,
-	   (SCM keysig, SCM pp, SCM barnum, SCM laziness, SCM octaveness ),
+	   (SCM keysig, SCM pitch_scm, SCM barnum, SCM laziness, SCM octaveness ),
 	   "Checks the need for an accidental and a 'restore' accidental against a"
 	   " key signature.  The laziness is the number of bars for which reminder"
 	   " accidentals are used (ie. if laziness is zero, we only cancel accidentals"
@@ -266,7 +266,7 @@ LY_DEFINE (ly_find_accidentals_simple, "ly:find-accidentals-simple", 5, 0, 0,
 	   " 'any-octave and it specifies whether accidentals should be canceled in"
 	   " different octaves.")
 {
-  LY_ASSERT_TYPE (unsmob_pitch, pp, 2);
+  LY_ASSERT_TYPE (unsmob_pitch, pitch_scm, 2);
   LY_ASSERT_TYPE (scm_is_integer, barnum, 3);
   LY_ASSERT_TYPE (ly_is_symbol, octaveness, 5);
 
@@ -275,7 +275,7 @@ LY_DEFINE (ly_find_accidentals_simple, "ly:find-accidentals-simple", 5, 0, 0,
 
   SCM_ASSERT_TYPE (symbol_ok, octaveness, SCM_ARG5, __FUNCTION__, "'any-octave or 'same-octave");
 
-  Pitch * pitch = unsmob_pitch (pp);
+  Pitch *pitch = unsmob_pitch (pitch_scm);
 
   int bar_number = scm_to_int (barnum);
   bool ignore_octave = ly_symbol2scm ("any-octave") == octaveness; 
@@ -512,14 +512,8 @@ Accidental_engraver::stop_translation_timestep ()
       Rational a = pitch->get_alteration ();
       SCM key = scm_cons (scm_from_int (o), scm_from_int (n));
 
-      Duration *dur = unsmob_duration (note->get_property ("duration"));
-      Rational dur_length = dur ? dur->get_length () : Rational (0);
-      Moment mp = robust_scm2moment (get_property ("measurePosition"), Moment (0));
-
-      Moment end_mp = mp.grace_part_ < Rational(0)
-	? Moment(mp.main_part_, mp.grace_part_ + dur_length)
-	: Moment(mp.main_part_ + dur_length, 0);
-
+      Moment end_mp = measure_position (context (),
+					unsmob_duration (note->get_property ("duration")));
       SCM position = scm_cons (scm_from_int (barnum), end_mp.smobbed_copy ());
 
       SCM localsig = SCM_EOL;
diff --git a/lily/context.cc b/lily/context.cc
index 2f23024e2d..c2c4a06f71 100644
--- a/lily/context.cc
+++ b/lily/context.cc
@@ -709,6 +709,21 @@ measure_position (Context const *context)
   return m;
 }
 
+/* Finds the measure position after a note of length DUR that
+   begins at the current measure position. */
+Moment
+measure_position (Context const *context, Duration const *dur)
+{
+  Moment pos = measure_position (context);
+  Rational dur_length = dur ? dur->get_length () : Rational (0);
+
+  Moment end_pos = pos.grace_part_ < Rational(0)
+    ? Moment(pos.main_part_, pos.grace_part_ + dur_length)
+    : Moment(pos.main_part_ + dur_length, 0);
+
+  return end_pos;
+}
+
 int
 measure_number (Context const *context)
 {
diff --git a/lily/include/context.hh b/lily/include/context.hh
index f0cd67c314..9b58854dc8 100644
--- a/lily/include/context.hh
+++ b/lily/include/context.hh
@@ -9,12 +9,13 @@
 #ifndef CONTEXT_HH
 #define CONTEXT_HH
 
+#include "duration.hh"
+#include "lily-proto.hh"
 #include "listener.hh"
 #include "moment.hh"
+#include "scm-hash.hh"
 #include "std-vector.hh"
 #include "virtual-methods.hh"
-#include "scm-hash.hh"
-#include "lily-proto.hh"
 
 class Context
 {
@@ -139,6 +140,7 @@ Grob *get_current_rest (Context *voice);
 DECLARE_UNSMOB (Context, context);
 
 Moment measure_position (Context const *context);
+Moment measure_position (Context const *context, Duration const *dur);
 Rational measure_length (Context const *context);
 int measure_number (Context const *context);
 void set_context_property_on_children (Context *trans, SCM sym, SCM val);
diff --git a/lily/scale.cc b/lily/scale.cc
index 24abf335bc..aa17285510 100644
--- a/lily/scale.cc
+++ b/lily/scale.cc
@@ -19,7 +19,7 @@
 LY_DEFINE (ly_make_scale, "ly:make-scale",
 	   1, 0, 0, (SCM steps),
 	   "Create a scale. "
-	   "The argument is a vector of natural numbers, each of which "
+	   "The argument is a vector of rational numbers, each of which "
 	   "represents the number of tones of a pitch above the tonic.")
 {
   bool type_ok = scm_is_vector (steps);
-- 
2.39.5