-
-
-1.4.3.jcn2
-==========
-
-* Included documentatioon and post-flex lexer.cc patch for
-Debian/unstable gcc-3.0.
-
-* Enhanced gcc autoconf and make messages.
-
-* Added -mieee to CFLAGS for alpha.
-
-* Fixed help and documentation of new LilyPond command line.
-
-* Redirected SuSE download to ftp.lilypond.org (where mirror script runs).
-
-1.4.3
-=====
-
-1.4.2.jcn4
-==========
-
-* Windows: bugfix for tex-wrappers, added tex wrapper for dvips.
-LilyPond (read: ly2dvi) should now work right out of the box.
-
-Amazing; it seems that ly2dvi won't generate PK files without this
-dvips wrapper. We had over 200 downloads of setup.exe, yet only one
-`call for help'. Did all the others give up, or did none of them
-bother to share their fix/file a bug report? Urg.
-
-* Included mktexnam.patch (again?).
-
-* Documentation fix (Mark Hindley).
-
-* Debian patch and bashism fix (Anthony).
-
-* Bugfix: local-install should depend on $(INSTALLATION_FILES). This fixes
-./configure; make install in buildscripts/ (Michael Vanier).
-
-* Removed les-nereides from short-examples, as it is tweaked a lot,
-contrary to what the webpage claims (didn't know that).
-
-1.4.2.mb1
-==========
-
-* ly2dvi, titledefs.tex: Typeset copyright notice at the bottom of the
-first page. Make separate page styles for first and last page.
-
-* Bugfix: Default RehearsalMark font-family changed to roman (only
-affects Scheme text markups).
-
-1.4.2.hwn1
-==========
-
-* Added support for Q: statement to abc2ly. (Laura Conrad)
-
-* Tie shape bugfix (Mark Hindley).
-
-* Bugfix: lilypond-book LatexPaper.__setattr__()
-
-* Bugfix: make Hyphen_spanner::brew_molecule() more robust.
-
-* Don't use stdin when no argument specified.
-
-* Naming smobs -> grobs
-
-* Bugfix: ledger lines on easy-notation note heads.
-
-1.4.2
+1.5.0
=====
-* Glossary fixes (Thanks Jean-Pierre Coulon).
-
-1.4.1.jcn3
-==========
-
-* Updated les-nereides.
+* experimental grace notes:
+ - add grace timing to Moment
+ - hack to Sequential_music_iterator to use the correct timing for
+the note before a grace
+ - change the implementation of \grace construct
+ - property set/unset (eg. font size) is done through startGraceMusic
+and stopGraceMusic
+ - various engraver fixes to deal with the fact that the
+main-time-moment may remain the same during several steps.
+ - Change column creation logic in score-engraver.
-* Added \newpage command.
+* Bugfix: don't crash when \name not set in \translator block.
-* Doco fixes.
+* rename ly/*.ly to ly/*-init.ly (except language files) to avoid
+name clashes
-* Debian make fix.
+* deprecate Property_engraver, add Font_size_engraver to Staff, Voice
+and Thread.
-* Fix for index, small doco fixes.
+* Change mailing list address: *gnu-music*@gnu.org becomes
+*lilypond*@gnu.org
-* Bugfix: use roman font (instead of feta) for unacorda pedal.
+* Put span-bar lines only between the other barlines, not on top of
+them (thanks to Juergen Reuter)
-* Don't use cyclic symlinks for web doc.
-
-* Don't create `empty pngs' with touch, make symlinks instead.
-
-* Added extra header titling fields to ly2dvi too.
-
-1.4.1.mb2
-=========
-
-* documentation fixes
-
-* Add make rule to avoid problems building dvi documentation
-
-* Documentation fixes
-
-* Bugfix: tuplet-number-visibility
-
-1.4.1.hwn1
-==========
-
-* Do not lengthen the stem in case of a collision with the flag, but
-move dots to the right.
-
-* Debian patches (Thanks, Anthony!)
-
-1.4.1
-=====
-
-1.4.0.jcn7
+1.4.4.jcn3
==========
+
+TODO: look at other filledbox'es (stafflines and barlines don't match up).
-* Added \tupletUp, \tupletDown, \tupletBoth.
-
-* Bugfix convert-ly: treCorde.
-
-* Slur attachment and extremity offsets taken relative to slur
-direction; so that
-
- Slur \override #'attachment-offset = #'((0 . 1) . (0 . 1))
-
-will always make the slur move away from the note head.
-
-* Bugfix: slurs on dotted or flagged notes.
-
-* Added @reng, @rgrob, and @rint macros for referencing engravers,
-grobs and interfaces in documentation.
-
-* Bugfix for configure.
-
-* text2html: use python script, use <pre> instead of <xmp>.
-
-* Fixed pa.ly.
-
-* Bugfix: lilypond mode: make view messages scroll by.
-
-* configure: check for splitting makeinfo; small fixes for
-non-splitting makeinfo doc.
-
-* Added some missing titling (dedication, translator) and fixed ps titling
-(Thanks David Arnold).
-
-* More doco fixes. Added a small legend.
-
-* Bugfix: trend of broken slurs with user-overridden stem attachments.
-
-* Bugfix redhat.spec: use root attributes on files.
-
-* Bugfix: typo in update-lily, re-set download url to /development.
-
-* Removed some empty files.
-
-* Merged tutorials. Simplified the text.
-
-* Small doco fixes.
-
-1.4.0.uu1
-=========
-
-* Bugfix: percussion clef
-
-* Bugfix: multiple scripts.
+* Testing code off by default. On: -e "(define ps-testing 1)" -fps
-* Bugfix: read TeX's afm files. Metrics are still messed up (too small), but no
-crash.
+* Output via TeX/dvips still gives problems. Use direct postscript
+output for real testing.
-* Bugfix: fixed the problem where dots clash with other notes (Timothy S.
-Nelson)
+* Beam and stem fixes:
+ - Stems drawn in PostScript (should do all filledbox'es in PS?).
+ - Fixes for draw_box and draw_beam PostScript routines.
+ - Stems reach to top (or bottom) of beam.
+ - Beam uses correct stem thickness (only right beams, left TODO).
+ - testing code in effect: only outlines are drawn.
* PO updates.
* petite-ouverture-a-danser.ly bugfix, twinkle.ly bugfix
-V
+
1.3.153
=======
* Add a check for regular identifiers to parser.
-1.3.145
+1.3.146
=======
* Make and ly2dvi fixes.
--- /dev/null
+1.4.2.jcn4
+==========
+
+* Windows: bugfix for tex-wrappers, added tex wrapper for dvips.
+LilyPond (read: ly2dvi) should now work right out of the box.
+
+Amazing; it seems that ly2dvi won't generate PK files without this
+dvips wrapper. We had over 200 downloads of setup.exe, yet only one
+`call for help'. Did all the others give up, or did none of them
+bother to share their fix/file a bug report? Urg.
+
+* Included mktexnam.patch (again?).
+
+* Documentation fix (Mark Hindley).
+
+* Debian patch and bashism fix (Anthony).
+
+* Bugfix: local-install should depend on $(INSTALLATION_FILES). This fixes
+./configure; make install in buildscripts/ (Michael Vanier).
+
+* Removed les-nereides from short-examples, as it is tweaked a lot,
+contrary to what the webpage claims (didn't know that).
+
+1.4.2.mb1
+==========
+
+* ly2dvi, titledefs.tex: Typeset copyright notice at the bottom of the
+first page. Make separate page styles for first and last page.
+
+* Bugfix: Default RehearsalMark font-family changed to roman (only
+affects Scheme text markups).
+
+1.4.2.hwn1
+==========
+
+* Added support for Q: statement to abc2ly. (Laura Conrad)
+
+* Tie shape bugfix (Mark Hindley).
+
+* Bugfix: lilypond-book LatexPaper.__setattr__()
+
+* Bugfix: make Hyphen_spanner::brew_molecule() more robust.
+
+* Don't use stdin when no argument specified.
+
+* Naming smobs -> grobs
+
+* Bugfix: ledger lines on easy-notation note heads.
+
+1.4.2
+=====
+
+* Glossary fixes (Thanks Jean-Pierre Coulon).
+
+1.4.1.jcn3
+==========
+
+* Updated les-nereides.
+
+* Added \newpage command.
+
+* Doco fixes.
+
+* Debian make fix.
+
+* Fix for index, small doco fixes.
+
+* Bugfix: use roman font (instead of feta) for unacorda pedal.
+
+* Don't use cyclic symlinks for web doc.
+
+* Don't create `empty pngs' with touch, make symlinks instead.
+
+* Added extra header titling fields to ly2dvi too.
+
+1.4.1.mb2
+=========
+
+* documentation fixes
+
+* Add make rule to avoid problems building dvi documentation
+
+* Documentation fixes
+
+* Bugfix: tuplet-number-visibility
+
+1.4.1.hwn1
+==========
+
+* Do not lengthen the stem in case of a collision with the flag, but
+move dots to the right.
+
+* Debian patches (Thanks, Anthony!)
+
+1.4.1
+=====
+
+1.4.0.jcn7
+==========
+
+* Added \tupletUp, \tupletDown, \tupletBoth.
+
+* Bugfix convert-ly: treCorde.
+
+* Slur attachment and extremity offsets taken relative to slur
+direction; so that
+
+ Slur \override #'attachment-offset = #'((0 . 1) . (0 . 1))
+
+will always make the slur move away from the note head.
+
+* Bugfix: slurs on dotted or flagged notes.
+
+* Added @reng, @rgrob, and @rint macros for referencing engravers,
+grobs and interfaces in documentation.
+
+* Bugfix for configure.
+
+* text2html: use python script, use <pre> instead of <xmp>.
+
+* Fixed pa.ly.
+
+* Bugfix: lilypond mode: make view messages scroll by.
+
+* configure: check for splitting makeinfo; small fixes for
+non-splitting makeinfo doc.
+
+* Added some missing titling (dedication, translator) and fixed ps titling
+(Thanks David Arnold).
+
+* More doco fixes. Added a small legend.
+
+* Bugfix: trend of broken slurs with user-overridden stem attachments.
+
+* Bugfix redhat.spec: use root attributes on files.
+
+* Bugfix: typo in update-lily, re-set download url to /development.
+
+* Removed some empty files.
+
+* Merged tutorials. Simplified the text.
+
+* Small doco fixes.
+
+1.4.0.uu1
+=========
+
+* Bugfix: percussion clef
+
+* Bugfix: multiple scripts.
+
+* Bugfix: read TeX's afm files. Metrics are still messed up (too small), but no
+crash.
+
+* Bugfix: fixed the problem where dots clash with other notes (Timothy S.
+Nelson)
+
@lilypondfile[printfilename]{bar-number.ly}
+@lilypondfile[printfilename]{span-bar.ly}
+
@lilypondfile[printfilename]{bar-scripts.ly}
@lilypondfile[printfilename]{staff-margin.ly}
@subsection I'm stuck, HELP!
Please read the
-@uref{http://appel.lilypond.org/wiki?LilyPondFaqs, full online
+@uref{http://lilypond.org/wiki?LilyPondFaqs, full online
FAQs}. Also, please look in the searchable mailinglist archives:
@itemize @bullet
@section Problems
-For help and questions use @email{help-gnu-music@@gnu.org} and
-@email{gnu-music-discuss@@gnu.org}. Please consult the FAQ before
-mailing your problems. If you find bugs, please send bug reports to
-@email{bug-gnu-music@@gnu.org}.
+For help and questions use @email{lilypond-user@@gnu.org}. Please
+consult the FAQ before mailing your problems. If you find bugs, please
+send bug reports to @email{bug-lilypond@@gnu.org}.
Bugs that are not fault of LilyPond are documented here.
We have the following mailing lists:
@itemize @bullet
-@item @uref{http://mail.gnu.org/mailman/listinfo/info-gnu-music,info-gnu-music@@gnu.org}
+@item @uref{http://mail.gnu.org/mailman/listinfo/info-lilypond,info-lilypond@@gnu.org}
is a low-volume list for information on the GNU Music project.
This list is moderated; ask
@email{drl@@gnu.org, David R. Linn} or
@email{hanwen@@cs.uu.nl, Han-Wen} to send announcements for this
list.
@item
-@uref{http://mail.gnu.org/mailman/listinfo/gnu-music-discuss,gnu-music-discuss@@gnu.org}
- For general discussions concerning LilyPond.
+@uref{http://mail.gnu.org/mailman/listinfo/lilypond-devel,lilypond-devel@@gnu.org}
+ For discussions about developing lilypond, in particular the unstable series.
-@item @uref{http://mail.gnu.org/mailman/listinfo/help-gnu-music,help-gnu-music@@gnu.org}
- For help with using LilyPond.
-@item @uref{http://mail.gnu.org/mailman/listinfo/bug-gnu-music,bug-gnu-music@@gnu.org}
+@item @uref{http://mail.gnu.org/mailman/listinfo/help-lilypond,help-lilypond@@gnu.org}
+ For discussions about using lilypond, in particular the stable series.
+
+@item @uref{http://mail.gnu.org/mailman/listinfo/bug-lilypond,bug-lilypond@@gnu.org}
If you have bugreports, you should send them to this list.
@end itemize
@section Bugs
-Send bug reports to @email{bug-gnu-music@@gnu.org}. For help and
-questions use @email{help-gnu-music@@gnu.org} and
-@email{gnu-music-discuss@@gnu.org}. Please consult the FAQ and
+Send bug reports to @email{bug-lilypond@@gnu.org}. For help and
+questions use @email{help-lilypond@@gnu.org} and
+@email{lilypond-discuss@@gnu.org}. Please consult the FAQ and
installation instructions before mailing your problems.
@end itemize
-You can send the report to @email{bug-gnu-music@@gnu.org}. This is a
+You can send the report to @email{bug-lilypondg@@gnu.org}. This is a
mailinglist, but you don't have to be subscribed to it. You may also
enter the bug in the LilyPond wiki, at
@uref{http://www.lilypond.org/wiki?LilyPondBugs}.
@code{convert-ly} is written in @uref{http://www.python.org,Python}. It
was written by @email{hanwen@@cs.uu.nl, Han-Wen Nienhuys}. Report bugs
-to @code{bug-gnu-music@@gnu.org}
+to @code{bug-lilypond@@gnu.org}
@end table
-Report bugs to @email{bug-gnu-music@@gnu.org}.
+Report bugs to @email{bug-lilypond@@gnu.org}.
Written by @email{Jan Nieuwenhuizen, janneke@@gnu.org}.
Written by @email{Han-Wen Nienhuys,hanwen@@cs.uu.nl}.
-Report bugs to @email{bug-gnu-music@@gnu.org}.
+Report bugs to @email{bug-lilypond@@gnu.org}.
@node abc2ly
@section abc2ly
Written by @email{Han-Wen Nienhuys,hanwen@@cs.uu.nl}.
@c How about Laura? /MB
-Report bugs to @email{bug-gnu-music@@gnu.org}.
+Report bugs to @email{bug-lilypond@@gnu.org}.
@node pmx2ly
@section pmx2ly
PMX is a MusiXTeX preprocessor written by Don Simons, see
@uref{http://icking-music-archive.sunsite.dk/Misc/Music/musixtex/software/pmx/}.
-Report bugs to @email{bug-gnu-music@@gnu.org}.
+Report bugs to @email{bug-lilypond@@gnu.org}.
@subsection Invoking pmx2ly
version information
@end table
-Report bugs to @email{bug-gnu-music@@gnu.org}.
+Report bugs to @email{bug-lilypond@@gnu.org}.
Written by @email{Han-Wen Nienhuys,hanwen@@cs.uu.nl}.
@var{REFFILE}
@end table
-Report bugs to @email{bug-gnu-music@@gnu.org}.
+Report bugs to @email{bug-lilypond@@gnu.org}.
Written by @email{Han-Wen Nienhuys,hanwen@@cs.uu.nl}.
Written by @email{Jan Nieuwenhuizen,janneke@@gnu.org}, based on pmx2ly.
-Report bugs to @email{bug-gnu-music@@gnu.org}.
+Report bugs to @email{bug-lilypond@@gnu.org}.
@unnumberedsubsec Bugs
Cannot generate @TeX{} or @code{PostScript} only. Send bugreports to to
-@email{bug-gnu-music@@gnu.org}.
+@email{bug-lilypond@@gnu.org}.
@unnumberedsubsec Authors
@example
\property Staff.clefGlyph = @var{glyph associated with clefname}
\property Staff.clefPosition = @var{clef Y-position for clefname}
+ \property Staff.centralCPosition = @var{position for central C}
\property Staff.clefOctavation = @var{extra transposition of clefname}
@end example
@refbugs
+
There is no mechanism to select magnification of particular fonts,
meaning that you don't have access to continuously scaled fonts.
included in LilyPond's source distribution.
@end table
+@subsection Cross compiling
+
These binaries are cross compiled for Windows on a GNU/Linux box. You
may want to check out the
@uref{http://www.lilypond.org/gnu-windows/cross.tar.gz,cross compilation
scripts}.
+@subsection Compiling on Windows
+
+Compiling on Windows should be possible, but how should we now? If you
+have any experiences you want to share, please do so at
+@uref{http://lilypond.org/wiki?CompilingOnWindows,Compiling on Windows}.
+Or write to one of the mailing lists.
@section Windows installation specifics
@subsection Trouble
For problems and solutions see
-@uref{Troubleshooting Windows,http://lilypond.org/TroubleshootingWindows}.
+@uref{http://lilypond.org/wiki?TroubleshootingWindows,Troubleshooting
+Windows}
@subsection Additional software
void invert ();
int num () const { return sign_ * num_; }
int den () const { return den_; }
- int num_i () const { return sign_ * num_; }
- int den_i () const { return den_; }
+
Rational trunc_rat () const;
Rational div_rat (Rational) const;
Rational mod_rat (Rational) const;
--- /dev/null
+\header {
+ texidoc="beam-stem attachment test"
+}
+
+\score {
+ \context RhythmicStaff \notes {
+ \stemUp [c8 c]
+ \stemDown [c8 c]
+ \stemUp [c8. c16]
+ }
+ \paper {
+ linewidth = -1.0
+ magnification = 64
+ }
+}
\ No newline at end of file
--- /dev/null
+\score { \notes {
+ \clef bass
+ <{
+ \grace { [c16 ] }
+ \relative b, b2
+ } >
+}
+}
--- /dev/null
+\header {
+
+texidoc = "Bar line should come before the grace note.";
+}
+
+
+
+
+
+\score {\notes \relative c' \context Staff {
+ f1 \ngrace { [a'16 f] } g1 }
+ \paper { linewidth = -1. }
+ }
--- /dev/null
+\header {
+texidoc = "Pieces may begin with grace notes."
+}
+\score {\notes \relative c' \context Staff {
+ \grace { [a'16 f] } g1
+ \grace { [a16 bes] } c1
+ }
+ \paper { linewidth = -1. }
+}
--- /dev/null
+\header {
+ texidoc = "grace notes in different voices/staffs are synchronized."
+}
+
+\score {\notes < \context Staff { c2
+ \ngrace c8
+ c2 c4 }
+ \context Staff = SB { c2 \clef bass
+ %\ngrace { [dis8 ( d8] }
+
+ ) c2 c4 }
+ \context Staff = SC { c2 c2 c4 }
+ >
+ \paper { linewidth = -1. }
+ }
--- /dev/null
+\header {
+texidoc = "Span bars draw only in between staff bar lines, so setting those to transparent shows bar lines between systems only.
+"
+}
+
+\score {
+ \notes \relative c' \context StaffGroup = groupie <
+ \context Staff = SA { c1 c1 c1}
+ \context Lyrics = LA \lyrics <
+ { bla1 die bla }
+ >
+ \context Staff = SB { a1 a1 a1}
+ \context Lyrics = LB \lyrics <
+ { bla1 die bla }
+ { foo bar foo }
+ >
+ \context Staff = SC { f1 f1 f1}
+ \context Lyrics = LC \lyrics <
+ { bla1 die bla }
+ { foo bar foo }
+ { foo bar foo }
+ >
+ \context Staff = SD { d1 d1 d1}
+ \context Lyrics = LD \lyrics <
+ { bla1 die bla }
+ { foo bar foo }
+ { foo bar foo }
+ { foo bar foo }
+ >
+ >
+ \paper {
+ \translator {
+ \StaffContext
+ BarLine \override #'transparent = ##t
+ }
+ }
+}
--- /dev/null
+\header {
+ texidoc="Document trills, pralls and turns"
+ title="Marques des agr\'ements et leur signification"
+ copyright="(1689)"
+}
+
+\score {
+ <
+ \property Score.TimeSignature = \turnOff
+ \context GrandStaff <
+ \context Staff=upper \notes\relative c'' {
+ \time 1/4
+ c4-\prallprall
+ \time 3/8
+ c4.^"TODO"
+ c4.-\downprall
+ c4.-\upprall
+ \time 5/8
+ c4-\turn c4.-\upprall
+ }
+ \context Lyrics=one \lyrics {
+ "Tremblement"4
+ "Tremblement"4.
+ "Cadence"
+ "autre"
+ "Double"4 "cadence"4.
+ }
+ \context Lyrics=two \lyrics {
+ "simple"4
+ "appuy\'e"4.
+ }
+ \context Staff=lower \notes\relative c'' {
+ % autobeamer has som problems here
+ [\repeat unfold 4 { d32 c }]
+ d8~[\repeat unfold 4 { d32 c }]
+ d32 c b c \repeat unfold 4 { d32 c }
+ b32 c d c \repeat unfold 4 { d32 c }
+ [c32( b a16 b )c] [b32 c d c \repeat unfold 4 { d32 c }]
+ }
+ >
+ >
+}
\ No newline at end of file
Moment one_beat = *unsmob_moment (get_property ("beatLength"));
int num = *unsmob_moment (get_property ("measureLength")) / one_beat;
- int den = one_beat.den_i ();
+ int den = one_beat.den ();
SCM time = gh_list (gh_int2scm (num), gh_int2scm (den), SCM_UNDEFINED);
- SCM type = gh_list (gh_int2scm (test_mom.num_i ()),
- gh_int2scm (test_mom.den_i ()), SCM_UNDEFINED);
+ SCM type = gh_list (gh_int2scm (test_mom.num ()),
+ gh_int2scm (test_mom.den ()), SCM_UNDEFINED);
SCM settings = get_property ("autoBeamSettings");
Moment length = * unsmob_moment (get_property ("measureLength"));
pos = length - pos;
}
- r = pos.mod_rat (moment);
+ r = pos.main_part_.mod_rat (moment.main_part_);
}
else
{
durlog - 2);
stem_l_arr_p_->push (stem_l);
last_add_mom_ = now;
- extend_mom_ = extend_mom_ >? now + rhythmic_req->length_mom ();
+ extend_mom_ = (extend_mom_ >? now) + rhythmic_req->length_mom ();
}
}
}
/*
- Bar_engraver should come *after* any engravers that expect bars to
- modify whichBar in deprecated_process_music () be typeset
+ Bar_engraver should come *after* any engravers that
+ modify whichBar
*/
void
Bar_engraver::create_grobs ()
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
+
+ /*
+ we don't typeset it, (we used to, but it was commented
+ out. Reason unknown) */
beam_p_->suicide ();
delete beam_info_p_;
-#endif
}
}
Real stem_y = calc_stem_y_f (me, s, y, dy);
+ stem_y += Stem::get_direction (s)
+ * gh_scm2double (me->get_grob_property ("thickness")) / 2;
+
/* caution: stem measures in staff-positions */
Real id = me->relative_coordinate (common, Y_AXIS)
- stems[i]->relative_coordinate (common, Y_AXIS);
(prev && ! (prev->relative_coordinate (0, X_AXIS) < here->relative_coordinate (0, X_AXIS))))
programming_error ("Beams are not left-to-right");
- Real staffline_f = me->paper_l ()->get_var ("stafflinethickness");
int multiplicity = get_multiplicity (me);
SCM space_proc = me->get_grob_property ("space-function");
Real interbeam_f = gh_scm2double (space) ;
Real bdy = interbeam_f;
- Real stemdx = staffline_f;
-
+
#if 0
// ugh -> use commonx
Real dx = visible_stem_count (me) ?
Half beam should be one note-width,
but let's make sure two half-beams never touch
*/
- Real w = here->relative_coordinate (0, X_AXIS) - prev->relative_coordinate (0, X_AXIS);
+
+ // FIXME: TODO (check) stem width / sloped beams
+ Real w = here->relative_coordinate (0, X_AXIS)
+ - prev->relative_coordinate (0, X_AXIS);
+ Real stem_w = gh_scm2double (prev->get_grob_property ("thickness"))
+ // URG
+ * me->paper_l ()->get_var ("stafflinethickness");
+
w = w/2 <? nw_f;
Molecule a;
if (lhalfs) // generates warnings if not
- a = Lookup::beam (dydx, w, thick);
+ a = Lookup::beam (dydx, w + stem_w, thick);
a.translate (Offset (-w, -w * dydx));
+ //a.translate_axis (stem_w/2, X_AXIS);
for (int j = 0; j < lhalfs; j++)
{
Molecule b (a);
if (next)
{
- int rhalfs = Stem::beam_count (here,RIGHT) - Stem::beam_count (next,LEFT);
- int rwholebeams= Stem::beam_count (here,RIGHT) <? Stem::beam_count (next,LEFT) ;
+ int rhalfs = Stem::beam_count (here,RIGHT)
+ - Stem::beam_count (next,LEFT);
+ int rwholebeams= Stem::beam_count (here,RIGHT)
+ <? Stem::beam_count (next,LEFT) ;
- Real w = next->relative_coordinate (0, X_AXIS) - here->relative_coordinate (0, X_AXIS);
- Molecule a = Lookup::beam (dydx, w + stemdx, thick);
- a.translate_axis (- stemdx/2, X_AXIS);
+ Real w = next->relative_coordinate (0, X_AXIS)
+ - here->relative_coordinate (0, X_AXIS);
+
+ Real stem_w = gh_scm2double (next->get_grob_property ("thickness"))
+ // URG
+ * me->paper_l ()->get_var ("stafflinethickness");
+
+ Molecule a = Lookup::beam (dydx, w + stem_w, thick);
+ a.translate_axis (- stem_w/2, X_AXIS);
int j = 0;
Real gap_f = 0;
-
+
SCM gap = me->get_grob_property ("gap");
if (gh_number_p (gap))
{
else
gap_f = nw_f / 2;
w -= 2 * gap_f;
- a = Lookup::beam (dydx, w + stemdx, thick);
+ a = Lookup::beam (dydx, w + stem_w, thick);
}
for (; j < rwholebeams; j++)
for (int i=1; i < infos_.size (); i++)
{
- if (infos_[i].start_mom_.den_i () < minden)
+ if (infos_[i].start_mom_.den () < minden)
{
minidx = i;
- minden = infos_[i].start_mom_.den_i ();
+ minden = infos_[i].start_mom_.den ();
}
}
clef_p_->set_grob_property ("non-default", SCM_BOOL_T);
- prev_cpos_ = clefpos;
- prev_glyph_ = glyph;
- prev_octavation_ = octavation;
-
+ prev_cpos_ = clefpos;
+ prev_glyph_ = glyph;
+ prev_octavation_ = octavation;
}
if (to_boolean (force_clef))
{
durlog_i_ = 0;
dots_i_ = 0;
- factor_ = Moment (1,1);
+ factor_ = Rational (1,1);
}
Duration::Duration (int l, int d)
{
durlog_i_ = l;
dots_i_ = d;
- factor_ = Moment (1,1);
+ factor_ = Rational (1,1);
}
Duration
Rational mom (1 << abs (durlog_i_));
if (durlog_i_> 0)
- mom = Moment (1)/mom;
+ mom = Rational (1)/mom;
Rational delta = mom;
for (int d = dots_i_; d; d--)
{
- delta /= Moment (2);
+ delta /= Rational (2);
mom += delta;
}
--- /dev/null
+/*
+ font-size-engraver.cc -- implement
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ */
+
+#include "grob.hh"
+#include "engraver.hh"
+
+class Font_size_engraver : public Engraver
+{
+public:
+ VIRTUAL_COPY_CONS(Translator);
+ Font_size_engraver ();
+protected:
+ virtual void acknowledge_grob (Grob_info gi);
+private:
+};
+
+
+Font_size_engraver::Font_size_engraver ()
+{
+
+}
+
+void
+Font_size_engraver::acknowledge_grob (Grob_info gi)
+{
+ SCM sz = get_property ("fontSize");
+
+ if (gh_number_p (sz)
+ && gh_scm2int (sz)
+ && !gh_number_p (gi.elem_l_->get_grob_property ("font-relative-size")))
+ {
+ gi.elem_l_->set_grob_property ("font-relative-size", sz);
+ }
+}
+
+ADD_THIS_TRANSLATOR(Font_size_engraver);
void
Global_translator::run_iterator_on_me (Music_iterator * iter)
{
+ if (iter-> ok ())
+ prev_mom_ = now_mom_ = iter->pending_moment ();
+
while (iter->ok () || moments_left_i ())
{
Moment w;
if (iter->ok ())
{
w = iter->pending_moment ();
-
}
w = sneaky_insert_extra_moment (w);
Moment
Grace_iterator::pending_moment () const
{
- return 0;
+ return 0;
}
for (int i=1; i < notes_.size (); i++)
shortest_mom = shortest_mom <? notes_[i]->length_mom_;
- Rational grace_fraction_rat (1, 2);
+ Moment grace_fraction_rat (1, 2);
SCM prop = get_property ("graceFraction");
if (unsmob_moment (prop))
grace_fraction_rat = *unsmob_moment (prop);
for (int i=0; i < graces_.size (); i++)
grace_length_mom += graces_[i]->length_mom_;
- Rational grace_factor_rat = delay_mom / grace_length_mom;
+ Moment grace_factor_rat = delay_mom / grace_length_mom;
for (int i=0; i < graces_.size (); i++)
{
int durlog_i_;
int dots_i_;
- Moment factor_;
+ Rational factor_;
};
virtual Moment length_mom () const;
};
+class New_grace_music : public Music_wrapper
+{
+public:
+ VIRTUAL_COPY_CONS (Music);
+ New_grace_music (SCM);
+ New_grace_music ();
+protected:
+ virtual void compress (Moment);
+ virtual Moment length_mom () const;
+};
+
#endif /* GRACE_MUSIC_HH */
/**
Rationals with glue for Guilification;
-
- FIXME: remove self_scm_ and then remove this class */
-class Moment : public Rational
+*/
+class Moment
{
DECLARE_SIMPLE_SMOBS (Moment,);
public:
- Moment () { }
- Moment (int m) : Rational (m) { }
- Moment (int m, int n) : Rational (m,n) { }
- Moment (Rational m) : Rational (m) { }
+ Moment ();
+ Moment (int m);
+ Moment (int m, int n);
+
+ Moment (Rational m);
+
+
+ void operator += (Moment const &m);
+ void operator -= (Moment const &m);
+ void operator *= (Moment const &m);
+ void operator /= (Moment const &m);
+
+ Rational main_part_;
+ Rational grace_mom_;
+
+ void set_infinite (int k);
+
+ operator bool ();
+ int den () const;
+ int num () const;
/*
Deliver a copy of THIS as a smobified SCM
*/
- SCM smobbed_copy () const;
+ SCM smobbed_copy () const;
+ String str () const;
+ static int compare (Moment const&, Moment const&);
};
+IMPLEMENT_ARITHMETIC_OPERATOR (Moment, + );
+IMPLEMENT_ARITHMETIC_OPERATOR (Moment, - );
+IMPLEMENT_ARITHMETIC_OPERATOR (Moment, / );
+IMPLEMENT_ARITHMETIC_OPERATOR (Moment, * );
Moment * unsmob_moment (SCM);
+int compare (Moment const&,Moment const&);
+INSTANTIATE_COMPARE (Moment const&, Moment::compare);
#if 0
-IMPLEMENT_ARITHMETIC_OPERATOR (Moment, / );
-IMPLEMENT_ARITHMETIC_OPERATOR (Moment, * );
-IMPLEMENT_ARITHMETIC_OPERATOR (Moment, + );
-IMPLEMENT_ARITHMETIC_OPERATOR (Moment, - );
IMPLEMENT_ARITHMETIC_OPERATOR (Moment, % );
-INSTANTIATE_COMPARE (Moment const&, Rational::compare);
#endif
#endif /* MOMENT_HH */
Simultaneous_music (SCM);
virtual Pitch to_relative_octave (Pitch);
virtual Moment length_mom () const;
-
+ virtual Moment start_mom () const;
Simultaneous_music ();
};
public:
VIRTUAL_COPY_CONS (Music);
virtual Pitch to_relative_octave (Pitch);
+ virtual Moment start_mom () const;
Request_chord (SCM list);
Request_chord ();
VIRTUAL_COPY_CONS (Music);
Sequential_music (SCM);
virtual Moment length_mom () const;
-
+ virtual Moment start_mom () const;
+
Sequential_music ();
};
int length_i () const;
Moment cumulative_length () const;
Moment maximum_length () const;
+
+ Moment first_start () const;
+ Moment minimum_start () const;
protected:
virtual Pitch to_relative_octave (Pitch);
VIRTUAL_COPY_CONS (Music);
virtual Moment length_mom () const;
+ virtual Moment start_mom () const;
virtual Pitch to_relative_octave (Pitch);
virtual void compress (Moment);
};
/// The duration of this piece of music
virtual Moment length_mom () const;
-
+ virtual Moment start_mom () const;
void print () const;
/// Transpose, with the interval central C to #p#
virtual void transpose (Pitch p);
--- /dev/null
+/*
+ new-grace-iterator.hh -- declare New-Grace_iterator
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1999--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ */
+
+#ifndef NEWGRACE_ITERATOR_HH
+#define NEWGRACE_ITERATOR_HH
+
+#include "music-wrapper-iterator.hh"
+
+class New_grace_iterator : public Music_wrapper_iterator
+{
+public:
+ VIRTUAL_COPY_CONS (Music_iterator);
+ ~New_grace_iterator ();
+ virtual void construct_children () ;
+ virtual void process (Moment);
+ static SCM constructor_cxx_function;
+ Moment pending_moment () const;
+};
+
+
+
+#endif /* GRACE_ITERATOR_HH */
+
+
--- /dev/null
+/*
+ grace-music.hh -- declare Grace_music
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1999--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ */
+
+#ifndef NGRACE_MUSIC_HH
+#define NGRACE_MUSIC_HH
+
+#include "music-wrapper.hh"
+
+class New_grace_music : public Music_wrapper
+{
+public:
+ VIRTUAL_COPY_CONS (Music);
+ New_grace_music (SCM);
+ New_grace_music ();
+protected:
+ virtual void compress (Moment);
+ virtual Moment length_mom () const;
+ virtual Moment start_mom () const;
+};
+
+#endif /* GRACE_MUSIC_HH */
+
Paper_column* command_column_l_;
Paper_column* musical_column_l_;
- void make_columns (Moment);
+ void make_columns ();
void set_columns (Paper_column*,Paper_column*);
void typeset_all ();
#include "music-iterator.hh"
+
+struct Grace_skip
+{
+ Moment start_;
+ Rational length_;
+ Rational grace_length_;
+ Grace_skip *next_;
+};
+
/** Sequential_music iteration: walk each element in turn, and
construct an iterator for every element.
class Sequential_music_iterator : public Music_iterator
{
public:
+ Grace_skip * grace_skips_;
+
VIRTUAL_COPY_CONS (Music_iterator);
static SCM constructor_cxx_function;
Sequential_music_iterator ();
-/*
- spaceable-grob.hh -- declare Spaceable_grob
-
- source file of the GNU LilyPond music typesetter
-
- (c) 2000--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-
- */
-#ifndef SPACEABLE_GROB_HH
-#define SPACEABLE_GROB_HH
-
-#include "lily-guile.hh"
-#include "lily-proto.hh"
-
-struct Spaceable_grob
-{
- /// set a minimum distance
- static void add_rod (Grob*me, Grob * to, Real distance);
- static void add_spring (Grob*me,Grob * to, Real dist, Real strength);
- static void set_interface (Grob*);
- static void remove_interface (Grob*);
- static SCM get_minimum_distances (Grob*);
- static SCM get_ideal_distances (Grob*);
-};
-
-#endif /* SPACEABLE_GROB_HH */
+#error
--- /dev/null
+/*
+ spaceable-grob.hh -- declare Spaceable_grob
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 2000--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ */
+
+#ifndef SPACEABLE_GROB_HH
+#define SPACEABLE_GROB_HH
+
+#include "lily-guile.hh"
+#include "lily-proto.hh"
+
+struct Spaceable_grob
+{
+ /// set a minimum distance
+ static void add_rod (Grob*me, Grob * to, Real distance);
+ static void add_spring (Grob*me,Grob * to, Real dist, Real strength);
+ static void set_interface (Grob*);
+ static void remove_interface (Grob*);
+ static SCM get_minimum_distances (Grob*);
+ static SCM get_ideal_distances (Grob*);
+};
+
+#endif /* SPACEABLE_GROB_HH */
+
public:
Moment measure_position () const;
- Moment measure_length () const;
-
+ Rational measure_length () const;
};
#endif // TIMING_TRANSLATOR_HH
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")},
/* another bug in option parser: --output=foe is taken as an abbreviation
for --output-format */
cout << endl;
- cout << _f ("Report bugs to %s", "bug-gnu-music@gnu.org") << endl;
+ cout << _f ("Report bugs to %s", "bug-lilypond@gnu.org") << endl;
}
void
String
Midi_time_signature::str () const
{
- int num_i = audio_l_->beats_i_;
- int den_i = audio_l_->one_beat_i_;
+ int num = audio_l_->beats_i_;
+ int den = audio_l_->one_beat_i_;
String str = "ff5804";
- str += String_convert::i2hex_str (num_i, 2, '0');
- str += String_convert::i2hex_str (intlog2 (den_i) , 2, '0');
+ str += String_convert::i2hex_str (num, 2, '0');
+ str += String_convert::i2hex_str (intlog2 (den) , 2, '0');
str += String_convert::i2hex_str (clocks_per_1_i_, 2, '0');
str += String_convert::i2hex_str (8, 2, '0');
return String_convert::hex2bin_str (str);
#include "string.hh"
#include "molecule.hh"
#include "debug.hh"
-#include "killing-cons.tcc"
+
#include "ly-smobs.icc"
return (*m1 == *m2) ? SCM_BOOL_T : SCM_BOOL_F;
}
+/****************************************************************/
+
+int
+compare (Moment const &a, Moment const &b)
+{
+ return Moment::compare (a,b);
+}
+
+int
+Moment::compare (Moment const &a, Moment const &b)
+{
+ int c = Rational::compare (a.main_part_,b.main_part_);
+ if (c)
+ return c;
+
+ return Rational::compare (a.grace_mom_, b.grace_mom_);
+}
+
+Moment::Moment ()
+{
+
+}
+
+Moment::Moment (int m)
+{
+ main_part_ = Rational(m);
+ grace_mom_ = Rational( 0);
+}
+
+Moment::Moment (int m, int n)
+{
+ main_part_ = Rational (m,n);
+ grace_mom_ = Rational (0);
+}
+
+Moment::Moment (Rational m)
+{
+ main_part_ = m;
+ grace_mom_ = Rational (0);
+}
+
+void
+Moment::operator += (Moment const &src)
+{
+ main_part_ +=src.main_part_ ;
+ grace_mom_ += src.grace_mom_;
+}
+void
+Moment::operator -= (Moment const &src)
+{
+ main_part_ -= src.main_part_ ;
+ grace_mom_ -= src.grace_mom_;
+}
+
+/*
+ only take the main part of SRC for multiplication.
+ */
+void
+Moment::operator *= (Moment const &src)
+{
+ main_part_ *= src.main_part_ ;
+ grace_mom_ *= src.main_part_;
+}
+
+/*
+ only take the main part of SRC for multiplication.
+ */
+void
+Moment::operator /= (Moment const &src)
+{
+ main_part_ /= src.main_part_ ;
+ grace_mom_ /= src.main_part_;
+}
+
+
+#if 0
+Moment::operator Rational()
+{
+ return main_part_;
+}
+#endif
+
+int
+Moment::den () const { return main_part_.den (); }
+
+int
+Moment::num () const { return main_part_.num (); }
+
+
+Moment::operator bool ()
+{
+ return main_part_ || grace_mom_;
+}
+
+void
+Moment::set_infinite (int k)
+{
+ main_part_.set_infinite (k);
+}
+
+
+String
+Moment::str () const
+{
+ return main_part_.str ();
+}
-/*
- music-list.cc -- implement Music_sequence, Simultaneous_music, Sequential_music
- source file of the GNU LilyPond music typesetter
-
- (c) 1997--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-*/
-
-#include "music-list.hh"
-#include "music-wrapper.hh"
-#include "pitch.hh"
-#include "request.hh"
-#include "musical-request.hh"
-#include "music-iterator.hh"
-#include "main.hh"
-#include "killing-cons.tcc"
-#include "simultaneous-music-iterator.hh"
-#include "sequential-music-iterator.hh"
-#include "request-chord-iterator.hh"
-
-Moment
-Simultaneous_music::length_mom () const
-{
- return maximum_length ();
-}
-
-Simultaneous_music::Simultaneous_music (SCM head)
- : Music_sequence (head)
-{
- set_mus_property ("iterator-ctor",
- Simultaneous_music_iterator::constructor_cxx_function);
-}
-
-Simultaneous_music::Simultaneous_music ()
- : Music_sequence ()
-{
- set_mus_property ("iterator-ctor",
- Simultaneous_music_iterator::constructor_cxx_function);
-
-}
-
-Sequential_music::Sequential_music (SCM head)
- : Music_sequence (head)
-{
- set_mus_property ("iterator-ctor",
- Sequential_music_iterator::constructor_cxx_function);
-}
-Sequential_music::Sequential_music ()
- : Music_sequence ()
-{
- set_mus_property ("iterator-ctor",
- Sequential_music_iterator::constructor_cxx_function);
-}
-
-
-Moment
-Sequential_music::length_mom () const
-{
- return cumulative_length ();
-}
-
-Pitch
-Simultaneous_music::to_relative_octave (Pitch p)
-{
- return do_relative_octave (p, true);
-}
-
-Request_chord::Request_chord (SCM s)
- : Simultaneous_music (s)
-{
- set_mus_property ("iterator-ctor",
- Request_chord_iterator::constructor_cxx_function);
-}
-
-Request_chord::Request_chord ()
-{
- set_mus_property ("iterator-ctor",
- Request_chord_iterator::constructor_cxx_function);
-}
-
-Pitch
-Request_chord::to_relative_octave (Pitch last)
-{
- for (SCM s = music_list (); gh_pair_p (s); s = gh_cdr (s))
- {
- Music * mus = unsmob_music (gh_car (s));
- if (Melodic_req *m= dynamic_cast <Melodic_req *> (mus))
- {
- Pitch pit = *unsmob_pitch (m->get_mus_property ("pitch"));
-
- pit.to_relative_octave (last);
- m->set_mus_property ("pitch", pit.smobbed_copy ());
-
- return pit;
- }
- }
- return last;
-}
-
-
-
-ADD_MUSIC (Simultaneous_music);
-ADD_MUSIC (Sequential_music);
-ADD_MUSIC (Request_chord);
Translator_def *tp = unsmob_translator_def (transdef);
assert (tp);
- String s = ly_scm2string (tp->type_name_);
+
+ String s;
+ if (gh_string_p (tp->type_name_))
+ s = ly_scm2string (tp->type_name_);
+
translator_p_dict_p_->set (s, transdef);
}
int
Music_output_def::print_smob (SCM s, SCM p, scm_print_state *)
{
- scm_puts ("#<Music_output_def>", p);
+ Translator_def * def = unsmob_translator_def (s);
+ scm_puts ("#<Music_output_def ", p);
+ scm_write (def->type_name_, p);
+ scm_puts (">", p);
return 1;
}
Moment
Music_sequence::cumulative_length () const
{
- Moment last=0;
+ Moment cumulative;
+
+ Moment last_len ;
for (SCM s = music_list (); gh_pair_p (s); s = gh_cdr (s))
- last += unsmob_music (gh_car (s))->length_mom ();
- return last;
+ {
+ Moment l = unsmob_music (gh_car (s))->length_mom ();
+ if (last_len.grace_mom_ && l.main_part_)
+ {
+ last_len.grace_mom_ = Rational (0);
+ }
+ cumulative += last_len;
+ last_len = l;
+ }
+
+ last_len.grace_mom_ = Rational (0);
+ cumulative += last_len;
+
+ return cumulative;
}
Pitch
{
}
+
+Moment
+Music_sequence::minimum_start () const
+{
+ Moment m;
+
+ for (SCM s = music_list (); gh_pair_p (s); s = gh_cdr (s))
+ {
+ m = m <? unsmob_music (gh_car (s))->start_mom ();
+ }
+ return m;
+}
+
+Moment
+Music_sequence::first_start () const
+{
+ Moment m;
+
+ for (SCM s = music_list (); gh_pair_p (s); s = gh_cdr (s))
+ {
+ Music * mus = unsmob_music (gh_car (s));
+ Moment l = mus->length_mom ();
+
+ if (l.main_part_)
+ return mus->start_mom ();
+ else if (l.grace_mom_)
+ {
+ m.grace_mom_ = - l.grace_mom_;
+ return m;
+ }
+ }
+ return m;
+}
+
{
}
+
+Moment
+Music_wrapper::start_mom () const
+{
+ return element ()->start_mom ();
+}
return 0;
}
+Moment
+Music::start_mom () const
+{
+ Moment m ;
+ return m;
+}
+
void
print_alist (SCM a, SCM port)
{
{
Duration *d = unsmob_duration (get_mus_property ("duration"));
- set_mus_property ("duration", d ->compressed (m).smobbed_copy ());
+ set_mus_property ("duration", d ->compressed (m.main_part_).smobbed_copy ());
}
bool
{"elementdescriptions", ELEMENTDESCRIPTIONS},
{"font", FONT},
{"grace", GRACE},
+ {"ngrace", NGRACE},
{"glissando", GLISSANDO},
{"header", HEADER},
{"in", IN_T},
--- /dev/null
+/*
+ new-grace-music.cc -- implement New-Grace_music
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1999--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ */
+
+#include "new-grace-music.hh"
+#include "new-grace-iterator.hh"
+
+#include "grace-iterator.hh"
+#include "global-translator.hh"
+#include "warn.hh"
+
+
+New_grace_iterator::~New_grace_iterator ()
+{
+ // child_iter_p_ = 0;
+}
+
+
+void
+New_grace_iterator::process (Moment m )
+{
+ Moment main ;
+ main.main_part_ = m.grace_mom_;
+ Music_wrapper_iterator::process (main);
+}
+
+void
+New_grace_iterator::construct_children ()
+{
+ Music_wrapper_iterator::construct_children ();
+}
+
+
+
+Moment
+New_grace_iterator::pending_moment () const
+{
+ Moment cp =Music_wrapper_iterator::pending_moment();
+
+ Moment pending;
+ pending.grace_mom_ = - music_length_.main_part_ + cp.main_part_;
+
+ return pending;
+}
+
+
+IMPLEMENT_CTOR_CALLBACK (New_grace_iterator);
--- /dev/null
+/*
+ grace-music.cc -- implement New_grace_music
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1999--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ */
+
+#include "new-grace-music.hh"
+#include "new-grace-iterator.hh"
+
+void
+New_grace_music::compress (Moment m)
+{
+ Music_wrapper::compress (m);
+}
+
+Moment
+New_grace_music::length_mom () const
+{
+ Moment l = Music_wrapper::length_mom ();
+ Moment gl;
+ gl.grace_mom_ = l.main_part_ + l.grace_mom_ ;
+ return gl;
+}
+
+
+Moment
+New_grace_music::start_mom () const
+{
+ return Music::start_mom ();
+}
+
+New_grace_music::New_grace_music ()
+{
+ set_mus_property ("iterator-ctor",
+ New_grace_iterator::constructor_cxx_function);
+}
+
+New_grace_music::New_grace_music (SCM p)
+ : Music_wrapper (p)
+{
+ set_mus_property ("iterator-ctor",
+ New_grace_iterator::constructor_cxx_function);
+}
+
+ADD_MUSIC (New_grace_music);
#include "paper-score.hh"
#include "debug.hh"
#include "axis-group-interface.hh"
-#include "spaceable-element.hh"
+#include "spaceable-grob.hh"
void
Paper_column::do_break_processing ()
meas_len = *unsmob_moment (m);
if (body_length_ < meas_len &&
- meas_len.mod_rat (body_length_) == Moment (0,0))
+ meas_len.main_part_.mod_rat (body_length_.main_part_) == Moment (0,0))
repeat_sign_type_ = BEAT;
else if (meas_len == body_length_)
repeat_sign_type_ = MEASURE;
--- /dev/null
+#include "pitch.hh"
+#include "request-chord-iterator.hh"
+#include "music-list.hh"
+#include "musical-request.hh"
+
+Request_chord::Request_chord (SCM s)
+ : Simultaneous_music (s)
+{
+ set_mus_property ("iterator-ctor",
+ Request_chord_iterator::constructor_cxx_function);
+}
+
+Request_chord::Request_chord ()
+{
+ set_mus_property ("iterator-ctor",
+ Request_chord_iterator::constructor_cxx_function);
+}
+
+
+
+Pitch
+Request_chord::to_relative_octave (Pitch last)
+{
+ for (SCM s = music_list (); gh_pair_p (s); s = gh_cdr (s))
+ {
+ Music * mus = unsmob_music (gh_car (s));
+ if (Melodic_req *m= dynamic_cast <Melodic_req *> (mus))
+ {
+ Pitch pit = *unsmob_pitch (m->get_mus_property ("pitch"));
+
+ pit.to_relative_octave (last);
+ m->set_mus_property ("pitch", pit.smobbed_copy ());
+
+ return pit;
+ }
+ }
+ return last;
+}
+
+Moment
+Request_chord::start_mom () const
+{
+ return Music::start_mom ();
+}
+
+
+
+ADD_MUSIC (Request_chord);
#include "paper-column.hh"
#include "debug.hh"
#include "dimensions.hh"
-#include "spaceable-element.hh"
+#include "spaceable-grob.hh"
Rod::Rod ()
{
SCM
set_lily_option (SCM var, SCM val)
{
+ /*
+ Scheme option usage:
+ lilypond -e "(set-lily-option 'help 0)"
+ */
if (var == ly_symbol2scm ("help"))
{
cout << '\n';
cout << _ ("Scheme options:");
- cout << "help";
- cout << "midi-debug (boolean)";
- cout << "testing-level (int)";
+ cout << '\n';
+ cout << " help (any-symbol)";
+ cout << '\n';
+ cout << " midi-debug (boolean)";
+ cout << '\n';
+ cout << " testing-level (int)";
cout << '\n';
exit (0);
}
#include "translator-def.hh"
+/*
+ TODO: the column creation logic is rather hairy. Revise it.
+ */
Score_engraver::Score_engraver ()
{
scoreline_l_ =0;
}
void
-Score_engraver::make_columns (Moment w)
+Score_engraver::make_columns ()
{
/*
ugh.
*/
- if (!command_column_l_
- || *unsmob_moment (command_column_l_->get_grob_property ("when")) != w)
+ if (!command_column_l_)
+ // || *unsmob_moment (command_column_l_->get_grob_property ("when")) != w)
{
set_columns (new Paper_column (get_property (ly_symbol2scm ("NonMusicalPaperColumn"))),
new Paper_column (get_property (ly_symbol2scm ("PaperColumn"))));
- command_column_l_->set_grob_property ("when", w.smobbed_copy ());
- musical_column_l_->set_grob_property ("when", w.smobbed_copy ());
command_column_l_->set_grob_property ("breakable", SCM_BOOL_T);
Grob_info i1 (command_column_l_, 0), i2 (musical_column_l_,0);
Score_engraver::prepare (Moment w)
{
Global_translator::prepare (w);
- make_columns (w);
+ make_columns ();
start_translation_timestep ();
}
check_removal ();
removal_processing ();
+
}
/*
pscore_p_->typeset_line (new Line_of_score (props));
- make_columns (Moment (0));
+ make_columns ();
scoreline_l_ = pscore_p_->line_l_;
-
scoreline_l_->set_bound (LEFT, command_column_l_);
-
command_column_l_->set_grob_property ("breakable", SCM_BOOL_T);
Engraver_group_engraver::initialize ();
Score_engraver::finalize ()
{
Engraver_group_engraver::finalize ();
- scoreline_l_->set_bound (RIGHT,command_column_l_);
- command_column_l_->set_grob_property ("breakable", SCM_BOOL_T);
+
+ Grob * cc
+ = unsmob_grob (get_property (ly_symbol2scm ("currentCommandColumn")));
+ scoreline_l_->set_bound (RIGHT, cc);
+ cc->set_grob_property ("breakable", SCM_BOOL_T);
typeset_all ();
-
- set_columns (0,0);
}
void
if (! (breaks_i_%8))
progress_indication ("[" + to_str (breaks_i_) + "]");
}
+
+ command_column_l_->set_grob_property ("when", now_mom_.smobbed_copy ());
+ musical_column_l_->set_grob_property ("when", now_mom_.smobbed_copy ());
+
+ scoreline_l_->add_column (command_column_l_);
+ scoreline_l_->add_column (musical_column_l_);
+
+ command_column_l_ = 0;
+ musical_column_l_ = 0;
}
void
Score_engraver::set_columns (Paper_column *new_command_l,
Paper_column *new_musical_l)
{
- Paper_column * news[] = {new_command_l, new_musical_l};
- Paper_column **current[] = {&command_column_l_, &musical_column_l_};
-
- for (int i=00; i< 2; i++)
- {
- if (*current[i])
- {
- scoreline_l_->add_column ((*current[i]));
- }
- if (news[i])
- *current[i] = news[i];
- }
-
+ assert (!command_column_l_ && !musical_column_l_);
+ command_column_l_ = new_command_l;
+ musical_column_l_ = new_musical_l;
+
if (new_musical_l)
set_property ("currentMusicalColumn", new_musical_l->self_scm ());
if (new_command_l)
--- /dev/null
+
+#include "music-list.hh"
+#include "sequential-music-iterator.hh"
+
+Sequential_music::Sequential_music (SCM head)
+ : Music_sequence (head)
+{
+ set_mus_property ("iterator-ctor",
+ Sequential_music_iterator::constructor_cxx_function);
+}
+Sequential_music::Sequential_music ()
+ : Music_sequence ()
+{
+ set_mus_property ("iterator-ctor",
+ Sequential_music_iterator::constructor_cxx_function);
+}
+
+
+Moment
+Sequential_music::length_mom () const
+{
+ return cumulative_length ();
+}
+ADD_MUSIC (Sequential_music);
+
+Moment
+Sequential_music::start_mom () const
+{
+ return first_start ();
+}
#include "rod.hh"
#include "warn.hh"
#include "column-x-positions.hh"
-#include "spaceable-element.hh"
+#include "spaceable-grob.hh"
#include "dimensions.hh"
Simple_spacer::Simple_spacer ()
for (int i=0; i < cols.size () - 1; i++)
{
SCM spring_params = SCM_UNDEFINED;
- for (SCM s = Spaceable_grob::get_ideal_distances (cols[i]);
+ for (SCM s = cols[i]->get_grob_property ("ideal-distances");
spring_params == SCM_UNDEFINED && gh_pair_p (s);
s = gh_cdr (s))
{
--- /dev/null
+
+#include "moment.hh"
+#include "pitch.hh"
+#include "simultaneous-music-iterator.hh"
+#include "music-list.hh"
+
+Moment
+Simultaneous_music::length_mom () const
+{
+ return maximum_length ();
+}
+
+Moment
+Simultaneous_music::start_mom () const
+{
+ return minimum_start ();
+}
+
+
+
+Simultaneous_music::Simultaneous_music (SCM head)
+ : Music_sequence (head)
+{
+ set_mus_property ("iterator-ctor",
+ Simultaneous_music_iterator::constructor_cxx_function);
+}
+
+Simultaneous_music::Simultaneous_music ()
+ : Music_sequence ()
+{
+ set_mus_property ("iterator-ctor",
+ Simultaneous_music_iterator::constructor_cxx_function);
+
+}
+
+Pitch
+Simultaneous_music::to_relative_octave (Pitch p)
+{
+ return do_relative_octave (p, true);
+}
+ADD_MUSIC (Simultaneous_music);
--- /dev/null
+/*
+ spaceable-grob.cc -- implement Spaceable_grob
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 2000--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ */
+
+#include "spaceable-grob.hh"
+#include "grob.hh"
+#include "warn.hh"
+
+SCM
+Spaceable_grob::get_minimum_distances (Grob*me)
+{
+ return me->get_grob_property ("minimum-distances");
+}
+
+/*todo: merge code of spring & rod?
+ */
+void
+Spaceable_grob::add_rod (Grob *me , Grob * p, Real d)
+{
+ SCM mins = get_minimum_distances (me);
+ SCM newdist = gh_double2scm (d);
+ for (SCM s = mins; gh_pair_p (s); s = gh_cdr (s))
+ {
+ SCM dist = gh_car (s);
+ if (gh_car (dist) == p->self_scm ())
+ {
+ gh_set_cdr_x (dist, scm_max (gh_cdr (dist),
+ newdist));
+ return ;
+ }
+ }
+
+ mins = gh_cons (gh_cons (p->self_scm (), newdist), mins);
+ me->set_grob_property ("minimum-distances", mins);
+}
+
+void
+Spaceable_grob::add_spring (Grob*me, Grob * p, Real d, Real strength)
+{
+ SCM mins = me->get_grob_property ("ideal-distances");
+ SCM newdist= gh_double2scm (d);
+ for (SCM s = mins; gh_pair_p (s); s = gh_cdr (s))
+ {
+ SCM dist = gh_car (s);
+ if (gh_car (dist) == p->self_scm ())
+ {
+ programming_error ("already have that spring");
+ return ;
+ }
+ }
+ SCM newstrength= gh_double2scm (strength);
+
+ mins = gh_cons (gh_cons (p->self_scm (), gh_cons (newdist, newstrength)), mins);
+ me->set_grob_property ("ideal-distances", mins);
+}
+
+
+
+void
+Spaceable_grob::remove_interface (Grob*me)
+{
+ me->remove_grob_property ("minimum-distances");
+ me->remove_grob_property ("ideal-distances");
+ me->remove_grob_property ("dir-list");
+}
+
+
+void
+Spaceable_grob::set_interface (Grob*me)
+{
+ me->set_interface (ly_symbol2scm ("spaceable-grob-interface"));
+}
Rhythmic_tuple::time_compare (Rhythmic_tuple const &h1,
Rhythmic_tuple const &h2)
{
- return (h1.end_ - h2.end_).sign ();
+ return (h1.end_ - h2.end_).main_part_.sign ();
}
Spacing_engraver::Spacing_engraver ()
{
if (dynamic_cast<Paper_column*> (cols[i])->musical_b ())
{
+ Moment *when = unsmob_moment (cols[i]->get_grob_property ("when"));
+
+ /*
+ ignore grace notes for shortest notes.
+ */
+ if (when && when->grace_mom_)
+ continue;
+
SCM st = cols[i]->get_grob_property ("shortest-starter-duration");
Moment this_shortest = *unsmob_moment (st);
shortest = shortest <? this_shortest;
- if (!mean_shortest.infty_b ())
+ if (!mean_shortest.main_part_.infty_b ())
{
n++;
mean_shortest += this_shortest;
}
mean_shortest /= n;
-
for (int i= 0; i < cols.size () - 1; i++)
{
Item * l = dynamic_cast<Item*> (cols[i]);
Real dist = get_duration_space (me, shortest_playing_len, shortest);
dist *= (double) (delta_t / shortest_playing_len);
+
+
/*
UGH: KLUDGE!
*/
if (delta_t > Moment (1,32))
dist += stem_dir_correction (me, lc,rc);
+
+
+ Moment *lm = unsmob_moment (lc->get_grob_property ("when"));
+ Moment *rm = unsmob_moment (rc->get_grob_property ("when"));
+
+ if (lm && rm)
+ {
+ if (lm->grace_mom_ && rm->grace_mom_)
+ dist *= 0.5;
+ else if (!rm->grace_mom_ && lm->grace_mom_)
+ dist *= 0.7;
+ }
+
+
return dist;
}
{
spanbar_p_ = new Item (get_property ("SpanBar"));
Span_bar::set_interface (spanbar_p_);
-
- spanbar_p_->set_parent (bar_l_arr_[0], Y_AXIS);
spanbar_p_->set_parent (bar_l_arr_[0], X_AXIS);
announce_grob (spanbar_p_,0);
me->add_dependency (b);
}
+MAKE_SCHEME_CALLBACK (Span_bar,brew_molecule,1);
+
+/**
+ * Limitations/Bugs:
+ *
+ * (1) Elements from 'me->get_grob_property ("elements")' must be
+ * ordered according to their y coordinates relative to their common
+ * axis group parent. Otherwise, the computation goes mad. (TODO:
+ * apply a sort algorithm that ensures this precondition.) However,
+ * until now, I have seen no case where lily has not fulfilled this
+ * precondition.
+ *
+ * (2) This method depends on bar_engraver not being removed from
+ * staff context. If bar_engraver is removed, the size of the staff
+ * lines is evaluated as 0, which results in a solid span bar line
+ * with faulty y coordinate.
+ */
+
+/*
+ This routine was originally by Juergen Reuter, but it was a on the
+ bulky side. Rewritten by Han-Wen.
+ */
+SCM
+Span_bar::brew_molecule (SCM smobbed_me)
+{
+ Grob *me = unsmob_grob (smobbed_me);
+ SCM first_elt = me->get_grob_property ("elements");
+
+ // compute common refpoint of elements
+ Grob *refp = me;
+ for (SCM elts = first_elt; gh_pair_p (elts); elts = gh_cdr (elts))
+ {
+ SCM smobbed_staff_bar = gh_car (elts);
+ Grob *staff_bar = unsmob_grob (smobbed_staff_bar);
+ refp = staff_bar->common_refpoint (refp, Y_AXIS);
+ }
+
+ // evaluate glyph
+ Span_bar::evaluate_glyph(me);
+ SCM glyph = me->get_grob_property (ly_symbol2scm ("glyph"));
+ String glyph_str = ly_scm2string (glyph);
+
+ // compose span_bar_mol
+ Molecule span_bar_mol;
+ Grob *prev_staff_bar = 0;
+ for (SCM elts = first_elt; gh_pair_p (elts); elts = gh_cdr (elts))
+ {
+ SCM smobbed_staff_bar = gh_car (elts);
+ Grob *staff_bar = unsmob_grob (smobbed_staff_bar);
+ if (prev_staff_bar)
+ {
+ Interval l(prev_staff_bar->extent (refp, Y_AXIS)[UP],
+ staff_bar->extent (refp, Y_AXIS)[DOWN]);
+
+ Molecule interbar
+ = Bar::compound_barline (staff_bar, glyph_str, l.length());
+ interbar.translate_axis (l.center (), Y_AXIS);
+ span_bar_mol.add_molecule (interbar);
+ }
+ prev_staff_bar = staff_bar;
+ }
+
+ span_bar_mol.translate_axis (- me->relative_coordinate (refp, Y_AXIS), Y_AXIS);
+
+ return span_bar_mol.smobbed_copy ();
+}
+
MAKE_SCHEME_CALLBACK (Span_bar,width_callback,2);
SCM
Span_bar::width_callback (SCM element_smob, SCM scm_axis)
/*
urg.
- */
+ */
Molecule m = Bar::compound_barline (se, gl, 40 PT);
return ly_interval2scm (m.extent (X_AXIS));
/*
no need to call Bar::before_line_breaking (), because the info
in ELEMENTS already has been procced by Bar::before_line_breaking ().
- */
+ */
return SCM_UNSPECIFIED;
}
{
/*
This happens if the bars are hara-kiried from under us.
- */
+ */
me->suicide ();
return gh_double2scm (-1);
}
#include "spring.hh"
#include "debug.hh"
#include "item.hh"
-#include "spaceable-element.hh"
+#include "spaceable-grob.hh"
#include "paper-column.hh"
Spring::Spring ()
Interval stem_y (y1,y2);
stem_y.unite (Interval (y2,y1));
+ // dy?
Real dy = Staff_symbol_referencer::staff_space (me)/2.0;
if (Grob *hed = support_head (me))
if (!invisible_b (me))
{
- Real stem_width = gh_scm2double (me->get_grob_property ("thickness")) * me->paper_l ()->get_var ("stafflinethickness");
+ Real stem_width = gh_scm2double (me->get_grob_property ("thickness"))
+ // URG
+ * me->paper_l ()->get_var ("stafflinethickness");
+
Molecule ss =Lookup::filledbox (Box (Interval (-stem_width/2, stem_width/2),
Interval (stem_y[DOWN]*dy, stem_y[UP]*dy)));
mol.add_molecule (ss);
CHead_melodic_tuple::time_compare (CHead_melodic_tuple const&h1,
CHead_melodic_tuple const &h2)
{
- return (h1.end_ - h2.end_).sign ();
+ return Moment::compare(h1.end_, h2.end_);
}
CNote_melodic_tuple::time_compare (CNote_melodic_tuple const&h1,
CNote_melodic_tuple const &h2)
{
- return (h1.end_ - h2.end_).sign ();
+ return (h1.end_ - h2.end_).main_part_.sign ();
}
Do time bookkeeping
*/
class Timing_engraver : public Timing_translator, public Engraver
-{
+{
protected:
+ /*
+ Needed to know whether we're advancing in grace notes, or not.
+ */
+ Moment last_moment_;
+
virtual void start_translation_timestep ();
virtual void stop_translation_timestep ();
virtual void process_music ();
+
public:
+ Timing_engraver ();
VIRTUAL_COPY_CONS (Translator);
};
+
+Timing_engraver::Timing_engraver ()
+{
+ last_moment_.main_part_ = Rational (-1);
+}
+
ADD_THIS_TRANSLATOR (Timing_engraver);
void
Timing_translator::start_translation_timestep ();
SCM nonauto = get_property ("barNonAuto");
-
+ Moment now = now_mom ();
SCM which = get_property ("whichBar");
+
+ /*
+ Set the first bar of the score?
+ */
if (!gh_string_p (which))
- which = now_mom ()
+ which
+ = (now.main_part_ || now.main_part_ == last_moment_.main_part_)
? SCM_EOL : ly_str02scm ("|");
if (!gh_string_p (which) && !to_boolean (nonauto))
{
SCM always = get_property ("barAlways");
- if (!measure_position ()
- || (to_boolean (always)))
+ Moment mp = measure_position ();
+ if ( (last_moment_.main_part_ != now.main_part_
+ && !mp.main_part_)
+ || (to_boolean (always)))
{
/* should this work, or be junked? See input/bugs/no-bars.ly */
- which=get_property ("defaultBarType");
+ which = get_property ("defaultBarType");
}
}
Timing_engraver::stop_translation_timestep ()
{
Timing_translator::stop_translation_timestep ();
- daddy_trans_l_->set_property ("whichBar", SCM_EOL);
+ daddy_trans_l_->set_property ("whichBar", SCM_EOL);
+ last_moment_ = now_mom ();
}
TODO: change the rest of lily, so communication with
Timing_translator is only done through properties. This means the
class declaration can go here. */
-
bool
Timing_translator::try_music (Music*r)
{
void
Timing_translator::process_music ()
{
- if (check_ && measure_position ())
+ if (check_ && measure_position ().main_part_)
{
check_->origin ()->warning (_f ("barcheck failed at: %s",
measure_position ().str ()));
}
}
-
void
Timing_translator::stop_translation_timestep ()
{
daddy_trans_l_->set_property ("beatLength", Moment (1,4).smobbed_copy ());
}
-Moment
+Rational
Timing_translator::measure_length () const
{
SCM l = get_property ("measureLength");
if (unsmob_moment (l))
- return *unsmob_moment (l);
+ return unsmob_moment (l)->main_part_;
else
- return Moment (1);
+ return Rational (1);
}
-
-
Timing_translator::Timing_translator ()
{
-
}
-
Moment
Timing_translator::measure_position () const
{
if (unsmob_moment (sm))
{
m = *unsmob_moment (sm);
- while (m < Moment (0))
- m += measure_length ();
+ while (m.main_part_ < Rational (0))
+ m.main_part_ += measure_length ();
}
return m;
void
Timing_translator::start_translation_timestep ()
{
- check_ =00;
+ check_ = 0;
Translator *t = this;
Global_translator *global_l =0;
do
SCM cad = get_property ("timing");
bool c= to_boolean (cad);
- Moment len = measure_length ();
- while (c && measposp >= len)
+ Rational len = measure_length ();
+ while (c && measposp.main_part_ >= len)
{
- measposp -= len;
+ measposp.main_part_ -= len;
b ++;
}
#include "debug.hh"
#include "moment.hh"
#include "scm-hash.hh"
-#include "killing-cons.tcc"
#include "translator-def.hh"
Translator_group::Translator_group (Translator_group const&s)
--- /dev/null
+\version "1.3.146"
+% a4.ly
+
+hsize = 210.0 \mm
+vsize = 296.9 \mm
--- /dev/null
+\version "1.3.146"
+% Symbols needed to print accordion music
+%
+% 2' = T
+% 4' = F
+% 8' = E
+% 16' = S
+%
+
+accDiscant = \script "accDiscant"
+accDiscantF = \script "accDiscantF"
+accDiscantE = \script "accDiscantE"
+accDiscantEh = \script "accDiscantEh"
+accDiscantFE = \script "accDiscantFE"
+accDiscantFEh = \script "accDiscantFEh"
+accDiscantEE = \script "accDiscantEE"
+accDiscantFEE = \script "accDiscantFEE"
+accDiscantEEE = \script "accDiscantEEE"
+accDiscantFEEE = \script "accDiscantFEEE"
+accDiscantS = \script "accDiscantS"
+accDiscantFS = \script "accDiscantFS"
+accDiscantES = \script "accDiscantES"
+accDiscantEhS = \script "accDiscantEhS"
+accDiscantFES = \script "accDiscantFES"
+accDiscantFEhS = \script "accDiscantFEhS"
+accDiscantEES = \script "accDiscantEES"
+accDiscantFEES = \script "accDiscantFEES"
+accDiscantEEES = \script "accDiscantEEES"
+accDiscantFEEES = \script "accDiscantFEEES"
+accDiscantSS = \script "accDiscantSS"
+accDiscantESS = \script "accDiscantESS"
+accDiscantEESS = \script "accDiscantEESS"
+accDiscantEEESS = \script "accDiscantEEESS"
+
+accFreebase = \script "accFreebase"
+accFreebaseF = \script "accFreebaseF"
+accFreebaseE = \script "accFreebaseE"
+accFreebaseFE = \script "accFreebaseFE"
+
+accBayanbase = \script "accBayanbase"
+accBayanbaseT = \script "accBayanbaseT"
+accBayanbaseE = \script "accBayanbaseE"
+accBayanbaseTE = \script "accBayanbaseTE"
+accBayanbaseEE = \script "accBayanbaseEE"
+accBayanbaseTEE = \script "accBayanbaseTEE"
+
+accStdbase = \script "accStdbase"
+accStdbaseFE = \script "accStdbaseFE"
+accStdbaseTFE = \script "accStdbaseTFE"
+accStdbaseMES = \script "accStdbaseMES"
+accStdbaseTFMES = \script "accStdbaseTFMES"
+
+accSB = \script "accSB"
+accBB = \script "accBB"
+accOldEE = \script "accOldEE"
+accOldEES = \script "accOldEES"
--- /dev/null
+% Toplevel initialisation file.
+
+\version "1.3.146"
+
+
+\include "declarations-init.ly"
+\include "paper16-init.ly"
+
+ \paper{
+ \paperSixteen
+}
+
+
+\maininput
--- /dev/null
+% Toplevel initialisation file.
+
+\version "1.3.146"
+
+
+\include "declarations-init.ly"
+\include "paper16-init.ly"
+
+ \paper {
+ \paperSixteen
+% linewidth = 7.\cm
+ linewidth = 11.\cm
+}
+
+\maininput
--- /dev/null
+\version "1.3.146"
+
+% urg!
+%
+\chordmodifiers #`(
+ (m . ,(make-pitch 0 2 -1 ))
+ (min . ,(make-pitch 0 2 -1 ))
+ (aug . ,(make-pitch 0 4 1 ))
+ ;; (dim . ,(make-pitch -100 4 -1 ))
+ (dim . ,(make-pitch -100 2 -1 ))
+ ;; urg, not actually a chord-modifier, but it works
+ ;; c7 -> <c bes>, c 7+ -> c b
+ (maj . ,(make-pitch 0 6 1 ))
+ ;; sus4 should delete 2 too...
+ (sus . ,(make-pitch 0 3 0 ))
+)
+
--- /dev/null
+
+\version "1.3.146"
+breve = \duration #(make-duration -1 0)
+longa = \duration #(make-duration -2 0 )
+maxima = \duration #(make-duration -3 0)
+
+\include "nederlands.ly" % dutch
+\include "chord-modifiers-init.ly"
+\include "script-init.ly"
+
+% declarations for standard directions
+left = -1
+right = 1
+up = 1
+down = -1
+start = -1
+stop = 1
+smaller = -1
+bigger = 1
+center=0
+
+break = \penalty #-10000
+noBreak = \penalty #10000
+\include "scale-definitions-init.ly"
+
+melisma = \property Staff.melismaBusy = ##t
+melismaEnd = \property Staff.melismaBusy = ##f
+
+
+\include "engraver-init.ly"
+\include "grace-init.ly"
+
+singleLine = \paper { linewidth = 1. }
+
+% ugh
+\include "midi-init.ly"
+
+papersize = "a4"
+paperfile = \papersize + "-init.ly"
+
+\include "generic-paper-init.ly"
+\include "paper20-init.ly"
+
+
+\include "dynamic-scripts-init.ly"
+\include "spanners-init.ly"
+
+\include "property-init.ly"
+
+
+
+% reset default duration
+unusedEntry = \notes { c4 }
+
+% music = "\melodic\relative c"
+
--- /dev/null
+% GM drum pitches.
+% I use different accidentals to distinguish drums at the same GM pitch.
+% Always accidental 0 (white keys) or 1 (black keys) to get the "correct" gm name.
+% i.e. fis, for closed highat ges, for highat.
+
+% 2001/03/25 Rune Zedeler <rune@zedeler.dk>
+
+
+%% TODO: don't pollute global namespace in this way .
+
+
+#(define drum-pitch-names `(
+ (acousticbassdrum bda ,(make-pitch -3 6 0 ))
+ (bassdrum bd ,(make-pitch -2 0 0 ))
+ (hisidestick ssh ,(make-pitch -3 6 2))
+ (sidestick ss ,(make-pitch -2 0 1))
+ (losidestick ssl ,(make-pitch -2 1 -1))
+ (acousticsnare sna ,(make-pitch -2 1 0))
+ (snare sn ,(make-pitch -2 2 -2))
+ (handclap hc ,(make-pitch -2 1 1))
+ (electricsnare sne ,(make-pitch -2 2 0))
+ (lowfloortom tomfl ,(make-pitch -2 3 0))
+ (closedhihat hhc ,(make-pitch -2 3 1))
+ (hihat hh ,(make-pitch -2 4 -1))
+ (highfloortom tomfh ,(make-pitch -2 4 0))
+ (pedalhihat hhp ,(make-pitch -2 4 1))
+ (lowtom toml ,(make-pitch -2 5 0))
+ (openhihat hho ,(make-pitch -2 5 1))
+ (halfopenhihat hhho ,(make-pitch -2 5 1))
+ (lowmidtom tomml ,(make-pitch -2 6 0))
+ (himidtom tommh ,(make-pitch -1 0 0))
+ (crashcymbala cymca ,(make-pitch -1 0 1))
+ (crashcymbal cymc ,(make-pitch -1 1 -1))
+ (hightom tomh ,(make-pitch -1 1 0))
+ (ridecymbala cymra ,(make-pitch -1 1 1))
+ (ridecymbal cymr ,(make-pitch -1 2 -1))
+ (chinesecymbal cymch ,(make-pitch -1 2 0))
+ (ridebell rb ,(make-pitch -1 3 0))
+ (tambourine tamb ,(make-pitch -1 3 1))
+ (splashcymbal cyms ,(make-pitch -1 4 0))
+ (cowbell cb ,(make-pitch -1 4 1))
+ (crashcymbalb cymcb ,(make-pitch -1 5 0))
+ (vibraslap vibs ,(make-pitch -1 5 1))
+ (ridecymbalb cymrb ,(make-pitch -1 6 0))
+ (hibongo boh ,(make-pitch 0 0 0))
+ (lobongo bol ,(make-pitch 0 0 1))
+ (mutehiconga cghm ,(make-pitch 0 1 0))
+ (openhiconga cgho ,(make-pitch 0 1 1))
+ (hiconga cgh ,(make-pitch 0 2 -1))
+ (openloconga cglo ,(make-pitch 0 1 2))
+ (loconga cgl ,(make-pitch 0 2 0))
+ (hitimbale timh ,(make-pitch 0 3 0))
+ (lotimbale timl ,(make-pitch 0 3 1))
+ (hiagogo agh ,(make-pitch 0 4 0))
+ (loagogo agl ,(make-pitch 0 4 1))
+ (cabasa cab ,(make-pitch 0 5 0))
+ (maracas mar ,(make-pitch 0 5 1))
+ (shortwhistle whs ,(make-pitch 0 6 0))
+ (longwhistle whl ,(make-pitch 1 0 0))
+ (shortguiro guis ,(make-pitch 1 0 1))
+ (longguiro guil ,(make-pitch 1 1 0))
+ (guiro gui ,(make-pitch 1 0 2))
+ (claves cl ,(make-pitch 1 1 1))
+ (hiwoodblock wbh ,(make-pitch 1 2 0))
+ (lowoodblock wbl ,(make-pitch 1 3 0))
+ (mutecuica cuim ,(make-pitch 1 3 1))
+ (opencuica cuio ,(make-pitch 1 4 0))
+ (mutetriangle trim ,(make-pitch 1 4 1))
+ (triangle tri ,(make-pitch 1 4 2))
+ (opentriangle trio ,(make-pitch 1 5 0))
+ ;; "transposing" pitches:
+ (oneup ua ,(make-pitch 0 1 0))
+ (twoup ub ,(make-pitch 0 2 0))
+ (threeup uc ,(make-pitch 0 3 0))
+ (fourup ud ,(make-pitch 0 4 0))
+ (fiveup ue ,(make-pitch 0 5 0))
+ (onedown da ,(make-pitch -1 6 0))
+ (twodown db ,(make-pitch -1 5 0))
+ (threedown dc ,(make-pitch -1 4 0))
+ (fourdown dd ,(make-pitch -1 3 0))
+ (fivedown de ,(make-pitch -1 2 0))
+))
+
+#(define drums `(
+ (acousticbassdrum default ,#f ,(make-pitch -1 4 0))
+ (bassdrum default ,#f ,(make-pitch -1 4 0))
+ (sidestick cross ,#f ,(make-pitch 0 1 0))
+ (acousticsnare default ,#f ,(make-pitch 0 1 0))
+ (snare default ,#f ,(make-pitch 0 1 0))
+ (handclap triangle ,#f ,(make-pitch 0 1 0))
+ (electricsnare default ,#f ,(make-pitch 0 1 0))
+ (lowfloortom default ,#f ,(make-pitch -1 3 0))
+ (closedhihat cross "stopped" ,(make-pitch 0 3 0))
+ (hihat cross ,#f ,(make-pitch 0 3 0))
+ (highfloortom default ,#f ,(make-pitch -1 5 0))
+ (pedalhihat cross ,#f ,(make-pitch -1 2 0))
+ (lowtom default ,#f ,(make-pitch 0 0 0))
+ (openhihat cross "open" ,(make-pitch 0 3 0))
+ (halfopenhihat xcircle ,#f ,(make-pitch 0 3 0))
+ (lowmidtom default ,#f ,(make-pitch 0 1 0))
+ (himidtom default ,#f ,(make-pitch 0 2 0))
+ (crashcymbala xcircle ,#f ,(make-pitch 0 5 0))
+ (crashcymbal xcircle ,#f ,(make-pitch 0 5 0))
+ (hightom default ,#f ,(make-pitch 0 4 0))
+ (ridecymbala cross ,#f ,(make-pitch 0 5 0))
+ (ridecymbal cross ,#f ,(make-pitch 0 5 0))
+ (chinesecymbal mensural ,#f ,(make-pitch 0 5 0))
+ (ridebell default ,#f ,(make-pitch 0 5 0))
+ (splashcymbal diamond ,#f ,(make-pitch 0 5 0))
+ (cowbell triangle ,#f ,(make-pitch 0 5 0))
+ (crashcymbalb cross ,#f ,(make-pitch 0 5 0))
+ (vibraslap diamond ,#f ,(make-pitch 0 4 0))
+ (ridecymbalb cross ,#f ,(make-pitch 0 5 0))
+ ))
+
+#(define timbales `(
+ (losidestick cross ,#f ,(make-pitch -1 6 0))
+ (lotimbale default ,#f ,(make-pitch -1 6 0))
+ (cowbell triangle ,#f ,(make-pitch 0 0 0))
+ (hisidestick cross ,#f ,(make-pitch 0 1 0))
+ (hitimbale default ,#f ,(make-pitch 0 1 0))
+ ))
+
+#(define congas `(
+ (losidestick cross ,#f ,(make-pitch -1 6 0))
+ (loconga default ,#f ,(make-pitch -1 6 0))
+ (openloconga default ,"open" ,(make-pitch -1 6 0))
+ (hisidestick cross ,#f ,(make-pitch 0 1 0))
+ (hiconga default ,#f ,(make-pitch 0 1 0))
+ (openhiconga default "open" ,(make-pitch 0 1 0))
+ (mutehiconga default "stopped" ,(make-pitch 0 1 0))
+
+ ))
+
+#(define bongos `(
+ (lobongo default ,#f ,(make-pitch -1 6 0))
+ (hibongo default ,#f ,(make-pitch 0 1 0))
+ ))
+
+#(define guiro `(
+ (shortguiro default "staccato",(make-pitch 0 0 0))
+ (longguiro default "tenuto" ,(make-pitch 0 0 0))
+ (guiro default ,#f ,(make-pitch 0 0 0))
+ ))
+
+#(define triangle `(
+ (opentriangle cross "open" ,(make-pitch 0 0 0))
+ (mutetriangle cross "stopped" ,(make-pitch 0 0 0))
+ (triangle cross ,#f ,(make-pitch 0 0 0))
+ ))
+
+
+
+\pitchnames
+#(append (map (lambda (x) (cons (car x) (caddr x))) drum-pitch-names)
+ (map (lambda (x) (cons (cadr x) (caddr x))) drum-pitch-names)
+ )
+
+
+\version "1.3.146"
--- /dev/null
+\version "1.3.146"
+
+%
+% declare the standard dynamic identifiers.
+%
+ppppp = \dynamicscript #"ppppp"
+pppp = \dynamicscript #"pppp"
+ppp = \dynamicscript #"ppp"
+pp = \dynamicscript #"pp"
+p = \dynamicscript #"p"
+mp = \dynamicscript #"mp"
+mf = \dynamicscript #"mf"
+f = \dynamicscript #"e" % see feta-din layout
+ff = \dynamicscript #"ff"
+fff = \dynamicscript #"fff"
+ffff = \dynamicscript #"ffff"
+fp = \dynamicscript #"fp"
+
+sf = \dynamicscript #"sf"
+sfp = \dynamicscript #"sfp"
+sff = \dynamicscript #"sff"
+sfz = \dynamicscript #"sfz"
+fz = \dynamicscript #"fz"
+sp = \dynamicscript #"sp"
+spp = \dynamicscript #"spp"
+rfz = \dynamicscript #"rfz"
+
--- /dev/null
+\version "1.3.146"
+
+%
+% setup for Request->Element conversion. Guru-only
+%
+
+StaffContext=\translator {
+ \type "Engraver_group_engraver"
+ \name Staff
+ \consists "Output_property_engraver"
+ Generic_property_list = #generic-staff-properties
+
+ \consists "Bar_engraver"
+ % Bar_engraver must be first so default bars aren't overwritten
+% with empty ones.
+ \consists "Font_size_engraver"
+
+% \consists "Repeat_engraver"
+ \consists "Volta_engraver"
+ \consists "Separating_line_group_engraver"
+
+
+
+ \consists "Clef_engraver"
+ \consists "Key_engraver"
+ \consists "Time_signature_engraver"
+ \consists "Staff_symbol_engraver"
+ \consists "Collision_engraver"
+ \consists "Rest_collision_engraver"
+ \consists "Local_key_engraver"
+ \consists "Piano_pedal_engraver"
+ \consists "Instrument_name_engraver"
+
+ \consistsend "Axis_group_engraver"
+
+ MinimumVerticalExtent = #'(-4 . 4)
+ ExtraVerticalExtent = ##f
+ VerticalExtent = ##f
+
+ % explicitly set instrument, so we don't get
+ % weird effects when doing instrument names for
+ % piano staffs
+
+ instrument = ##f
+ instr = ##f
+
+ \accepts "Voice"
+}
+
+
+StaffContainerContext = \translator {
+ \type Engraver_group_engraver
+ \consists "Axis_group_engraver"
+ MinimumVerticalExtent = ##f
+ ExtraVerticalExtent = ##f
+ VerticalExtent = ##f
+
+ \accepts Staff
+ \name StaffContainer
+}
+
+InnerChoirStaffContext = \translator {
+ \type "Engraver_group_engraver"
+ \name InnerChoirStaff
+ alignmentReference = #0
+ \consists "System_start_delimiter_engraver"
+ SystemStartDelimiter \override #'glyph = #'bracket
+
+ \accepts "Staff"
+ \accepts "RhythmicStaff"
+ \accepts "GrandStaff"
+ \accepts "PianoStaff"
+ \accepts "Lyrics"
+ \accepts "ChordNames"
+}
+ChoirStaffContext = \translator {
+ \InnerChoirStaffContext
+ \name ChoirStaff
+ \accepts "InnerChoirStaff"
+ \accepts "InnerStaffGroup"
+}
+
+
+RhythmicStaffContext=\translator{
+ \type "Engraver_group_engraver"
+
+ \consists "Output_property_engraver"
+
+ Generic_property_list = #generic-staff-properties
+ MinimumVerticalExtent = ##f
+ ExtraVerticalExtent = ##f
+ VerticalExtent = ##f
+
+ \consists "Pitch_squash_engraver"
+ \consists "Separating_line_group_engraver"
+ \name RhythmicStaff
+ \alias "Staff"
+
+ Bar \override #'bar-size = #4
+ VoltaBracket \override #'minimum-space = #15 % urg, in \pt
+ VoltaBracket \override #'padding = #5 % urg, in \pt
+ StaffSymbol \override #'line-count = #1
+
+% \consists "Repeat_engraver"
+ \consists "Volta_engraver"
+ \consists "Bar_engraver"
+ \consists "Time_signature_engraver"
+ \consists "Staff_symbol_engraver"
+ \consistsend "Axis_group_engraver"
+ \accepts "Voice"
+}
+
+
+VoiceContext = \translator {
+ \type "Engraver_group_engraver"
+ \name Voice
+
+ Generic_property_list = #generic-voice-properties
+ \consists "Font_size_engraver"
+
+ % must come before all
+ \consists "Voice_devnull_engraver"
+ \consists "Output_property_engraver"
+ \consists "Arpeggio_engraver"
+ \consists "Multi_measure_rest_engraver"
+ \consists "Text_spanner_engraver"
+
+ \consists "Breathing_sign_engraver"
+ % \consists "Rest_engraver"
+ \consists "Dot_column_engraver"
+ \consists "Stem_engraver"
+ \consists "Beam_engraver"
+ \consists "Auto_beam_engraver"
+
+ \consists "Chord_tremolo_engraver"
+ \consists "Percent_repeat_engraver"
+ \consists "Melisma_engraver"
+
+%{
+ Must come before text_engraver, but after note_column engraver.
+
+%}
+ \consists "Dynamic_engraver"
+ \consists "Text_engraver"
+
+ \consists "Script_engraver"
+ \consists "Script_column_engraver"
+ \consists "Rhythmic_column_engraver"
+ \consists "Phrasing_slur_engraver"
+ \consists "Slur_engraver"
+ \consists "Tie_engraver"
+ \consists "Tuplet_engraver"
+ \consists "A2_engraver"
+
+ \consists "Skip_req_swallow_translator"
+ \accepts Thread % bug if you leave out this!
+}
+
+ThreadContext = \translator{
+ \type Engraver_group_engraver
+ \name Thread
+
+ \consists "Font_size_engraver"
+ \consists "Thread_devnull_engraver"
+ \consists "Note_heads_engraver"
+ \consists "Rest_engraver"
+ \consists "Note_head_line_engraver"
+ \consists "Output_property_engraver"
+ Generic_property_list = #generic-thread-properties
+}
+
+GrandStaffContext=\translator{
+ \type "Engraver_group_engraver"
+ \name GrandStaff
+ \consists "Span_bar_engraver"
+ \consists "Span_arpeggio_engraver"
+ \consists "System_start_delimiter_engraver"
+ SystemStartDelimiter \override #'glyph = #'brace
+
+ Generic_property_list = #generic-grand-staff-properties
+ \accepts "Staff"
+}
+
+PianoStaffContext = \translator{
+ \GrandStaffContext
+ \name "PianoStaff"
+
+ \consists "Vertical_align_engraver"
+ \consists "Instrument_name_engraver"
+
+ instrument = ##f
+ instr = ##f
+
+ verticalAlignmentChildCallback = #Align_interface::fixed_distance_alignment_callback
+ VerticalAlignment \override #'forced-distance = #12
+ VerticalAlignment \override #'self-alignment-Y = #0
+% \consistsend "Axis_group_engraver"
+}
+
+InnerStaffGroupContext= \translator {
+ \type "Engraver_group_engraver"
+ \name InnerStaffGroup
+
+ \consists "Span_bar_engraver"
+ \consists "Span_arpeggio_engraver"
+ \consists "Output_property_engraver"
+ SystemStartDelimiter \override #'glyph = #'bracket
+
+ \consists "System_start_delimiter_engraver"
+ \accepts "Staff"
+ \accepts "RhythmicStaff"
+ \accepts "GrandStaff"
+ \accepts "PianoStaff"
+
+ \accepts "Lyrics"
+ \accepts "ChordNames"
+}
+StaffGroupContext = \translator {
+ \InnerStaffGroupContext
+ \name StaffGroup
+ \accepts "InnerChoirStaff"
+ \accepts "ChoirStaff"
+ \accepts "InnerStaffGroup"
+}
+
+
+% UGH! JUNKME
+LyricsVoiceContext= \translator{
+ \type "Engraver_group_engraver"
+ \consistsend "Axis_group_engraver"
+ MinimumVerticalExtent = #(cons -1.2 1.2)
+ ExtraVerticalExtent = ##f
+ VerticalExtent = ##f
+ \name LyricsVoice
+ \consists "Separating_line_group_engraver"
+ \consists "Lyric_engraver"
+ \consists "Extender_engraver"
+ \consists "Hyphen_engraver"
+ \consists "Stanza_number_engraver"
+ phrasingPunctuation = #".,:!?\""
+
+}
+NoteNamesContext = \translator {
+ \type "Engraver_group_engraver"
+ \name NoteNames
+ \consistsend "Axis_group_engraver"
+
+ MinimumVerticalExtent = ##f
+ ExtraVerticalExtent = ##f
+ VerticalExtent = ##f
+
+
+ \consists "Note_name_engraver"
+ \consists "Separating_line_group_engraver"
+}
+
+LyricsContext = \translator {
+ \type "Engraver_group_engraver"
+ \name Lyrics
+ \consists Vertical_align_engraver %need this for getting folded repeats right.
+ Generic_property_list = #generic-lyrics-properties
+
+ \consistsend "Axis_group_engraver"
+ MinimumVerticalExtent = ##f
+ ExtraVerticalExtent = ##f
+ VerticalExtent = ##f
+
+ \accepts "LyricsVoice"
+}
+
+
+ChordNamesContext = \translator {
+ \type "Engraver_group_engraver"
+ \name ChordNames
+
+ Generic_property_list = #generic-chord-staff-properties
+
+
+ \consists "Output_property_engraver"
+ \consists "Separating_line_group_engraver"
+ \consists "Chord_name_engraver"
+ \consists "Skip_req_swallow_translator"
+ \consistsend "Axis_group_engraver"
+ MinimumVerticalExtent = ##f
+ ExtraVerticalExtent = ##f
+ VerticalExtent = ##f
+
+ VerticalAxisGroup \override #'invisible-staff = ##t
+ }
+
+
+
+StupidScore = \translator {
+ \type "Score_engraver"
+ \name Score
+ \consists "Note_heads_engraver"
+}
+
+
+
+
+HaraKiriStaffContext = \translator {
+ \StaffContext
+ \remove "Axis_group_engraver"
+ \consistsend "Hara_kiri_engraver"
+ \consists "Instrument_name_engraver"
+ \accepts "Voice"
+}
+%{
+ The HaraKiriStaffContexts doesn't override \name,
+ so it is still named `Staff'.
+
+ %\translator { \HaraKiriStaffContext }
+%}
+
+
+
+
+ScoreContext = \translator {
+ \type Score_engraver
+ \name Score
+
+
+ \consists "Repeat_acknowledge_engraver"
+ \consists "Timing_engraver"
+ \consists "Output_property_engraver"
+ \consists "System_start_delimiter_engraver"
+ \consists "Mark_engraver"
+ \consists "Break_align_engraver"
+ \consists "Spacing_engraver"
+ \consists "Vertical_align_engraver"
+
+ \consists "Lyric_phrasing_engraver"
+ \consists "Bar_number_engraver"
+ \consists "Span_arpeggio_engraver"
+
+ \accepts "Staff"
+ \accepts "StaffContainer"
+ \accepts "StaffGroup"
+ \accepts "RhythmicStaff"
+ \accepts "Lyrics"
+ \accepts "ChordNames"
+ \accepts "GrandStaff"
+ \accepts "ChoirStaff"
+ \accepts "PianoStaff"
+ \accepts "NoteNames"
+
+ soloText = #"Solo"
+ soloIIText = #"Solo II"
+ aDueText = #"a2"
+ soloADue = ##t
+ splitInterval = #'(0 . 1)
+ changeMoment = #`(,(make-moment 0 0) . ,(make-moment 1 512))
+
+ barAuto = ##t
+ voltaVisibility = ##t
+ % name, glyph id, clef position
+ % where is c0 in this clef?
+
+ clefGlyph = #"clefs-G"
+ clefPosition = #-2
+ centralCPosition = #-6
+
+ automaticPhrasing = ##t
+ alignmentReference = #-1 % \down
+ defaultBarType = #"|"
+
+ explicitClefVisibility = #all-visible
+ explicitKeySignatureVisibility = #all-visible
+
+ scriptDefinitions = #default-script-alist
+
+ verticalAlignmentChildCallback = #Align_interface::alignment_callback
+
+ pedalSustainStrings = #'("Ped." "*Ped." "*")
+ pedalUnaCordaStrings = #'("una corda" "" "tre corde")
+ pedalSostenutoStrings = #'() % FIXME
+
+ tupletNumberFormatFunction = #denominator-tuplet-formatter
+
+ keyAccidentalOrder = #'(
+ (6 . -1) (2 . -1) (5 . -1 ) (1 . -1) (4 . -1) (0 . -1) (3 . -1)
+ (3 . 1) (0 . 1) (4 . 1) (1 . 1) (5 . 1) (2 . 1) (6 . 1)
+ )
+ breakAlignOrder = #'(
+ Instrument_name
+ Left_edge_item
+ Span_bar
+ Breathing_sign
+ Clef_item
+ Key_item
+ Staff_bar
+ Time_signature
+ Custos
+ )
+
+
+ \elementdescriptions #all-grob-descriptions
+}
+
+OrchestralScoreContext= \translator {
+ \ScoreContext
+}
+EasyNotation = \translator {
+ \ScoreContext
+ NoteHead \override #'molecule-callback = #Note_head::brew_ez_molecule
+ easyPlay = ##t
+}
+
+% retain for compatibility reasons.
+GraceContext = \translator {
+ \type "Engraver_group_engraver"
+}
--- /dev/null
+
+%
+% Running LilyPond on this file generates the short interface doc
+%
+#(eval-string (ly-gulp-file "generate-interface-doc.scm"))
--- /dev/null
+\version "1.3.146"
+
+\paper {
+ texsetting = ""
+ pssetting = ""
+ scmsetting = "(lilyponddefs.ps) findlibfile {exch pop //systemdict /run get exec} { /undefinedfilename signalerror } ifelse\n"% UGH.
+
+}
--- /dev/null
+\version "1.3.148"
+
+% german-chords.ly:
+% german/norwegian/danish?
+
+% To get Bb instead of B, use
+% \include "german-chords.ly"
+% #(set! german-Bb #t)
+
+#(define german-Bb #f)
+
+#(define (pitch->chord-name-text-banter pitch steps)
+ (let ((dopitch (if (member (cdr pitch) '((6 -1) (6 -2)))
+ (list 7 (+ (if german-Bb 0 1) (caddr pitch)))
+ (cdr pitch)
+ )))
+ (cons
+ (list-ref '("C" "D" "E" "F" "G" "A" "H" "B") (car dopitch))
+ (accidental->text-super (cadr dopitch))
+ )
+ )
+ )
+
+
+
+#(define (pitch->note-name-text-banter pitch)
+ (let ((dopitch (if (member (cdr pitch) '((6 -1) (6 -2)))
+ (list 7 (+ 1 (caddr pitch)))
+ (cdr pitch)
+ )))
+ (list
+ (string-append
+ (list-ref '("c" "d" "e" "f" "g" "a" "h" "b") (car dopitch))
+ (if (or (equal? (car dopitch) 2) (equal? (car dopitch) 5))
+ (list-ref '( "ses" "s" "" "is" "isis") (+ 2 (cadr dopitch)))
+ (list-ref '("eses" "es" "" "is" "isis") (+ 2 (cadr dopitch)))
+ )
+ )
+ )
+ )
+ )
--- /dev/null
+
+
+ #(define (grace-beam-space-function multiplicity)
+ (* (if (<= multiplicity 3) 0.816 0.844) 0.8))
+
+
+ #(define (make-text-checker text)
+ (lambda (elt) (equal? text (ly-get-grob-property elt 'text))))
+
+
+startGraceMusic = {
+
+%{
+from GraceContext
+ Stem \override #'flag-style = #"grace"
+ Stem \override #'stem-length = #6.0
+ Stem \override #'direction = #1
+
+ NoteHead \override #'font-relative-size = #-1
+ Stem \override #'font-relative-size = #-1
+ Stem \override #'stem-shorten = #'(0)
+ Beam \override #'font-relative-size = #-1
+ TextScript \override #'font-relative-size = #-1
+ Slur \override #'font-relative-size = #-1
+ Accidentals \override #'font-relative-size = #-1
+ Beam \override #'thickness = #0.3
+ Beam \override #'space-function = #(lambda (x) 0.5)
+
+ Stem \override #'lengths = #(map (lambda (x) (* 0.8 x)) '(3.5 3.5 3.5 4.5 5.0))
+ Stem \override #'beamed-lengths =
+ #'(0.0 2.5 2.0 1.5)
+ Stem \override #'beamed-minimum-lengths
+ = #(map (lambda (x) (* 0.8 x)) '(0.0 2.5 2.0 1.5))
+%}
+
+
+ \property Voice.NoteHead \override #'font-relative-size = #-1
+ \property Voice.Stem \override #'length = #6
+ \property Voice.Stem \override #'beamed-lengths =
+ #(map (lambda (x) (* 1.25 x)) '(0.0 2.5 2.0 1.5))
+ \property Voice.Stem \override #'beamed-minimum-lengths =
+ #(map (lambda (x) (* 1.25 x)) '(0.0 1.5 1.25 1.0))
+ \property Voice.Beam \override #'space-function = #grace-beam-space-function
+ \property Voice.fontSize = #-2
+ \property Voice.Stem \override #'no-stem-extend = ##t
+
+% \property Voice.Stem \override #'flag-style = #"grace"
+}
+
+stopGraceMusic = {
+% \property Voice.Stem \revert #'flag-style
+ \property Voice.Stem \override #'no-stem-extend = ##f
+ \property Voice.Stem \revert #'length
+ \property Voice.Stem \revert #'beamed-lengths
+ \property Voice.Stem \revert #'beamed-minimum-lengths
+ \property Voice.Beam \revert #'space-function
+ \property Voice.fontSize \unset
+}
\version "1.3.146"
-\include "declarations.ly"
+\include "declarations-init.ly"
\maininput
--- /dev/null
+\version "1.3.146"
+
+% ledger.ly
+
+hsize = 11.0 \in
+vsize = 17.0 \in
+
+
--- /dev/null
+\version "1.3.146"
+% legal-init.ly
+
+hsize = 8.5 \in
+vsize = 14.0 \in
--- /dev/null
+\version "1.3.146"
+% letter-init.ly
+
+hsize = 8.5 \in
+vsize = 11.0 \in
+
+
--- /dev/null
+\version "1.3.146"
+\midi {
+ \tempo 4=60
+ \include "performer-init.ly"
+% unfold_all = "1"
+}
+
--- /dev/null
+% paper-as5-init.ly
+
+\version "1.3.146"
+
+paperAsFive = \paper {
+ staffheight = 5.\char
+
+ \stylesheet #(as-make-style-sheet 'as5)
+
+ \translator { \StaffContext barSize = #5 }
+
+ % no beam-slope
+ %\translator { \VoiceContext beamHeight = #0 }
+ \include "params-as-init.ly"
+}
+
+\paper { \paperAsFive }
--- /dev/null
+% paper-as9-init.ly
+
+\version "1.3.146"
+
+paperAsNine = \paper {
+ staffheight = 9.\char
+
+ %\translator { \StaffContext barSize = \staffheight }
+
+ \stylesheet #(as-make-style-sheet 'as9)
+
+ \include "params-as-init.ly"
+
+}
+
+\paper { \paperAsNine }
--- /dev/null
+\version "1.3.146"
+% paper-init.ly
+
+%% Why som complicated? /MB
+%linewidth20 = \hsize - 2.5 * \staffheight
+%textheight20 = \vsize - 5.0 * \staffheight
+%linewidth = \staffheight/20.0 * \linewidth20
+%textheight = \staffheight/20.0 * \textheight20
+
+linewidth = \hsize - 2.\cm
+% Leave the textheight calculation to the geometry package. /MB
+%textheight = \vsize - 4.\cm
+
+indent = \linewidth / 14.0
+
--- /dev/null
+% paper11-init.ly
+
+\version "1.3.146"
+
+paperEleven = \paper {
+ staffheight = 11.0\pt
+ \stylesheet #(make-style-sheet 'paper11)
+
+ \include "params-init.ly"
+}
+
+\paper { \paperEleven }
--- /dev/null
+% paper13-init.ly
+
+\version "1.3.146"
+
+paperThirteen = \paper {
+ staffheight = 13.0\pt
+
+ \stylesheet #(make-style-sheet 'paper13)
+
+ \include "params-init.ly"
+}
+
+\paper { \paperThirteen }
--- /dev/null
+% paper16-init.ly
+
+\version "1.3.146"
+
+paperSixteen = \paper {
+ staffheight = 16.0\pt
+ \stylesheet #(make-style-sheet 'paper16)
+
+ \include "params-init.ly"
+}
+
+\paper {\paperSixteen }
--- /dev/null
+% paper20-init.ly
+
+
+\version "1.3.146"
+
+paperTwenty = \paper {
+ staffheight = 20.0\pt
+ \stylesheet #(make-style-sheet 'paper20)
+
+ \include "params-init.ly"
+}
+
+\paper { \paperTwenty }
--- /dev/null
+% paper23-init.ly
+
+
+\version "1.3.146"
+
+paperTwentythree = \paper {
+ staffheight = 23.0\pt
+ \stylesheet #(make-style-sheet 'paper23)
+ \include "params-init.ly"
+}
+
+\paper { \paperTwentythree }
--- /dev/null
+% paper26-init.ly
+
+\version "1.3.146"
+
+paperTwentysix = \paper {
+ staffheight = 26.0\pt
+ \stylesheet #(make-style-sheet 'paper26)
+
+ \include "params-init.ly"
+}
+
+\paper { \paperTwentysix }
--- /dev/null
+\version "1.3.146"
+% params-as-init.ly
+% generic paper parameters
+
+outputscale = \staffheight / 4.0
+
+linewidth = 60.0 \char
+textheight = 60.0 \char
+indent = 8.0\char
+
+staffspace = (\staffheight - 1.0 ) / 4.0
+stafflinethickness = \staffspace / 2.0
+
+\translator { \NoteNamesContext }
+\translator { \ScoreContext }
+\translator { \ChoirStaffContext }
+\translator { \GraceContext }
+\translator { \RhythmicStaffContext}
+\translator { \StaffContext }
+\translator { \VoiceContext }
+\translator { \StaffGroupContext }
+\translator { \ChordNamesContext }
+\translator { \GrandStaffContext }
+\translator { \LyricsContext }
+\translator { \ThreadContext }
+\translator { \PianoStaffContext }
+\translator { \LyricsVoiceContext }
+\translator { \StaffContainerContext }
+
+
--- /dev/null
+\version "1.3.146"
+% JUNKME.
+
+%% deprecated
+papersizename = \papersize
+
+% ly2dvi now uses `papersize' internally (and on cmd line)
+papersize = \papersize
+
+% FIXME
+% direct PostScript line height for single line staffs
+lineheight = 14
+
+paperfile = \papersize + "-init.ly"
+
+% paperfile = "a4-init.ly"
+
+\include \paperfile
+\include "paper-init.ly"
+
+staffspace = \staffheight / 4.0
+stafflinethickness = \staffspace / 10.0
+outputscale = \staffheight / 4.0
+
+\translator { \NoteNamesContext }
+\translator { \ScoreContext }
+\translator { \ChoirStaffContext}
+\translator { \InnerChoirStaffContext}
+
+\translator { \RhythmicStaffContext}
+\translator { \StaffContext }
+\translator { \VoiceContext}
+\translator { \StaffGroupContext }
+\translator { \InnerStaffGroupContext }
+\translator { \ChordNamesContext }
+\translator { \GrandStaffContext}
+\translator { \LyricsContext }
+\translator { \ThreadContext}
+\translator { \PianoStaffContext}
+\translator { \LyricsVoiceContext }
+\translator { \StaffContainerContext }
+
+
+
+
+
--- /dev/null
+\version "1.3.146"
+
+% JUNKME
+%part-paper-init.ly
+
+\paper {
+ \translator { \OrchestralPartStaffContext }
+ \translator { \ScoreContext skipBars = ##t }
+}
+
--- /dev/null
+\version "1.3.146"
+%
+% setup for Request->Element conversion. Guru-only
+%
+StaffContext = \translator {
+ \type "Staff_performer"
+ \name Staff
+ \accepts Voice
+
+ \consists "Key_performer"
+ \consists "Tempo_performer"
+ \consists "Time_signature_performer"
+ dynamicStyle = #"dynamic"
+}
+\translator { \StaffContext }
+\translator { \StaffContext
+ \name RhythmicStaff
+}
+
+
+VoiceContext = \translator {
+ \type "Performer_group_performer"
+ \name Voice
+% All notes fall to Grace if you leave Thread out (huh?)
+ \consists "Dynamic_performer"
+ \consists "Span_dynamic_performer"
+ \consists "Piano_pedal_performer"
+ \consists "Grace_position_performer"
+ \accepts Thread
+ \accepts Grace
+}
+\translator { \VoiceContext }
+
+ThreadContext = \translator {
+ \type "Performer_group_performer"
+ \name Thread
+ \consists "Note_performer"
+ \consists "Tie_performer"
+}
+\translator { \ThreadContext }
+
+\translator {
+ \type "Grace_performer_group"
+ \name Grace
+ \consists "Note_performer"
+ \consists "Tie_performer"
+ \consists "Swallow_performer"
+
+ weAreGraceContext = #t
+}
+
+\translator
+{
+ \type "Performer_group_performer"
+ \name VoiceTwo\consists "Note_performer"
+
+}
+
+GrandStaffContext = \translator {
+ \type "Performer_group_performer"
+ \name GrandStaff
+ \accepts RhythmicStaff
+ \accepts Staff
+}
+\translator { \GrandStaffContext }
+
+PianoStaffContext = \translator {
+ \type "Performer_group_performer"
+ \name "PianoStaff"
+ \accepts Staff
+}
+\translator { \PianoStaffContext }
+
+\translator {
+ \type "Performer_group_performer"
+ \consists "Lyric_performer"
+ \name LyricsVoice
+}
+
+\translator{
+ \type "Performer_group_performer"
+ \name ChoirStaff
+ \accepts Staff
+}
+\translator {
+ \type "Staff_performer"
+ \accepts LyricsVoice
+ \name Lyrics
+ \consists "Time_signature_performer"
+ \consists "Tempo_performer"
+}
+
+\translator {
+ \type "Staff_performer"
+ \accepts ChordNameVoice
+ \name ChordNames
+}
+
+\translator {
+ \type Performer_group_performer
+ \consists Note_performer
+ \name ChordNameVoice
+}
+
+\translator {
+ \type Performer_group_performer
+
+ \name StaffGroup
+ \accepts Staff
+}
+
+ScoreContext = \translator {
+ \type "Score_performer"
+
+ \name Score
+ instrument = #"bright acoustic"
+ \accepts Staff
+ \accepts GrandStaff
+ \accepts PianoStaff
+ \accepts Lyrics
+ \accepts StaffGroup
+ \accepts ChoirStaff
+ \accepts RhythmicStaff
+ \accepts ChordNames
+ \consists "Swallow_performer"
+
+ dynamicAbsoluteVolumeFunction = #default-dynamic-absolute-volume
+ instrumentEqualizer = #default-instrument-equalizer
+}
+\translator { \ScoreContext }
+
--- /dev/null
+% property-init.ly
+
+\version "1.3.146"
+
+stemUp = \property Voice.Stem \set #'direction = #1
+stemDown = \property Voice.Stem \set #'direction = #-1
+stemBoth= \property Voice.Stem \revert #'direction
+
+slurUp = \property Voice.Slur \override #'direction = #1
+slurDown = \property Voice.Slur \override #'direction = #-1
+slurBoth = \property Voice.Slur \revert #'direction
+shiftOn = \property Voice.NoteColumn \override #'horizontal-shift = #1
+shiftOnn = \property Voice.NoteColumn \override #'horizontal-shift = #2
+shiftOnnn = \property Voice.NoteColumn \override #'horizontal-shift = #3
+shiftOff = \property Voice.NoteColumn \revert #'horizontal-shift
+
+tieUp = \property Voice.Tie \override #'direction = #1
+tieDown = \property Voice.Tie \override #'direction = #-1
+tieBoth = \property Voice.Tie \revert #'direction
+
+dynamicUp = {
+ \property Voice.DynamicText \override #'direction = #1
+ \property Voice.DynamicLineSpanner \override #'direction = #1
+}
+dynamicDown = {
+ \property Voice.DynamicText \override #'direction = #-1
+ \property Voice.DynamicLineSpanner \override #'direction = #-1
+}
+dynamicBoth = {
+ \property Voice.DynamicText \revert #'direction
+ \property Voice.DynamicLineSpanner \revert #'direction
+}
+
+scriptUp = {
+ \property Voice.TextScript \override #'direction = #1
+ \property Voice.Script \override #'direction = #1
+}
+scriptDown = {
+ \property Voice.TextScript \override #'direction = #-1
+ \property Voice.Script \override #'direction = #-1
+}
+scriptBoth = {
+ \property Voice.TextScript \revert #'direction
+ \property Voice.Script \revert #'direction
+}
+
+tupletUp = {
+ \property Voice.TupletBracket \override #'direction = #1
+ \property Voice.TupletBracket \override #'direction = #1
+}
+tupletDown = {
+ \property Voice.TupletBracket \override #'direction = #-1
+ \property Voice.TupletBracket \override #'direction = #-1
+}
+tupletBoth = {
+ \property Voice.TupletBracket \revert #'direction
+ \property Voice.TupletBracket \revert #'direction
+}
+
+
+
+cadenzaOn = \property Score.timing = ##f
+cadenzaOff = {
+ \property Score.timing = ##t
+ \property Score.measurePosition = #(make-moment 0 1)
+}
+
+newpage = {
+ \break
+ % urg, only works for TeX output
+ \context Score \outputproperty #(make-type-checker 'paper-column-interface)
+ #'between-system-string = #"\\newpage"
+}
+
+% dynamic dir? text script, articulation script dir?
+oneVoice = {
+ \stemBoth
+ \slurBoth
+ \tieBoth
+ \shiftOff
+}
+
+voiceOne = {
+ \stemUp
+ \slurUp
+ \tieUp
+}
+
+voiceTwo = {
+ \stemDown
+ \slurDown
+ \tieDown
+}
+
+voiceThree = {
+ \stemUp
+ \slurUp
+ \tieUp
+ \shiftOn
+}
+
+voiceFour = {
+ \stemDown
+ \slurDown
+ \tieDown
+ \shiftOn
+}
+
+% There's also dash, but setting dash period/length should be fixed.
+slurDotted = \property Voice.Slur \override #'dashed = #1
+slurSolid = \property Voice.Slur \revert #'dashed
+tieDotted = \property Voice.Tie \override #'dashed = #1
+tieSolid = \property Voice.Tie \revert #'dashed
+
+
+tiny =
+ \property Voice.fontSize= -2
+
+
+small =
+ \property Voice.fontSize= -1
+
+
+normalsize = {
+ \property Voice.fontSize= 0
+}
+
+normalkey = {
+ \property Staff.keyOctaviation = ##f
+}
+
+specialkey = {
+ \property Staff.keyOctaviation = ##t
+}
+
+% End the incipit and print a ``normal line start''.
+endincipit = \notes{
+ \partial 16 s16 % Hack to handle e.g. \bar ".|" \endincipit
+ \context Staff \outputproperty #(make-type-checker 'clef-interface) #'full-size-change = ##t
+ \context Staff \outputproperty #(make-type-checker 'clef-interface) #'non-default = ##t
+ \bar ""
+}
+
+autoBeamOff = \property Voice.noAutoBeaming = ##t
+autoBeamOn = \property Voice.noAutoBeaming = ##f
+
+emptyText = \property Voice.textNonEmpty = ##f
+fatText = \property Voice.textNonEmpty = ##t
+
+showStaffSwitch = \property PianoStaff.followVoice = ##t
+hideStaffSwitch = \property PianoStaff.followVoice = ##f
+
+
+% To remove a Volta bracet or some other graphical object,
+% set it to turnOff. Example: \property Staff.VoltaBracket = \turnOff
+
+turnOff = #'((meta . ((interfaces . ()))))
--- /dev/null
+\version "1.3.146"
+
+
+major = #'(
+ (0 . 0)
+ (1 . 0)
+ (2 . 0)
+ (3 . 0)
+ (4 . 0)
+ (5 . 0)
+ (6 . 0)
+ )
+
+minor = #'(
+ (0 . 0)
+ (1 . 0)
+ (2 . -1)
+ (3 . 0)
+ (4 . 0)
+ (5 . -1)
+ (6 . -1)
+ )
+
+
+ionian = #'(
+ (0 . 0)
+ (1 . 0)
+ (2 . 0)
+ (3 . 0)
+ (4 . 0)
+ (5 . 0)
+ (6 . 0)
+ )
+
+
+locrian = #'(
+ (0 . 0)
+ (1 . -1)
+ (2 . -1)
+ (3 . 0)
+ (4 . -1)
+ (5 . -1)
+ (6 . -1)
+ )
+
+
+aeolian = #'(
+ (0 . 0)
+ (1 . 0)
+ (2 . -1)
+ (3 . 0)
+ (4 . 0)
+ (5 . -1)
+ (6 . -1)
+ )
+
+
+mixolydian = #'(
+ (0 . 0)
+ (1 . 0)
+ (2 . 0)
+ (3 . 0)
+ (4 . 0)
+ (5 . 0)
+ (6 . -1)
+ )
+
+
+lydian = #'(
+ (0 . 0)
+ (1 . 0)
+ (2 . 0)
+ (3 . 1)
+ (4 . 0)
+ (5 . 0)
+ (6 . 0)
+ )
+
+
+phrygian = #'(
+ (0 . 0)
+ (1 . -1)
+ (2 . -1)
+ (3 . 0)
+ (4 . 0)
+ (5 . -1)
+ (6 . -1)
+)
+
+
+dorian = #'(
+ (0 . 0)
+ (1 . 0)
+ (2 . -1)
+ (3 . 0)
+ (4 . 0)
+ (5 . 0)
+ (6 . -1)
+ )
+
--- /dev/null
+\version "1.3.146"
+
+
+dashHat= "marcato"
+dashPlus= "stopped"
+dashDash= "tenuto"
+dashBar= "staccatissimo"
+dashLarger= "accent"
+dashDot= "staccato"
+
+
+thumb = \script "thumb"
+accent = \script "accent"
+marcato = \script "marcato"
+staccatissimo = \script "staccatissimo"
+
+% portato is indicated
+% either by
+% * slurred & dotted notes.
+%or by
+% * slur and dash notes.
+% Neither are really supported, but c4-.-- should work.
+% portato = \script "portato"
+
+fermata = \script "fermata"
+stopped = \script "stopped"
+staccato = \script "staccato"
+tenuto = \script "tenuto"
+upbow = \script "upbow"
+downbow = \script "downbow"
+lheel = \script "lheel"
+rheel = \script "rheel"
+ltoe = \script "ltoe"
+rtoe = \script "rtoe"
+turn = \script "turn"
+open = \script "open"
+flageolet = \script "flageolet"
+reverseturn = \script "reverseturn"
+trill = \script "trill"
+prall = \script "prall"
+mordent = \script "mordent"
+prallprall = \script "prallprall"
+prallmordent = \script "prallmordent"
+upprall = \script "upprall"
+downprall = \script "downprall"
+segno = \script "segno"
+coda = \script "coda"
--- /dev/null
+\version "1.3.146"
+
+cr = \spanrequest \start "crescendo"
+decr = \spanrequest \start "decrescendo"
+rc = \spanrequest \stop "crescendo"
+rced = \spanrequest \stop "decrescendo"
+
+cresc = \notes {
+ \commandspanrequest \start "crescendo"
+ \property Voice.crescendoText = #"cresc."
+ \property Voice.crescendoSpanner = #'dashed-line
+}
+
+% ah, this is handy: maybe drop resetting of properties in
+% dynamic-engraver ?
+endcresc = \notes {
+ \commandspanrequest \stop "crescendo"
+ \property Voice.crescendoText \unset
+ \property Voice.crescendoSpanner \unset
+}
+
+dim = \notes {
+ \commandspanrequest \start "decrescendo"
+ \property Voice.decrescendoText = #"dim."
+ \property Voice.decrescendoSpanner = #'dashed-line
+}
+
+enddim = \notes {
+ \commandspanrequest \stop "decrescendo"
+ \property Voice.decrescendoText \unset
+ \property Voice.decrescendoSpanner \unset
+}
+
+%{
+
+cresc = \spanrequest \start "crescendo"
+endcresc = \spanrequest \stop "crescendo"
+
+%}
+
+% better name sustainstart/stop?
+sustainDown = \spanrequest \start "Sustain"
+sustainUp = \spanrequest \stop "Sustain"
+
+unaCorda = \spanrequest \start "UnaCorda"
+treCorde = \spanrequest \stop "UnaCorda"
+
+sostenutoDown = \spanrequest \start "Sostenuto"
+sostenutoUp = \spanrequest \stop "Sostenuto"
+
+%crescpoco = \property Voice.crescendoText = "cresc. poco a poco"
+%decresc = \property Voice.crescendoText = "decr."
+%dim = \property Voice.crescendoText = "dim."
void
Duration::compress (Rational m)
{
- plet_.iso_i_ *= m.num_i ();
- plet_.type_i_ *= m.den_i ();
+ plet_.iso_i_ *= m.num ();
+ plet_.type_i_ *= m.den ();
}
Rational
grestore
} bind def
-%
-% FIXME. translate to middle of box.
-%
-
-/draw-box % breapth width depth height
-{
- /h exch def
- /d exch def
- /w exch def
- /b exch def
- gsave
-
- 0 setlinewidth
- b neg d neg rmoveto
- b w add 0 rlineto
- 0 d h add rlineto
- b w add neg 0 rlineto
- closepath % 0 d h add neg rlineto
- fill
-
- grestore
-} bind def
-
/start-line % height
{
dup base-line-skip gt {
-%!PS-Adobe-1.0: lily.ps
+%!PS-Adobe-1.0: music-drawing-routines.ps
%
% Functions for direct and embedded PostScript
+
+% FIXME: set with individual symbols
% round cappings
1 setlinecap
1 copy mul exch 1 copy mul add sqrt
} bind def
-/draw_beam % width slope thick
-{
- 2 div /beam_thick exch def
- /beam_slope exch def
- /beam_wd exch def
- beam_slope beam_wd mul /beam_ht exch def
- 0 beam_thick neg moveto
- beam_wd beam_ht rlineto
- 0 beam_thick 2 mul rlineto
- 0 beam_thick lineto
- closepath fill
+% FIXME. translate to middle of box.
+% Nice rectangle with rounded corners
+% FIXME: linewidth hardcoded. check: too round?
+/draw_box % breapth width depth height
+{
+ %% FIXME: hardcoded
+ currentdict /testing known {
+ %% real thin lines for testing
+ /l 0.005 def
+ }{
+ /l 0.05 def
+ } ifelse
+
+ 0 setlinecap
+ l setlinewidth
+ 1 setlinejoin
+
+ l 2 div sub /h exch def
+ l 2 div sub /d exch def
+
+ %% UGH huh?
+ %% Where does this correction come from?
+ %% Why don't we need this in x direction?
+ h l 2 div sub /h exch def
+ d l 2 div sub /d exch def
+
+ l 2 div sub /w exch def
+ l 2 div sub /b exch def
+
+ b neg d neg moveto
+ b w add 0 rlineto
+ 0 d h add rlineto
+ b w add neg 0 rlineto
+ 0 d h add neg rlineto
+
+ currentdict /testing known {
+ %% outline only, for testing:
+ stroke
+ }{
+ closepath gsave stroke grestore fill
+ } ifelse
+} bind def
+
+% Nice beam with rounded corners
+% FIXME: linewidth hardcoded. check: too round?
+/draw_beam % slope width thick
+{
+ %% FIXME: hardcoded
+ currentdict /testing known {
+ %% real thin lines for testing
+ /l 0.01 def
+ }{
+ /l 0.1 def
+ } ifelse
+ l 2 div setlinewidth
+
+ 0 setlinecap
+ 1 setlinejoin
+
+ l sub /t exch def
+ l sub /w exch def
+ w mul /h exch def
+
+ l 2 div t 2 div neg moveto
+ w h rlineto
+ 0 t rlineto
+ w neg h neg rlineto
+ 0 t neg rlineto
+
+ currentdict /testing known {
+ %% outline only, for testing:
+ stroke
+ }{
+ closepath gsave stroke grestore fill
+ } ifelse
} bind def
/draw_repeat_slash % width slope thick
(SpanBar . (
(break-align-symbol . Staff_bar)
(bar-size-procedure . ,Span_bar::get_bar_size)
- (molecule-callback . ,Bar::brew_molecule)
+ (molecule-callback . ,Span_bar::brew_molecule)
(visibility-lambda . ,begin-of-line-invisible)
(X-extent-callback . ,Span_bar::width_callback)
- (Y-offset-callbacks . (,Span_bar::center_on_spanned_callback))
-
(breakable . #t)
(glyph . "|")
(before-line-breaking-callback . ,Span_bar::before_line_breaking)
;;;; (c) 1998--2001 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; Han-Wen Nienhuys <hanwen@cs.uu.nl>
-;;; Library funtions
+;;; Library functions
(use-modules (ice-9 regex))
"lilypondpaperoutputscale div scalefont setfont } bind def "
"\n"))
-
(define (beam width slope thick)
(string-append
- (numbers->string (list width slope thick)) " draw_beam" ))
+ (numbers->string (list slope width thick)) " draw_beam" ))
(define (comment s)
(string-append "% " s))
(define (filledbox breapth width depth height)
(string-append (numbers->string (list breapth width depth height))
- " draw-box" ))
+ " draw_box" ))
;; obsolete?
(define (font-def i s)
" {exch pop //systemdict /run get exec} "
(ly-gulp-file "music-drawing-routines.ps")
"{ exch pop //systemdict /run get exec } "
+ (if (defined? 'ps-testing) "\n /testing true def" "")
))
(define (lily-def key val)
(define (stem breapth width depth height)
(string-append (numbers->string (list breapth width depth height))
- " draw-box" ))
+ " draw_box" ))
(define (stop-line)
"}\nstop-line\n")
(define (header-end)
(string-append
"\\special{\\string! "
-
+
;; URG: ly-gulp-file: now we can't use scm output without Lily
(if use-regex
;; fixed in 1.3.4 for powerpc -- broken on Windows
(regexp-substitute/global #f "\n"
(ly-gulp-file "music-drawing-routines.ps") 'pre " %\n" 'post)
(ly-gulp-file "music-drawing-routines.ps"))
+ (if (defined? 'ps-testing) "/testing true def%\n" "")
"}"
"\\input lilyponddefs\\newdimen\\outputscale \\outputscale=\\lilypondpaperoutputscale pt\\turnOnPostScript"))
"}\\vss}\\interscoreline\n")
(define (stop-last-line)
"}\\vss}")
- (define (filledbox breapth width depth height)
+ (define (xfilledbox breapth width depth height)
(string-append
"\\kern" (number->dim (- breapth))
"\\vrule width " (number->dim (+ breapth width))
"depth " (number->dim depth)
"height " (number->dim height) " "))
+ (define (filledbox breapth width depth height)
+ (embedded-ps
+ (string-append (numbers->string (list breapth width depth height))
+ " draw_box" )))
+
(define (text s)
(string-append "\\hbox{" (output-tex-string s) "}"))
(translator-property-description 'followVoice boolean?
"if set, note heads are tracked across staff switches by a thin line")
+(translator-property-description 'fontSize integer?
+ "Used to set the relative size of all grobs
+in a context. This is done using the @code{Font_size_engraver}.")
+
(translator-property-description 'forceClef boolean? "Show clef symbol, even if it hasn't changed. Only active for the first clef after the property is set, not for the full staff.")
(translator-property-description 'forgetAccidentals boolean? "do
not set localKeySignature when a note alterated differently from