]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-1.5.33
authorfred <fred>
Wed, 27 Mar 2002 02:05:40 +0000 (02:05 +0000)
committerfred <fred>
Wed, 27 Mar 2002 02:05:40 +0000 (02:05 +0000)
25 files changed:
buildscripts/lilypond-login.sh
buildscripts/lilypond-profile.sh
buildscripts/lys-to-tely.py
debian/rules
input/regression/grace-bar-number.ly [new file with mode: 0644]
input/test/figured-bass.ly
input/test/voicify-chords.ly [new file with mode: 0644]
lily/bar-number-engraver.cc
lily/figured-bass-engraver.cc
lily/lexer.ll
lily/lily-guile.cc
lily/music-constructor.cc
lily/music-sequence.cc
lily/music.cc
lily/parser.yy
lily/translator-group.cc
ly/property-init.ly
mf/GNUmakefile
mf/feta-nummer10.mf
mf/lilypond.map [new file with mode: 0644]
scm/c++.scm
scm/drums.scm
scm/music-functions.scm
scm/music-property-description.scm
scm/ps.scm

index e809b66224adbbe5b98984311f8600e80fbe41e5..3bd0e431955094eedfae60c0f544db7c96f8356d 100644 (file)
@@ -41,5 +41,16 @@ else
         setenv TFMFONTS "$datadir/tfm:"
 endif
 
+if ($?TEXPSHEADERS) then
+        setenv TFMFONTS "$datadir/pfa:$TEXPSHEADERS"
+else
+        setenv TFMFONTS "$datadir/pfa:"
+endif
+if ($?TEXCONFIG) then
+        setenv TEXCONFIG "$datadir/pfa:$TEXPSHEADERS"
+else
+        setenv TEXCONFIG "$datadir/pfa:"
+endif
+
 
 
index cae362c8ae6acfd5b4c88787c8e5056868c867fe..95cd90bd84c8fe4ab74c13225502ef99b913e9a9 100644 (file)
@@ -27,11 +27,16 @@ GS_LIB="$datadir/ps:"${GS_LIB:=""}
 MFINPUTS="$datadir/mf:"${MFINPUTS:=":"}
 TEXINPUTS="$datadir/tex:$datadir/ps:"${TEXINPUTS:=":"}
 TFMFONTS="$datadir/tfm:"${TFMFONTS:=":"}
+TEXPSHEADERS="$datadir/pfa/:"${TEXPSHEADERS:=":"}
+TEXCONFIG="$datadir/pfa/:"${TEXCONFIG:=":"}
+
+
 
 # LILYPONDPREFIX="$datadir"
 # export LILYPONDPREFIX
 
-export MFINPUTS TEXINPUTS TFMFONTS GS_LIB GS_FONTPATH 
+export MFINPUTS TEXINPUTS TFMFONTS GS_LIB GS_FONTPATH
+export TEXPSHEADERS TEXCONFIG
 
        
 
index 22343a77a7f3a413d652f91c774ac0fb48640694..57b0f907961542adce11785ba4daf093489b7d23 100644 (file)
@@ -63,7 +63,7 @@ if files:
        def name2line (n):
                # UGR
                if string.find (n, '+') >= 0:
-                       s = "@lilypondfile{%s}" % n
+                       s = "@lilypondfile[printfilename]{%s}" % n
                else:
                        s = "@lilypondfile[printfilename,verbatim]{%s}" % n
                return s
index d854c688eb293703d36509f065ca9db21d17b69d..d8dfa0a75558fb59090f4306d04553309c8ba940 100644 (file)
@@ -42,7 +42,7 @@ build-stamp:
                --prefix=/usr --enable-optimise \
                --infodir='$${prefix}/share/info' \
                --mandir='$${prefix}/share/man'
-       $(MAKE)
+       $(MAKE) MAKE_PFA_FILES=1
 
        touch build-stamp
 
@@ -75,7 +75,7 @@ install: build
 
        # Add here commands to install the package into debian/tmp.
        dh_installdirs
-       $(MAKE) prefix=$(PWD)/$(r)/usr install
+       $(MAKE) prefix=$(PWD)/$(r)/usr  MAKE_PFA_FILES=1 install
 
        # Change from an absolute symlink to a relative symlink (Lintian)
        if [ -L $(r)/usr/share/lilypond/cmtfm ]; then \
diff --git a/input/regression/grace-bar-number.ly b/input/regression/grace-bar-number.ly
new file mode 100644 (file)
index 0000000..7368e1e
--- /dev/null
@@ -0,0 +1,13 @@
+\header {
+
+texidoc = "Grace notes do tricky things with timing. If a measure
+starts with a grace note, the measure does not start at 0, but
+earlier. Nevertheless, lily should not get confused. For example, line
+breaks should be possible at grace notes, and the bar number should be
+printed correctly.
+"
+}
+
+\score { \notes\relative c''' { c1 \break
+\grace c8
+c1  }}
index 9c6b0300be89eb0249300f6b702d08bf978fb5dc..daaf2ea6d5bcb67aa5b379d45bf401f55536ca64 100644 (file)
@@ -13,7 +13,7 @@ mode, which allows you to type numbers, like @code{<4 6+>}.
    <e! g >
    <f8 ais >
    \figures {
-     r 
+     r8
      <1 3 5>4 <3- 5+ 6!> <5>
    } 
  }
diff --git a/input/test/voicify-chords.ly b/input/test/voicify-chords.ly
new file mode 100644 (file)
index 0000000..f059254
--- /dev/null
@@ -0,0 +1,64 @@
+  
+#(define (voicify-list lst number)
+   "Make a list of Musics.
+
+   voicify-list :: [ [Music ] ] -> number -> [Music]
+   LST is a list music-lists.
+"
+
+   (if (null? lst) '()
+       (cons (context-spec-music
+             (make-sequential-music
+              (list
+               (make-voice-props-set number)
+               (make-simultaneous-music (car lst))))
+
+             "Voice"  (number->string number))
+             (voicify-list (cdr lst) (+ number 1))
+       ))
+   )
+
+#(define (voicify-chord ch)
+  "Split the parts of a chord into different Voices using separator"
+   (let* ((es (ly-get-mus-property ch 'elements)))
+
+
+     (ly-set-mus-property  ch 'elements
+       (voicify-list (split-list es music-separator?) 0))
+     ch
+   ))
+
+#(define (voicify-music m)
+   "Recursively split chords that are separated with \\ "
+   
+   (if (not (music? m))
+       (begin (display m)
+       (error "not music!"))
+       )
+   (let*
+       ((es (ly-get-mus-property m 'elements))
+       (e (ly-get-mus-property m 'element))
+       )
+       
+     (if
+      (and (equal? (ly-music-name m) "Simultaneous_music")
+          (reduce (lambda (x y ) (or x y))     (map music-separator? es)))
+      (voicify-chord m)
+      (begin
+       (if (pair? es)
+           (ly-set-mus-property m 'elements (map voicify-music es)))
+       (if (music? e)
+           (ly-set-mus-property m 'element  (voicify-music e)))
+           
+       m)
+      
+      )
+     ))
+
+\score { \notes \context Staff \relative c'' 
+\apply #voicify-music {
+   c4   <g' \\ c, \\ f \\ d > f g < c \\ d> a 
+}
+}
+
+
index 2c6d4d6c26e6357a25fd7b652607c9f54cb9c56e..614b750e61d13c4fff5357f4a364ebcad323514b 100644 (file)
@@ -21,11 +21,10 @@ class Bar_number_engraver : public Engraver
 {
 protected:
   Item* text_p_;
-
 protected:
   virtual void stop_translation_timestep ();
   virtual void acknowledge_grob (Grob_info);
-  virtual void create_grobs ();
+  virtual void process_music ();
   void create_items ();
   TRANSLATOR_DECLARATIONS(  Bar_number_engraver );
 };
@@ -36,22 +35,30 @@ protected:
   every 5 measures?  */
 
 void
-Bar_number_engraver::create_grobs ()
+Bar_number_engraver::process_music ()
 {
   // todo include (&&!time->cadenza_b_)
-  SCM bn = get_property ("currentBarNumber");
-  SCM smp = get_property ("measurePosition");
-  Moment mp = (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0);
+
+  SCM wb = get_property ("whichBar");
   
-  if (gh_number_p (bn) &&
-      !mp.to_bool () && now_mom () > Moment (0))
+  if (gh_string_p (wb))
     {
-      create_items ();
-
-      // guh.
-      text_p_->set_grob_property ("text",
-                                ly_str02scm (to_str (gh_scm2int (bn)).ch_C ()));
+      SCM bn = get_property ("currentBarNumber");
+      SCM smp = get_property ("measurePosition");
+      int ibn = gh_number_p (bn) ? gh_scm2int(bn) : 1;
+      
+      Moment mp = (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0);
+      if (mp.main_part_ == Rational (0)
+         && ibn != 1)
+       {
+         create_items ();
+         
+         // guh.
+         text_p_->set_grob_property ("text",
+                                     ly_str02scm (to_str (gh_scm2int (bn)).ch_C ()));
+       }
     }
+
 }
 
 
index 624490ac57be1dcc08f63f3d2491264b942d28c2..97039753587162a4ee5818227b4c69d3b1fa036b 100644 (file)
@@ -35,6 +35,7 @@ Figured_bass_engraver::stop_translation_timestep ()
     }
 
   figures_.clear ();
+  rest_req_ = 0;
 }
 
 bool
index e07648fc32acefee31c836a4823fc618abf50b66..fa5a4dad89743a89d2d74bbf4b7f8194282a4726 100644 (file)
@@ -459,6 +459,8 @@ HYPHEN              --
        return E_CLOSE;
     case '~':
        return E_TILDE;
+    case '\\':
+       return E_BACKSLASH;
     default:
        return E_CHAR;
     }
index 3e1abf676547e905dbd259c7906cf275c5f3e2fa..c70f40e482f1a57663ea426e9360dde64fd6894c 100644 (file)
@@ -606,3 +606,45 @@ SCM my_gh_symbol2scm (const char* x)
 {
   return gh_symbol2scm ((char*)x);
 }
+
+
+bool
+type_check_assignment (SCM val, SCM sym,  SCM type_symbol) 
+{
+  bool ok = true;
+  SCM type_p = SCM_EOL;
+
+  if (gh_symbol_p (sym))
+    type_p = scm_object_property (sym, type_symbol);
+
+  if (type_p != SCM_EOL && !gh_procedure_p (type_p))
+      {
+       warning (_f ("Can't find property type-check for `%s'.  Perhaps you made a typing error? Doing assignment anyway.",
+                    ly_symbol2string (sym).ch_C ()));
+      }
+  else
+    {
+      if (val != SCM_EOL
+         && gh_procedure_p (type_p)
+         && gh_call1 (type_p, val) == SCM_BOOL_F)
+       {
+         SCM errport = scm_current_error_port ();
+         ok = false;
+         SCM typefunc = scm_primitive_eval (ly_symbol2scm ("type-name"));
+         SCM type_name = gh_call1 (typefunc, type_p);
+
+         String realval = ly_scm2string (ly_write2scm (val));
+         if (realval.length_i () > 200)
+           realval = realval.left_str (100) + "\n :\n :\n" + realval.right_str (100);
+           
+         
+         scm_puts (_f ("Type check for `%s' failed; value `%s' must be of type `%s'",
+                       ly_symbol2string (sym).ch_C (),
+                       realval.ch_C (),
+                       ly_scm2string (type_name).ch_C ()).ch_C (),
+                   errport);
+         scm_puts ("\n", errport);                   
+       }
+    }
+  return ok;
+}
index dc60a9deb430555adb858c94bd54a5b3031ddbcd..b8f3b24209bad677b2c1461b2e71465d88567fdd 100644 (file)
@@ -35,6 +35,6 @@ get_music_ctor (String s)
 Music* 
 get_music (String s)
 {
-  return (*get_music_ctor (s)) ();
+  return (*get_music_ctor (s)) () ;
 }
 
index b7e0e5695498090f7a27da241857dea3fa6cfa14..69755be0500e03a36e54a7fb7ad2f5fe7b85f66c 100644 (file)
@@ -100,9 +100,17 @@ Music_sequence::do_relative_octave (Pitch p, bool ret_first)
   Pitch last = p;
   for (SCM s = music_list (); gh_pair_p (s);  s = ly_cdr (s))
     {
-      last = unsmob_music (ly_car (s))->to_relative_octave (last);
-      if (!count ++)
-       retval = last;
+      Music *m = unsmob_music (ly_car (s));
+      if (!m)
+       {
+         programming_error ("Music_sequence should only contain music!");
+       }
+      else
+       {
+         last = m->to_relative_octave (last);
+         if (!count ++)
+           retval = last;
+       }
     }
 
   if (!ret_first)
index 65b6bd608f3c491eb30b6dd763f8b6d22415f532..597afc58b22da9b6bcf7c5fe6077703771674967 100644 (file)
@@ -166,42 +166,6 @@ Music::internal_get_mus_property (SCM sym) const
   return (s == SCM_BOOL_F) ? SCM_EOL : ly_cdr (s); 
 }
 
-#if 0
-/*
-  Remove the value associated with KEY, and return it. The result is
-  that a next call will yield SCM_EOL (and not the underlying
-  `basic' property.
-*/
-SCM
-Music::remove_mus_property (const char* key)
-{
-  SCM val = get_mus_property (key);
-  if (val != SCM_EOL)
-    set_mus_property (key, SCM_EOL);
-  return val;
-}
-
-SCM
-Music::get_mus_property (const char *nm) const
-{
-  SCM sym = ly_symbol2scm (nm);
-  return get_mus_property (sym);
-}
-
-void
-Music::set_mus_property (const char* k, SCM v)
-{
-  SCM s = ly_symbol2scm (k);
-  set_mus_property (s, v);
-}
-
-void
-Music::set_immutable_mus_property (SCM s, SCM v)
-{
-  immutable_property_alist_ = gh_cons (gh_cons (s,v), mutable_property_alist_);
-  mutable_property_alist_ = scm_assq_remove_x (mutable_property_alist_, s);
-}
-#endif
 
 void
 Music::internal_set_mus_property (SCM s, SCM v)
@@ -266,16 +230,20 @@ ly_set_mus_property (SCM mus, SCM sym, SCM val)
       return SCM_UNSPECIFIED;
     }
 
-  if (sc)
+  if (!sc)
     {
-      sc->internal_set_mus_property (sym, val);
-    }
-  else
-    {
-      warning (_ ("ly_set_mus_property ():  not of type Music"));
+      warning (_ ("ly_set_mus_property ():  not of type Music: "));
       scm_write (mus, scm_current_error_port ());
+      return SCM_UNSPECIFIED;
     }
 
+
+  bool ok = type_check_assignment (val, sym, ly_symbol2scm ("music-type?"));
+  if (ok)
+    {
+      sc->internal_set_mus_property (sym, val);
+    }
+    
   return SCM_UNSPECIFIED;
 }
 
@@ -293,8 +261,9 @@ ly_make_music (SCM type)
     }
   else
     {
-      SCM s =       get_music (ly_scm2string (type))->self_scm ();
+      SCM s = get_music (ly_scm2string (type))->self_scm ();
       scm_gc_unprotect_object (s);
+
       return s;
     }
 }
@@ -314,9 +283,25 @@ ly_music_name (SCM mus)
    return ly_str02scm (nm);
 }
 
+SCM
+ly_music_list_p (SCM l)
+{
+  if (scm_list_p (l) != SCM_BOOL_T)
+    return SCM_BOOL_F;
+
+  while (gh_pair_p (l))
+    {
+      if (!unsmob_music (gh_car (l)))
+       return SCM_BOOL_F;
+      l =gh_cdr (l);
+    }
+  return SCM_BOOL_T;
+}
+
 static void
 init_functions ()
 {
+  scm_c_define_gsubr ("music-list?", 1, 0, 0, (Scheme_function_unknown)ly_music_list_p);  
   scm_c_define_gsubr ("ly-get-mus-property", 2, 0, 0, (Scheme_function_unknown)ly_get_mus_property);
   scm_c_define_gsubr ("ly-set-mus-property", 3, 0, 0, (Scheme_function_unknown)ly_set_mus_property);
   scm_c_define_gsubr ("ly-make-music", 1, 0, 0, (Scheme_function_unknown)ly_make_music);
index 0de5be0bf5534ede0307ca544bb724ceee8d813d..4f3942169454d53111fd74a13ebe0de890c7b797 100644 (file)
@@ -242,6 +242,7 @@ yylex (YYSTYPE *s,  void * v_l)
 
 /* escaped */
 %token E_CHAR E_EXCLAMATION E_SMALLER E_BIGGER E_OPEN E_CLOSE E_TILDE
+%token E_BACKSLASH
 %token CHORD_BASS CHORD_COLON CHORD_MINUS CHORD_CARET 
 
 %type <i>      exclamations questions dots
@@ -1112,7 +1113,12 @@ command_element:
                $$-> set_spot (THIS->here_input ());
                $1-> set_spot (THIS->here_input ());
        }
+       | E_BACKSLASH {
+               $$ = new Music (gh_list (gh_cons (ly_symbol2scm ("name"), ly_symbol2scm ("separator")), SCM_UNDEFINED));
+               $$->set_spot (THIS->here_input ());
+       }
        | '|'      {
+
                extern Music * get_barcheck();
                $$ = get_barcheck ();
                $$->set_spot (THIS->here_input ());
index bd9d1d1002ecba3ed41960ae05773a19ec6390e3..90e0c70acc19cb00f23d4bf8e02655ddcb1a91c0 100644 (file)
@@ -75,12 +75,6 @@ Translator_group::add_translator (SCM list, Translator *t)
   return list;
 }
 
-void
-Translator_group::add_fresh_simple_translator (Translator*t)
-{
-  simple_trans_list_ = add_translator (simple_trans_list_, t);
-  t->initialize ();
-}
 
 void
 Translator_group::add_used_group_translator (Translator *t)
@@ -410,42 +404,6 @@ Translator_group::finalize ()
 }
 
 
-bool
-type_check_assignment (SCM val, SCM sym,  SCM type_symbol) 
-{
-  bool ok = true;
-  SCM type_p = SCM_EOL;
-
-  if (gh_symbol_p (sym))
-    type_p = scm_object_property (sym, type_symbol);
-
-  if (type_p != SCM_EOL && !gh_procedure_p (type_p))
-      {
-       warning (_f ("Can't find property type-check for `%s'.  Perhaps you made a typing error? Doing assignment anyway.",
-                    ly_symbol2string (sym).ch_C ()));
-      }
-  else
-    {
-      if (val != SCM_EOL
-         && gh_procedure_p (type_p)
-         && gh_call1 (type_p, val) == SCM_BOOL_F)
-       {
-         SCM errport = scm_current_error_port ();
-         ok = false;
-         SCM typefunc = scm_primitive_eval (ly_symbol2scm ("type-name"));
-         SCM type_name = gh_call1 (typefunc, type_p);
-
-         scm_puts (_f ("Type check for `%s' failed; value `%s' must be of type `%s'",
-                       ly_symbol2string (sym).ch_C (),
-                       ly_scm2string (ly_write2scm (val)).ch_C (),
-                       ly_scm2string (type_name).ch_C ()).ch_C (),
-                   errport);
-         scm_puts ("\n", errport);                   
-       }
-    }
-  return ok;
-}
-
 SCM
 ly_get_trans_property (SCM context, SCM name)
 {
index 4c1eb13019443edfe511af6ea9a2e16e3c68d67e..5601b73a3343c431ec483fe1825268f0aa796f56 100644 (file)
@@ -78,42 +78,11 @@ newpage = {
 }
 
 % dynamic dir?  text script, articulation script dir?  
-oneVoice = {   
-  \stemBoth
-  \slurBoth
-  \tieBoth
-  \shiftOff
-}
-
-voiceOne = {
-  \stemUp
-  \slurUp
-  \tieUp
-  \dotsUp    
-}
-
-voiceTwo = {
-  \stemDown
-  \slurDown
-  \tieDown
-  \dotsDown  
-}
-   
-voiceThree = {
-  \stemUp
-  \slurUp
-  \tieUp
-  \shiftOn
-  \dotsUp
-}
-
-voiceFour = {
-  \stemDown
-  \slurDown
-  \tieDown
-  \shiftOn
-  \dotsDown
-}
+oneVoice = #(context-spec-music (make-voice-props-revert) "Voice")
+voiceOne = #(context-spec-music (make-voice-props-set 0) "Voice")
+voiceTwo = #(context-spec-music (make-voice-props-set 1) "Voice")
+voiceThree =#(context-spec-music (make-voice-props-set 2) "Voice")
+voiceFour = #(context-spec-music (make-voice-props-set 3) "Voice")
 
 % There's also dash, but setting dash period/length should be fixed.
 slurDotted = \property Voice.Slur \override #'dashed = #1
index 17ea22fecac753b8f9e5b0cfec1f62d61aa6b253..ee62663cfa760e6d36e8f034064e37e102b2b335 100644 (file)
@@ -8,7 +8,7 @@ include $(depth)/make/stepmake.make
 
 AF_FILES = $(wildcard *.af) 
 
-EXTRA_DIST_FILES += README feta.tex
+EXTRA_DIST_FILES += README feta.tex lilypond.map
 
 # don't try to make fonts from test files
 TEST_FILES = $(wildcard *test*.mf)
@@ -57,7 +57,7 @@ ifdef MAKE_PFA_FILES
 PFA_FILES = $(addprefix $(outdir)/, $(FONT_FILES:.mf=.pfa))
 ALL_GEN_FILES += $(PFA_FILES)
 INSTALLATION_OUT_DIR4=$(datadir)/pfa
-INSTALLATION_OUT_FILES4=$(PFA_FILES)
+INSTALLATION_OUT_FILES4=$(PFA_FILES) lilypond.map
 
 pfa: $(PFA_FILES) 
 endif
index 884ca5c30a5b0cb3045dd6e7478eae4c63b7a766..2c6e8f5338d803daa54e87b23940b2dc3f90d9fc 100644 (file)
@@ -2,7 +2,7 @@
 % part of LilyPond's pretty-but-neat music font
 
 design_size:=10; % feta20 = 20pt
-
+% mode := smoke;
 input feta-nummer;
 
 end.
diff --git a/mf/lilypond.map b/mf/lilypond.map
new file mode 100644 (file)
index 0000000..5ba7e28
--- /dev/null
@@ -0,0 +1,38 @@
+%vvv UniqueID=4455667
+feta11 TeX-feta11 <feta11.pfa
+feta13 TeX-feta13 <feta13.pfa
+feta16 TeX-feta16 <feta16.pfa
+feta19 TeX-feta19 <feta19.pfa
+feta20 TeX-feta20 <feta20.pfa
+feta23 TeX-feta23 <feta23.pfa
+feta26 TeX-feta26 <feta26.pfa
+feta-din4 TeX-feta-din4 <feta-din4.pfa
+feta-din5 TeX-feta-din5 <feta-din5.pfa
+feta-din6 TeX-feta-din6 <feta-din6.pfa
+feta-din7 TeX-feta-din7 <feta-din7.pfa
+feta-din8 TeX-feta-din8 <feta-din8.pfa
+feta-din9 TeX-feta-din9 <feta-din9.pfa
+feta-din10 TeX-feta-din10 <feta-din10.pfa
+feta-din11 TeX-feta-din11 <feta-din11.pfa
+feta-din12 TeX-feta-din12 <feta-din12.pfa
+feta-din13 TeX-feta-din13 <feta-din13.pfa
+feta-din14 TeX-feta-din14 <feta-din14.pfa
+feta-din17 TeX-feta-din17 <feta-din17.pfa
+feta-din19 TeX-feta-din19 <feta-din19.pfa
+feta-braces0 TeX-feta-braces0 <feta-braces0.pfa
+feta-braces1 TeX-feta-braces1 <feta-braces1.pfa
+feta-braces2 TeX-feta-braces2 <feta-braces2.pfa
+feta-braces3 TeX-feta-braces3 <feta-braces3.pfa
+feta-braces4 TeX-feta-braces4 <feta-braces4.pfa
+feta-braces5 TeX-feta-braces5 <feta-braces5.pfa
+feta-braces6 TeX-feta-braces6 <feta-braces6.pfa
+feta-braces7 TeX-feta-braces7 <feta-braces7.pfa
+feta-braces8 TeX-feta-braces8 <feta-braces8.pfa
+feta-nummer4 TeX-feta-nummer4 <feta-nummer4.pfa
+feta-nummer5 TeX-feta-nummer5 <feta-nummer5.pfa
+feta-nummer6 TeX-feta-nummer6 <feta-nummer6.pfa
+feta-nummer7 TeX-feta-nummer7 <feta-nummer7.pfa
+feta-nummer8 TeX-feta-nummer8 <feta-nummer8.pfa
+feta-nummer10 TeX-feta-nummer10 <feta-nummer10.pfa
+feta-nummer11 TeX-feta-nummer11 <feta-nummer11.pfa
+feta-nummer13 TeX-feta-nummer13 <feta-nummer13.pfa
index 852def1a078da501ec93fb73a7d5bb572edeb6c6..e2a807e76b08c884d8219327ec4de3e6bdf587b1 100644 (file)
@@ -45,6 +45,7 @@
    (,boolean? . "boolean")
    (,moment? . "moment")
    (,ly-input-location? . "input location")
+   (,music-list? . "list of music")
    (,music? . "music")
    (,number? . "number")
    (,char? . "char")
   (cons (f (car x)) (f (cdr x))))
 
 ;; used where?
-;;(define (reduce operator list)
-;;      (if (null? (cdr list)) (car list)
-;;       (operator (car list) (reduce operator (cdr list)))))
+(define (reduce operator list)
+  "reduce OP [A, B, C, D, ... ] =
+   A op (B op (C ... ))
+"
+      (if (null? (cdr list)) (car list)
+         (operator (car list) (reduce operator (cdr list)))))
 
 
 
index 683f0d29b49d281a8831f9459876752806011b47..45d8e6be195fb789e7d63b82419f88422ba929ba 100644 (file)
@@ -3,13 +3,7 @@
 
 ;;;; changed eval to primitive-eval for guile 1.4/1.4.1 compatibility --jcn
 
-(define (seq-music-list elts)
-   (let* ( (ml (ly-make-music "Sequential_music")) )
-   (ly-set-mus-property ml 'elements elts)
-   ml 
-))
-
-(define (make-art-script x) 
+(define (make-articulation-script x) 
      (let* (  (m (ly-make-music "Articulation_req"))
            )
      (ly-set-mus-property m 'articulation-type x)
  )
 
 ;; adds the articulation script x to m if x is not #f.
-(define (add-art-script m x)
+(define (add-articulation-script m x)
   (if x
    (if (and x (equal? (ly-music-name m) "Request_chord"))
      (ly-set-mus-property m 'elements
-       (cons (make-art-script x) (ly-get-mus-property m 'elements))
+       (cons (make-articulation-script x) (ly-get-mus-property m 'elements))
      )
      (let* ( (es (ly-get-mus-property m 'elements))
             (e (ly-get-mus-property m 'element)) )
-       (map (lambda (y) (add-art-script y x)) es)
+       (map (lambda (y) (add-articulation-script y x)) es)
        (if (music? e)
-         (add-art-script e x))
+         (add-articulation-script e x))
      )
    )
   )
@@ -80,9 +74,9 @@
              (script (cadr pap))
              (pitch (caddr pap))
              (ht (make-head-type style))
-             (seq (seq-music-list (list ht req-ch)))
+             (seq (make-sequential-music (list ht req-ch)))
              )
-         (add-art-script req-ch script)
+         (add-articulation-script req-ch script)
          (ly-set-mus-property fe 'pitch pitch)
          (set! req-ch (make-thread-context style seq))
         req-ch
index 6d2257b7e6c837362b14d0a171d3da7c00e6ceee..9c254e5a8d69d6da5a1670397d5e6eb61ba6c483 100644 (file)
@@ -67,3 +67,165 @@ Fingering_engraver."
          (pitchify-scripts e)))
 
     music))
+
+
+;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;
+
+
+(define (make-grob-property-set grobs gprop val)
+  "Make a M-exp that sets GPROP to VAL in GROBS. Does a pop first, i.e.
+this is not an override 
+"
+  
+   (let* ((m (ly-make-music  "Music")))
+     (ly-set-mus-property m 'iterator-ctor Push_property_iterator::constructor)
+     (ly-set-mus-property m 'symbols grobs)
+     (ly-set-mus-property m 'grob-property gprop)
+     (ly-set-mus-property m 'grob-value val)
+     (ly-set-mus-property m 'pop-first #t)
+               
+     m
+   
+   ))
+   
+(define (make-grob-property-revert grobs gprop)
+   (let* ((m (ly-make-music  "Music")))
+     (ly-set-mus-property m 'iterator-ctor Pop_property_iterator::constructor)
+     (ly-set-mus-property m 'symbols grobs)
+     (ly-set-mus-property m 'grob-property gprop)
+               
+     m
+   
+   ))
+   
+(define (make-voice-props-set n)
+  (make-sequential-music
+   (list
+      (make-grob-property-set '(Tie Slur Stem Dots) 'direction
+                        (if (odd? n) -1 1))
+      (make-grob-property-set '(NoteColumn) 'horizontal-shift (quotient n 2))
+   )
+  ))
+
+(define (make-voice-props-revert)
+  (make-sequential-music
+   (list
+      (make-grob-property-revert '(Tie Slur Stem Dots) 'direction)
+      (make-grob-property-revert '(NoteColumn) 'horizontal-shift)
+   ))
+  )
+
+(define (context-spec-music m context . rest)
+  "Add \context CONTEXT = foo to M. "
+  
+  (let* ((cm (ly-make-music "Context_specced_music")))
+    (ly-set-mus-property cm 'element m)
+    (ly-set-mus-property cm 'context-type context)
+    (if (and  (pair? rest) (string? (car rest)))
+       (ly-set-mus-property cm 'context-id (car rest))
+    )
+    cm
+  ))
+
+(define (make-sequential-music elts)
+  (let*  ((m (ly-make-music "Sequential_music")))
+    (ly-set-mus-property m 'elements elts)
+    m
+  ))
+(define (make-simultaneous-music elts)
+  (let*  ((m (ly-make-music "Simultaneous_music")))
+    (ly-set-mus-property m 'elements elts)
+    m
+    ))
+(define (music-separator? m)
+  "Is M a separator."
+  (let* ((n (ly-get-mus-property m 'name )))
+    (and (symbol? n) (equal? 'separator n))
+  ))
+
+(define (split-one sep?  l acc)
+  "Split off the first parts before separator and return both parts.
+
+"
+  (if (null? l)
+      (cons acc '())
+      (if (sep? (car l))
+         (cons acc (cdr l))
+         (split-one sep? (cdr l) (cons (car l) acc))
+         )
+      ))
+
+(define (split-list l sep?)
+  (if (null? l)
+      '()
+      (let* ((c (split-one sep? l '())))
+       (cons (reverse! (car c) '()) (split-list (cdr c) sep?))
+       )
+      )
+  )
+
+;; test code
+; (display (split-list '(a b c / d e f / g) (lambda (x) (equal? x '/))) )
+
+
+;;; splitting chords into voices.
+
+(define (voicify-list lst number)
+   "Make a list of Musics.
+
+   voicify-list :: [ [Music ] ] -> number -> [Music]
+   LST is a list music-lists.
+"
+
+   (if (null? lst) '()
+       (cons (context-spec-music
+             (make-sequential-music
+              (list
+               (make-voice-props-set number)
+               (make-simultaneous-music (car lst))))
+
+             "Voice"  (number->string number))
+             (voicify-list (cdr lst) (+ number 1))
+       ))
+   )
+
+(define (voicify-chord ch)
+  "Split the parts of a chord into different Voices using separator"
+   (let* ((es (ly-get-mus-property ch 'elements)))
+
+
+     (ly-set-mus-property  ch 'elements
+       (voicify-list (split-list es music-separator?) 0))
+     ch
+   ))
+
+(define (voicify-music m)
+   "Recursively split chords that are separated with \\ "
+   
+   (if (not (music? m))
+       (begin (display m)
+       (error "not music!"))
+       )
+   (let*
+       ((es (ly-get-mus-property m 'elements))
+       (e (ly-get-mus-property m 'element))
+       )
+       
+     (if
+      (and (equal? (ly-music-name m) "Simultaneous_music")
+          (reduce (lambda (x y ) (or x y))     (map music-separator? es)))
+      (voicify-chord m)
+      (begin
+       (if (pair? es)
+           (ly-set-mus-property m 'elements (map voicify-music es)))
+       (if (music? e)
+           (ly-set-mus-property m 'element  (voicify-music e)))
+           
+       m)
+      
+      )
+     ))
+
+;;;
index 8914c5c3dbabe105b19e5e552bbff66aba575f54..d0d76a9445f1a8bd76ff9b19f6038547dc17eea9 100644 (file)
@@ -36,7 +36,7 @@
 (music-property-description 'direction dir? "Print this up or down?")
 (music-property-description 'text-type symbol? "Particular type of text script (eg. finger, dynamic).")
 (music-property-description 'element music? "The single child of a Music_wrapper music object, or the body of a repeat.")
-(music-property-description 'elements list? "A list of elements for sequential of simultaneous music, or the alternatives of repeated music. ")
+(music-property-description 'elements music-list? "A list of elements for sequential of simultaneous music, or the alternatives of repeated music. ")
 (music-property-description 'force-accidental boolean? "If set, a cautionary accidental should always be printed on this note")
 (music-property-description 'grob-property symbol? "The symbol of the grob property to set. ")
 (music-property-description 'grob-value scheme? "The value of the grob property to set")
@@ -49,6 +49,8 @@
 (music-property-description 'penalty number? "Penalty for break hint.")
 (music-property-description 'pitch pitch? "the pitch of this note")
 (music-property-description 'pitch-alist list? "list of pitches jointly forming the scale of a key signature")
+(music-property-description 'pop-first boolean? "Do a revert before we try to do a override on some grob property.")
+
 (music-property-description 'predicate procedure? "the predicate of a \outputproperty")
 (music-property-description 'type symbol? "The type of this music object. Determines iteration in some cases.")
 (music-property-description 'repeat-count  integer? "do a @code{\repeat} how ofen?")
index 77ee7d379edf37af463332bb720c0523774a3c58..7f2aca9c3aa09f225a88dd4382c45a975fbcec53 100644 (file)
@@ -92,7 +92,7 @@
    " { /"
    (car name-mag)
    " findfont "
-   "12 " (ly-number->string (cdr name-mag)) " mul "
+   "20 " (ly-number->string (cdr name-mag)) " mul "
    "lilypondpaperoutputscale div scalefont setfont } bind def "
    "\n"))