+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
======
#(set! chord::names-alist-american
(append
'(
+ ;; any changes here, see scm/chord-names.scm
)
chord::names-alist-american))
--- /dev/null
+%
+% 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 }
+ }
+}
+
*/
/*
- 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 ());
{
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;
}
#include "paper-def.hh"
#include "lookup.hh"
+/*
+ FIXME: should use SCM iso. arrays and have-to-delete pointers.
+ */
+
+
/*
construct from parser output
*/
{
inversion_pitch_ = *inversion_p;
inversion_b_ = true;
- delete inversion_p;
}
if (bass_p)
{
bass_pitch_ = *bass_p;
bass_b_ = true;
- delete bass_p;
}
}
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:
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:
#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.
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
#ifndef LY_SMOBS_ICC
#define LY_SMOBS_ICC
+
+
#define IMPLEMENT_UNSMOB(CL, name) \
CL * \
unsmob_ ## name ( SCM s) \
\
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;\
}\
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));\
\
/* 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);\
} \
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")));
}
}
else if (dynamic_cast<Bar *> (info.elem_l_)
- && accidental_idx_arr_.size ())
+ && gh_pair_p (new_accs_))
{
create_key (true);
}
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_)
{
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 ;
}
}
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 ;
}
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);
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
{
}
}
+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
{
font_timesig = 8.;
font_dynamic = 10.;
font_mark = 10.;
+ font_msam = 8.;
0 = \font "feta16"
-1 = \font "feta13"
font_number = 10.;
font_timesig = 10.;
font_mark = 12.;
+ font_msam = 9.;
% what about:
"font_number-1" = 8.;
(((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")))))
("feta-2" . "feta")
("typewriter" . "cmtt")
("italic" . "cmti")
+ ("msam" . "msam")
("roman" . "cmr")
("script" . "cmr")
("large" . "cmbx")