+2002-02-27 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ * VERSION: 1.5.34 released.
+
+ * lily/rest-engraver.cc (create_grobs): rests can have pitches.
+
+ * lily/staff-symbol-referencer.cc (callback): assume that
+ staff-position is unset in general.
+
+ * input/regression/rest-pitch.ly: new file.
+
+ * lily/parser.yy (simple_element): rests can have pitch. Syntax:
+ a4\rest
+
+2002-02-26 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ * lily/scm-option.cc (set_lily_option): add internal-type-checks
+ as Scheme option. Run regression test by default with
+ internal-type-checking.
+
+ * lily/separating-group-spanner.cc (find_musical_sequences): removed.
+
+ * lily/lily-guile.cc (type_check_assignment): changed functions.
+
+ * scm/*description*.scm: be anal about typechecks. Some changes
+ for internal variable names.
+
+2002-02-25 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ * scm/ps.scm: -f ps output for GUILE 1.4 and 1.3.4
+
2002-02-25 Han-Wen <hanwen@cs.uu.nl>
* VERSION: 1.5.33 released.
SUBDIRS=user bibliography pictures topdocs misc windows
STEPMAKE_TEMPLATES=documentation texinfo tex
LOCALSTEPMAKE_TEMPLATES=lilypond ly
-
+LILYPOND_BOOK_FLAGS=--extra-options '-e "(set-lily-option (quote internal-type-checking) \#t)"'
README_TOP_FILES=NEWS DEDICATION CHANGES
EXTRA_DIST_FILES=
@lilypondfile[printfilename]{mm-rests2.ly}
+@lilypondfile[printfilename]{rest-pitch.ly}
@section Accidentals
@lilypondfile[printfilename]{stem-direction-down.ly}
-
@section Scripts
@lilypondfile[printfilename]{staccato-pos.ly}
@lilypondfile[printfilename]{grace-sync.ly}
+@lilypondfile[printfilename]{grace-bar-number.ly}
+
@section Beams
@lilypondfile[printfilename]{part-combine.ly}
+@lilypondfile[printfilename]{font-magnification.ly}
@lilypondfile[printfilename,nofragment]{size11.ly}
The grob is @internalsref{Rest}. Whole bar rests centered in the bar are
specified using @code{R}, see @ref{Multi measure rests}.
+For polyphonic music, it can be convenient to specify the rest position
+directly. You can do that by entering a note, with the keyword
+@code{\rest} appended, e.g. Rest collisions will leave these rests alone.
+
+@lilypond[singleline,verbatim]
+a'4\rest d'4\rest
+@end lilypond
+
@c . {Skips}
@c FIXME: naming.
@code{\\}, to make multiple voices. You can use it for small,
short-lived voices (make a chord of voices) or for single chords:
-@lilypond
-\score {
-\notes \context Voice = VA \apply #voicify-music \relative c'' {
+@lilypond[verbatim,fragment]
+\context Voice = VA \apply #voicify-music \relative c'' {
c4 < { f d e } \\ { b c2 } > c4 < g' \\ c, \\ f \\ d >
}
-}
@end lilypond
The function @code{voicify-music} instantiates @internalsref{Voice}
Figured bass is printed by @internalsref{FiguredBass} context. This
context will print notes (relative to the central C) as figures. To
-ease entering these notes, the special @code{\figures} mode, is
+ease entering these notes, the special @code{\figures} mode is
available which allows you to type numbers, like @code{<4 6+>}.
-@lilypond
-\score { \notes <
- \context FiguredBass \transpose c'' {
+@lilypond[verbatim,fragment]
+< \context FiguredBass \transpose c'' {
<e! g >
<f8 ais >
\figures {
}
\context Voice {
c g8 g f4 d c
- }
-
->
- }
+ } >
@end lilypond
@c . {Tuning output}
PACKAGE_NAME=LilyPond
MAJOR_VERSION=1
MINOR_VERSION=5
-PATCH_LEVEL=33
+PATCH_LEVEL=34
MY_PATCH_LEVEL=
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
--- /dev/null
+\header {
+
+texidoc = "Rests can have pitches--these will be affected by
+transposition and relativization. If a rest has a pitch, rest
+collision will leave it alone."
+
+}
+
+\score { \notes\relative c'' \apply #voicify-music
+{
+ a4\rest b4\rest c4\rest
+
+<d \\ d\rest^"rest pitch" >
+<d \\ r>
+}
+}
"
}
\score {
- \context Voice \notes\relative c {
-
- e''4-. f-. d-.
- c,-. b-. c'''-. d-.
-
+ \context Voice \notes\relative c' {
+ e'4-. f-. d-. c-. b-.
}
\paper {
linewidth=-1.0
}
- \midi { }
}
tie_break_reminder);
Side_position_interface::add_support (key_item_p_,support_l);
- support_l->set_grob_property ("accidentals", key_item_p_->self_scm ());
+ support_l->set_grob_property ("accidentals-grob", key_item_p_->self_scm ());
}
/*
Hairy function to put elements where they should be. Can be tweaked
- from the outside by setting minimum-space and extra-space in its
+ from the outside by setting minimum-space-pair and extra-space in its
children
We assume that the children the refpoints of the children are still
Grob *e =dynamic_cast<Grob*> (all_grobs[i]);
// todo: fucks up if item both in Halign & Valign.
- SCM min_dims = e->remove_grob_property ("minimum-space");
+ SCM min_dims = e->remove_grob_property ("minimum-space-pair");
if (gh_pair_p (min_dims) &&
gh_number_p (ly_car (min_dims))
&& gh_number_p (ly_cdr (min_dims)))
if (!gh_string_p (g))
{
- me->set_grob_property ("molecule-callback", SCM_BOOL_T);
+ me->set_grob_property ("molecule-callback", SCM_EOL);
me->set_extent_callback (SCM_EOL, X_AXIS);
// leave y_extent for spanbar?
}
warning (_f ("unknown spacing pair `%s', `%s'",
ly_symbol2string (current_origin),
ly_symbol2string (next_origin)));
- extra_space = scm_list_n (ly_symbol2scm ("minimum-space"), gh_double2scm (0.0), SCM_UNDEFINED);
+ extra_space = scm_list_n (ly_symbol2scm ("minimum-space-pair"), gh_double2scm (0.0), SCM_UNDEFINED);
}
SCM symbol = ly_car (extra_space);
// urg
- SCM first_pair = elems[0]->get_grob_property ("minimum-space");
+ SCM first_pair = elems[0]->get_grob_property ("minimum-space-pair");
if (gh_pair_p (first_pair))
first_pair = first_pair;
else
first_pair = gh_cons (gh_double2scm (0.0), gh_double2scm (0.0));
scm_set_car_x (first_pair, gh_double2scm (-dists[0]));
- elems[0]->set_grob_property ("minimum-space", first_pair);
+ elems[0]->set_grob_property ("minimum-space-pair", first_pair);
Direction bsd = item->break_status_dir ();
if (bsd == LEFT)
spring_len += dists.top ();
stretch_distance = dists.top ();
}
- else if (ly_car (symbol_list) == ly_symbol2scm ("minimum-space"))
+ else if (ly_car (symbol_list) == ly_symbol2scm ("minimum-space-pair"))
{
spring_len = spring_len >? dists.top ();
stretch_distance = spring_len;
assert (a == X_AXIS);
me = me->get_parent (a);
- /*
- ugh. the way DONE is done is not clean
- */
- if (!unsmob_grob (me->get_grob_property ("done")))
+
+ if (! to_boolean (me->get_grob_property ("collision-done")))
{
- me->set_grob_property ("done", me->self_scm ());
+ me->set_grob_property ("collision-done", SCM_BOOL_T);
do_shifts (me);
}
}
ENTER_DESCRIPTION(Dynamic_performer,
- "","","","","");
+ "","","","dynamicAbsoluteVolumeFunction midiMaximumVolume midiMinimumVolume midiInstrument instrumentEqualizer","");
}
#endif
-
void
Grob::internal_set_grob_property (SCM s, SCM v)
{
+#ifndef NDEBUG
+ if (internal_type_checking_global_b)
+ assert (type_check_assignment (s, v, ly_symbol2scm ("backend-type?")));
+#endif
+
+
mutable_property_alist_ = scm_assq_set_x (mutable_property_alist_, s, v);
}
return SCM_UNSPECIFIED;
}
+ if (!type_check_assignment (sym, val, ly_symbol2scm ("backend-type?")))
+ return SCM_UNSPECIFIED;
+
if (sc)
{
sc->internal_set_grob_property (sym, val);
extern bool safe_global_b;
extern bool verbose_global_b;
extern bool store_locations_global_b;
+extern bool internal_type_checking_global_b;
+
/* misc */
extern All_font_metrics *all_fonts_global_p;
/*
- new-staff-margin-engraver.cc -- implement Instrument_name_engraver
+ instrument-name-engraver.cc -- implement Instrument_name_engraver
source file of the GNU LilyPond music typesetter
but is only a vehicle for the placement routine it contains, and
therefore the location of its refpoint won't be very useful.
+
+ We could also just use staffsFound, but lets keep this working
+ without staffs as well.
+
*/
if (dynamic_cast<Spanner*> (i.grob_l_)
&& ((Axis_group_interface::has_interface (i.grob_l_)
set_extent_callback (SCM_EOL, Y_AXIS);
}
else if (trans)
- set_grob_property ("molecule-callback", SCM_BOOL_T);
+ set_grob_property ("molecule-callback", SCM_EOL);
}
}
bool
-type_check_assignment (SCM val, SCM sym, SCM type_symbol)
+type_check_assignment (SCM sym, SCM val, SCM type_symbol)
{
bool ok = true;
+
+ /*
+ Always succeeds.
+
+
+ TODO: should remove #f from allowed vals?
+ */
+ if (val == SCM_EOL || val == SCM_BOOL_F)
+ return ok;
+
+
SCM type_p = SCM_EOL;
if (gh_symbol_p (sym))
if (type_p != SCM_EOL && !gh_procedure_p (type_p))
{
- warning (_f ("Can't find property type-check for `%s'. Perhaps you made a typing error? Doing assignment anyway.",
- ly_symbol2string (sym).ch_C ()));
+ warning (_f ("Can't find property type-check for `%s' (%s). Perhaps you made a typing error? Doing assignment anyway.",
+ ly_symbol2string (sym).ch_C (),
+ ly_symbol2string (type_symbol).ch_C ()
+
+ ));
}
else
{
follow regular localisation guidelines).
*/
static Long_option_init options_static[] = {
- /* print example usage: lilypond -e "(set-lily-option 'help 0)" ? */
- {_i ("EXPR"), "evaluate", 'e',_i ("evalute EXPR as Scheme after .scm init is read")},
+ /* print example usage: lilypond -e "" ? */
+ {_i ("EXPR"), "evaluate", 'e',_i ("Scheme options: try -e \"(set-lily-option 'help 0)\" for more help.")},
/* another bug in option parser: --output=foe is taken as an abbreviation
for --output-format */
{_i ("EXT"), "format", 'f', _i ("use output format EXT (tex [default], pdftex, ps, scm or as)")},
str += to_str ((char)0x42);
else if (audio_l_->type_str_ == "Sustain")
str += to_str ((char)0x40);
- else if (audio_l_->type_str_ == "UnaChorda")
+ else if (audio_l_->type_str_ == "UnaCorda")
str += to_str ((char)0x43);
int pedal = ((1 - audio_l_->dir_) / 2) * 0x7f;
(c) 1997--2002 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
+#include "main.hh"
#include "input-smob.hh"
#include "music.hh"
#include "music-list.hh"
}
+
void
Music::internal_set_mus_property (SCM s, SCM v)
{
+#ifndef NDEBUG
+ if (internal_type_checking_global_b)
+ assert (type_check_assignment (s, v, ly_symbol2scm ("backend-type?")));
+#endif
+
+
mutable_property_alist_ = scm_assq_set_x (mutable_property_alist_, s, v);
}
}
- bool ok = type_check_assignment (val, sym, ly_symbol2scm ("music-type?"));
+ bool ok = type_check_assignment (sym, val, ly_symbol2scm ("music-type?"));
if (ok)
{
sc->internal_set_mus_property (sym, val);
{"outputproperty", OUTPUTPROPERTY},
{"override", OVERRIDE},
{"set", SET},
+ {"rest", REST},
{"revert", REVERT},
{"partial", PARTIAL},
{"paper", PAPER},
}
/**
- translate the rest symbols vertically by amount DY_I.
- */
+ translate the rest symbols vertically by amount DY_I, but only if
+ they have no staff-position set.
+*/
void
Note_column::translate_rests (Grob*me,int dy_i)
{
Grob * r = unsmob_grob (me->get_grob_property ("rest"));
- if (r)
+ if (r && !gh_number_p (r->get_grob_property ("staff-position")))
{
r->translate_axis (dy_i * Staff_symbol_referencer::staff_space (r)/2.0, Y_AXIS);
}
for (;gh_pair_p (heads); heads =gh_cdr (heads))
{
Grob * h = unsmob_grob (gh_car (heads));
- Grob *a = h ? unsmob_grob(h->get_grob_property ("accidentals")) : 0;
+ Grob *a = h ? unsmob_grob(h->get_grob_property ("accidentals-grob")) : 0;
if (a)
return a;
}
%token TYPE
%token UNSET
%token CONTEXT
+%token REST
/* escaped */
%token E_CHAR E_EXCLAMATION E_SMALLER E_BIGGER E_OPEN E_CLOSE E_TILDE
%token E_BACKSLASH
%token CHORD_BASS CHORD_COLON CHORD_MINUS CHORD_CARET
-%type <i> exclamations questions dots
+%type <i> exclamations questions dots optional_rest
%type <i> bass_number bass_mod
%type <scm> bass_figure figure_list figure_spec
%token <i> DIGIT
Music *t = new Music (SCM_EOL);
t->set_mus_property ("iterator-ctor",
Push_property_iterator::constructor_cxx_function);
- t->set_mus_property ("symbols", scm_string_to_symbol ($4));
+ t->set_mus_property ("symbol", scm_string_to_symbol ($4));
t->set_mus_property ("pop-first", SCM_BOOL_T);
t->set_mus_property ("grob-property", $6);
t->set_mus_property ("grob-value", $8);
Music *t = new Music (SCM_EOL);
t->set_mus_property ("iterator-ctor",
Push_property_iterator::constructor_cxx_function);
- t->set_mus_property ("symbols", scm_string_to_symbol ($4));
+ t->set_mus_property ("symbol", scm_string_to_symbol ($4));
t->set_mus_property ("grob-property", $6);
t->set_mus_property ("grob-value", $8);
Context_specced_music *csm = new Context_specced_music (SCM_EOL);
Music *t = new Music (SCM_EOL);
t->set_mus_property ("iterator-ctor",
Pop_property_iterator::constructor_cxx_function);
- t->set_mus_property ("symbols", scm_string_to_symbol ($4));
+ t->set_mus_property ("symbol", scm_string_to_symbol ($4));
t->set_mus_property ("grob-property", $6);
Context_specced_music *csm = new Context_specced_music (SCM_EOL);
}
;
+
+optional_rest:
+ /**/ { $$ = 0; }
+ | REST { $$ = 1; }
+ ;
+
simple_element:
- pitch exclamations questions optional_notemode_duration {
+ pitch exclamations questions optional_notemode_duration optional_rest {
Input i = THIS->pop_spot ();
if (!THIS->lexer_p_->note_state_b ())
THIS->parser_error (_ ("Have to be in Note mode for notes"));
- Note_req *n = new Note_req;
+ Music *n = 0;
+ if ($5)
+ n = new Rest_req ;
+ else
+ n = new Note_req;
n->set_mus_property ("pitch", $1);
n->set_mus_property ("duration", $4);
+
if ($3 % 2)
n->set_mus_property ("cautionary", SCM_BOOL_T);
if ($2 % 2 || $3 % 2)
Simultaneous_music*v = new Request_chord (SCM_EOL);
v->set_mus_property ("elements", scm_list_n (n->self_scm (), SCM_UNDEFINED));
-
+
v->set_spot (i);
n->set_spot (i);
$$ = v;
info_alist_ = new Pedal_info[4];
Pedal_info *p = info_alist_;
- char * names [] = { "Sostenuto", "Sustain", "UnaChorda", 0 };
+ char * names [] = { "Sostenuto", "Sustain", "UnaCorda", 0 };
char **np = names ;
do
{
SCM val = music_l ()->get_mus_property ("value");
bool ok= true;
if (val != SCM_EOL)
- ok = type_check_assignment (val, sym, ly_symbol2scm ("translation-type?"));
+ ok = type_check_assignment (sym, val, ly_symbol2scm ("translation-type?"));
if (ok)
report_to_l ()->internal_set_property (sym, val);
}
void
Push_property_iterator::process (Moment m)
{
- SCM syms = music_l ()->get_mus_property ("symbols");
+ SCM sym = music_l ()->get_mus_property ("symbol");
SCM eprop = music_l ()->get_mus_property ("grob-property");
SCM val = music_l ()->get_mus_property ("grob-value");
if (to_boolean (music_l ()->get_mus_property ("pop-first")))
Translator_def::apply_pushpop_property (report_to_l (),
- syms, eprop, SCM_UNDEFINED);
+ sym, eprop, SCM_UNDEFINED);
- Translator_def::apply_pushpop_property (report_to_l (), syms, eprop, val);
+ Translator_def::apply_pushpop_property (report_to_l (), sym, eprop, val);
Simple_music_iterator::process (m);
}
void
Pop_property_iterator::process (Moment m)
{
- SCM syms = music_l ()->get_mus_property ("symbols");
+ SCM sym = music_l ()->get_mus_property ("symbol");
SCM eprop = music_l ()->get_mus_property ("grob-property");
- Translator_def::apply_pushpop_property (report_to_l (), syms, eprop, SCM_UNDEFINED);
+ Translator_def::apply_pushpop_property (report_to_l (), sym, eprop, SCM_UNDEFINED);
Simple_music_iterator::process (m);
}
for (SCM s = music_list (); gh_pair_p (s); s = ly_cdr (s))
{
Music * mus = unsmob_music (ly_car (s));
- if (Melodic_req *m= dynamic_cast <Melodic_req *> (mus))
+ Melodic_req *m= dynamic_cast <Melodic_req *> (mus);
+
+ /*
+ kLudge: rests have pitches now as well.
+ */
+ Rest_req *r = dynamic_cast<Rest_req*> (mus);
+
+ if (r || m)
{
- Pitch pit = *unsmob_pitch (m->get_mus_property ("pitch"));
+ Pitch *old_pit = unsmob_pitch (mus->get_mus_property ("pitch"));
+ if (!old_pit)
+ continue;
- pit.to_relative_octave (last);
- m->set_mus_property ("pitch", pit.smobbed_copy ());
-
- return pit;
+ Pitch new_pit = *old_pit;
+ new_pit.to_relative_octave (last);
+ mus->set_mus_property ("pitch", new_pit.smobbed_copy ());
+
+ return new_pit;
}
+
}
return last;
}
{
/*
Done: destruct pointers, so we do the shift only once.
+
+ TODO: use rest-collision-done
*/
SCM elts = rc->get_grob_property ("elements");
rc->set_grob_property ("elements", SCM_EOL);
virtual bool try_music (Music *);
virtual void stop_translation_timestep ();
virtual void start_translation_timestep ();
- virtual void create_grobs ();
+ virtual void process_music ();
public:
-
TRANSLATOR_DECLARATIONS(Rest_engraver);
};
}
void
-Rest_engraver::create_grobs ()
+Rest_engraver::process_music ()
{
if (rest_req_l_ && !rest_p_)
{
rest_p_ = new Item (get_property ("Rest"));
Rhythmic_head::set_interface (rest_p_);
- Staff_symbol_referencer::set_interface (rest_p_);
+
int durlog = unsmob_duration (rest_req_l_->get_mus_property ("duration"))-> duration_log ();
announce_grob (dot_p_, SCM_EOL);
}
+ Pitch *p = unsmob_pitch (rest_req_l_->get_mus_property ("pitch"));
+
+ /*
+ This is ridiculous -- rests don't have pitch, but we act as if
+ our nose is bleeding.
+ */
+ if (p)
+ {
+ int pos= p->steps ();
+ SCM c0 = get_property ("centralCPosition");
+ if (gh_number_p (c0))
+ pos += gh_scm2int (c0);
+
+ rest_p_->set_grob_property ("staff-position", gh_int2scm (pos));
+ }
+
announce_grob(rest_p_, rest_req_l_->self_scm());
}
}
/* descr */ "",
/* creats*/ "Rest Dots",
/* acks */ "",
-/* reads */ "",
+/* reads */ "centralCPosition",
/* write */ "");
/* General purpose testing flag */
int testing_level_global;
-
+/*
+ crash if internally the wrong type is used for a grob property.
+ */
+bool internal_type_checking_global_b;
/*
*/
if (var == ly_symbol2scm ("help"))
{
- cout << '\n';
- cout << _ ("Scheme options:");
- cout << '\n';
- cout << " help (any-symbol)";
- cout << '\n';
- cout << " midi-debug (boolean)";
- cout << '\n';
- cout << " testing-level (int)";
- cout << '\n';
+ cout << _("lilypond -e EXPR means
+
+evalute EXPR as Scheme after init.scm has been read. In particular,
+the function set-lily-option allows for access to some internal
+variables. Usage:
+
+ (set-lily-option SYMBOL VAL)
+
+possible options for SYMBOL are :
+")<<endl;
+
+ cout << " help (any-symbol)"<<endl;
+ cout << " internal-type-checks #t"<<endl;
+ cout << " midi-debug (boolean)"<<endl;
+ cout << " testing-level (int)"<<endl;
+
exit (0);
}
else if (var == ly_symbol2scm ("midi-debug"))
{
testing_level_global = gh_scm2int (val);
}
+ else if (var == ly_symbol2scm ("internal-type-checks"))
+ {
+ internal_type_checking_global_b = to_boolean (val);
+ }
else if (var == ly_symbol2scm ("find-old-relative"))
{
/*
// todo -> use result of articulation-to-scriptdef directly as basic prop list.
Grob *p =new Item (get_property ("Script"));
art = ly_cdr (art);
- p->set_grob_property ("molecule", ly_car (art));
+ p->set_grob_property ("script-molecule", ly_car (art));
art = ly_cdr (art);
bool follow_staff = gh_scm2bool (ly_car (art));
SCM axisprop = get_property ("scriptHorizontal");
bool xaxis = to_boolean (axisprop);
Side_position_interface::set_axis (p, xaxis ? X_AXIS : Y_AXIS);
-
+
if (!follow_staff && ! xaxis)
p->set_grob_property ("staff-support", SCM_BOOL_T);
{
for (int i=0; i < script_p_arr_.size (); i++)
{
+
+ /*
+ TODO: junk staff-support.
+ */
Grob * sc = script_p_arr_[i];
if (to_boolean (sc->get_grob_property ("staff-support")))
{
Molecule
Script::get_molecule (Grob * me, Direction d)
{
- SCM s = me->get_grob_property ("molecule");
+ SCM s = me->get_grob_property ("script-molecule");
assert (gh_pair_p (s));
SCM key = ly_car (s);
Separating_group_spanner::set_spacing_rods_and_seqs (SCM smob)
{
set_spacing_rods (smob);
- find_musical_sequences (unsmob_grob (smob));
+
return SCM_UNSPECIFIED;
}
if (rb)
find_rods (rb, ly_cdr (s));
}
- find_musical_sequences (me);
#if 0
/*
}
-void
-Separating_group_spanner::find_musical_sequences (Grob *me)
-{
- Item *last = 0;
- Item *llast = 0;
- for (SCM s = me->get_grob_property ("elements");
- gh_pair_p (s); s = ly_cdr (s))
- {
- Item *it = dynamic_cast<Item*> (unsmob_grob (ly_car (s)));
- if (last)
- {
- Item *lcol = last->column_l ();
- Item *col = it->column_l ();
-
- int lrank = Paper_column::rank_i (lcol);
- int rank = Paper_column ::rank_i (col);
-
- bool mus = Paper_column::musical_b (col);
- bool lmus = Paper_column::musical_b (lcol);
-
- if ((lrank - rank == 2) && lmus && mus)
- {
- SCM seq = col->get_grob_property ("spacing-sequence");
- col->set_grob_property ("spacing-sequence",
- gh_cons (gh_cons (it->self_scm (), last->self_scm ()), seq));
- }
-
- if (llast && !Paper_column::breakable_b (last))
- {
- Item *llcol = llast->column_l ();
- int llrank = Paper_column::rank_i (llcol);
- bool llmus= Paper_column::musical_b (llcol);
- if (llrank - lrank == 1
- && lrank - rank == 1
- && llmus && !lmus && mus)
- {
- /*
- these columns are adjacent, so set spacing-sequence in
- IT.
-
- Q Q+1 Q+2 (rank)
- Note Clef Note
-
- IT LAST LLAST
-
- */
- SCM seq = col->get_grob_property ("spacing-sequence");
- col->set_grob_property ("spacing-sequence",
- gh_cons (gh_cons (it->self_scm (), last->self_scm ()), seq));
-
- /*
- lcol can not be a loose column, so we make sure
- that is and will not be marked as such.
- */
- lcol->set_grob_property ("between-cols" , SCM_BOOL_F);
- }
- else if (!lmus)
- {
- SCM between = lcol->get_grob_property ("between-cols");
-
- if (between == SCM_BOOL_F)
- continue;
-
- if (!gh_pair_p (between))
- {
- between = gh_cons (it->self_scm (), llast->self_scm ());
- lcol ->set_grob_property ("between-cols", between);
- }
-
- Item * left
- = dynamic_cast<Item*> (unsmob_grob (ly_car (between)));
- if(Paper_column::rank_i (left->column_l ()) < rank)
- gh_set_car_x (between, col->self_scm());
-
- Item * right
- = dynamic_cast<Item*> (unsmob_grob (ly_cdr (between)));
- if (Paper_column::rank_i (right->column_l ()) > llrank )
- gh_set_cdr_x (between, llcol->self_scm ());
- }
- }
- }
-
- llast = last;
- last = it;
- }
-}
-
-#if 0
-void
-Separating_group_spanner::set_loose_rods ()
-{
- // loose columns should also generate minimum distances.
- // TODO
-}
-#endif
-
-
void
Separating_group_spanner::set_interface (Grob*)
{
{
Real space = Staff_symbol_referencer::staff_space (me);
off = gh_scm2double (pos) * space/2.0;
+ me->set_grob_property ("staff-position", gh_double2scm (0.0));
}
- me->set_grob_property ("staff-position", gh_double2scm (0.0));
-
return gh_double2scm (off);
}
void
Staff_symbol_referencer::set_interface (Grob * e)
{
- if (!gh_number_p (e->get_grob_property ("staff-position")))
- e->set_grob_property ("staff-position", gh_double2scm (0.0));
-
e->add_offset_callback (Staff_symbol_referencer::callback_proc, Y_AXIS);
}
/*
UGH UGH
*/
- if (gh_symbol_p (gl) && gl == ly_symbol2scm ("brace")
- && gh_symbol_p (my_gl) && my_gl == ly_symbol2scm ("bracket"))
+ if (gh_string_p (gl) && gh_equal_p (gl, ly_symbol2scm ("brace"))
+ && gh_string_p (my_gl) && gh_equal_p (my_gl, ly_symbol2scm ("bracket")))
inf.grob_l_->translate_axis (-0.8, X_AXIS); // ugh
- else if (gh_symbol_p (gl) && gl == ly_symbol2scm ("bracket")
- && gh_symbol_p (my_gl) && my_gl == ly_symbol2scm ("bracket"))
+ else if (gh_string_p (gl) && gh_equal_p (gl, ly_symbol2scm ("bracket"))
+ && gh_string_p (my_gl) && gh_equal_p (my_gl, ly_symbol2scm ("bracket")))
{
inf.grob_l_->translate_axis ( -0.8, X_AXIS); // ugh
inf.grob_l_->set_grob_property ("arch-height",
void
System_start_delimiter_engraver::initialize ()
{
- SCM delim_name =get_property ("SystemStartDelimiter");
+ SCM delim_name =get_property ("systemStartDelimiter");
delim_ = new Spanner (internal_get_property (delim_name));
delim_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn")));
/* descr */ "creates a system start delimiter (ie. SystemStart@{Bar,Brace,Bracket@} spanner",
/* creats*/ "SystemStartBar SystemStartBrace SystemStartBracket",
/* acks */ "system-start-delimiter-interface staff-symbol-interface",
-/* reads */ "",
+/* reads */ "systemStartDelimiter",
/* write */ "");
{
Grob * me = unsmob_grob (smob);
SCM gl = me->get_grob_property ("glyph");
-
- if (scm_ilength (me->get_grob_property ("elements")) <= 1 && gl == ly_symbol2scm ("bar-line"))
+
+ if (scm_ilength (me->get_grob_property ("elements")) <= 1 && gh_equal_p (gl,ly_str02scm ("bar-line")))
{
me->suicide ();
}
static Real note_spacing (Grob*,Grob*,Grob*,Moment) ;
static Real get_duration_space (Grob*,Moment dur, Moment shortest) ;
- static void breakable_column_spacing (Item* l, Item *r);
- static void find_loose_columns () {}
- static void prune_loose_colunms (Link_array<Grob> *cols);
+ static void breakable_column_spacing (Item* l, Item *r);
+ static void find_loose_columns () {}
+ static void prune_loose_colunms (Link_array<Grob> *cols);
static void find_loose_columns (Link_array<Grob> cols);
static void set_explicit_neighbor_columns (Link_array<Grob> cols);
static void set_implicit_neighbor_columns (Link_array<Grob> cols);
}
/*
- Do it. SYMS maybe a symbol or a list of symbols. VAL is
- SCM_UNDEFINED in case of a pop
+ Do it. SYM is single symbol. VAL is SCM_UNDEFINED in case of a pop
*/
void
-Translator_def::apply_pushpop_property (Translator_group* me,SCM syms, SCM eprop, SCM val)
+Translator_def::apply_pushpop_property (Translator_group* me,SCM sym, SCM eprop, SCM val)
{
- if (gh_symbol_p (syms))
- dynamic_cast<Translator_group*> (me)->execute_single_pushpop_property (syms, eprop, val);
- else for (SCM s = syms; gh_pair_p (s); s = ly_cdr (s))
- dynamic_cast<Translator_group*> (me)->execute_single_pushpop_property (ly_car (s), eprop, val);
+ dynamic_cast<Translator_group*> (me)
+ ->execute_single_pushpop_property (sym, eprop, val);
}
#include "moment.hh"
#include "scm-hash.hh"
#include "translator-def.hh"
+#include "main.hh"
Translator_group::Translator_group (Translator_group const&s)
: Translator (s)
return val;
}
-
void
Translator_group::internal_set_property (SCM sym, SCM val)
{
+#ifndef NDEBUG
+ if (internal_type_checking_global_b)
+ assert (type_check_assignment (sym, val, ly_symbol2scm ("backend-type?")));
+#endif
+
properties_dict ()->set (sym, val);
}
if (gh_pair_p (prev) || prev == SCM_EOL)
{
- bool ok = type_check_assignment (val, eltprop, ly_symbol2scm ("backend-type?"));
+ bool ok = type_check_assignment (eltprop, val, ly_symbol2scm ("backend-type?"));
if (ok)
{
}
ADD_SCM_INIT_FUNC (trans_scm, add_trans_scm_funcs);
+
{
end_volta_span_p_ = volta_span_p_;
volta_span_p_ =0;
-
- /*
- maybe do typeset_grob () directly?
- */
-
- if (!gh_string_p (start_str_))
- end_volta_span_p_->set_grob_property ("last-volta", SCM_BOOL_T);
}
if (gh_string_p (start_str_) && volta_span_p_)
-\version "1.3.146"
+\version "1.5.33"
%
% setup for Request->Element conversion. Guru-only
\name InnerChoirStaff
alignmentReference = #0
\consists "System_start_delimiter_engraver"
- SystemStartDelimiter = #'SystemStartBracket
+ systemStartDelimiter = #'SystemStartBracket
\accepts "Staff"
\accepts "RhythmicStaff"
\consists "Span_bar_engraver"
\consists "Span_arpeggio_engraver"
\consists "System_start_delimiter_engraver"
- SystemStartDelimiter = #'SystemStartBrace
+ systemStartDelimiter = #'SystemStartBrace
Generic_property_list = #generic-grand-staff-properties
\accepts "Staff"
}
\consists "Vertical_align_engraver"
\consists "Instrument_name_engraver"
- instrument = ##f
- instr = ##f
+ instrument = #'()
+ instr = #'()
verticalAlignmentChildCallback = #Align_interface::fixed_distance_alignment_callback
VerticalAlignment \override #'forced-distance = #12
\consists "Span_bar_engraver"
\consists "Span_arpeggio_engraver"
\consists "Output_property_engraver"
- SystemStartDelimiter = #'SystemStartBracket
+ systemStartDelimiter = #'SystemStartBracket
\consists "System_start_delimiter_engraver"
\accepts "Staff"
soloADue = ##t
splitInterval = #'(0 . 1)
changeMoment = #`(,(make-moment 0 0) . ,(make-moment 1 512))
- SystemStartDelimiter =#'SystemStartBar
- barAuto = ##t
- voltaVisibility = ##t
+ systemStartDelimiter =#'SystemStartBar
+
+
% name, glyph id, clef position
% where is c0 in this clef?
centralCPosition = #-6
automaticPhrasing = ##t
- alignmentReference = #-1 % \down
+
defaultBarType = #"|"
explicitClefVisibility = #all-visible
\consists "Key_performer"
\consists "Tempo_performer"
\consists "Time_signature_performer"
- dynamicStyle = #"dynamic"
+
}
\translator { \StaffContext }
\translator { \StaffContext
$(outdir)/%.latex: %.doc
rm -f $@
- $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --dependencies --outdir=$(outdir) $<
+ $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES)\
+$(LILYPOND_BOOK_FLAGS) --dependencies --outdir=$(outdir) $<
chmod -w $@
# don't do ``cd $(outdir)'', and assume that $(outdir)/.. is the src dir.
# it is not, for --srcdir builds
$(outdir)/%.texi: %.tely
rm -f $@
- $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --dependencies --outdir=$(outdir) --format=texi $<
+ $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --dependencies --outdir=$(outdir) --format=texi $(LILYPOND_BOOK_FLAGS) $<
chmod -w $@
$(outdir)/%.texi: $(outdir)/%.tely
rm -f $@
- $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --dependencies --outdir=$(outdir) --format=texi $<
+ $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --dependencies --outdir=$(outdir) --format=texi $(LILYPOND_BOOK_FLAGS) $<
rm -f $<
chmod -w $@
# for plain info doco: don't run lily
$(outdir)/%.nexi: %.tely
rm -f $@
- $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --dependencies --outdir=$(outdir) --format=texi --no-lily $<
+ $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --dependencies --outdir=$(outdir) --format=texi --no-lily $(LILYPOND_BOOK_FLAGS) $<
mv $(@D)/$(*F).texi $@
chmod -w $@
Begin3
Title: LilyPond
-Version: 1.5.33
-Entered-date: 25FEB02
+Version: 1.5.34
+Entered-date: 27FEB02
Description: @BLURB@
Keywords: music notation typesetting midi fonts engraving
Author: hanwen@cs.uu.nl (Han-Wen Nienhuys)
janneke@gnu.org (Jan Nieuwenhuizen)
Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
- 1000k lilypond-1.5.33.tar.gz
+ 1000k lilypond-1.5.34.tar.gz
Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
- 1000k lilypond-1.5.33.tar.gz
+ 1000k lilypond-1.5.34.tar.gz
Copying-policy: GPL
End
%define name lilypond
-%define version 1.5.33
+%define version 1.5.34
%define release 1mdk
Name: %{name}
%define info yes
Name: lilypond
-Version: 1.5.33
+Version: 1.5.34
Release: 1
License: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.33.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.34.tar.gz
Summary: Create and print music notation
URL: http://www.lilypond.org/
BuildRoot: /tmp/lilypond-install
Distribution: SuSE Linux 7.0 (i386)
Name: lilypond
-Version: 1.5.33
+Version: 1.5.34
Release: 2
Copyright: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.33.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.34.tar.gz
# music notation software for.. ?
Summary: A program for printing sheet music.
URL: http://www.lilypond.org/
(define (number-pair? x)
(and (pair? x) (number? (car x)) (number? (cdr x))))
-
(define (ly-grob? x) #f)
(define (ly-input-location? x) #f)
(define (dir? x) #f)
("||:" . ("||" . "|:"))
("|" . ("|" . ""))
("||:" . ("||" . "|:"))
- ("|s" . (nil . "|"))
+ ("|s" . (() . "|"))
("|:" . ("|" . "|:"))
- ("|." . ("|." . nil))
- (".|" . (nil . ".|"))
- (":|" . (":|" . nil))
- ("||" . ("||" . nil))
- (".|." . (".|." . nil))
+ ("|." . ("|." . ()))
+ (".|" . (() . ".|"))
+ (":|" . (":|" . ()))
+ ("||" . ("||" . ()))
+ (".|." . (".|." . ()))
("" . ("" . ""))
- ("empty" . ("nil" . nil))
- ("brace" . (nil . "brace"))
- ("bracket" . (nil . "bracket"))
+ ("empty" . ("()" . ()))
+ ("brace" . (() . "brace"))
+ ("bracket" . (() . "bracket"))
)
)))
;; See [Wanske] page 126 -- 134, [Ross] pg 143 -- 147
;;
-;; documentme: difference between extra-space and minimum-space
-
-;; documentme: difference between extra-space and minimum-space
+;; documentme: difference between extra-space and minimum-space-pair
;; (Measured in staff space)
(define default-break-align-space-alist
'(
- ((Staff_bar Custos) . (minimum-space 2.0))
- ((Custos begin-of-note) . (minimum-space 0.0))
+ ((Staff_bar Custos) . (minimum-space-pair 2.0))
+ ((Custos begin-of-note) . (minimum-space-pair 0.0))
((none Instrument_name) . (extra-space 1.0))
((Instrument_name Left_edge_item) . (extra-space 1.0))
((Left_edge_item Clef_item) . (extra-space 1.0))
((Left_edge_item Staff_bar) . (extra-space 0.0))
; ((none Left_edge_item) . (extra-space -15.0))
; ((none Left_edge_item) . (extra-space -15.0))
- ((none Clef_item) . (minimum-space 1.0))
- ((none Staff_bar) . (minimum-space 0.0))
- ((none Clef_item) . (minimum-space 1.0))
- ((none Key_item) . (minimum-space 0.5))
+ ((none Clef_item) . (minimum-space-pair 1.0))
+ ((none Staff_bar) . (minimum-space-pair 0.0))
+ ((none Clef_item) . (minimum-space-pair 1.0))
+ ((none Key_item) . (minimum-space-pair 0.5))
((none Time_signature) . (extra-space 0.0))
- ((none begin-of-note) . (minimum-space 1.5))
- ((Clef_item Key_item) . (minimum-space 4.0))
+ ((none begin-of-note) . (minimum-space-pair 1.5))
+ ((Clef_item Key_item) . (minimum-space-pair 4.0))
((Key_item Time_signature) . (extra-space 1.0))
- ((Clef_item Time_signature) . (minimum-space 3.5))
- ((Staff_bar Clef_item) . (minimum-space 1.0))
- ((Clef_item Staff_bar) . (minimum-space 3.7))
- ((Time_signature Staff_bar) . (minimum-space 2.0))
+ ((Clef_item Time_signature) . (minimum-space-pair 3.5))
+ ((Staff_bar Clef_item) . (minimum-space-pair 1.0))
+ ((Clef_item Staff_bar) . (minimum-space-pair 3.7))
+ ((Time_signature Staff_bar) . (minimum-space-pair 2.0))
((Key_item Staff_bar) . (extra-space 1.0))
- ((Staff_bar Time_signature) . (minimum-space 1.5))
+ ((Staff_bar Time_signature) . (minimum-space-pair 1.5))
((Time_signature begin-of-note) . (extra-space 2.0))
((Key_item begin-of-note) . (extra-space 2.5))
((Staff_bar begin-of-note) . (extra-space 1.0))
- ((Clef_item begin-of-note) . (minimum-space 5.0))
- ((Left_edge_item Breathing_sign) . (minimum-space 0.0))
- ((none Breathing_sign) . (minimum-space 0.0))
- ((Breathing_sign Key_item) . (minimum-space 1.5))
- ((Breathing_sign begin-of-note) . (minimum-space 1.0))
- ((Breathing_sign Staff_bar) . (minimum-space 1.5))
- ((Breathing_sign Clef_item) . (minimum-space 2.0))
+ ((Clef_item begin-of-note) . (minimum-space-pair 5.0))
+ ((Left_edge_item Breathing_sign) . (minimum-space-pair 0.0))
+ ((none Breathing_sign) . (minimum-space-pair 0.0))
+ ((Breathing_sign Key_item) . (minimum-space-pair 1.5))
+ ((Breathing_sign begin-of-note) . (minimum-space-pair 1.0))
+ ((Breathing_sign Staff_bar) . (minimum-space-pair 1.5))
+ ((Breathing_sign Clef_item) . (minimum-space-pair 2.0))
)
)
(define (number-pair? x)
(and (pair? x)
(number? (car x)) (number? (cdr x))))
-
+(define (number-or-grob? x)
+ (or (ly-grob? x) (number? x))
+ )
+
(define (moment-pair? x)
(and (pair? x)
(moment? (car x)) (moment? (cdr x))))
(,number-or-string? . "number or string")
(,number-or-boolean? . "number or boolean")
(,markup? . "markup (list or string)")
+ (,number-or-grob? . "number or grob")
))
(let* ( (m (ly-make-music "Music"))
)
(ly-set-mus-property m 'iterator-ctor Push_property_iterator::constructor)
- (ly-set-mus-property m 'symbols 'NoteHead)
+ (ly-set-mus-property m 'symbol 'NoteHead)
(ly-set-mus-property m 'grob-property 'style)
(ly-set-mus-property m 'grob-value t)
m
(meta . ,(grob-description sustain-pedal-interface side-position-interface font-interface))
))
- ;; TODO: should split in 3
(SystemStartBrace . (
- (glyph . brace)
+ (glyph . "brace")
(molecule-callback . ,System_start_delimiter::brew_molecule)
(collapse-height . 5.0)
(font-family . braces)
(SystemStartBracket . (
(Y-extent-callback . #f)
(molecule-callback . ,System_start_delimiter::brew_molecule)
- (glyph . bracket)
+ (glyph . "bracket")
(arch-height . 1.5)
(arch-angle . 50.0)
(arch-thick . 0.25)
(SystemStartBar . (
(Y-extent-callback . #f)
(molecule-callback . ,System_start_delimiter::brew_molecule)
- (glyph . bar-line)
+ (glyph . "bar-line")
(thickness . 1.6)
(after-line-breaking-callback . ,System_start_delimiter::after_line_breaking)
(meta . ,(grob-description system-start-delimiter-interface ))
;; make sure that \property Foo.Bar =\turnOff doesn't complain
-(map (lambda (x) (set-object-property! (car x) 'translator-type? list?))
+(map (lambda (x)
+ ; (display (car x)) (newline)
+
+ (set-object-property! (car x) 'translation-type? list?))
all-grob-descriptions)
(set! all-backend-properties (cons symbol all-backend-properties))
)
-
-
;; put this in an alist?
(grob-property-description 'X-extent-callback procedure? "procedure taking an grob and axis argument, returning a number-pair. The return value is the extent of the grob.")
(grob-property-description 'fraction number-pair? "fraction of a time signature.")
(grob-property-description 'full-size-change boolean? "if set, don't make a change clef smaller.")
-(grob-property-description 'glyph symbol? "a string determining what (style) of glyph is typeset. Valid choices depend on the function that is reading this property. .")
+(grob-property-description 'glyph string? "a string determining what (style) of glyph is typeset. Valid choices depend on the function that is reading this property. .")
(grob-property-description 'glyph-name string? "a name of character within font.")
(grob-property-description 'gap number? "Size of a gap in a variable symbol.")
For barline, space after a thick line.")
(grob-property-description 'layer number? "The output layer [0..2]. The default is 1.")
+
(grob-property-description 'left-padding number? "space left of accs.")
+
(grob-property-description 'length number? "Stem length for unbeamed stems, only for user override.")
(grob-property-description 'lengths list? "Stem length given multiplicity of flag.")
(grob-property-description 'line-count integer? "Number of staff
(grob-property-description 'maximum-duration-for-spacing moment? "space as if a duration of this type is available in this measure.")
(grob-property-description 'maximum-length number? "don't make Grob longer than this")
(grob-property-description 'maximum-rest-count integer? "kill off rests so we don't more than this number left.")
+(grob-property-description 'measure-count integer? "number of measures for a multimeasure rest.")
(grob-property-description 'merge-differently-dotted boolean? " Merge noteheads in collisions, even if they have a different number of dots. This normal notation for some types of polyphonic music. The value of this setting is used by @ref{note-collision-interface} .")
(grob-property-description 'minimum-distance number? "minimum distance between notes and rests.")
(grob-property-description 'minimum-distances list? "list of rods (ie. (OBJ . DIST) pairs).")
FIXME: also pair? (cons LEFT RIGHT)
")
+(grob-property-description 'minimum-space-pair number-pair? "
+? (cons LEFT RIGHT)
+
+")
(grob-property-description 'minimum-width number? "minimum-width of rest symbol, in staffspace.")
(grob-property-description 'molecule-callback procedure? "Function taking grob as argument, returning a Scheme encoded Molecule.")
+(grob-property-description 'molecule molecule? "Cached output of the molecule-callback.")
(grob-property-description 'new-accidentals list? "list of (pitch, accidental) pairs.")
(grob-property-description 'no-spacing-rods boolean? "read from grobs: boolean that makes Separation_item ignore this item (MOVE ME TO ITEM).")
(grob-property-description 'right-padding number? "space right of accs.")
(grob-property-description 'right-trim-amount number? "shortening of the lyric extender on the right.")
(grob-property-description 'script-priority number? "A sorting key that determines in what order a script is within a stack of scripts.")
-(grob-property-description 'self-alignment-X number? "real number: -1 =
+(grob-property-description 'self-alignment-X number-or-grob? "real number: -1 =
left aligned, 0 = center, 1 right-aligned in X direction.
Set to an grob pointer, if you want that grob to be the center.
In this case, the center grob should have this object as a
reference point.
-.")
+
+TODO: revise typing.")
(grob-property-description 'self-alignment-Y number? "like self-alignment-X but for Y axis.")
(grob-property-description 'shortest-playing-duration moment? "duration of the shortest playing in that column.")
(grob-property-description 'shortest-starter-duration moment? "duration of the shortest notes that starts exactly in this column.")
(grob-property-description 'side-relative-direction dir? "if set: get the direction from a different object, and multiply by this.")
-(grob-property-description 'side-support list? "the support, a list of grobs.")
+(grob-property-description 'side-support-elements list? "the support, a list of grobs.")
(grob-property-description 'slope number? "some kind of slope")
(grob-property-description 'slope-limit number? "set slope to zero if slope is running away steeper than this.")
(grob-property-description 'solid boolean? "should porrectus be solidly filled?.")
(grob-property-description 'stacking-dir dir? "stack contents of grobs in which direction ?.")
(grob-property-description 'staff-space number? "Amount of line leading relative to global staffspace.")
(grob-property-description 'staff-position number? "vertical position in staff spaces, counted from the middle line.")
-(grob-property-description 'staff-symbol boolean? "the staff symbol grob that we're in.")
+
(grob-property-description 'staffline-clearance number? "don't get closer than this to stafflines.")
(grob-property-description 'stem ly-grob? "pointer to Stem object.")
(grob-property-description 'stem-attachment-function procedure? "Where
(grob-property-description 'thickness number? "thickness, measured in stafflinethickness.")
(grob-property-description 'thin-kern number? "space after a hair-line.")
(grob-property-description 'forced-distance number? "forced distance for an alignment.")
+
(grob-property-description 'threshold number-pair? "(cons MIN MAX), where MIN and MAX are dimensions in staffspace.")
(grob-property-description 'transparent boolean? "This is almost the
same as setting molecule-callback to #f, but this retains the
(grob-property-description 'y-free number? "minimal vertical gap between slur and noteheads or stems.")
(grob-property-description 'y-offset number? "extra vertical offset for ties away from the center line.")
(grob-property-description 'y number? "set by beam: position of left edge.")
+
+
+;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;; INTERNAL
+
+(grob-property-description 'left-neighbors list? "")
+(grob-property-description 'right-neighbors list? "")
+(grob-property-description 'left-items list? "")
+(grob-property-description 'right-items list? "")
+(grob-property-description 'cause scheme? "Any kind of causation objects (i.e. music, or perhaps translator) that was the cause for this grob. ")
+(grob-property-description 'font font-metric? "Cached font metric object")
+(grob-property-description 'break-alignment-done boolean? "mark flag to signal we've done alignment already.")
+(grob-property-description 'staff-symbol ly-grob? "the staff symbol grob that we're in.")
+(grob-property-description 'collision-done boolean? "")
+(grob-property-description 'rest ly-grob? "the staff symbol grob that we're in.")
+(grob-property-description 'rest-collision ly-grob? "rest collision that a rest is in.")
+
+(grob-property-description 'staff-support boolean? " JUNKME.")
+(grob-property-description 'script-molecule pair? "index code for script.")
+
+(grob-property-description 'accidentals-grob ly-grob? "accidentals for this note.")
#'direction = where to put the victim object (left or right?)
"
'(
- side-support
+ side-support-elements
direction-source
direction
side-relative-direction
;;;;;;;;;;;;;;;;
-(define (make-grob-property-set grobs gprop val)
+(define (make-grob-property-set grob gprop val)
"Make a M-exp that sets GPROP to VAL in GROBS. Does a pop first, i.e.
this is not an override
"
(let* ((m (ly-make-music "Music")))
(ly-set-mus-property m 'iterator-ctor Push_property_iterator::constructor)
- (ly-set-mus-property m 'symbols grobs)
+ (ly-set-mus-property m 'symbol grob)
(ly-set-mus-property m 'grob-property gprop)
(ly-set-mus-property m 'grob-value val)
(ly-set-mus-property m 'pop-first #t)
))
-(define (make-grob-property-revert grobs gprop)
+(define (make-grob-property-revert grob gprop)
+ "Revert the grob property GPROP for GROB."
(let* ((m (ly-make-music "Music")))
(ly-set-mus-property m 'iterator-ctor Pop_property_iterator::constructor)
- (ly-set-mus-property m 'symbols grobs)
+ (ly-set-mus-property m 'symbol grob)
(ly-set-mus-property m 'grob-property gprop)
m
(define (make-voice-props-set n)
(make-sequential-music
- (list
- (make-grob-property-set '(Tie Slur Stem Dots) 'direction
- (if (odd? n) -1 1))
- (make-grob-property-set '(NoteColumn) 'horizontal-shift (quotient n 2))
+ (append
+ (map (lambda (x) (make-grob-property-set x 'direction
+ (if (odd? n) -1 1)))
+ '(Tie Slur Stem Dots))
+ (list (make-grob-property-set 'NoteColumn 'horizontal-shift (quotient n 2)))
)
))
(define (make-voice-props-revert)
(make-sequential-music
(list
- (make-grob-property-revert '(Tie Slur Stem Dots) 'direction)
- (make-grob-property-revert '(NoteColumn) 'horizontal-shift)
+ (make-grob-property-revert 'Tie 'direction)
+ (make-grob-property-revert 'Dots 'direction)
+ (make-grob-property-revert 'Stem 'direction)
+ (make-grob-property-revert 'Slur 'direction)
+ (make-grob-property-revert 'NoteColumn 'horizontal-shift)
))
)
(music-property-description 'iterator-ctor c++-function? "Function to construct music-event-iterator object for this Music")
(music-property-description 'duration duration? "Duration of this note/lyric.")
(music-property-description 'metronome-count number? "How many beats in a minute?")
-(music-property-description 'span-type symbol? "What kind of spanner should be created?")
-(music-property-description 'articulation-type symbol? "key for scriptDefinitions alist")
+(music-property-description 'span-type string? "What kind of spanner should be created?
+
+TODO: consider making type into symbol")
+(music-property-description 'articulation-type string? "key for script definitions alist.
+
+TODO: consider making type into symbol ")
(music-property-description 'bass boolean? "Set if this note is a bass note in a chord")
(music-property-description 'cautionary boolean? "If set, this alteration needs cautionary accidental")
(music-property-description 'change-to-id string? "name of the context to change to ")
(music-property-description 'type symbol? "The type of this music object. Determines iteration in some cases.")
(music-property-description 'repeat-count integer? "do a @code{\repeat} how ofen?")
(music-property-description 'span-direction dir? "Does this start or stop a spanner?")
-(music-property-description 'symbols list? "List of Grob names (symbols) to perform an override/revert on.")
-(music-property-description 'text string? "markup expression to be printed");; markup?
+(music-property-description 'symbol symbol? "Grob name to perform an override/revert on.")
+(music-property-description 'text string? "markup expression to be printed")
+;; markup?
(music-property-description 'tremolo-type integer? "")
-
+(music-property-description 'value scheme? "Assignment value for a
+translation property")
(music-property-description 'what string? "What to change for auto-change. FIXME, naming")
(if (or (equal? (minor-version) "4")
(equal? (minor-version) "3.4"))
- (define-public (ps-output-expression expr)
- (display (eval-in-module expr this-module)))
+ (define-public (ps-output-expression expr port)
+ (display (eval-in-module expr this-module) port))
(define-public (ps-output-expression expr port)
(display (eval expr this-module) port)))
@code{Axis_group_engraver}.
")
+(translator-property-description
+ 'acknowledgeHashTable vector?
+ "Internal variable: store interface to engraver smob table for current context. Don't mess with this."
+ )
(translator-property-description 'aDueText string? "text for begin of a due")
(translator-property-description 'associatedVoice string? "Name of the Voice that has the melody for this LyricsVoice.")
@end table
")
(translator-property-description 'decrescendoSpanner symbol? "Type of spanner to be used for decrescendi. One of: @samp{hairpin}, @samp{line}, @samp{dashed-line}, @samp{dotted-line}. If unset, hairpin type is used.")
+
+(translator-property-description 'dynamicAbsoluteVolumeFunction procedure? "
+[DOCUMENT-ME]
+")
(translator-property-description 'explicitClefVisibility procedure? "visibility-lambda function for clef changes.")
+
+
(translator-property-description 'explicitKeySignatureVisibility
procedure? "visibility-lambda function for explicit Key changes;
\override of #'visibility-lambda will set the visibility for normal
is used to determine the instrument for MIDI output.")
(translator-property-description 'instrumentEqualizer procedure? "[DOCUMENT-ME]")
-
+(translator-property-description 'instrumentSupport list? "
+list of grobs to attach instrument name to.
+")
(translator-property-description 'keyAccidentalOrder list? "
Alist that defines in what order alterations should be printed.
The format is (NAME . ALTER), where NAME is from 0 .. 6 and ALTER from -1, 1.
(translator-property-description 'melismaEngraverBusy boolean? "See @ref{(lilypond)melismaBusy}. This is set automatically.")
(translator-property-description 'midiInstrument string? "Name of the
MIDI instrument to use ")
+(translator-property-description 'midiMinimumVolume number? "[DOCUMENT-ME]")
+(translator-property-description 'midiMaximumVolume number? "[DOCUMENT-ME]")
+
+
(translator-property-description 'noAutoBeaming boolean? "If set to true then beams are not generated automatically.
")
(translator-property-description 'noDirection boolean? "Don't set directions by a2-engraver when part-combining.")
(translator-property-description 'pedalSustainStrings list? "List of string to print for sustain-pedal. Format is
(UP UPDOWN DOWN), where each of the three is the string to print when
this is done with the pedal.")
-(translator-property-description 'pedalUnaCordaStrings string? "see pedalSustainStrings.")
-(translator-property-description 'pedalSostenutoStrings string? "see pedalSustainStrings.")
+(translator-property-description 'pedalUnaCordaStrings list? "see pedalSustainStrings.")
+(translator-property-description 'pedalSostenutoStrings list? "see pedalSustainStrings.")
(translator-property-description 'phrasingPunctuation string? "")
(translator-property-description 'rehearsalMark number-or-string? "")
(translator-property-description 'stz markup? "Abbreviated form for a stanza, see also Stanza property.")
(translator-property-description 'subdivideBeams boolean? "If set, multiple beams will be subdivided at beat
positions - by only drawing one beam over the beat.")
+(translator-property-description 'systemStartDelimiter symbol? "Which grob to make for the start of the system/staff?")
(translator-property-description 'textNonEmpty boolean? " If set
to true then text placed above or below the staff is not assumed to
have zero width. @code{\fatText} and @code{\emptyText} are predefined
conversions.append (((1,3,148), conv, '"(align" -> "(axis", "(rows" -> "(columns"'))
+if 1:
+ def conv (str):
+ str = re.sub ('SystemStartDelimiter', 'systemStartDelimiter', str)
+ return str
+ conversions.append (((1,5,33), conv, 'SystemStartDelimiter -> systemStartDelimiter'))
+
################################
# END OF CONVERSIONS
# g_ is for global (?)
-
+g_extra_opts = ''
g_here_dir = os.getcwd ()
g_dep_prefix = ''
g_outdir = ''
g_read_lys = 0
g_do_pictures = 1
g_num_cols = 1
+
format = ''
g_run_lilypond = 1
no_match = 'a\ba'
('EXT', 'f', 'format', 'set format. EXT is one of texi and latex.'),
('DIM', '', 'default-music-fontsize', 'default fontsize for music. DIM is assumed to be in points'),
('DIM', '', 'default-lilypond-fontsize', 'deprecated, use --default-music-fontsize'),
+ ('OPT', '', 'extra-options' , 'Pass OPT quoted to the lilypond command line'),
('DIM', '', 'force-music-fontsize', 'force fontsize for all inline lilypond. DIM is assumed be to in points'),
('DIM', '', 'force-lilypond-fontsize', 'deprecated, use --force-music-fontsize'),
('DIR', 'I', 'include', 'include path'),
if g_outdir:
lilyopts = lilyopts + '--dep-prefix=' + g_outdir + '/'
texfiles = string.join (tex, ' ')
- system ('lilypond --header=texidoc %s %s' % (lilyopts, texfiles))
+ system ('lilypond --header=texidoc %s %s %s' % (lilyopts, g_extra_opts, texfiles))
#
# Ugh, fixing up dependencies for .tex generation
elif o == '--default-lilypond-fontsize':
print "--default-lilypond-fontsize is deprecated, use --default-music-fontsize"
default_music_fontsize = string.atoi (a)
+ elif o == '--extra-options':
+ g_extra_opts = a
elif o == '--force-music-fontsize':
g_force_lilypond_fontsize = string.atoi(a)
elif o == '--force-lilypond-fontsize':