* configure.in: require mftrace.
* lily/staff-performer.cc (new_instrument_string): don't look at
instrument property.
* lily/lily-guile.cc: renaming, ly_dir_p is the Scheme function,
is_direction is the C++ one. Similar for ly_axis_p and
ly_number_pair_p
+2003-09-22 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ * mf/GNUmakefile: always trace pfa fonts.
+
+ * configure.in: require mftrace.
+
+ * lily/staff-performer.cc (new_instrument_string): don't look at
+ instrument property.
+
+ * lily/lily-guile.cc: renaming, ly_dir_p is the Scheme function,
+ is_direction is the C++ one. Similar for ly_axis_p and
+ ly_number_pair_p
+
2003-09-21 Jan Nieuwenhuizen <janneke@gnu.org>
* lily/beam.cc (brew_molecule): read gap-count to determine
@example
< \tag #'part <
- @{ c4 f2 g @} % in the part, we have cue-notes
+ @{ c4 f2 g4 @} % in the part, we have cue-notes
\\ R1 >
\tag #'score R1 % in the score: only a rest
>
@end example
@item
-Windows users can double click a @code{.ly} to process and view it
-automagically through the new @code{lily-wins} frontend.
+Windows users can double click a @code{.ly} file to process and view
+it automagically through the new @code{lily-wins} frontend.
@end itemize
@unnumberedsec Preface to version 2.0
-Due to personal circumstances, I have been able to do a lot more on
+Due to personal circumstances, Han-Wen was able to do a lot more on
LilyPond during the past months. A testament to that is the quick
release of version 2.0, less than two months after 1.8. We have taken
the opportunity to make a few radical changes to the syntax: note
have to think about the order of the attributes. With version 2.0, we
have a new and improved platform for working on notation and
typography features for coming versions,
+
+Due to other personal circumstances, Jan was not able to do more than
+packaging for Cygwin. The good news is that we now have a nearly
+fool-proof installation for Windows. He will be back in 2.1.
-@c
-Han-Wen,
+Han-Wen and Jan
Utrecht/Eindhoven, The Netherlands, September 2003.
@cindex instrument names
@cindex @code{Staff.midiInstrument}
-@cindex @code{Staff.instrument}
The MIDI instrument name is set by the @code{Staff.midiInstrument}
-property or, if that property is not set, the @code{Staff.instrument}
property. The instrument name should be chosen from the list in
@ref{MIDI instruments}.
@refbugs
-If the selected string does not exactly match, then LilyPond uses the
-default (Grand Piano). It is not possible to select an instrument by
-number.
-
+If the selected string does not exactly match, then the default is
+used, which is the Grand Piano.
#!/bin/sh
-# WARNING WARNING WARNING
-# do not edit! this is autogen.sh, generated from /home/hanwen/usr/src/lilypond/stepmake/autogen.sh
-#!/bin/sh
# Run this to generate configure and initial GNUmakefiles
srcdir=`dirname $0`
echo
fi
-for coin in `find $srcdir -name configure.in -print`
+for coin in $srcdir/configure.in #`find $srcdir -name configure.in -print`
do
dr=`dirname $coin`
echo processing $dr
# perl for help2man.
STEPMAKE_PERL(OPTIONAL)
# mftrace for generating pfa's, pfb's
-STEPMAKE_PROGS(MFTRACE, pktrace mftrace, OPTIONAL, 1.0.17)
+STEPMAKE_PROGS(MFTRACE, pktrace mftrace, REQUIRED, 1.0.17)
# new makeinfo for multi-page website docs
-STEPMAKE_PROGS(MAKEINFO, makeinfo, OPTIONAL, 4.1)
+STEPMAKE_PROGS(MAKEINFO, makeinfo, OPTIONAL, 4.6)
if test "$optimise_b" = yes; then
FIXME: uncommenting freaks out the Y-alignment of
line-of-score.
*/
- // Real align_param = ly_dir_p (align) ? gh_scm2double (align) : 0.0;
+ // Real align_param = is_direction (align) ? gh_scm2double (align) : 0.0;
if (gh_number_p (align))
center_offset = total.linear_combination (gh_scm2double (align));
SCM ad = me->get_grob_property ("arpeggio-direction");
Direction dir = CENTER;
- if (ly_dir_p (ad))
+ if (is_direction (ad))
{
dir = to_dir (ad);
}
SCM posns = me->get_grob_property ("positions");
Interval pos;
- if (!ly_number_pair_p (posns))
+ if (!is_number_pair (posns))
{
programming_error ("No beam posns");
pos = Interval (0,0);
pos= ly_scm2interval (posns);
Real dy = pos.delta ();
- Real dydx = dy && dx ? dy/dx : 0;
+ Real dydx = (dy && dx) ? dy/dx : 0;
Real thick = get_thickness (me);
Real bdy = get_beam_translation (me);
Real last_xposn = -1;
Real last_width = -1 ;
-
Real gap_length =0.0;
SCM scm_gap = me->get_grob_property ("gap");
if (gh_number_p (scm_gap))
SCM posns = col->get_grob_property ("positions");
Slice s (0,0);
- if (ly_number_pair_p (posns))
+ if (is_number_pair (posns))
s = Slice (gh_scm2int (gh_car (posns)),
gh_scm2int (gh_cdr (posns)));
SCM posns = col->get_grob_property ("positions");
Slice s (0,0);
- if (ly_number_pair_p (posns))
+ if (is_number_pair (posns))
s = Slice (gh_scm2int (gh_car (posns)),
gh_scm2int (gh_cdr (posns)));
bool
Directional_element_interface::has_interface (Grob*me)
{
- return ly_dir_p (me->get_grob_property ("direction"));
+ return is_direction (me->get_grob_property ("direction"));
}
Direction
{
// return dir_;
SCM d= me->get_grob_property ("direction");
- if (!ly_dir_p (d))
+ if (!is_direction (d))
return CENTER;
return to_dir (d);
fingering->set_grob_property ("script-priority", gh_int2scm (priority));
- if (!ly_dir_p (fingering->get_grob_property ("direction")))
+ if (!is_direction (fingering->get_grob_property ("direction")))
{
if (d)
fingering->set_grob_property ("direction", gh_int2scm (d));
{
Spanner * sl = dynamic_cast<Spanner*> (unsmob_grob (slur));
SCM_ASSERT_TYPE (sl, slur, SCM_ARG1, __FUNCTION__, "spanner grob");
- SCM_ASSERT_TYPE (ly_dir_p (dir), slur, SCM_ARG2, __FUNCTION__, "dir");
+ SCM_ASSERT_TYPE (is_direction (dir), slur, SCM_ARG2, __FUNCTION__, "dir");
return sl->get_bound (to_dir (dir))->self_scm ();
}
SCM_ASSERT_TYPE (sc, grob, SCM_ARG1, __FUNCTION__, "grob");
SCM_ASSERT_TYPE (ref, refp, SCM_ARG2, __FUNCTION__, "grob");
- SCM_ASSERT_TYPE (ly_axis_p (axis), axis, SCM_ARG3, __FUNCTION__, "axis");
+ SCM_ASSERT_TYPE (is_axis (axis), axis, SCM_ARG3, __FUNCTION__, "axis");
return ly_interval2scm ( sc->extent (ref, Axis (gh_scm2int (axis))));
}
{
Grob * sc = unsmob_grob (grob);
SCM_ASSERT_TYPE (sc, grob, SCM_ARG1, __FUNCTION__, "grob");
- SCM_ASSERT_TYPE (ly_axis_p (axis), axis, SCM_ARG2, __FUNCTION__, "axis");
+ SCM_ASSERT_TYPE (is_axis (axis), axis, SCM_ARG2, __FUNCTION__, "axis");
Grob * par = sc->get_parent (Axis (gh_scm2int (axis)));
return par ? par->self_scm () : SCM_EOL;
Grob *me = unsmob_grob (g);
SCM_ASSERT_TYPE (me, g, SCM_ARG1, __FUNCTION__, "grob");
SCM_ASSERT_TYPE (gh_number_p (d), d, SCM_ARG2, __FUNCTION__, "dimension");
- SCM_ASSERT_TYPE (ly_axis_p (a), a, SCM_ARG3, __FUNCTION__, "axis");
+ SCM_ASSERT_TYPE (is_axis (a), a, SCM_ARG3, __FUNCTION__, "axis");
me->translate_axis (gh_scm2double (d),
Axis (gh_scm2int (a)));
Real line = me->get_paper ()->get_realvar (ly_symbol2scm ("linethickness"));
SCM s = me->get_grob_property ("grow-direction");
- if (!ly_dir_p (s))
+ if (!is_direction (s))
{
me->suicide ();
return SCM_EOL;
void read_lily_scm_file (String);
void ly_init_guile ();
-bool ly_dir_p (SCM s);
-bool ly_number_pair_p (SCM);
-bool ly_axis_p (SCM);
+bool is_direction (SCM s);
+bool is_number_pair (SCM);
+bool is_axis (SCM);
/*
these conversion functions also do a typecheck on the argument, and
return SCM_BOOL_T;
}
-LY_DEFINE(ly_isdir, "ly:dir?", 1,0, 0, (SCM s),
- "type predicate. A direction is a -1, 0 or 1, where -1 represents left or "
-"down and 1 represents right or up. ")
+LY_DEFINE(ly_dir_p, "ly:dir?", 1,0, 0, (SCM s),
+ "type predicate. A direction is a -1, 0 or 1, where -1 represents "
+ "left or down and 1 represents right or up. ")
{
if (gh_number_p (s))
{
}
bool
-ly_number_pair_p (SCM p)
+is_number_pair (SCM p)
{
return gh_pair_p (p) && gh_number_p (ly_car (p)) && gh_number_p (ly_cdr (p));
}
bool
-ly_dir_p (SCM s)
+is_direction (SCM s)
{
if (gh_number_p (s))
{
bool
-ly_axis_p (SCM s)
+is_axis (SCM s)
{
if (gh_number_p (s))
{
"given by @var{iv}. The wings protude by an amount of @var{p}, which "
"may be negative. The thickness is given by @var{t}.")
{
- SCM_ASSERT_TYPE(ly_axis_p (a), a, SCM_ARG1, __FUNCTION__, "axis") ;
- SCM_ASSERT_TYPE(ly_number_pair_p (iv), iv, SCM_ARG2, __FUNCTION__, "number pair") ;
+ SCM_ASSERT_TYPE(is_axis (a), a, SCM_ARG1, __FUNCTION__, "axis") ;
+ SCM_ASSERT_TYPE(is_number_pair (iv), iv, SCM_ARG2, __FUNCTION__, "number pair") ;
SCM_ASSERT_TYPE(gh_number_p (t), a, SCM_ARG3, __FUNCTION__, "number") ;
SCM_ASSERT_TYPE(gh_number_p (p), a, SCM_ARG4, __FUNCTION__, "number") ;
(SCM xext, SCM yext, SCM blot),
"Make a filled-box of dimensions @var{xext}, @var{yext} and roundness @var{blot}.")
{
- SCM_ASSERT_TYPE(ly_number_pair_p (xext), xext, SCM_ARG1, __FUNCTION__, "number pair") ;
- SCM_ASSERT_TYPE(ly_number_pair_p (yext), yext, SCM_ARG2, __FUNCTION__, "number pair") ;
+ SCM_ASSERT_TYPE(is_number_pair (xext), xext, SCM_ARG1, __FUNCTION__, "number pair") ;
+ SCM_ASSERT_TYPE(is_number_pair (yext), yext, SCM_ARG2, __FUNCTION__, "number pair") ;
SCM_ASSERT_TYPE(gh_number_p (blot), blot, SCM_ARG3, __FUNCTION__, "number") ;
return Lookup::round_filled_box (Box (ly_scm2interval (xext), ly_scm2interval (yext)),
if (found)
program_byte = gh_scm2int(program);
else
- warning (_f ("no such instrument: `%s'", audio_->str_.to_str0 ()));
+ warning (_f ("no such MIDI instrument: `%s'", audio_->str_.to_str0 ()));
String str = ::to_string ((char) (0xc0 + channel_)); //YIKES! FIXME: Should be track. -rz
str += ::to_string ((char)program_byte);
{
Molecule* m = unsmob_molecule (mol);
SCM_ASSERT_TYPE (m, mol, SCM_ARG1, __FUNCTION__, "molecule");
- SCM_ASSERT_TYPE (ly_axis_p (axis), axis, SCM_ARG2, __FUNCTION__, "axis");
- SCM_ASSERT_TYPE (ly_number_pair_p (np), np, SCM_ARG3, __FUNCTION__, "number pair");
+ SCM_ASSERT_TYPE (is_axis (axis), axis, SCM_ARG2, __FUNCTION__, "axis");
+ SCM_ASSERT_TYPE (is_number_pair (np), np, SCM_ARG3, __FUNCTION__, "number pair");
Interval iv = ly_scm2interval (np);
m->dim_[Axis (gh_scm2int (axis))] = iv;
Molecule* m = unsmob_molecule (mol);
SCM_ASSERT_TYPE (m, mol, SCM_ARG1, __FUNCTION__, "molecule");
SCM_ASSERT_TYPE (gh_number_p (amount), amount, SCM_ARG2, __FUNCTION__, "number pair");
- SCM_ASSERT_TYPE (ly_axis_p (axis), axis, SCM_ARG3, __FUNCTION__, "axis");
+ SCM_ASSERT_TYPE (is_axis (axis), axis, SCM_ARG3, __FUNCTION__, "axis");
Molecule q (*m);
{
Molecule* m = unsmob_molecule (mol);
SCM_ASSERT_TYPE (m, mol, SCM_ARG1, __FUNCTION__, "molecule");
- SCM_ASSERT_TYPE (ly_number_pair_p (offset), offset, SCM_ARG2, __FUNCTION__, "number pair");
+ SCM_ASSERT_TYPE (is_number_pair (offset), offset, SCM_ARG2, __FUNCTION__, "number pair");
Offset o = ly_scm2offset (offset);
Molecule q (*m);
{
Molecule *m = unsmob_molecule (mol);
SCM_ASSERT_TYPE (m, mol, SCM_ARG1, __FUNCTION__, "molecule");
- SCM_ASSERT_TYPE (ly_axis_p (axis), axis, SCM_ARG2, __FUNCTION__, "axis");
+ SCM_ASSERT_TYPE (is_axis (axis), axis, SCM_ARG2, __FUNCTION__, "axis");
return ly_interval2scm (m->extent (Axis (gh_scm2int (axis))));
}
Molecule result;
- SCM_ASSERT_TYPE(ly_axis_p (axis), axis, SCM_ARG3, __FUNCTION__, "axis");
- SCM_ASSERT_TYPE(ly_dir_p (direction), direction, SCM_ARG4, __FUNCTION__, "dir");
+ SCM_ASSERT_TYPE(is_axis (axis), axis, SCM_ARG3, __FUNCTION__, "axis");
+ SCM_ASSERT_TYPE(is_direction (direction), direction, SCM_ARG4, __FUNCTION__, "dir");
Real p = 0.0;
if (padding != SCM_UNDEFINED)
"can run with the @code{-f scm} option. The scheme expressions are then \n"
"dumped in the output file.")
{
- SCM_ASSERT_TYPE (ly_number_pair_p (xext), xext, SCM_ARG2, __FUNCTION__, "number pair");
- SCM_ASSERT_TYPE (ly_number_pair_p (yext), yext, SCM_ARG3, __FUNCTION__, "number pair");
+ SCM_ASSERT_TYPE (is_number_pair (xext), xext, SCM_ARG2, __FUNCTION__, "number pair");
+ SCM_ASSERT_TYPE (is_number_pair (yext), yext, SCM_ARG3, __FUNCTION__, "number pair");
Box b (ly_scm2interval (xext), ly_scm2interval(yext));
Molecule m (b, expr);
" the center. ")
{
SCM_ASSERT_TYPE(unsmob_molecule (mol), mol, SCM_ARG1, __FUNCTION__, "molecule");
- SCM_ASSERT_TYPE(ly_axis_p (axis), axis, SCM_ARG2, __FUNCTION__, "axis");
+ SCM_ASSERT_TYPE(is_axis (axis), axis, SCM_ARG2, __FUNCTION__, "axis");
SCM_ASSERT_TYPE(gh_number_p (dir), dir, SCM_ARG3, __FUNCTION__, "number");
unsmob_molecule (mol)->align_to ((Axis)gh_scm2int (axis),
SCM t = e->get_mus_property ("text");
SCM dir = e->get_mus_property ("direction");
sp->set_grob_property ("text",t);
- if (ly_dir_p (dir))
+ if (is_direction (dir))
sp->set_grob_property ("direction",dir);
numbers_.push (sp);
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
+#include <stdio.h>
#include "scm-option.hh"
Item *b = me->get_bound (d);
broken[d] = b->break_status_dir () != CENTER;
- if (!broken[d] && (ly_number_pair_p (eh)))
+ if (!broken[d] && (is_number_pair (eh)))
height[d] += gh_scm2double (index_get_cell (eh, d));
- if (ly_number_pair_p (sp))
+ if (is_number_pair (sp))
shorten[d] += gh_scm2double (index_get_cell (sp, d));
}
while (flip (&d) != LEFT);
*descr = art;
SCM force_dir = event->get_mus_property ("direction");
- if (ly_dir_p (force_dir) && to_dir (force_dir))
+ if (is_direction (force_dir) && to_dir (force_dir))
p->set_grob_property ("direction", force_dir);
copy_property (p, ly_symbol2scm ("script-molecule"), art);
Separation_item::width (Grob *me)
{
SCM sw = me->get_grob_property ("X-extent");
- if (ly_number_pair_p (sw))
+ if (is_number_pair (sw))
{
return ly_scm2interval (sw);
}
Side_position_interface::get_direction (Grob*me)
{
SCM d = me->get_grob_property ("direction");
- if (ly_dir_p (d) && to_dir (d))
+ if (is_direction (d) && to_dir (d))
return to_dir (d);
Direction relative_dir = Direction (1);
SCM reldir = me->get_grob_property ("side-relative-direction"); // should use a lambda.
- if (ly_dir_p (reldir))
+ if (is_direction (reldir))
{
relative_dir = to_dir (reldir);
}
// mustn't ask Score for instrument: it will return piano!
SCM minstr = get_property ("midiInstrument");
- if (!gh_string_p (minstr))
- minstr = get_property ("instrument");
-
if (!gh_string_p (minstr)
|| ly_scm2string (minstr) == instrument_string_)
return "";
{
Real dy = 0;
SCM s = beam->get_grob_property ("positions");
- if (ly_number_pair_p (s))
+ if (is_number_pair (s))
{
dy = -gh_scm2double (gh_car (s)) +gh_scm2double (gh_cdr (s));
}
Drul_array<Real> height, flare, shorten;
do {
flare[d] = height[d] = shorten[d] = 0.0;
- if (ly_number_pair_p (fl))
+ if (is_number_pair (fl))
flare[d] += gh_scm2double (index_get_cell (fl, d));
- if (ly_number_pair_p (eh))
+ if (is_number_pair (eh))
height[d] += gh_scm2double (index_get_cell (eh, d)) * - dir;
- if (ly_number_pair_p (sp))
+ if (is_number_pair (sp))
shorten[d] += gh_scm2double (index_get_cell (sp, d));
}
while (flip (&d) != LEFT);
INSTALLATION_OUT_DIR3=$(local_lilypond_datadir)/fonts/tfm
INSTALLATION_OUT_FILES3=$(TFM_FILES)
-# comment this out if you don't want pfa's to be generated
-# making pfas takes a lot of CPU time. Let's skip it for now.
-#MAKE_PFA_FILES=1
-#MAKE_PFB_FILES=1
-
SAUTER_FONTS = cmbxti7 cmbxti8 cmbxti12 cmbxti14 \
cmcsc7 cmcsc12 cmtt17 cmbx14 cmbx17 cmtt6 cmbx6 cmbx5 cmbxti5 \
cmti6 cmti5
PFA_FILES = $(ALL_FONTS:%=$(outdir)/%.pfa)
PFB_FILES = $(PFA_FILES:%.pfa=%.pfb)
-ifdef MAKE_PFB_FILES
-MAKE_PFA_FILES = 1
-ALL_GEN_FILES += $(PFB_FILES)
-endif
-
-ifdef MAKE_PFA_FILES
ALL_GEN_FILES += $(PFA_FILES) $(outdir)/lilypond.map $(outdir)/fonts.scale
INSTALLATION_OUT_DIR4=$(local_lilypond_datadir)/fonts/type1
INSTALLATION_OUT_FILES4=$(PFA_FILES) $(outdir)/fonts.scale
INSTALLATION_OUT_DIR5=$(local_lilypond_datadir)/dvips/
INSTALLATION_OUT_FILES5=$(outdir)/lilypond.map
-endif
-
-ifdef MAKE_PFB_FILES
-INSTALLATION_OUT_FILES4 +=$(PFB_FILES)
-endif
export MFINPUTS:=.:$(MFINPUTS)
echo
fi
-for coin in `find $srcdir -name configure.in -print`
+for coin in $srcdir/configure.in #`find $srcdir -name configure.in -print`
do
dr=`dirname $coin`
echo processing $dr