]> git.donarmstrong.com Git - lilypond.git/commitdiff
release: 1.5.17 release/1.5.17
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Sun, 14 Oct 2001 13:16:15 +0000 (15:16 +0200)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Sun, 14 Oct 2001 13:16:15 +0000 (15:16 +0200)
===========

* Emacs-mode: Inserting tags

* Enable python2.1/Python.h

1.5.16.h

62 files changed:
AUTHORS.txt
CHANGES
Documentation/topdocs/AUTHORS.texi
Documentation/user/refman.itely
VERSION
config.hh.in
configure
configure.in
flower/include/rational.hh
flower/rational.cc
input/bugs/cross-staff-tie.ly [new file with mode: 0644]
input/regression/arpeggio.ly
input/test/unfold-all-repeats.ly [new file with mode: 0644]
lily/arpeggio.cc
lily/duration.cc
lily/font-metric.cc
lily/grob.cc
lily/include/duration.hh
lily/include/font-metric.hh
lily/include/grob.hh
lily/include/input-smob.hh
lily/include/ly-smobs.icc
lily/include/lyric-phrasing-engraver.hh
lily/include/molecule.hh
lily/include/moment.hh
lily/include/music-output-def.hh
lily/include/music.hh
lily/include/new-spacing-spanner.hh
lily/include/pitch.hh
lily/include/score.hh
lily/include/separating-group-spanner.hh
lily/include/smobs.hh
lily/include/translator-def.hh
lily/include/translator.hh
lily/molecule.cc
lily/moment.cc
lily/music-output-def.cc
lily/music.cc
lily/new-spacing-spanner.cc
lily/pitch.cc
lily/scm-hash.cc
lily/score.cc
lily/separating-group-spanner.cc
lily/slur.cc
lily/spacing-spanner.cc
lily/syllable-group.cc
lily/system-start-delimiter.cc
lily/translator-def.cc
lily/translator.cc
lilypond-mode.el
ly/engraver-init.ly
make/out/lilypond.lsm
make/out/lilypond.mandrake.spec
make/out/lilypond.redhat.spec
make/out/lilypond.suse.spec
mf/feta-schrift.mf
modules/midi.c
scm/engraver-documentation-lib.scm
scm/grob-property-description.scm
scm/interface-description.scm
scm/music-functions.scm
tex/lilyponddefs.tex

index 3a1949d8ac3382777c62ba8bcac872418595304f..2f561d831bf98a703b4f755b2ec30d2052fba2e2 100644 (file)
@@ -82,5 +82,6 @@ list is alphabetically ordered.
 
    * August S.Sigov <august@infran.ru>     Russian translation
 
-   * Rune Zedeler <rune@zedeler.dk>     Drum notation
+   * Rune Zedeler <rune@zedeler.dk>     Drum notation, beaming and
+     accidental fixes
 
diff --git a/CHANGES b/CHANGES
index 58ed8ae1449de66ef2402a760b0c6b2049118af5..f2983b1216e6ab30f084b07f0fabe2ee7ace651d 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,10 +1,31 @@
-1.5.16.jcn1
+1.5.16.hjj2
 ===========
 
-* Some more random hacking at midi2ly.py.
+* Emacs-mode: Inserting tags
 
-1.5.16
-======
+* Enable python2.1/Python.h
+
+1.5.16.hwn1
+===========
+
+* Add unfold-repeats function (Rune Zedeler!) to standard init SCM file.
+
+* Bugfix: spacing is no longer confused by coupled clefs, where one of the
+clefs is loose, and the other not.
+
+* Robustness fix for Slur. Don't crash if attachment not set.
+
+* Arpeggios can now have arrows on the top or bottom to determine
+their direction. (MF code by Chris Jackson)
+
+* Symbol cache bugfix in system-start-delimiter.cc -- may switch
+symbol cache off for gcc 2.96?
+
+* MikTeX PDF detection bugfix (Mats Bengtsson)
+
+* Some more random hacking at midi2ly.py. (jcn1)
+
+* Inline unsmob_XXX functions.  Speedup of 6% on wtk1-fugue2.
 
 1.5.15.jcn1
 ===========
index a6ec5460cabe1a33c3cb60324f4c56b04268b4dc..600c935c353cdc5f0a99122f1be96118e5d93553 100644 (file)
@@ -84,7 +84,7 @@ list is alphabetically ordered.
 @item @email{august@@infran.ru, August S.Sigov}
     Russian translation
 @item @email{rune@@zedeler.dk, Rune Zedeler}
-    Drum notation
+    Drum notation, beaming and accidental fixes 
 @end itemize
 
 @bye
index fac04df277f0078928d233fc68fb886d4d0415be..093637d504935221eaba543c8602465c771e5107 100644 (file)
@@ -1621,6 +1621,13 @@ the specified number of repeats.
 }
 @end lilypond
 
+@subsection Unfolding repeats for MIDI output.
+
+@cindex expanding repeats
+
+See @file{input/test/unfold-all-repeats.ly}. 
+
+
 @refbugs
 
 Notice that timing information is not remembered at the start of an
@@ -1907,6 +1914,34 @@ to the chords in both staves, and set
 This command creates @code{Voice.Arpeggio} grobs.  Cross staff arpeggios
 are @code{PianoStaff.Arpeggio}.
 
+To add an arrow head to explicitly specify the direction of the
+arpeggio, you should set the arpeggio grob property
+@code{arpeggio-type}.
+
+@lilypond[fragment,relative,verbatim]
+  \context Voice {
+     \property Voice.Arpeggio \override #'arpeggio-direction = #1
+     <c\arpeggio e g c>
+     \property Voice.Arpeggio \override #'arpeggio-direction = #-1
+     <c\arpeggio e g c>
+  }
+@end lilypond
+
+@ignore
+A square bracket on the left indicates that the player should not
+arpeggiate the chord.
+
+@lil ypond[fragment,relative,verbatim]
+  \context PianoStaff <
+    \property PianoStaff.connectArpeggios = ##t
+    \property PianoStaff.Arpeggio \override #'arpeggio-direction = #'bracket
+    \context Voice = one  { <c'\arpeggio e g c> }
+    \context Voice = other { \clef bass  <c,,\arpeggio e g>}
+  >  
+@ e nd lilypond
+@end ignore
+
+
 @refbugs
 
 It is not possible to mix connected arpeggios and unconnected arpeggios
diff --git a/VERSION b/VERSION
index 8b65089dcf072a29abb752115024c598797295d6..d157673176f006141436febe3d979dcae60e2466 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,8 +1,8 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=5
-PATCH_LEVEL=16
-MY_PATCH_LEVEL=jcn1
+PATCH_LEVEL=17
+MY_PATCH_LEVEL=
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
 # released version.
index aa81bd7190c0e872752491625027ff7323e24a5c..972377ac504e1a05ffb15c853d68f3e4e3c1e395 100644 (file)
@@ -41,6 +41,9 @@
 /* define if you have kpse_find_tfm */
 #define HAVE_KPSE_FIND_TFM 0
 
+/* define if you have python2.1/Python.h header */
+#define HAVE_PYTHON2_1_PYTHON_H 0
+
 /* define if you have python2.0/Python.h header */
 #define HAVE_PYTHON2_0_PYTHON_H 0
 
index 3f9f6b4dcd9f177666f61717c46d3d746c17df60..a46decc2868c4233d1f6cfc4d8a5244fee20fbf7 100755 (executable)
--- a/configure
+++ b/configure
@@ -3497,7 +3497,7 @@ else
 fi
 
 
-for ac_hdr in python2.0/Python.h python2/Python.h python/Python.h python1.5/Python.h Python.h
+for ac_hdr in python2.1/Python.h python2.0/Python.h python2/Python.h python/Python.h python1.5/Python.h Python.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
index e64d0e859d0b75e486d21446ffa27fe98d18428a..1597831177a63eb43c8709ecab06c8629230fd32 100644 (file)
@@ -53,7 +53,7 @@ AC_STEPMAKE_MAKEINFO
 
 AC_PATH_PROG(PERL, perl, error)
 
-AC_HAVE_HEADERS(python2.0/Python.h python2/Python.h python/Python.h python1.5/Python.h Python.h)
+AC_HAVE_HEADERS(python2.1/Python.h python2.0/Python.h python2/Python.h python/Python.h python1.5/Python.h Python.h)
 
 
 AC_STEPMAKE_END
index 995700c55c32e2ce513f82d653e17a9ea904cd3e..9373b484489eea9a1356969e75eeddf66d68c456 100644 (file)
@@ -59,8 +59,10 @@ public:
   Rational (int, int);
   Rational (double);
   Rational (Rational const&r) {   copy (r);}
+  Rational &operator = (Rational const &r) {
+    copy (r); return *this;
+  }
 
-  Rational &operator = (Rational const &);
   Rational &operator *= (Rational);
   Rational &operator /= (Rational);  
   Rational &operator += (Rational);
index b2b7c898ee5f2a4491194c05d558e2d593c3f2e0..42e0c0a97c2025424a4ec17686684f899e01b4f1 100644 (file)
@@ -271,16 +271,6 @@ Rational::operator -= (Rational r)
   return (*this += r);
 }
 
-/*
-  be paranoid about overiding libg++ stuff
- */
-Rational &
-Rational::operator = (Rational const &r)
-{
-  copy (r);
-  return *this;
-}
-
 String
 Rational::str () const
 {
diff --git a/input/bugs/cross-staff-tie.ly b/input/bugs/cross-staff-tie.ly
new file mode 100644 (file)
index 0000000..7dca649
--- /dev/null
@@ -0,0 +1,18 @@
+
+
+
+\version "1.4.8"
+\score { \notes
+  \context PianoStaff <
+         \context Staff = up { \clef G
+      c'2 ~ \translator Staff=down c'
+    }
+    \context Staff = down { \clef F
+      s1
+    }
+  >
+  \paper { }
+}
+
+
+
index 1f956f90a070e5773a3ba3d8ed06c38629a91c2d..405098dd6c4ebb2db73ab3860966cb218e3b8a99 100644 (file)
@@ -11,6 +11,8 @@ Arpeggios are supported, both cross-staff and broken single staff.
     \context PianoStaff < 
         \context Staff=one \notes\relative c''{
            \context Voice < fis,-\arpeggio  d a >
+           \property Staff.Arpeggio \override #'arpeggio-direction = #1 
+           \context Voice < fis,-\arpeggio  d a >          
             %%\property PianoStaff.SpanArpeggio \override #'connect = ##t
             \property PianoStaff.connectArpeggios = ##t
             <fis,\arpeggio a c>
@@ -18,6 +20,8 @@ Arpeggios are supported, both cross-staff and broken single staff.
         \context Staff=two \notes\relative c{
             \clef bass
            \context Voice < g b d-\arpeggio   >
+           \property Staff.Arpeggio \override #'arpeggio-direction = #-1           
+           \context Voice < g b d-\arpeggio   >            
             <g\arpeggio b d>
         }
     >
diff --git a/input/test/unfold-all-repeats.ly b/input/test/unfold-all-repeats.ly
new file mode 100644 (file)
index 0000000..6d35bbc
--- /dev/null
@@ -0,0 +1,25 @@
+
+\header { 
+texidoc = "The standard function unfold-repeats will recursively unfold
+all repeats for correct MIDI output. Thanks to Rune Zedeler."
+}
+
+
+mel = \notes \context Staff {
+  \repeat tremolo 8 {c'32 e' }
+  \repeat percent 2 { c''8 d'' }
+  \repeat volta 2 {c'4 d' e' f'} 
+  \alternative {
+    { g' a' a' g' }
+    {f' e' d' c' }
+  }
+  \bar "|."
+}
+
+\score { \notes {
+  \mel \break
+  \apply #unfold-repeats \mel
+ }
+}
+
+
index 5b0e755577b254f27b611484f4a51ef5ceb56732..931030a16cd9228ff6c2133050f6b20b98ed8982 100644 (file)
@@ -66,18 +66,30 @@ Arpeggio::brew_molecule (SCM smob)
        */
       return SCM_EOL;
     }
+
+  Direction dir = CENTER;
+  if (isdir_b (me->get_grob_property ("arpeggio-direction")))
+    {
+      dir = to_dir (me->get_grob_property ("arpeggio-direction"));
+    }
   
   Molecule mol;
-  Molecule arpeggio = Font_interface::get_default_font (me)->find_by_name ("scripts-arpeggio");
+  Font_metric *fm =Font_interface::get_default_font (me);
+  Molecule squiggle = fm->find_by_name ("scripts-arpeggio");
 
+  Real arrow_space = (dir) ? Staff_symbol_referencer::staff_space (me)  : 0.0;
+  
   Real y = heads[LEFT];
-  while (y < heads[RIGHT])
+  while (y < heads[RIGHT] - arrow_space)
     {
-      mol.add_at_edge (Y_AXIS, UP,arpeggio, 0.0);
-      y+= arpeggio. extent (Y_AXIS).length ();
+      mol.add_at_edge (Y_AXIS, UP,squiggle, 0.0);
+      y+= squiggle. extent (Y_AXIS).length ();
     }
   mol.translate_axis (heads[LEFT], Y_AXIS);
-
+  if (dir)
+    mol.add_at_edge (Y_AXIS, dir,
+                    fm->find_by_name ("scripts-arpeggio-arrow-" + to_str (dir)), 0.0);
+  
   return mol.smobbed_copy () ;
 }
 
index 6476466774e51a8398660487d654f19361705e4c..f6ffb9145bc92320585cf8dd694309a69159362d 100644 (file)
@@ -80,7 +80,6 @@ Duration::str () const
 
 
 IMPLEMENT_TYPE_P (Duration, "duration?");
-IMPLEMENT_UNSMOB (Duration, duration);
 
 SCM
 Duration::mark_smob (SCM)
index d22da509eeb5a8a6a81e90d1db65a350bb91d864..0fcf96fc11782432fab276f86a2b6d76ff01c24b 100644 (file)
@@ -121,7 +121,7 @@ Font_metric::print_smob (SCM s, SCM port, scm_print_state *)
 }
 
 
-IMPLEMENT_UNSMOB (Font_metric, metrics);
+
 IMPLEMENT_SMOBS (Font_metric);
 IMPLEMENT_DEFAULT_EQUAL_P (Font_metric);
 IMPLEMENT_TYPE_P (Font_metric, "font-metric?");
index 82b177151687b8801711902640c013e311168895..f55ee2f8e257b73fe4ac3b41ae317a9a0a8e4f4e 100644 (file)
@@ -141,7 +141,7 @@ Grob::get_grob_property (SCM sym) const
 
 /*
   Remove the value associated with KEY, and return it. The result is
-  that a next call will yield SCM_UNDEFINED (and not the underlying
+  that a next call will yield SCM_EOL (and not the underlying
   `basic' property.
 */
 SCM
@@ -768,7 +768,7 @@ Grob::fixup_refpoint (SCM smob)
  ****************************************************/
 
 
-IMPLEMENT_UNSMOB (Grob, grob);
+
 IMPLEMENT_SMOBS (Grob);
 IMPLEMENT_DEFAULT_EQUAL_P (Grob);
 
index bdb988a1c3c3bb8c4e13f6058cfc834a95665250..7324349fdc1e75d45b050bb6f679945912bf11e8 100644 (file)
@@ -45,7 +45,7 @@ private:
 
 #include "compare.hh"
 INSTANTIATE_COMPARE (Duration, Duration::compare);
-Duration*unsmob_duration (SCM);
+DECLARE_UNSMOB(Duration,duration);
 // int compare (Array<Duration>*, Array<Duration>*);
 
 #endif // DURATION_HH
index 87137221c3cf547a4f1592b124ac4d29806924ef..d3ae05da69a3cc15b017642e7d4eee459443cdc6 100644 (file)
@@ -34,7 +34,7 @@ protected:
   Font_metric ();
 };
 
-Font_metric * unsmob_metrics (SCM s);
+DECLARE_UNSMOB(Font_metric, metrics);
 
 #endif /* FONT_METRIC_HH */
 
index e1820f9d07985580014ece3c681ed4edc651eefe..0cabf6e0e1957cca192dd9b9898bb6c8a427225a 100644 (file)
@@ -174,7 +174,7 @@ public:
   DECLARE_SCHEME_CALLBACK (fixup_refpoint, (SCM));
 };
 
-Grob * unsmob_grob (SCM);
+DECLARE_UNSMOB(Grob,grob);
 
 #endif // STAFFELEM_HH
 
index 2cd9462d5dc14e4315b6b91e54b31c9219b427a6..c38c240edf11a8cebf3ae65a3fdd1468080ed240 100644 (file)
 
 #include "input.hh"
 #include "lily-guile.hh"
+#include "smobs.hh"
 
 SCM make_input (Input spot);
-Input *unsmob_input (SCM);
+Input *unsmob_input(SCM);
 
 extern Input dummy_input_global;
 
index 69c7d2ecfe633c5da76a089fe6cff73b838d1594..f5b8f62c10849711af81da720f10722bfb34e5e3 100644 (file)
 #include "smobs.hh"
 
 
-#define IMPLEMENT_UNSMOB(CL, name)             \
-CL *                                           \
-unsmob_ ## name ( SCM s)                       \
-{                                              \
-return  CL::unsmob (s);                                \
-}
-
 #define IMPLEMENT_TYPE_P(CL, FUNCNAME)\
 void init_type_p_ ## CL ()\
 {\
@@ -64,14 +57,6 @@ SCM CL::smobbed_self () const                                        \
                                                                \
   return s;                                                    \
 }                                                              \
-CL *                                                           \
-CL::unsmob (SCM s)                                             \
-{                                                              \
-  if (SCM_NIMP (s) && SCM_CELL_TYPE (s) == smob_tag_)          \
-    return (CL*) SCM_CELL_WORD_1 (s);                          \
-  else                                                         \
-    return 0;                                                  \
-}                                                              \
 size_t                                                         \
 CL::free_smob (SCM ses)                                                \
 {                                                              \
index 269d5a96587bea16e329e882d28d2b3a3e575ed0..8a336e55ae59c2d4eeaccc19d2beadcb375f0960 100644 (file)
@@ -118,7 +118,7 @@ private:
   DECLARE_SIMPLE_SMOBS (Syllable_group,);
 } ;
 
-Syllable_group * unsmob_voice_entry (SCM);
+DECLARE_UNSMOB(Syllable_group,voice_entry);
 
 
 #endif // LYRIC_PHRASING_ENGRAVER_HH
index a8a342527917d9c539ccb484f0e45e4b0d568790..214e3181a491fceee73ef811dbeab796fe3329ea 100644 (file)
@@ -86,7 +86,7 @@ public:
 };
 
 
-Molecule *unsmob_molecule (SCM);
+DECLARE_UNSMOB(Molecule,molecule);
 SCM fontify_atom (Font_metric*, SCM atom);
 
 Molecule create_molecule (SCM brew_molecule);
index 4993b7691f84bebb64f30cb45571a5805ee6aeb7..54a8ad9cd720d404a130200dcf538caae93729ec 100644 (file)
@@ -58,7 +58,7 @@ IMPLEMENT_ARITHMETIC_OPERATOR (Moment, * );
 
 ostream & operator << ( ostream &,Moment const &);
 
-Moment * unsmob_moment (SCM);
+DECLARE_UNSMOB(Moment,moment);
 int compare (Moment const&,Moment const&);
 INSTANTIATE_COMPARE (Moment const&, Moment::compare);
 
index 9128c2b2ed5719ebf163ec63083da7685ff91372..bc7e5c73a053c210f2a7832291c532343ef41ab7 100644 (file)
@@ -46,5 +46,5 @@ public:
   DECLARE_SMOBS (Music_output_def,);
 };
 
-Music_output_def* unsmob_music_output_def (SCM);
+DECLARE_UNSMOB(Music_output_def,music_output_def);
 #endif // Music_output_DEF_HH
index 2ce12fed36ecaeb4a674fa461fd85434b3a549cb..500eb003dc1d4e793fbb10e45ff2c34390ec2a16 100644 (file)
@@ -68,7 +68,7 @@ protected:
 };
 
 
-Music * unsmob_music (SCM);
+DECLARE_UNSMOB(Music,music);
 #endif // MUSIC_HH
 
 
index ac1ac8069601db3d82dbf9119da53c120da249c2..6238dde3f1e268f2a6eb29f2477b1481dd04d411 100644 (file)
 #ifndef SPACING_SPANNER_HH
 #define SPACING_SPANNER_HH
 
-#include "spanner.hh"
-#include "spring.hh"
-
-class New_spacing_spanner
-{
-public:
-  static void set_interface (Grob*);
-  static void do_measure (Grob*,Link_array<Grob> *) ;
-  static void stretch_to_regularity (Grob*, Array<Spring> *, Link_array<Grob> const &);
-  static void breakable_column_spacing (Item* l, Item *r);
-  DECLARE_SCHEME_CALLBACK (set_springs, (SCM ));
-  static Real stem_dir_correction (Grob*,Grob*,Grob*)  ;
-  static Real default_bar_spacing (Grob*,Grob*,Grob*,Moment)  ;
-  static Real note_spacing (Grob*,Grob*,Grob*,Moment)  ;
-  static Real get_duration_space (Grob*,Moment dur, Moment shortest) ;
-};
-
-#endif /* SPACING_SPANNER_HH */
-
index c88ed87ff061880e8505de7f0aa38b1853032559..c76b11182ed5c4fb72d705240c4b3cc2a964f5fa 100644 (file)
@@ -72,7 +72,7 @@ public:
 
 };
 
-Pitch* unsmob_pitch (SCM);
+DECLARE_UNSMOB(Pitch,pitch);
 
 #include "compare.hh"
 INSTANTIATE_COMPARE (Pitch, Pitch::compare);
index 78dc4ccabd1827971a095443435555dffe8cf676..af1e3caccb568fe4933437d91aa708828d55f40b 100644 (file)
@@ -37,5 +37,5 @@ public:
 private:
   void run_translator (Music_output_def*);
 };
-Score * unsmob_score (SCM); 
+DECLARE_UNSMOB(Score,score); 
 #endif
index c394821df4856c69b17ecda16129fdf2f46dc873..848b42910468da3bfb4c8599f439bcad3d926bc8 100644 (file)
@@ -21,6 +21,7 @@ public:
   static bool has_interface (Grob*);
   static void find_musical_sequences (Grob*);
   DECLARE_SCHEME_CALLBACK (set_spacing_rods, (SCM ));
+  DECLARE_SCHEME_CALLBACK (set_spacing_rods_and_seqs, (SCM ));
 };
 
 #endif /* SEPARATING_GROUP_SPANNER_HH */
index a29547361678655216db03a42f27097a860682de..437235c9ea8c2b965629d63e3f8389d7da144630 100644 (file)
@@ -110,7 +110,12 @@ private:\
        static int print_smob (SCM s, SCM p, scm_print_state*); \
 public: \
        static SCM equal_p (SCM a, SCM b);\
-       static CL * unsmob (SCM);\
+       static CL * unsmob (SCM s){\
+  if (SCM_NIMP (s) && SCM_CELL_TYPE (s) == smob_tag_)          \
+    return (CL*) SCM_CELL_WORD_1 (s);                          \
+  else                                                         \
+    return 0;                                                  \
+}                                                              \
        static SCM smob_p (SCM);\
        static void init_smobs ();                              \
 private:
@@ -128,6 +133,14 @@ public: \
        SCM self_scm () const { return self_scm_; } \
 private:
 
+#define DECLARE_UNSMOB(CL,name) \
+inline CL *                                            \
+unsmob_ ## name (SCM s)                        \
+{                                              \
+return  CL::unsmob (s);                                \
+}
+
+
 
 #endif /* SMOBS_HH */
 
index 77082e268dbbed8e8453d8c0e7126c2c5fac09dc..fd6d42fd77b8e80ffd574d5a961d76a3651a3b9c 100644 (file)
@@ -64,7 +64,7 @@ private:
 
 };
 
-Translator_def* unsmob_translator_def (SCM);
+DECLARE_UNSMOB(Translator_def,translator_def);
 
 
 #endif /* TRANSLATOR_DEF_HH */
index 9877495be18c3bf5949c77be9571b7cefc6bbed8..6c1ff11327c95040d7feb2584d541f0de6e98f6a 100644 (file)
@@ -142,5 +142,5 @@ extern Dictionary<Translator*> *global_translator_dict_p;
 void add_translator (Translator*trans_p);
 
 Translator*get_translator_l (String s);
-Translator *unsmob_translator (SCM);
+DECLARE_UNSMOB(Translator,translator);
 #endif // TRANSLATOR_HH
index f1aedc2295223a249143ac8c1e821678bf760129..c4c46411db21196f28ce2f264b348cfd325bb6e6 100644 (file)
@@ -268,4 +268,4 @@ Molecule::mark_smob (SCM s)
 
 IMPLEMENT_TYPE_P (Molecule, "molecule?");
 IMPLEMENT_DEFAULT_EQUAL_P (Molecule);
-IMPLEMENT_UNSMOB (Molecule, molecule);
+
index 91eea12f126b99fda10794637e077e0dab5a6884..5b1f1d9027362961e5a8bbf7753aa8385a1eb0ce 100644 (file)
@@ -13,7 +13,7 @@
 #include "warn.hh"
 #include "ly-smobs.icc"
 
-IMPLEMENT_UNSMOB (Moment,moment);
+
 IMPLEMENT_SIMPLE_SMOBS (Moment);
 IMPLEMENT_TYPE_P (Moment, "moment?");
 
index 308b02577336d62ae691d63c9690c9d98b6a702e..df2c404764e8f5b081df9d0f08b3233f4596351d 100644 (file)
@@ -66,7 +66,7 @@ Music_output_def::Music_output_def (Music_output_def const &s)
 
 
 IMPLEMENT_SMOBS (Music_output_def);
-IMPLEMENT_UNSMOB (Music_output_def,music_output_def);
+
 IMPLEMENT_DEFAULT_EQUAL_P (Music_output_def);
 
 SCM
index c9955845dace681e762e5c343f7e2cbc7226d244..d3f5cdb4a804f75d28f2fd521289fcb5c3827ad7 100644 (file)
@@ -135,7 +135,7 @@ Music::transpose (Pitch)
 }
 
 IMPLEMENT_TYPE_P (Music, "music?");
-IMPLEMENT_UNSMOB (Music,music);
+
 IMPLEMENT_SMOBS (Music);
 IMPLEMENT_DEFAULT_EQUAL_P (Music);
 
index 682dc0847fcee1b78fdd06dd15396b8e1f01a606..5fc0aaf4987eff3836db7b5122f6e252224c12ee 100644 (file)
@@ -7,7 +7,6 @@
   
  */
 
-#include "new-spacing-spanner.hh"
 #include "paper-column.hh"
 #include "dimensions.hh"
 #include "paper-def.hh"
 #include "line-of-score.hh"
 #include "misc.hh"
 #include "separation-item.hh"
+#include "spanner.hh"
+#include "spring.hh"
 
+class New_spacing_spanner
+{
+public:
+  static void set_interface (Grob*);
+  static void do_measure (Grob*,Link_array<Grob> *) ;
+  static void stretch_to_regularity (Grob*, Array<Spring> *, Link_array<Grob> const &);
+  static void breakable_column_spacing (Item* l, Item *r);
+  DECLARE_SCHEME_CALLBACK (set_springs, (SCM ));
+  static Real stem_dir_correction (Grob*,Grob*,Grob*)  ;
+  static Real default_bar_spacing (Grob*,Grob*,Grob*,Moment)  ;
+  static Real note_spacing (Grob*,Grob*,Grob*,Moment)  ;
+  static Real get_duration_space (Grob*,Moment dur, Moment shortest) ;
+  static void prune_loose_colunms (Link_array<Grob>*);
+};
 
 void
 New_spacing_spanner::set_interface (Grob*me)
@@ -25,6 +40,29 @@ New_spacing_spanner::set_interface (Grob*me)
   me->set_extent_callback (SCM_EOL, Y_AXIS) ; 
 }
 
+/*
+  Remove all columns that are not tightly
+  fitting part of the spacing problem.
+ */
+void
+New_spacing_spanner::prune_loose_colunms (Link_array<Grob> *cols)
+{
+  for (int i = cols->size(); i--;)
+    {
+      SCM between = cols->elem(i)->get_grob_property ("between-cols");
+      if (!gh_pair_p (between))
+       continue;
+
+      Item * l = dynamic_cast<Item*> (unsmob_grob (gh_car (between)));
+      Item * r = dynamic_cast<Item*> (unsmob_grob (gh_cdr (between)));      
+      if (l->column_l () != cols->elem (i-1)
+         || r->column_l () != cols->elem (i +1))
+       {
+         cols->del (i);
+       }
+    }
+}
+
 /*
 
   The algorithm is partly taken from :
@@ -49,12 +87,7 @@ New_spacing_spanner::do_measure (Grob*me, Link_array<Grob> *cols)
   Moment base_shortest_duration = *unsmob_moment (me->get_grob_property ("maximum-duration-for-spacing"));
   shortest_in_measure.set_infinite (1);
 
-  for (int i = cols->size(); i--;)
-    {
-      if (gh_pair_p (cols->elem(i)->get_grob_property ("between-cols")))
-       cols->del (i);
-    }
-  
+  prune_loose_colunms (cols);
 
   for (int i =0 ; i < cols->size (); i++)  
     {
index 54d876cfa7080bee983b2e89022d452e0bb5fbfc..46013523fd454bc124e9295ca69129c0aff1964a 100644 (file)
@@ -240,7 +240,7 @@ pitch_transpose (SCM p, SCM delta)
 
 
 IMPLEMENT_TYPE_P (Pitch, "pitch?");
-IMPLEMENT_UNSMOB (Pitch, pitch);
+
 SCM
 Pitch::mark_smob (SCM)
 {
index 7eeb67188b0be14174725b23465942b5fe43bc3d..5a4d27018afb6867a992cdab73a92bee1fa76d07 100644 (file)
@@ -153,7 +153,7 @@ Scheme_hash_table::to_alist () const
 
 
 
-IMPLEMENT_UNSMOB (Scheme_hash_table,scheme_hash);
+
 IMPLEMENT_SMOBS (Scheme_hash_table);
 IMPLEMENT_DEFAULT_EQUAL_P (Scheme_hash_table);
 
index 9cc2f6d0c652fee8540e645d15927dbaf5ff3706..9b8d379999fb34737d107bdd5be58049bdcb61e1 100644 (file)
@@ -166,7 +166,7 @@ Score::add_output (Music_output_def *pap_p)
 
 IMPLEMENT_SMOBS (Score);
 IMPLEMENT_DEFAULT_EQUAL_P (Score);
-IMPLEMENT_UNSMOB (Score, score);
+
 
 SCM
 Score::mark_smob (SCM s)
index f989389674047ee63cfbe12071bb4df9f1c40e4a..66935cbd4affb0c63c00838d651d0162aee5ceae 100644 (file)
@@ -71,6 +71,15 @@ Separating_group_spanner::find_rods (Item * r, SCM next)
     }
 }
 
+MAKE_SCHEME_CALLBACK (Separating_group_spanner,set_spacing_rods_and_seqs,1);
+SCM
+Separating_group_spanner::set_spacing_rods_and_seqs (SCM smob)
+{
+  set_spacing_rods (smob);
+  find_musical_sequences (unsmob_grob (smob));
+  return SCM_UNSPECIFIED;
+}
+
 MAKE_SCHEME_CALLBACK (Separating_group_spanner,set_spacing_rods,1);
 SCM
 Separating_group_spanner::set_spacing_rods (SCM smob)
@@ -96,6 +105,7 @@ Separating_group_spanner::set_spacing_rods (SCM smob)
        find_rods (rb, ly_cdr (s));
     }
   find_musical_sequences (me);
+
 #if 0
   /*
     TODO; restore this.
@@ -162,14 +172,33 @@ Separating_group_spanner::find_musical_sequences (Grob *me)
                  && lrank - rank == 1
                  && llmus && !lmus && mus)
                {
+                 /*
+                   these columns are adjacent, so set spacing-sequence in
+                   IT.
+                   
+                    Q     Q+1    Q+2   (rank)
+                   Note  Clef   Note
+
+                   IT    LAST   LLAST  
+                   
+                  */
                  SCM seq = col->get_grob_property ("spacing-sequence");
                  col->set_grob_property ("spacing-sequence",
                                          gh_cons (gh_cons (it->self_scm (), last->self_scm ()), seq));
+
+                 /*
+                   lcol can not be a loose column, so we make sure
+                   that is and will not be marked as such.
+                 */
+                 lcol->set_grob_property ("between-cols" ,  SCM_BOOL_F);
                }
              else if (!lmus)
                {
                  SCM between = lcol->get_grob_property ("between-cols");
 
+                 if (between == SCM_BOOL_F)
+                   continue;
+                 
                  if (!gh_pair_p (between))
                    {
                      between = gh_cons (it->self_scm (), llast->self_scm ());
index 4cc9bf3e5a6aadc91eadd3b99ee8617d3532df67..e0f4836d04383cc9f29918df6335fb78f3d8e9e3 100644 (file)
@@ -175,7 +175,17 @@ Slur::set_extremities (Grob *me)
   Direction dir = LEFT;
   do 
     {
-      if (!gh_symbol_p (index_cell (me->get_grob_property ("attachment"), dir)))
+      SCM att = me->get_grob_property ("attachment");
+      /*
+       */
+      if (!gh_pair_p (att))
+       {
+         programming_error ("attachment is not a cons?!");
+         att = gh_cons (SCM_EOL, SCM_EOL);
+         me->set_grob_property ("attachment", att);
+       }
+      
+      if (!gh_symbol_p (index_cell (att, dir)))
        {
          for (SCM s = me->get_grob_property ("extremity-rules");
               s != SCM_EOL; s = ly_cdr (s))
@@ -184,7 +194,7 @@ Slur::set_extremities (Grob *me)
                                 gh_int2scm ((int)dir));
              if (r != SCM_BOOL_F)
                {
-                 index_set_cell (me->get_grob_property ("attachment"), dir,
+                 index_set_cell (att, dir,
                                  ly_cdar (s));
                  break;
                }
index 6a0a62806e6e3f06be69755586e51c7826fe392c..92b7cb748017c229603bfc368b0d5d7b3015ddfd 100644 (file)
@@ -23,73 +23,6 @@ Spacing_spanner::set_interface (Grob*me)
   me->set_extent_callback (SCM_EOL, Y_AXIS) ; 
 }
 
-#if 0  
-struct Note_run
-{
-  Array<int> idxes;
-  int start, end;
-  Moment duration;
-  int count;
-};
-
-int
-column_compare (Grob  *const &t1, Grob *const &t2)
-{
-  return Moment::compare (Paper_column::when_mom (t1),
-                         Paper_column::when_mom (t2));
-}
-
-
-Note_run
-run_length (Moment dt, int i, Array<Moment> const &moms,
-           Link_array<Note_run> runs)
-{
-  int k = 0;
-  Array<int> idxes;
-
-  idxes.push (i);
-  while (1)
-    {
-      Moment next = moms[i] + dt;
-      while (i < moms.size () && moms[i] < next)
-       i++;
-      if (i == moms.size () || moms[i] != next)
-       break;
-
-      idxes.push (i);
-      k++;
-    }
-
-  Moment dur = idxes.size ()
-}
-
-void
-find_runs (Grob*me, Link_array<Grob> cols) 
-{
-  Link_array<Grob> filter_cols;
-  Array<Moment> col_moments;
-  for (int i = 0; i < cols.size (); i++)
-    {
-      Moment w =  Paper_column::when_mom (cols[i]);
-      
-      if (!w.grace_part_ && Paper_column::musical_b (cols[i]))
-       {
-         filter_cols.push (cols[i]);
-         col_moments.push (w);
-       }
-    }
-
-  Moment end_mom = col_moments.top ();
-  for (int i = 0; i < col_moments.size () ; i++)
-    {
-      for (int j = i+1; j < col_moments.size (); j++)
-       {
-         Moment dt = Paper_column::col_momentsfilter_cols 
-       }
-    }
-}
-#endif  
-
 /*
 
   The algorithm is partly taken from :
index 119acd03df36e3dfe6de5a799d5a626d8f6105e9..3106026868e10d050d1920353167957d53e321bc 100644 (file)
@@ -259,7 +259,7 @@ Syllable_group::print_smob (SCM, SCM port, scm_print_state *)
   return 1;
 }
 
-IMPLEMENT_UNSMOB (Syllable_group, voice_entry);
+
 IMPLEMENT_SIMPLE_SMOBS (Syllable_group);
 IMPLEMENT_DEFAULT_EQUAL_P (Syllable_group);
 
index 48522d74c6aea3e4420fcaf7e6918c3b598b7a4c..ef0b23afee873a22c72d4a4d27c181f3a6e85d97 100644 (file)
@@ -143,11 +143,11 @@ System_start_delimiter::staff_brace (Grob*me, Real y)
             name.  This is better than using find_font directly,
             esp. because that triggers mktextfm for non-existent
             fonts. */
-         SCM alist = scm_list_n (gh_cons (ly_symbol2scm ("font-family"),
-                                       ly_symbol2scm ("braces")),
-                              gh_cons (ly_symbol2scm ("font-relative-size"),
-                                       gh_int2scm (i)),
-                              SCM_UNDEFINED);
+         SCM br = ly_symbol2scm ("braces");
+         SCM fam = gh_cons (ly_symbol2scm ("font-family"), br);
+         SCM sz = gh_cons (ly_symbol2scm ("font-relative-size"), gh_int2scm (i));
+
+         SCM alist = scm_list_n (fam, sz, SCM_UNDEFINED);
          fm = Font_interface::get_font (me, scm_list_n (alist, SCM_UNDEFINED));
          /* Hmm, if lookup fails, we get cmr10 anyway */
          if (ly_scm2string (ly_car (fm->description_)) == "cmr10")
index 1d1f65aeb5037eaeb9c6c02710834b3696b0ddac..200e0513cce577a1391dcddf7aab14222502514f 100644 (file)
@@ -208,7 +208,7 @@ Translator_def::path_to_acceptable_translator (SCM type_str, Music_output_def* o
 
   return best_result;
 }
-IMPLEMENT_UNSMOB (Translator_def,translator_def);
+
 IMPLEMENT_SMOBS (Translator_def);
 IMPLEMENT_DEFAULT_EQUAL_P (Translator_def);
 
index fd9f367df62f796acf4c64007e79288d46e00e10..ef5f4b100a8d3e126e53e14a05124375c4a95dc9 100644 (file)
@@ -207,6 +207,6 @@ Translator::static_translator_description ()const
   return SCM_EOL;
 }
 
-IMPLEMENT_UNSMOB (Translator, translator);
+
 IMPLEMENT_SMOBS (Translator);
 IMPLEMENT_DEFAULT_EQUAL_P (Translator);
index 565aa0494366d96947e62b827805fa02509af34f..60e1a9c2cf502ad09b3c72201faaab8be6b22970 100644 (file)
@@ -5,10 +5,10 @@
 ;;; 
 ;;; (c) 1999--2001 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; 
-;;; Changed 29th Aug 2001 Heikki Junes <heikki.junes@hut.fi>
-;;;    * Add PS-compilation, PS-viewing and MIDI-play
-;;; Changed 12th Sep 2001 Heikki Junes
-;;;    * Keyboard shortcuts
+;;; Changed 2001 Heikki Junes <heikki.junes@hut.fi>
+;;;    * Add PS-compilation, PS-viewing and MIDI-play (29th Aug 2001)
+;;;    * Keyboard shortcuts (12th Sep 2001)
+;;;    * Inserting tags, inspired on sgml-mode (11th Oct 2001)
 
 ;;; Inspired on auctex
 
@@ -426,10 +426,40 @@ command."
   (define-key LilyPond-mode-map "\C-c\C-v" 'LilyPond-command-view)
   (define-key LilyPond-mode-map "\C-c\C-p" 'LilyPond-command-viewps)
   (define-key LilyPond-mode-map "\C-c\C-m" 'LilyPond-command-midi)
+  (define-key LilyPond-mode-map "\C-cn" 'lilypond-notes)
+  (define-key LilyPond-mode-map "\C-cs" 'lilypond-score)
   )
 
 ;;; Menu Support
 
+(define-skeleton lilypond-notes
+  "Lilypond notes tag."
+  nil
+;  (if (bolp) nil ?\n)
+  "\\notes"
+  (if (y-or-n-p "Set \"\\relative\" attribute? ")
+      (concat " \\relative " (skeleton-read "Relative: " "" str)))
+  " { " _ " }")
+
+(define-skeleton lilypond-score
+  "Lilypond score tag."
+  nil
+  (if (bolp) nil ?\n)
+  "\\score {\n"
+  "   " _ "\n"
+  "   \\paper {  }\n"
+  (if (y-or-n-p "Insert \"\\header\" field? ")
+      (concat "   \\header {\n      " 
+             (skeleton-read "Piece: " "piece = " str) "\n"
+             (if (y-or-n-p "Insert \"opus\" field? ")
+                 (concat "      " (skeleton-read "Opus: " "opus = " str) "\n"))
+             "   }\n"))
+  (if (y-or-n-p "Insert \"\\midi\" field? ")
+      (concat "   \\midi { " 
+             (skeleton-read "Midi: " "\\tempo 4 = " str)  
+             " }\n"))
+  "}\n")
+
 (defun LilyPond-command-menu-entry (entry)
   ;; Return LilyPond-command-alist ENTRY as a menu item.
   (let ((name (car entry)))
@@ -458,6 +488,12 @@ command."
             [ "Region" LilyPond-command-select-region
               :keys "C-c C-r" :style radio
               :selected (eq LilyPond-command-current 'LilyPond-command-region) ]))
+         '(("Insert"
+            [ "\\notes..."  lilypond-notes
+              :keys "C-c n" ]
+            [ "\\score..."  lilypond-score
+              :keys "C-c s" ]
+            ))
 ;        (let ((file 'LilyPond-command-on-current))
 ;          (mapcar 'LilyPond-command-menu-entry LilyPond-command-alist))
 ;;; Some kind of mapping which includes :keys might be more elegant
@@ -471,8 +507,7 @@ command."
          '([ "View" (LilyPond-command (LilyPond-command-menu "View") 'LilyPond-master-file) :keys "C-c C-v"])
          '([ "ViewPS" (LilyPond-command (LilyPond-command-menu "ViewPS") 'LilyPond-master-file) :keys "C-c C-p"])
          '([ "Midi" (LilyPond-command (LilyPond-command-menu "Midi") 'LilyPond-master-file) :keys "C-c C-m"])
-  ))
-
+         ))
 
 (defconst LilyPond-imenu-generic-re "^\\([a-zA-Z_][a-zA-Z0-9_]*\\) *="
   "Regexp matching Identifier definitions.")
index 450d5b7784079e36b15b17bc1e19be7d24c87adb..c70ccf51f93d0ea42fcc47984a59074f12ecd74d 100644 (file)
@@ -18,7 +18,8 @@ StaffContext=\translator {
 %      \consists "Repeat_engraver"
        \consists "Volta_engraver"
        \consists "Separating_line_group_engraver"      
-
+       SeparatingGroupSpanner \override #'spacing-procedure
+         =  #Separating_group_spanner::set_spacing_rods_and_seqs
 
 
        \consists "Clef_engraver"
index d9edc07d9cdeb8d88b41f46e9d7363195529b1e2..d6166b4dea992976cc07a3077d5373459c5d25f5 100644 (file)
@@ -1,15 +1,15 @@
 Begin3
 Title: LilyPond
-Version: 1.5.16
-Entered-date: 09OKT01
+Version: 1.5.17
+Entered-date: 14OKT01
 Description: @BLURB@
 Keywords: music notation typesetting midi fonts engraving
 Author: hanwen@cs.uu.nl (Han-Wen Nienhuys)
        janneke@gnu.org (Jan Nieuwenhuizen)
 Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
 Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
-       1000k lilypond-1.5.16.tar.gz 
+       1000k lilypond-1.5.17.tar.gz 
 Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
-       1000k lilypond-1.5.16.tar.gz 
+       1000k lilypond-1.5.17.tar.gz 
 Copying-policy: GPL
 End
index 552f298cacc5de7876d372e4fa7ee4caa836fc26..44b1ba03756fb8576bff06d59e92be9cf4f9e63f 100644 (file)
@@ -1,5 +1,5 @@
 %define name lilypond
-%define version 1.5.16
+%define version 1.5.17
 %define release 1mdk
 
 Name: %{name}
index 6017b93fb26685214bdb3592038b4b15107b2891..3c4ef1750d7542b00d22dd289eb66704cc481626 100644 (file)
@@ -1,11 +1,11 @@
 %define info yes
 
 Name: lilypond
-Version: 1.5.16
+Version: 1.5.17
 Release: 1
 License: GPL
 Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.16.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.17.tar.gz
 Summary: Create and print music notation 
 URL: http://www.lilypond.org/
 BuildRoot: /tmp/lilypond-install
index 25c3b2d41d2f9aa679741a3564b022d1e1d2a301..d6d085413c27f1dbc3117a89b9adec514817e212 100644 (file)
 
 Distribution: SuSE Linux 7.0 (i386)
 Name: lilypond
-Version: 1.5.16
+Version: 1.5.17
 Release: 2
 Copyright:    GPL
 Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.16.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.17.tar.gz
 # music notation software for.. ?
 Summary: A program for printing sheet music.
 URL: http://www.lilypond.org/
index bdb0ef87571255a68716dca3fe76b26f7b1f6bf5..b0481341a7a4c33c4234264b4a8286d7786ee811 100644 (file)
@@ -782,8 +782,60 @@ fet_beginchar("Trill-element","trill-element","trill-element");
        currentpicture := currentpicture shifted (height/2, width/2);
        fet_endchar;
 
+
+
+%
+% Arpeggio arrow by Chris Jackson <chris@fluffhouse.org.uk>
+%
+
+def draw_arpeggio_arrow =
+        save thinness, height, width, overshoot, se, sw, ne, nw, alpha;
+       pair ne, nw, se, sw;
+        height# = staff_space#;
+        width# = 0.8height#;
+        overshoot# = 0.25 staff_space#;
+        define_pixels (height,overshoot,width);
+       set_char_box(0, width#, 0, height#);
+        alpha := -40;
+       nw = dir (alpha+180);
+        sw = dir (alpha-90); se = dir alpha;
+
+        penpos1(rthin,     alpha+90);
+       penpos2(5/4 rthick, alpha);
+        penpos3(5/4 rthick,     0);
+
+        z1 = (width/2, height) - overshoot*se; % numbering is consistent with the arpeggio symbol
+        z2 = 2[z4,(width/2,height/2)];
+        z3 = (0.5 width, 0.5 height);
+        z4 = (0.25 staff_space, rthin);
+       z6 = z2l + 1/2rthin*sw;
+        z9 = (width/2, height) + overshoot*se;
+        fill z1l {se}..{se} z6 .. z3l .. z3r.. z9{nw} ..{nw} z1r.. cycle;
+
+       bot z10 = ( 0.5w,  0   );
+       lft z11 = (-0.3w,  0.8h);
+       rt z12  = ( 1.3w,  0.8h);
+       pickup pencircle scaled 0.5 rthin;
+       filldraw z3 -- z12 {dir -130} ..  {dir -110} z10 {dir 110} ..  {dir 130} z11 -- cycle;
+enddef;
+
+fet_beginchar("Arpeggio arrow down", "arpeggio-arrow--1", "arpeggioarrowdown");
+       draw_arpeggio_arrow;
+fet_endchar;
+
+
+fet_beginchar("Arpeggio arrow up", "arpeggio-arrow-1", "arpeggioarrowup");
+        draw_arpeggio_arrow;
+        currentpicture := currentpicture scaled -1 shifted (0.8staff_space, staff_space);
+fet_endchar;
+
+
+
+
 % Hmm
 input feta-slag;
 
+
+
 fet_endgroup("scripts");
 
index e3cbea720182696c8275806489a69a750e6e2912..e1153f23d79ab2621c1bbe991de33432765d96b7 100644 (file)
@@ -23,6 +23,8 @@ midi.parse (s)
 /* urg */
 #if HAVE_PYTHON2_PYTHON_H
 #include <python2/Python.h>
+#elif HAVE_PYTHON2_1_PYTHON_H
+#include <python2.1/Python.h>
 #elif HAVE_PYTHON2_0_PYTHON_H
 #include <python2.0/Python.h>
 #elif HAVE_PYTHON1_5_PYTHON_H
index e19bce865b795b4f831fdf9d4afdbd32fd761de8..f1e67ab88db82e34b0b235a9e9583266c2dafb40 100644 (file)
@@ -7,7 +7,6 @@
 ;;; Jan Nieuwenhuizen <janneke@gnu.org>
 
 
-(eval-string (ly-gulp-file "translator-description.scm"))
 
 ;; alist of translater descriptions
 (define (document-translator-property sym)
index 85a6b931f412d0650d18af3ff804e7a7b8530fe2..6920e911beefd81a786db8308924713ec0c46af6 100644 (file)
@@ -45,6 +45,8 @@ This procedure is called (using dependency resolution) after line breaking. Retu
 (grob-property-description 'arch-width number? "width of the hook of a system brace.")
 (grob-property-description 'arithmetic-basicspace number? "see @ref{spacing-spanner-interface}.")
 (grob-property-description 'arithmetic-multiplier number? "see @ref{spacing-spanner-interface}.")
+(grob-property-description 'arpeggio-direction dir? "If set, put an
+arrow on the arpeggio squiggly line.")
 (grob-property-description 'attachment pair? "cons of symbols, '(LEFT-TYPE . RIGHT-TYPE), where both types may be alongside-stem, stem, head or loose-end.")
 
 (grob-property-description 'stem-attachment-function procedure? "Where
index 9d2249cac2d4eb3de7ac11c9f6364c9da09c92a5..60b76f8d795936db81618b48c21544c30c675927 100644 (file)
@@ -374,7 +374,7 @@ padding -- horizontal padding. This is useful if a crescendo is set next to a te
 (lily-interface
  'arpeggio-interface
  "Functions and settings for drawing an arpeggio symbol (a wavy line left to noteheads."
- '(stems))
+ '(stems arpeggio-direction))
 
 
 
index b708b44768c993e9527cba9a81216a40e5203033..52a9a4a5e3f66a1cbe73648d0e13fd01ff0372f6 100644 (file)
@@ -8,3 +8,54 @@
                 (number->string (ly-get-mus-property mus 'denominator))
                 ))
 
+(define (unfold-repeats music)
+"
+[Rune Zedeler]
+
+Han-Wen Nienhuys wrote:
+
+> It shouldn't be hard to write a Scheme function to replace all repeats
+> with unfold repeats.
+[...]
+> Left to the reader as an exercise.
+
+With thanks to Han-Wen:
+
+
+"
+  (let* ((es (ly-get-mus-property music 'elements))
+         (e (ly-get-mus-property music 'element))
+         (body (ly-get-mus-property music 'body))
+         (alts (ly-get-mus-property music 'alternatives))
+         (n  (ly-music-name music)))
+
+    (if (equal? n "Repeated_music")
+        (begin
+          (ly-set-mus-property
+           music 'length Repeated_music::unfolded_music_length)
+          (ly-set-mus-property
+           music 'iterator-ctor Unfolded_repeat_iterator::constructor)))
+
+    (if (pair? es)
+        (ly-set-mus-property
+         music 'elements
+         (map unfold-repeats es)))
+
+    (if (music? alts)
+        (ly-set-mus-property
+         music 'alternatives
+         (unfold-repeats alts)))
+
+    (if (music? body)
+        (ly-set-mus-property
+         music 'body
+         (unfold-repeats body)))
+
+    (if (music? e)
+        (ly-set-mus-property
+         music 'element
+         (unfold-repeats e)))
+
+
+    music))
+
index 0b00c76eb1a6c18897ce6da38830d335b68c3558..bc30d5403992e4508e9902a36b5b8c49ebc06ebd 100644 (file)
         \botalign{\hbox{\raise #1\leftalign{\kern #2{}#3}}}}%
 
 % Are we using PDFTeX?  If so, use pdf definitions.
+% MiKTeX checks \pdfoutput the wrong way, makes our
+% check more complicated.
 \ifx\pdfoutput\undefined  
   \input lily-ps-defs
 \else
-  \pdfoutput=1
-  \input lily-pdf-defs
+  \ifx\pdfoutput\relax
+    \input lily-ps-defs
+  \else
+    \pdfoutput=1
+    \input lily-pdf-defs
+  \fi
 \fi
 
 \def\EndLilyPondOutput{%