From 45cc738ff354a093683523772361f22ee2853a88 Mon Sep 17 00:00:00 2001 From: fred Date: Tue, 26 Mar 2002 23:22:42 +0000 Subject: [PATCH] lilypond-1.3.58 --- CHANGES | 22 +++++++ input/test/american-chords.ly | 1 + input/test/jazz-chords.ly | 44 +++++++++++++ lily/chord-name.cc | 109 +++++++++++++++------------------ lily/chord.cc | 7 ++- lily/include/chord-name.hh | 2 +- lily/include/key-item.hh | 4 +- lily/include/lily-guile.hh | 5 ++ lily/include/local-key-item.hh | 5 +- lily/include/ly-smobs.icc | 12 ++-- lily/key-engraver.cc | 76 ++++++++++------------- lily/key-item.cc | 22 ++----- ly/paper16.ly | 1 + ly/paper20.ly | 1 + scm/chord-names.scm | 8 ++- scm/lily.scm | 1 + 16 files changed, 187 insertions(+), 133 deletions(-) create mode 100644 input/test/jazz-chords.ly diff --git a/CHANGES b/CHANGES index 83a1f61af0..6b5b31db01 100644 --- 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 ====== diff --git a/input/test/american-chords.ly b/input/test/american-chords.ly index 3c812fce6d..9aa0536f44 100644 --- a/input/test/american-chords.ly +++ b/input/test/american-chords.ly @@ -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 index 0000000000..2e18444a95 --- /dev/null +++ b/input/test/jazz-chords.ly @@ -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 } + } +} + diff --git a/lily/chord-name.cc b/lily/chord-name.cc index 90b81c57fd..052a5b99dd 100644 --- a/lily/chord-name.cc +++ b/lily/chord-name.cc @@ -21,86 +21,75 @@ */ /* - 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 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; } diff --git a/lily/chord.cc b/lily/chord.cc index 330ac1b417..8fa7611e55 100644 --- a/lily/chord.cc +++ b/lily/chord.cc @@ -14,6 +14,11 @@ #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 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; } } diff --git a/lily/include/chord-name.hh b/lily/include/chord-name.hh index f2c930c031..80bc855e43 100644 --- a/lily/include/chord-name.hh +++ b/lily/include/chord-name.hh @@ -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: diff --git a/lily/include/key-item.hh b/lily/include/key-item.hh index 2c7f396ab4..67b1d6c935 100644 --- a/lily/include/key-item.hh +++ b/lily/include/key-item.hh @@ -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: diff --git a/lily/include/lily-guile.hh b/lily/include/lily-guile.hh index ffe7c21c53..0aa2b0287a 100644 --- a/lily/include/lily-guile.hh +++ b/lily/include/lily-guile.hh @@ -15,6 +15,11 @@ #include #include "direction.hh" +#ifndef SCM_PACK +#define SCM_PACK(x) ((SCM) x) +#endif + + /* conversion functions follow the GUILE naming convention, i.e. diff --git a/lily/include/local-key-item.hh b/lily/include/local-key-item.hh index ca368dc30a..400d7de2a7 100644 --- a/lily/include/local-key-item.hh +++ b/lily/include/local-key-item.hh @@ -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 diff --git a/lily/include/ly-smobs.icc b/lily/include/ly-smobs.icc index 48b3120b24..f8454664ed 100644 --- a/lily/include/ly-smobs.icc +++ b/lily/include/ly-smobs.icc @@ -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);\ } \ diff --git a/lily/key-engraver.cc b/lily/key-engraver.cc index 250fb169ea..da00f72040 100644 --- a/lily/key-engraver.cc +++ b/lily/key-engraver.cc @@ -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 (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); diff --git a/lily/key-item.cc b/lily/key-item.cc index 5b179e5747..af54bc7b5e 100644 --- a/lily/key-item.cc +++ b/lily/key-item.cc @@ -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 { diff --git a/ly/paper16.ly b/ly/paper16.ly index 1256998bd2..c098eb0bb4 100644 --- a/ly/paper16.ly +++ b/ly/paper16.ly @@ -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" diff --git a/ly/paper20.ly b/ly/paper20.ly index fc0566e536..c3bade0b38 100644 --- a/ly/paper20.ly +++ b/ly/paper20.ly @@ -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.; diff --git a/scm/chord-names.scm b/scm/chord-names.scm index a7ef7bf276..5fa71559ac 100644 --- a/scm/chord-names.scm +++ b/scm/chord-names.scm @@ -74,8 +74,14 @@ (((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"))))) diff --git a/scm/lily.scm b/scm/lily.scm index 62417660b1..d68cdd9384 100644 --- a/scm/lily.scm +++ b/scm/lily.scm @@ -171,6 +171,7 @@ ("feta-2" . "feta") ("typewriter" . "cmtt") ("italic" . "cmti") + ("msam" . "msam") ("roman" . "cmr") ("script" . "cmr") ("large" . "cmbx") -- 2.39.5