+1.3.80.gp1
+==========
+
+* Added property LyricVoice.associatedVoice to enable switching associated
+ voice mid-stream. Association still defaults to context name.
+
+1.3.80.hwn1
+===========
+
+* \pushproperty, \popproperty: property settings with less memory
+cost. See input/test/pushproperty.ly and Documentation/hacking. Note:
+syntax is most likely only temporary.
+
+1.3.80.jcn1
+===========
+
+* (Line-)broken slurs now have vertical trend.
+
+* Better length for broken ties: no invisibly short ties. Now ties may
+ collide with time signatures, though.
+
+* Don't typeset unfinished spanners, but kill them.
+
+* Added two FAQs (Mats)
+
+* Made workaround guile-1.4.1 backward incompatible (scm_)eval change.
+ Note that we must use (scm_)eval2 to remain backwards compatible with
+ guile < 1.4.1 snapshot.
+
+* Reincluded 79.jcn2 fix
+
+1.3.80
+======
+
1.3.79.jcn5
===========
1.3.79
======
+
* etf2ly.py: Finale to LilyPond conversion.
1.3.78.jcn4
pl 15.jcn4
- direct #... to scm parser (Thanks to Gary Houston)
+
Note: relative paths are meant to be relative to the source directory
+@subsubsection I've got a simple question, but this FAQ doesn't help!
+
+Please have a look in the searchable mail achives of
+@uref{http://www.mail-archive.com/gnu-music-discuss@@gnu.org/,
+gnu-music-discuss} and
+@uref{http://www.mail-archive.com/help-gnu-music@@gnu.org/, help-gnu-music}.
+Your question may well have been answered before.
+
@node Installing,, ,top
@section Installing
@node How do I -,, ,top
@section How do I ....
-@subsubsection How do I change the TeX layout?
+@subsubsection How do I change the page layout?
+
+The height and width of the music on each page is set
+using the paper variables @code{textheight} and @code{linewidth} in
+the input file.
+If you want to change the placement of the page number or the
+layout of the title, you could run @code{lilypond infile.ly} and
+include the generated @file{infile.tex} file in your own LaTeX
+wrapper file. The easiest way is to start from the ly2dvi default
+layout, using the following steps (assuming that the input file
+is @file{infile.ly}:
+
+@itemize @bullet
-See @file{lilyponddefs.tex}, it has some comments. Or use @file{ly2dvi}.
+ @item @code{ly2dvi -kK infile.ly}
+
+ @item Edit the generated LaTeX file @file{infile_lyN.tex} (@code{N} is
+ some number) to get the desired layout. Some aspects are determined in
+ the file titledefs.tex.
+
+ @item Run @code{latex infile_lyN.tex}
+
+ @item If you update the Mudela file, run @code{lilypond infile.ly}
+ and then @code{latex infile_lyN.tex}.
+@end itemize
+Another alternative is to use @command{mudela-book}, where smaller or
+larger music examples can be included in a LaTeX or Texinfo file.
+
+@subsubsection The tagline is visible in the .dvi file but is not printed on paper.
+
+The default page size is A4. If you use letter sized papers,
+add the following at the top of your Mudela file.
+@example
+\paper@{
+ papersize="letter";
+@}
+\include "paper20.ly"
+@end example
+(Note that setting the papersize in the ordinary paper section inside
+a score declaration will not have the desired effect.)
+The default paper size can be set globally for the installation
+in the file @file{declarations.ly}.
@subsubsection How do I place lyrics under @emph{each} of the staves in a score, as choral music. I can work out how to put lyrics for each line all under the top line, or at the bottom but not between!
@node Running,, ,top
@section Running
+@subsubsection LilyPond takes ages to run, what am I doing wrong?
+
+LilyPond uses a lot CPU time, and insane amounts of memory. The amount
+of memory it requires is proportional to the size of the score, in other
+words. For a moderately complex piano scores of 5 pages, the footprint
+can easily become 20 megs. (Our favorite test is the coriolan:
+approx. 100 megs for a 50 page orchestral). If your system has not got
+enough memory, it can easily start swapping.
+
+A part of the memory is used as temporary storage, and is reclaimed
+through GUILE's garbage collection. A way to trade in CPU time for
+storage is by decreasing the environment variable
+@var{GUILE_MAX_SEGMENT_SIZE} (default 8388608, which is 8 megs).
+
+
@subsubsection Correcting errors is so tedious. Is there a better way?
As of 1.3.73, lilypond provides support for the xdvi @code{src:}
staff. A slur should follow the same vertical direction it would have
in unbroken state.
-@mudelafile{slur-broken.ly}
+@mudelafile{slur-broken-trend.ly}
Ties are strictly horizontal. They are placed in between note heads.
The horizontal middle should not overlap with a staffline.
--- /dev/null
+
+\score {
+ \notes\relative c''{
+ \grace g8 g'2 ( )g
+ }
+ \paper {
+ linewidth=40.\mm;
+ indent=0.;
+ }
+}
+
c, [d16 \sustainup \sustaindown c c c] [e e \sustainup \sustaindown e e ] f4 \sustainup g\sustaindown b c
\property Staff.stopStartSustain = #"-P"
\property Staff.startSustain = #"P"
+\property Staff.sustainPedalPadding = #10
+
c,\sustainup\sustaindown d e f \sustainup g\sustaindown b c
}
\paper{
--- /dev/null
+\score{
+ \notes \relative c''{
+ e1( \break) a,
+ \time 2/4;
+ e'2( \break) a,(\break
+ a2\break
+ )e'2
+ }
+ \paper {
+ linewidth=40.\mm;
+ indent=0.;
+ }
+}
--- /dev/null
+\score{
+ \notes \relative c''{
+ c1~\break c
+ c4 c c c~\break
+ c c c c
+
+ c1~\break
+ \time 8/8; c
+ c4 c c c~\break
+ \time 4/4;
+ c c c c
+ }
+ \paper {
+ linewidth=40.\mm;
+ indent=0.;
+ }
+}
String def_name = default_font_sz_;
SCM l = scm_assoc (ly_str02scm ("default"),
- scm_eval (ly_symbol2scm ("cmr-alist")));
+ scm_eval2 (ly_symbol2scm ("cmr-alist"), SCM_EOL));
if (l != SCM_BOOL_F)
def_name = ly_scm2string (gh_cdr (l));
if (bsd)
{
SCM breakdir = gh_int2scm (bsd);
- g = scm_eval (gh_list (ly_symbol2scm ("break-barline"),
+ g = scm_eval2 (gh_list (ly_symbol2scm ("break-barline"),
g,
breakdir,
- SCM_UNDEFINED));
+ SCM_UNDEFINED),
+ SCM_EOL);
}
}
else
if (beam_p_)
{
prev_start_req_->origin ()->warning (_ ("unterminated beam"));
+#if 0
finished_beam_p_ = beam_p_;
finished_beam_info_p_ = beam_info_p_;
typeset_beam ();
+#else
+ beam_p_->suicide ();
+ delete beam_info_p_;
+#endif
}
}
} while (flip(&d) != DOWN);
- SCM s = scm_eval (gh_list (ly_symbol2scm ("beam-dir-algorithm"),
+ SCM s = scm_eval2 (gh_list (ly_symbol2scm ("beam-dir-algorithm"),
ly_quote_scm (gh_cons (gh_int2scm (count[UP]),
gh_int2scm (count[DOWN]))),
ly_quote_scm (gh_cons (gh_int2scm (total[UP]),
gh_int2scm (total[DOWN]))),
- SCM_UNDEFINED));
+ SCM_UNDEFINED),
+ SCM_EOL);
if (gh_number_p (s) && gh_scm2int (s))
return to_dir (s);
int multiplicity = get_multiplicity (me);
// grace stems?
- SCM shorten = scm_eval (ly_symbol2scm ("beamed-stem-shorten"));
+ SCM shorten = scm_eval2 (ly_symbol2scm ("beamed-stem-shorten"), SCM_EOL);
if (shorten == SCM_EOL)
return;
Beam::quantise_dy_f (Score_element*me,Real dy)
{
Array<Real> a;
- for (SCM s = scm_eval (ly_symbol2scm ("beam-height-quants")); s !=SCM_EOL; s = gh_cdr (s))
+ for (SCM s = scm_eval2 (ly_symbol2scm ("beam-height-quants"), SCM_EOL);
+ s !=SCM_EOL; s = gh_cdr (s))
a.push (gh_scm2double (gh_car (s)));
if (a.size () <= 1)
int multiplicity = get_multiplicity (me);
Real staff_space = Staff_symbol_referencer::staff_space (me);
- SCM quants = scm_eval (gh_list (ly_symbol2scm ("beam-vertical-position-quants"),
+ SCM quants = scm_eval2 (gh_list (ly_symbol2scm ("beam-vertical-position-quants"),
gh_int2scm (multiplicity),
gh_double2scm (dy/staff_space),
- SCM_UNDEFINED));
+ SCM_UNDEFINED),
+ SCM_EOL);
Array<Real> a;
SCM e = scm_assoc (scm_listify (current_origin,
next_origin,
SCM_UNDEFINED),
- scm_eval (ly_symbol2scm ("space-alist")));
+ scm_eval2 (ly_symbol2scm ("space-alist"), SCM_EOL));
SCM extra_space;
if (e != SCM_BOOL_F)
bass = SCM_BOOL_F;
SCM pitches = sc->get_elt_property ("pitches");
- SCM text = scm_eval (gh_list (ly_symbol2scm ("chord::user-name"),
+ SCM text = scm_eval2 (gh_list (ly_symbol2scm ("chord::user-name"),
style,
ly_quote_scm (pitches),
ly_quote_scm (gh_cons (inversion, bass)),
- SCM_UNDEFINED));
+ SCM_UNDEFINED),
+ SCM_EOL);
return ly_text2molecule (sc, text).create_scheme ();
}
if (beam_p_)
{
repeat_->origin ()->warning (_ ("unterminated chord tremolo"));
+#if 0
finished_beam_p_ = beam_p_;
typeset_beam ();
+#else
+ beam_p_->suicide ();
+#endif
}
}
if(to_boolean (clef_p_->get_elt_property("non-default")))
{
vis = ly_symbol2scm ("all-visible");
- vis = scm_eval (vis);
+ vis = scm_eval2 (vis, SCM_EOL);
}
if (vis)
Dynamic_engraver::do_removal_processing ()
{
typeset_all ();
-
+
+#if 0
if (cresc_p_)
{
typeset_element (cresc_p_ );
finished_cresc_p_ = cresc_p_;
+
current_cresc_req_->origin ()->warning (_ ("unterminated (de)crescendo"));
}
if (line_spanner_)
finished_line_spanner_ = line_spanner_;
}
typeset_all ();
+#else
+ if (cresc_p_)
+ {
+ current_cresc_req_->origin ()->warning (_ ("unterminated (de)crescendo"));
+ cresc_p_->suicide ();
+ }
+ if (line_spanner_)
+ {
+ line_spanner_->suicide ();
+ }
+#endif
}
void
if (text_script_req_l_)
{
- SCM s = scm_eval
+ SCM s = scm_eval2
(gh_list
(ly_symbol2scm ("dynamic-absolute-volume"),
ly_quote_scm (ly_str02scm (text_script_req_l_->text_str_.ch_C ())),
- SCM_UNDEFINED));
- Real volume = gh_scm2double (scm_eval (ly_symbol2scm ("dynamic-default-volume")));
+ SCM_UNDEFINED),
+ SCM_EOL);
+ Real volume = gh_scm2double (scm_eval2 (ly_symbol2scm ("dynamic-default-volume"), SCM_EOL));
if (gh_number_p (s))
volume = gh_scm2double (s);
s = ly_str02scm ("piano");
- s = scm_eval (gh_list (ly_symbol2scm ("instrument-equaliser"),
- s, SCM_UNDEFINED));
+ s = scm_eval2 (gh_list (ly_symbol2scm ("instrument-equaliser"),
+ s, SCM_UNDEFINED),
+ SCM_EOL);
if (gh_pair_p (s))
{
Interval iv;
static SCM after_line_breaking (SCM);
static SCM set_spacing_rods (SCM);
private:
+ static Real get_first_notecolumn_y (Score_element *me, Direction dir);
+ static Offset broken_trend_offset (Score_element *me, Direction dir);
static Offset get_attachment (Score_element*me,Direction dir, Score_element**common) ;
static void de_uglyfy (Score_element*me,Slur_bezier_bow* bb, Real default_height);
static void set_extremities (Score_element*me);
if (!def)
item_p_->set_elt_property ("visibility-lambda",
- scm_eval (ly_symbol2scm ("all-visible")));
+ scm_eval2 (ly_symbol2scm ("all-visible"),
+ SCM_EOL));
}
{
SCM str = gh_str02scm ((char*)s);
SCM port = scm_mkstrport (SCM_INUM0, str, SCM_OPN | SCM_RDNG,
- "scm_eval_0str");
+ "ly_eval_scm_0str");
SCM from = scm_ftell (port);
SCM form;
/* Read expression from port */
if (!SCM_EOF_OBJECT_P (form = scm_read (port)))
- answer = scm_eval_x (form);
+ answer = scm_eval_3 (form, 1, SCM_EOL);
/*
After parsing
}
SCM l = scm_assoc (ly_str02scm (style.ch_C()),
- scm_eval (ly_symbol2scm ("cmr-alist")));
+ scm_eval2 (ly_symbol2scm ("cmr-alist"), SCM_EOL));
if (l != SCM_BOOL_F)
{
// ugh: use gh_call ()
Molecule out = me->lookup_l()->afm_find (String ("noteheads-") +
- ly_scm2string (scm_eval (gh_list (ly_symbol2scm("find-notehead-symbol"),
+ ly_scm2string (scm_eval2 (gh_list (ly_symbol2scm("find-notehead-symbol"),
me->get_elt_property ("duration-log"),
ly_quote_scm(style),
- SCM_UNDEFINED))));
+ SCM_UNDEFINED),
+ SCM_EOL)));
if (streepjes_i)
{
SCM exp = gh_list (ly_symbol2scm ((String (output_global_ch) + "-scm").ch_C()),
ly_quote_scm (ly_symbol2scm ("all-definitions")),
SCM_UNDEFINED);
- exp = scm_eval (exp);
- scm_eval (exp);
+ exp = scm_eval2 (exp, SCM_EOL);
+ scm_eval2 (exp, SCM_EOL);
String creator;
if (no_timestamps_global_b)
{
if (verbatim_scheme_b_)
{
- SCM result = scm_eval (scm_listify (ly_symbol2scm ("scm->string"),
- ly_quote_scm (gh_car (s)), SCM_UNDEFINED));
+ SCM result = scm_eval2 (scm_listify (ly_symbol2scm ("scm->string"),
+ ly_quote_scm (gh_car (s)), SCM_UNDEFINED),
+ SCM_EOL);
*stream_p_ << ly_scm2string (result);
}
else
{
- SCM result = scm_eval (s);
+ SCM result = scm_eval2 (s, SCM_EOL);
char *c=gh_scm2newstr (result, NULL);
*stream_p_ << c;
scm = gh_list (ly_symbol2scm ("end-output"), SCM_UNDEFINED);
outputter_l_->output_scheme (scm);
+ progress_indication ("\n");
// huh?
delete outputter_l_;
outputter_l_ = 0;
+
+ if (verbose_global_b)
+ ly_display_scm (scm_gc_stats ());
}
Articulation_req* l=script_req_l_arr_[i];
SCM list = scm_assoc (ly_str02scm (l->articulation_str_.ch_C ()),
- scm_eval (ly_symbol2scm ("script-alist")));
+ scm_eval2 (ly_symbol2scm ("script-alist"),
+ SCM_EOL));
if (list == SCM_BOOL_F)
{
{
for (int i = 0; i < slur_l_stack_.size (); i++)
{
+#if 0
typeset_element (slur_l_stack_[i]);
+#else
+ /*
+ Let's not typeset unterminated stuff
+ */
+ slur_l_stack_[i]->suicide ();
+#endif
}
slur_l_stack_.clear ();
SCM wg = get_property ("weAreGraceContext");
if (slur_req_l->span_dir_ == STOP)
{
if (slur_l_stack_.empty ())
-
- slur_req_l->origin ()->warning (_f ("can't find both ends of %s", _ ("slur")));
+ slur_req_l->origin ()->warning (_f ("can't find start of %s",
+ _ ("slur")));
else
{
Score_element* slur = slur_l_stack_.pop ();
}
-
-
-
-Offset
-Slur::encompass_offset (Score_element*me,
- Score_element* col,
- Score_element **common)
-{
- Offset o;
- Score_element* stem_l = unsmob_element (col->get_elt_property ("stem"));
-
- Direction dir = Directional_element_interface (me).get ();
-
- if (!stem_l)
- {
- warning (_ ("Slur over rest?"));
- o[X_AXIS] = col->relative_coordinate (common[X_AXIS], X_AXIS);
- o[Y_AXIS] = col->relative_coordinate (common[Y_AXIS], Y_AXIS);
- return o;
- }
- Direction stem_dir = Directional_element_interface (stem_l).get ();
- o[X_AXIS] = stem_l->relative_coordinate (0, X_AXIS);
-
- /*
- Simply set x to middle of notehead
- */
-
- o[X_AXIS] -= 0.5 * stem_dir * col->extent (X_AXIS).length ();
-
- if ((stem_dir == dir)
- && !stem_l->extent (Y_AXIS).empty_b ())
- {
- o[Y_AXIS] = stem_l->relative_coordinate (common[Y_AXIS], Y_AXIS); // iuhg
- o[Y_AXIS] += stem_l->extent (Y_AXIS)[dir];
- }
- else
- {
- o[Y_AXIS] = col->relative_coordinate (common[Y_AXIS], Y_AXIS); // ugh
- o[Y_AXIS] += col->extent (Y_AXIS)[dir];
- }
-
- /*
- leave a gap: slur mustn't touch head/stem
- */
- o[Y_AXIS] += dir * me->paper_l ()->get_var ("slur_y_free");
- return o;
-}
-
MAKE_SCHEME_CALLBACK (Slur, after_line_breaking);
SCM
Slur::after_line_breaking (SCM smob)
{
// for (SCM s = get_elt_property ("slur-extremity-rules"); s != SCM_EOL; s = gh_cdr (s))
- for (SCM s = scm_eval (ly_symbol2scm ("slur-extremity-rules"));
+ for (SCM s = scm_eval2 (ly_symbol2scm ("slur-extremity-rules"),
+ SCM_EOL);
s != SCM_EOL; s = gh_cdr (s))
{
SCM r = gh_call2 (gh_caar (s), me->self_scm (),
while (flip (&dir) != LEFT);
}
+Real
+Slur::get_first_notecolumn_y (Score_element *me, Direction dir)
+{
+ Score_element *col = dir == LEFT
+ ? unsmob_element (gh_car (scm_reverse (me->get_elt_property
+ ("note-columns"))))
+ : unsmob_element
+ (gh_car (me->get_elt_property ("note-columns")));
+
+ Score_element *common[] =
+ {
+ 0,
+ me->common_refpoint (col, Y_AXIS)
+ };
+ Real y;
+ if (col == ((Spanner*)me)->get_bound (dir))
+ {
+ y = get_attachment (me, dir, common)[Y_AXIS];
+ }
+ else
+ {
+ y = encompass_offset (me, col, common)[Y_AXIS]
+ - me->relative_coordinate (common[Y_AXIS], Y_AXIS);
+ }
+ return y;
+}
+
+Offset
+Slur::broken_trend_offset (Score_element *me, Direction dir)
+{
+ /*
+ A broken slur should maintain the same vertical trend
+ the unbroken slur would have had.
+ */
+ Offset o;
+ if (Spanner *mother = dynamic_cast<Spanner*> (me->original_l_))
+ {
+ for (int i = dir == LEFT ? 0 : mother->broken_into_l_arr_.size ();
+ dir == LEFT ? i < mother->broken_into_l_arr_.size () : i;
+ dir == LEFT ? i++ : --i)
+ {
+ if (mother->broken_into_l_arr_[i - dir] == me)
+ {
+ Score_element *neighbour = mother->broken_into_l_arr_[i];
+ if (dir == RIGHT)
+ neighbour->set_elt_property ("direction",
+ me->get_elt_property ("direction"));
+ Real neighbour_y = get_first_notecolumn_y (neighbour, dir);
+ Real y = get_first_notecolumn_y (me, -dir);
+ o = Offset (0, (y + neighbour_y) / 2);
+ break;
+ }
+ }
+ }
+ return o;
+}
+
Offset
Slur::get_attachment (Score_element*me,Direction dir,
Score_element **common)
{
- Spanner*sp = dynamic_cast<Spanner*>(me);
SCM s = me->get_elt_property ("attachment");
+ if (!gh_symbol_p (index_cell (s, dir)))
+ {
+ set_extremities (me);
+ s = me->get_elt_property ("attachment");
+ }
SCM a = dir == LEFT ? gh_car (s) : gh_cdr (s);
+ Spanner*sp = dynamic_cast<Spanner*>(me);
String str = ly_symbol2string (a);
Real ss = Staff_symbol_referencer::staff_space ((Score_element*)me);
Real hs = ss / 2.0;
SCM other_a = dir == LEFT ? gh_cdr (s) : gh_car (s);
if (ly_symbol2string (other_a) != "loose-end")
{
+#if 0
+ /*
+ The braindead way: horizontal
+ */
o = Offset (0, get_attachment (me, -dir, common)[Y_AXIS]);
+#else
+ o = broken_trend_offset (me, dir);
+#endif
+
+
}
+
}
SCM l = scm_assoc
gh_int2scm (stem ? Stem::get_direction (stem) : 1 * dir),
gh_int2scm (Directional_element_interface (me).get () * dir),
SCM_UNDEFINED),
- scm_eval (ly_symbol2scm ("slur-extremity-offset-alist")));
+ scm_eval2 (ly_symbol2scm ("slur-extremity-offset-alist"), SCM_EOL));
if (l != SCM_BOOL_F)
{
return o;
}
+Offset
+Slur::encompass_offset (Score_element*me,
+ Score_element* col,
+ Score_element **common)
+{
+ Offset o;
+ Score_element* stem_l = unsmob_element (col->get_elt_property ("stem"));
+
+ Direction dir = Directional_element_interface (me).get ();
+
+ if (!stem_l)
+ {
+ warning (_ ("Slur over rest?"));
+ o[X_AXIS] = col->relative_coordinate (common[X_AXIS], X_AXIS);
+ o[Y_AXIS] = col->relative_coordinate (common[Y_AXIS], Y_AXIS);
+ return o;
+ }
+ Direction stem_dir = Directional_element_interface (stem_l).get ();
+ o[X_AXIS] = stem_l->relative_coordinate (0, X_AXIS);
+
+ /*
+ Simply set x to middle of notehead
+ */
+
+ o[X_AXIS] -= 0.5 * stem_dir * col->extent (X_AXIS).length ();
+
+ if ((stem_dir == dir)
+ && !stem_l->extent (Y_AXIS).empty_b ())
+ {
+ o[Y_AXIS] = stem_l->relative_coordinate (common[Y_AXIS], Y_AXIS); // iuhg
+ o[Y_AXIS] += stem_l->extent (Y_AXIS)[dir];
+ }
+ else
+ {
+ o[Y_AXIS] = col->relative_coordinate (common[Y_AXIS], Y_AXIS); // ugh
+ o[Y_AXIS] += col->extent (Y_AXIS)[dir];
+ }
+
+ /*
+ leave a gap: slur mustn't touch head/stem
+ */
+ o[Y_AXIS] += dir * me->paper_l ()->get_var ("slur_y_free");
+ return o;
+}
+
Array<Offset>
Slur::get_encompass_offset_arr (Score_element*me)
{
}
else
{
- s = scm_eval (ly_symbol2scm ((type_str + "stem-length").ch_C()));
+ s = scm_eval2 (ly_symbol2scm ((type_str + "stem-length").ch_C()),
+ SCM_EOL);
for (SCM q = s; q != SCM_EOL; q = gh_cdr (q))
a.push (gh_scm2double (gh_car (q)));
a.clear ();
- s = scm_eval (ly_symbol2scm ((type_str + "stem-shorten").ch_C()));
+ s = scm_eval2 (ly_symbol2scm ((type_str + "stem-shorten").ch_C()),
+ SCM_EOL);
for (SCM q = s; q != SCM_EOL; q = gh_cdr (q))
a.push (gh_scm2double (gh_car (q)));
SCM s;
String type_str = grace_b ? "grace-" : "";
- s = scm_eval (ly_symbol2scm ((type_str + "beamed-stem-minimum-length").ch_C()));
+ s = scm_eval2 (ly_symbol2scm ((type_str + "beamed-stem-minimum-length").ch_C()), SCM_EOL);
a.clear ();
for (SCM q = s; q != SCM_EOL; q = gh_cdr (q))
a.push (gh_scm2double (gh_car (q)));
Real minimum_length = a[multiplicity <? (a.size () - 1)] * staff_space;
- s = scm_eval (ly_symbol2scm ((type_str + "beamed-stem-length").ch_C()));
+ s = scm_eval2 (ly_symbol2scm ((type_str + "beamed-stem-length").ch_C()),
+ SCM_EOL);
a.clear();
for (SCM q = s; q != SCM_EOL; q = gh_cdr (q))
idx = idx >? 0;
SCM l = scm_assoc (ly_str02scm ("brace"),
- scm_eval (ly_symbol2scm ("cmr-alist")));
+ scm_eval2 (ly_symbol2scm ("cmr-alist"), SCM_EOL));
String nm = "feta-braces";
if (l != SCM_BOOL_F)
#include "molecule.hh"
#include "bezier-bow.hh"
#include "stem.hh"
+#include "note-head.hh"
/*
tie: Connect two noteheads.
Score_element* l = me->get_bound (LEFT);
Score_element* r = me->get_bound (RIGHT);
- Real width = r->relative_coordinate (commonx, X_AXIS)
- + r->extent (X_AXIS)[LEFT]
- - l->relative_coordinate (commonx, X_AXIS)
- - l->extent (X_AXIS)[RIGHT]
- -2* x_gap_f;
- Real left_x = l->extent (X_AXIS)[RIGHT] + x_gap_f;
+ Real left_x;
+ if (Note_head::has_interface (me->get_bound (LEFT)))
+ left_x = l->extent (X_AXIS)[RIGHT] + x_gap_f;
+ else
+ left_x = l->extent (X_AXIS).length () / 2;
+
+ Real width;
+ if (Note_head::has_interface (me->get_bound (LEFT))
+ && Note_head::has_interface (me->get_bound (RIGHT)))
+ {
+ width = r->relative_coordinate (commonx, X_AXIS)
+ + r->extent (X_AXIS)[LEFT]
+ - l->relative_coordinate (commonx, X_AXIS)
+ - l->extent (X_AXIS)[RIGHT]
+ -2 * x_gap_f;
+ }
+ else
+ {
+ if (Note_head::has_interface (me->get_bound (LEFT)))
+ width = r->relative_coordinate (commonx, X_AXIS)
+ - l->relative_coordinate (commonx, X_AXIS)
+ - l->extent (X_AXIS)[RIGHT]
+ - 2 * x_gap_f;
+ else
+ width = r->relative_coordinate (commonx, X_AXIS)
+ - l->extent (X_AXIS).length () / 2
+ + r->extent (X_AXIS)[LEFT]
+ - l->relative_coordinate (commonx, X_AXIS)
+ - 2 * x_gap_f;
+ }
Direction dir = Directional_element_interface (me).get();
return daddy_trans_l_->get_property (sym);
}
-
-
void
-Translator:: do_pre_move_processing(){}
+Translator:: do_pre_move_processing ()
+{
+}
+
void
-Translator::do_post_move_processing(){}
+Translator::do_post_move_processing ()
+{
+}
+
void
-Translator::do_process_music () {}
+Translator::do_process_music ()
+{
+}
+
void
-Translator::do_creation_processing() {}
+Translator::do_creation_processing ()
+{
+}
+
void
-Translator::do_removal_processing(){}
+Translator::do_removal_processing ()
+{
+}
;(display "b&i:") (display base-and-inversion) (newline)
(let ((diff (pitch::diff '(0 0 0) (car pitches)))
(name-func
- (eval (string->symbol (string-append "chord::name-" style))))
+ (ly-eval (string->symbol (string-append "chord::name-" style))))
(names-alist
- (eval (string->symbol (string-append "chord::names-alist-" style)))))
+ (ly-eval (string->symbol (string-append "chord::names-alist-" style)))))
(let loop ((note-names (reverse pitches))
(chord '())
(user-name #f))
;; do nothing in .scm output
(define (comment s) "")
+;; URG guile-1.3/1.4 compatibility
+(define (ly-eval x) (eval2 x #f))
+
+(define (comment s) "")
+
(define (mm-to-pt x)
(* (/ 72.27 25.40) x)
)
(gulp-file name))))
(define (scm-tex-output)
- (eval (tex-scm 'all-definitions)))
+ (ly-eval (tex-scm 'all-definitions)))
(define (scm-ps-output)
- (eval (ps-scm 'all-definitions)))
+ (ly-eval (ps-scm 'all-definitions)))
(define (scm-as-output)
- (eval (as-scm 'all-definitions)))
+ (ly-eval (as-scm 'all-definitions)))
(define (index-cell cell dir)
(if (equal? dir 1)
(define slur-extremity-rules
(list
- ;; (cons (lambda (slur dir) (begin (display "before head") (newline))#f) #f)
+ ;; (cons (lambda (slur dir) (begin (display "before sanity check") (newline))#f) #f)
;; urg: don't crash on a slur without note-columns
(cons (lambda (slur dir)
(< (length (ly-get-elt-property slur 'note-columns)) 1)) 'head)
- ;; urg: don't crash on a slur without note-columns
- (cons (lambda (slur dir)
- (< (length (ly-get-elt-property slur 'note-columns)) 1)) 'head)
+ ;; (cons (lambda (slur dir) (begin (display "before loose-end") (newline))#f) #f)
+ (cons (lambda (slur dir) (not (attached-to-stem slur dir))) 'loose-end)
+
+ ;; (cons (lambda (slur dir) (begin (display "before head") (newline))#f) #f)
(cons (lambda (slur dir)
;; urg, code dup