]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-1.3.58
authorfred <fred>
Tue, 26 Mar 2002 23:22:42 +0000 (23:22 +0000)
committerfred <fred>
Tue, 26 Mar 2002 23:22:42 +0000 (23:22 +0000)
16 files changed:
CHANGES
input/test/american-chords.ly
input/test/jazz-chords.ly [new file with mode: 0644]
lily/chord-name.cc
lily/chord.cc
lily/include/chord-name.hh
lily/include/key-item.hh
lily/include/lily-guile.hh
lily/include/local-key-item.hh
lily/include/ly-smobs.icc
lily/key-engraver.cc
lily/key-item.cc
ly/paper16.ly
ly/paper20.ly
scm/chord-names.scm
scm/lily.scm

diff --git a/CHANGES b/CHANGES
index 83a1f61af0deed8a54423ef53e8e6bc07ac26ae1..6b5b31db014bc4f62fa49fc9c6e1d4fc54f9c688 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,25 @@
+1.3.57.jcn2
+===========
+
+* Cleaned-up scheme list to text conversion for Chord_name and 
+fixed horizontal kerning.
+
+* Added examples for american (slashed o) and jazz (black triangle),
+  see input/test/{american-chords.ly,jazz-chords.ly}
+
+* Made guile-1.3.5 compile fixes
+
+1.3.57.uu1
+==========
+
+* Fixed typo in Dots::do_brew_molecule (); this fixes the disappearing
+dots problem.
+
+* Rewrote key signature administration; now Scheme is used; Octave and
+Key have been junked in favor of Newkey.
+
+* japanese .po file included (thanks, Japanese team!)
+
 1.3.57
 ======
 
index 3c812fce6d69743027b665b37c298c68c0c543b3..9aa0536f441a750f9a87b22bfb393200908ca7fc 100644 (file)
@@ -1,6 +1,7 @@
 #(set! chord::names-alist-american
       (append 
       '(
+       ;; any changes here, see scm/chord-names.scm
 
        )
       chord::names-alist-american))
diff --git a/input/test/jazz-chords.ly b/input/test/jazz-chords.ly
new file mode 100644 (file)
index 0000000..2e18444
--- /dev/null
@@ -0,0 +1,44 @@
+%
+% Make sure the correct msamxx.tfm is where lily can find it
+% (ie cwd or lily's tfm dir).
+%
+% For normal (20pt) paper, do
+%
+%   cp locate `msam9.tfm` $LILYPONDPREFIX/tfm
+%
+
+#(set! chord::names-alist-american
+      (append 
+      '(
+        ;; any changes here, see scm/chord-names.scm
+
+
+        ;(((0 . 0) (2 . -1) (4 . -1) (6 . -2)) . (("o7" (type . "super"))))
+        ;jazz: the delta, see jazz-chords.ly
+        (((0 . 0) (2 . -1) (4 . -1) (6 . -2)) .  (("N" (type . "super") (style . "msam") (size . -3))))
+
+        ;(((0 . 0) (2 . -1) (4 . -1) (6 . -1)) . (("x7" (type . "super"))))
+        ; slashed o
+        (((0 . 0) (2 . -1) (4 . -1) (6 . -1)) . (("o" (type . "super")) ("/" (size . -2) (offset . (-0.58 . 0.5))) ("7" (type . "super"))))
+
+       )
+      chord::names-alist-american))
+
+chord = \notes\transpose c''\chords{
+\property ChordNames.chordNameStyle = "american"
+c:m5-.7-
+c:m5-.7
+}
+
+\score{
+<
+\context ChordNames \chord
+\context Staff \chord
+>
+    \paper
+    {
+        \translator { \ChordNameContext chordNameWordSpace = #1 }
+        \translator { \LyricsContext textScriptWordSpace = #0.3 }
+    }
+}
+
index 90b81c57fdd53b72e2498ceefcf89fd2e9d96e6c..052a5b99dddd520ed9bc5292ef1d82d730fa236b 100644 (file)
  */
 
 /*
-  word is roman text or styled text:
+  word is roman text or property-styled text:
    "text"
-   ("style" . "text")
+   ("text" . property-alist)
  */
 
-/*
-  UGH. remove Dictionary< > and use Scheme_hash_table
- */
 Molecule
-Chord_name::ly_word2molecule (SCM word) const
+Chord_name::ly_word2molecule (SCM word, Real* x) const
 {
-  /*
-    junkme.
-
-    Using the dict doesn't save code, since you have to compare
-    dict entries by hand later on anyway.
-    
-   */
-  Dictionary<SCM> option_dict; 
+  *x = 0;
+
+  SCM options = SCM_EOL;
   if (gh_pair_p (word))
     {
-      SCM options = gh_cdr (word);
+      options = gh_cdr (word);
       word = gh_car (word);
-      while (gh_pair_p (options))
-        {
-         SCM option = gh_car (options);
-         if (gh_pair_p (option))
-           {
-             SCM key = gh_car (option);
-             SCM val = gh_cdr (option);
-             String k;
-             if (gh_symbol_p (key))
-               k = ly_symbol2string (key);
-             else if (gh_string_p (key))
-               k = ly_scm2string (key);
-              else
-               continue;
-              option_dict[k] = val;
-           }
-         options = gh_cdr (options);
-        }
     }
 
-  /*
-    UGH. Should read from font metric structure.
-  */
-  Real ex = lookup_l ()->text ("", "x", paper_l ()).extent(Y_AXIS).length ();
   if (gh_string_p (word))
     {
-      String w = ly_scm2string (word);
-      Molecule mol;
-      Offset offset;
+      /*
+       UGH. Should read from font metric structure.
+      */
+      Real ex = lookup_l ()->text ("", "x",
+                                  paper_l ()).extent (Y_AXIS).length ();
+      Real em = lookup_l ()->text ("", "m",
+                                  paper_l ()).extent (X_AXIS).length ();
 
-      int size = 0;
-      if (option_dict.elem_b ("size"))
-        size = gh_scm2int (option_dict["size"]);
+      String w = ly_scm2string (word);
 
       String style;
-      if (option_dict.elem_b ("style"))
-        style = ly_scm2string (option_dict["style"]);
+      SCM s = scm_assoc (ly_symbol2scm ("style"), options);
+      if (s != SCM_BOOL_F)
+       {
+         style = ly_scm2string (gh_cdr (s));
+       }
 
-      if (option_dict.elem_b ("type")
-         && ly_scm2string (option_dict["type"]) == "super")
+      Offset offset;
+      int size = 0;
+      /*
+       urg, `type'
+      */
+      s = scm_assoc (ly_symbol2scm ("type"), options);
+      if (s != SCM_BOOL_F && ly_scm2string (gh_cdr (s)) == "super")
        {
          Real super_y = ex / 2;
-         //super_y += -acc.extent (Y_AXIS)[MIN];
          offset = Offset (0, super_y);
          if (!size)
            size = -2;
        }
-      if (option_dict.elem_b ("offset"))
+
+      s = scm_assoc (ly_symbol2scm ("size"), options);
+      if (s != SCM_BOOL_F)
+       {
+         size = gh_scm2int (gh_cdr (s));
+       }
+
+      s = scm_assoc (ly_symbol2scm ("offset"), options);
+      if (s != SCM_BOOL_F)
        {
          // hmm
-         SCM s = option_dict["offset"];
-         if (gh_pair_p (s))
-           offset = Offset (gh_scm2double (gh_car (s)),
-                            gh_scm2double (gh_cdr (s))) * ex;
+         SCM o = gh_cdr (s);
+         if (gh_pair_p (o))
+           offset = Offset (0, gh_scm2double (gh_cdr (o))) * ex;
+         *x = gh_scm2double (gh_car (o)) * em;
        }
-      if (option_dict.elem_b ("font") 
-         && ly_scm2string (option_dict["font"]) == "feta")
+
+      Molecule mol;
+      s = scm_assoc (ly_symbol2scm ("font"), options);
+      if (s != SCM_BOOL_F && ly_scm2string (gh_cdr (s)) == "feta")
         mol = paper_l ()->lookup_l (size)->afm_find (w);
       else
        mol = paper_l ()->lookup_l (size)->text (style, w, paper_l ());
@@ -124,16 +113,18 @@ Chord_name::ly_text2molecule (SCM text) const
     {
       while (gh_cdr (text) != SCM_EOL)
         {
-         Molecule m = ly_word2molecule (gh_car (text));
+         Real x;
+         Molecule m = ly_word2molecule (gh_car (text), &x);
          if (!m.empty_b ())
-           mol.add_at_edge (X_AXIS, RIGHT, m, 0);
+           mol.add_at_edge (X_AXIS, RIGHT, m, x);
          text = gh_cdr (text);
        }
       text = gh_car (text);
     }  
-  Molecule m = ly_word2molecule (text);
+  Real x;
+  Molecule m = ly_word2molecule (text, &x);
   if (!m.empty_b ())
-    mol.add_at_edge (X_AXIS, RIGHT, m, 0);
+    mol.add_at_edge (X_AXIS, RIGHT, m, x);
   return mol;
 }
 
index 330ac1b41708a28809c3a068c7205ca1893960e2..8fa7611e55d49aef2194a453789f8cc4d54ef736 100644 (file)
 #include "paper-def.hh"
 #include "lookup.hh"
 
+/*
+  FIXME: should use SCM iso. arrays and have-to-delete pointers.
+ */
+  
+
 /*
   construct from parser output
 */
@@ -210,13 +215,11 @@ Chord::Chord (Array<Musical_pitch> pitch_arr, Musical_pitch* inversion_p, Musica
     {
       inversion_pitch_ = *inversion_p;
       inversion_b_ = true;
-      delete inversion_p;
     }
   if (bass_p)
     {
       bass_pitch_ = *bass_p;
       bass_b_ = true;
-      delete bass_p;
     }
 }
   
index f2c930c031c256804d014efb2fe818c54ddf0132..80bc855e4396303b3e375503d6eeb5227687dd47 100644 (file)
@@ -25,7 +25,7 @@ public:
    static SCM scheme_molecule (SCM);
   
 VIRTUAL_COPY_CONS (Score_element);
-  Molecule ly_word2molecule (SCM scm) const;
+  Molecule ly_word2molecule (SCM scm, Real* x) const;
   Molecule ly_text2molecule (SCM scm) const;
   Chord_name(SCM s);
 protected:
index 2c7f396ab4396954563ea6d623b5c0872ec25baa..67b1d6c935f86482cbf805df3fdd10ed9c65356d 100644 (file)
@@ -29,9 +29,7 @@ class Key_item :public  Item
 public:
   VIRTUAL_COPY_CONS(Score_element);
   Key_item (SCM);
-  void add (int pitch, int acc);
-  void add_old (int pitch, int acc);
- static SCM scheme_molecule (SCM);
+  static SCM scheme_molecule (SCM);
   
 
 protected:
index ffe7c21c53d8173e6bbcbe884584be038c315abd..0aa2b0287a589afdeca5c594aea96f2fc1afb707 100644 (file)
 #include <libguile.h>
 #include "direction.hh"
 
+#ifndef SCM_PACK
+#define SCM_PACK(x) ((SCM) x)
+#endif
+
+
 /*
   conversion functions follow the GUILE naming convention, i.e.
 
index ca368dc30a8960acd0e4442a1de854e9c09ce5da..400d7de2a7af387ed40dbadbac89cab554616bdd 100644 (file)
@@ -43,12 +43,11 @@ public:
   Local_key_item (SCM );
    static SCM scheme_molecule (SCM);
   
-void add_pitch (Musical_pitch, bool cautionary, bool natural);
+  void add_pitch (Musical_pitch, bool cautionary, bool natural);
 protected:
   virtual void before_line_breaking ();
   virtual Molecule do_brew_molecule() const;
-
-
 };
+
 #endif // LOCALKEYITEM_HH
 
index 48b3120b24eef11dff4a4d6d5c5fc8ccc4433b3e..f8454664ed05c401a3b75f7506ba50efcdce7b8a 100644 (file)
@@ -10,6 +10,8 @@
 #ifndef LY_SMOBS_ICC
 #define LY_SMOBS_ICC
 
+
+
 #define IMPLEMENT_UNSMOB(CL, name)             \
 CL *                                           \
 unsmob_ ## name ( SCM s)                       \
@@ -25,8 +27,8 @@ SCM smobify (CL *cl)\
                                                                        \
   SCM_NEWCELL(s);                                                      \
   SCM_SETCAR(s,CL::smob_tag_);                                         \
-  void * me_p = cl;                                                    \
-  SCM_SETCDR(s,me_p);                                                  \
+  SCM me_s = SCM_PACK(cl);                                                     \
+  SCM_SETCDR (s, me_s); \
 return s;\
 }\
 
@@ -53,8 +55,8 @@ CL::unsmobify_self ()                                                  \
   SCM s = self_scm_;                                                    \
   scm_unprotect_object (s);                                             \
                                                                         \
-  SCM_CAR(self_scm_) = SCM_EOL;         \
-  SCM_CDR(self_scm_) = SCM_EOL;                                                 \
+  SCM_SETCAR (self_scm_, SCM_EOL); \
+  SCM_SETCDR (self_scm_, SCM_EOL); \
   self_scm_ = SCM_EOL;                                                  \
 \
   scm_done_malloc ( - sizeof (CL));\
@@ -88,7 +90,7 @@ CL::free_smob (SCM ses)                               \
 \
  /* no need to call scm_unprotect_object, since this call \
     implies that the object is not protected. */ \
-  SCM_CAR(ses) = SCM_EOL;\
+  SCM_SETCAR (ses, SCM_EOL); \
   delete s;\
   return sizeof (CL);\
 } \
index 250fb169eaeaecce877cfc764ffb14f290b5bfa8..da00f7204069ef2ddb13373df76d2700f3503029 100644 (file)
@@ -43,40 +43,21 @@ Key_engraver::create_key (bool def)
       item_p_->set_elt_property ("c0-position", gh_int2scm (0));
 
       // todo: put this in basic props.
-      item_p_->set_elt_property ("old-accidentals", SCM_EOL);
-      item_p_->set_elt_property ("new-accidentals", SCM_EOL);
+      item_p_->set_elt_property ("old-accidentals", old_accs_);
+      item_p_->set_elt_property ("new-accidentals", new_accs_);
 
       Staff_symbol_referencer_interface st (item_p_);
       st.set_interface ();
+
+      SCM prop = get_property ("keyOctaviation");
+      bool multi = to_boolean (prop);
       
-      if (key_.multi_octave_b_)
-       item_p_->set_elt_property ("multi-octave", gh_bool2scm (key_.multi_octave_b_));
+      if (multi)
+       item_p_->set_elt_property ("multi-octave", gh_bool2scm (multi));
       
       announce_element (Score_element_info (item_p_,keyreq_l_));
-      
-
-      for (int i = 0; i < accidental_idx_arr_.size(); i++) 
-       {
-         Musical_pitch m_l =accidental_idx_arr_[i];
-         int a =m_l.accidental_i_;      
-         if (key_.multi_octave_b_)
-           item_p_->add (m_l.steps (), a);
-         else
-           item_p_->add (m_l.notename_i_, a);
-       }
-
-      for (int i = 0 ; i < old_accidental_idx_arr_.size(); i++) 
-       {
-         Musical_pitch m_l =old_accidental_idx_arr_[i];
-         int a =m_l.accidental_i_;
-         if (key_.multi_octave_b_)
-           item_p_->add_old (m_l.steps  (), a);
-         else
-           item_p_->add_old (m_l.notename_i_, a);
-       }
     }
 
-
   if (!def)
     item_p_->set_elt_property ("visibility-lambda",
                               scm_eval (ly_symbol2scm  ("all-visible")));
@@ -111,7 +92,7 @@ Key_engraver::acknowledge_element (Score_element_info info)
        }
     }
   else if (dynamic_cast<Bar *> (info.elem_l_)
-          && accidental_idx_arr_.size ()) 
+          && gh_pair_p (new_accs_))
     {
       create_key (true);
     }
@@ -147,13 +128,11 @@ Key_engraver::read_req (Key_change_req const * r)
   if (!r->key_)
     return;
   
-  old_accidental_idx_arr_ = accidental_idx_arr_;
   key_.clear ();
   SCM prop = get_property ("keyOctaviation");
+  bool multi = to_boolean (prop);
 
-  key_.multi_octave_b_ = to_boolean (prop);
-  
-  accidental_idx_arr_.clear ();
+  SCM n = SCM_EOL;
 
   if (r->key_->ordinary_key_b_) 
     {
@@ -168,12 +147,14 @@ Key_engraver::read_req (Key_change_req const * r)
              Musical_pitch m;
              m.accidental_i_ = -1;
              m.notename_i_ = accidental;
-             if (key_.multi_octave_b_)
-               key_.set (m);
+             if (multi)
+               key_.set (m.octave_i_, m.notename_i_, m.accidental_i_);
              else
                key_.set (m.notename_i_, m.accidental_i_);
-             accidental_idx_arr_.push (m);
-             
+
+             SCM pair = gh_cons (gh_int2scm (m.notename_i_),
+                                 gh_int2scm (m.accidental_i_));
+             n = gh_cons (pair, n) ;
              accidental = (accidental + 3) % 7 ;
            }
        }
@@ -185,11 +166,14 @@ Key_engraver::read_req (Key_change_req const * r)
              Musical_pitch m;
              m.accidental_i_ = 1;
              m.notename_i_ = accidental;
-             if (key_.multi_octave_b_)
-               key_.set (m);
+             if (multi)
+               key_.set (m.octave_i_, m.notename_i_, m.accidental_i_);
              else
                key_.set (m.notename_i_, m.accidental_i_);
-             accidental_idx_arr_.push (m);
+
+             SCM pair = gh_cons (gh_int2scm (m.notename_i_),
+                                 gh_int2scm (m.accidental_i_));
+             n = gh_cons (pair, n);
              
              accidental = (accidental + 4) % 7 ;
            }
@@ -200,21 +184,27 @@ Key_engraver::read_req (Key_change_req const * r)
       for (int i = 0; i < r->key_->pitch_arr_.size (); i ++) 
        {
          Musical_pitch m_l =r->key_->pitch_arr_[i];
-         if (key_.multi_octave_b_)
-           key_.set (m_l);
+         if (multi)
+           key_.set (m_l.octave_i_, m_l.notename_i_, m_l.accidental_i_);
          else
            key_.set (m_l.notename_i_, m_l.accidental_i_);
-         
-         accidental_idx_arr_.push (m_l);
+
+         SCM pair = gh_cons (gh_int2scm (m_l.notename_i_),
+                             gh_int2scm (m_l.accidental_i_));
+         n = gh_cons (pair, n);
        }
     }
+
+  old_accs_ = new_accs_;
+  new_accs_ = n;
+  
 }
 
 void
 Key_engraver::do_post_move_processing ()
 {
   keyreq_l_ = 0;
-  old_accidental_idx_arr_.clear ();
+  old_accs_ = SCM_EOL;
 }
 
 ADD_THIS_TRANSLATOR (Key_engraver);
index 5b179e57471838f492b413fdfc63c5f32a6aa79b..af54bc7b5e3286eb19c4a1716cf9db4daef01a88 100644 (file)
@@ -24,21 +24,12 @@ Key_item::Key_item (SCM s)
   set_elt_property ("c0-position", gh_int2scm (0));
 }
 
-void
-Key_item::add (int p, int a)
-{
-  SCM pair = gh_cons (gh_int2scm (p),gh_int2scm (a));
-  Group_interface (this, "new-accidentals").add_thing (pair);
-}
-
-void
-Key_item::add_old (int p, int a)
-{
-  SCM pair = gh_cons (gh_int2scm (p),gh_int2scm (a));  
-  Group_interface (this, "old-accidentals").add_thing (pair);
-}
 
 
+/*
+  FIXME: key-item should just get a list of (position, acc), and leave
+  the thinking to other parties.
+ */
 int
 Key_item::calculate_position(SCM pair) const
 {
@@ -80,13 +71,12 @@ Key_item::calculate_position(SCM pair) const
   }
 }
 
+MAKE_SCHEME_SCORE_ELEMENT_CALLBACKS(Key_item)
+
 /*
   TODO
   - space the `natural' signs wider
-
  */
-
-MAKE_SCHEME_SCORE_ELEMENT_CALLBACKS(Key_item)
 Molecule 
 Key_item::do_brew_molecule () const
 {
index 1256998bd2b4e849bde03397ddada399a50bba8b..c098eb0bb492317c873dfe5d762e030097da8dce 100644 (file)
@@ -23,6 +23,7 @@ paper_sixteen = \paper {
        font_timesig = 8.;
        font_dynamic = 10.;
        font_mark = 10.;
+       font_msam = 8.;
 
        0 = \font "feta16" 
        -1 = \font "feta13"
index fc0566e536347a2acd160bf0c5cd085d0dd856ab..c3bade0b389b1ea66cdbadd184b97eefbf69ba62 100644 (file)
@@ -16,6 +16,7 @@ paper_twenty = \paper {
        font_number = 10.;
        font_timesig = 10.;
        font_mark = 12.;
+       font_msam = 9.;
 
        % what about:
        "font_number-1" = 8.;
index a7ef7bf2768ac4855a2705ebef83d88b0328ff94..5fa71559ac7bb05bab80c773580c3d947da445f1 100644 (file)
         (((0 . 0) (4 . 0)) . (("5" (type . "super"))))
         (((0 . 0) (3 . 0) (4 . 0)) . ("sus"))
         (((0 . 0) (2 . -1) (4 . -1)) . (("o" (type . "super"))))
+
         (((0 . 0) (2 . -1) (4 . -1) (6 . -2)) . (("o7" (type . "super"))))
-        (((0 . 0) (2 . -1) (4 . -1) (6 . -1)) . (("x7" (type . "super"))))
+        ;jazz: the delta, see jazz-chords.ly
+        ;(((0 . 0) (2 . -1) (4 . -1) (6 . -2)) .  (("N" (type . "super") (style . "msam") (size . -3))))
+
+        ;(((0 . 0) (2 . -1) (4 . -1) (6 . -1)) . (("x7" (type . "super"))))
+        ; slashed o
+        (((0 . 0) (2 . -1) (4 . -1) (6 . -1)) . (("o" (type . "super")) ("/" (size . -2) (offset . (-0.58 . 0.5))) ("7" (type . "super"))))
 
         (((0 . 0) (2 . 0) (4 . 1)) . ("aug"))
         (((0 . 0) (2 . 0) (4 . 1) (6 . -1)) . (("aug" ("7" (type . "super")))))
index 62417660b10a5bf8dc8651b908e595467e435e9c..d68cdd938449f411ab890090b0e4d7817e27068b 100644 (file)
     ("feta-2" . "feta") 
     ("typewriter" . "cmtt") 
     ("italic" . "cmti") 
+    ("msam" . "msam") 
     ("roman" . "cmr") 
     ("script" . "cmr") 
     ("large" . "cmbx")