From 45bae7c4e36d595cf545c85a53ff14c95bf4cf9c Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Sat, 23 Sep 2000 01:42:29 +0200 Subject: [PATCH] release: 1.3.89 ====== * Some fixes to Coriolan. * Fixed some stupid core dumps processing Coriolan. * Fixed several problems with part-combiner's part-switching. * Fixes for ASCII output. * Added feature to part combiner that should allow part-switching only for entire measures. Currently, it is controlled by a new property changeMoments (A . B): - only switch when !(A mod now), - decide whether to switch based on music during time period B. * Made bugfix: Sequential_iterator::get_music (M): mustn't return music later than M. * Added skip (M) to some iterators. * maintain minimum-length by shifting for hyphens at start of line. (patch courtesy Christophe Rhodes) * mudela-book fixes (courtesy Tom Cato Amundsen): documentation update, LaTeX example, landscape support. 1.3.88.h --- CHANGES | 61 ++- Documentation/topdocs/index.tely | 5 - Documentation/user/GNUmakefile | 12 +- Documentation/user/latex-mudela-example.latex | 161 +++++++ Documentation/user/mudela-book.tely | 447 +++++++++++++----- Documentation/user/refman.itely | 8 +- VERSION | 4 +- input/test/beam-cross-staff.ly | 8 - input/test/part-combine-score.ly | 51 +- input/test/vertical-extent.ly | 6 +- lily/align-interface.cc | 6 +- lily/align-note-column-engraver.cc | 6 +- lily/bar-number-engraver.cc | 20 - lily/bar.cc | 4 - lily/beam.cc | 5 +- lily/break-align-item.cc | 2 +- lily/crescendo.cc | 33 +- lily/cross-staff.cc | 8 +- lily/dynamic-engraver.cc | 6 +- lily/grace-align-item.cc | 6 +- lily/hyphen-spanner.cc | 25 +- lily/include/align-interface.hh | 34 +- lily/include/beam.hh | 6 +- lily/include/hyphen-spanner.hh | 14 +- lily/include/music-iterator.hh | 18 +- lily/include/part-combine-music-iterator.hh | 1 + lily/include/sequential-music-iterator.hh | 9 +- lily/include/simple-music-iterator.hh | 5 +- lily/include/slur-bezier-bow.hh | 2 +- lily/include/slur.hh | 12 +- lily/line-of-score.cc | 2 +- lily/mark-engraver.cc | 2 +- lily/music-iterator.cc | 21 +- lily/music-wrapper-iterator.cc | 15 +- lily/part-combine-music-iterator.cc | 119 ++--- lily/rest-collision.cc | 2 +- lily/script.cc | 2 +- lily/sequential-music-iterator.cc | 198 ++++---- lily/simple-music-iterator.cc | 11 +- lily/slur-bezier-bow.cc | 6 +- lily/slur.cc | 42 +- lily/spanner.cc | 22 +- lily/staff-symbol-referencer.cc | 2 +- lily/system-start-delimiter-engraver.cc | 2 +- lily/tie.cc | 19 +- lily/tuplet-spanner.cc | 2 +- lily/vertical-align-engraver.cc | 3 +- lily/volta-spanner.cc | 2 +- lilypond-mode.el | 4 +- ly/declarations.ly | 2 +- ly/engraver.ly | 101 ++-- ly/paper-as9.ly | 7 +- ly/params.ly | 78 +-- make/out/lilypond.lsm | 8 +- make/out/lilypond.spec | 4 +- mutopia/Coriolan/bassi-part.ly | 24 +- mutopia/Coriolan/bassi.ly | 41 ++ mutopia/Coriolan/contrabasso.ly | 89 ++-- mutopia/Coriolan/coriolan.ly | 45 +- mutopia/Coriolan/viola-1.ly | 75 ++- mutopia/Coriolan/viola-2.ly | 60 +-- mutopia/Coriolan/violi-part.ly | 23 +- mutopia/Coriolan/violi.ly | 39 ++ mutopia/Coriolan/violoncello.ly | 70 ++- scm/basic-properties.scm | 3 +- scm/generic-property.scm | 11 + scripts/as2text.scm | 6 +- scripts/mudela-book.py | 62 ++- tex/lilyponddefs.tex | 2 +- 69 files changed, 1313 insertions(+), 898 deletions(-) create mode 100644 Documentation/user/latex-mudela-example.latex create mode 100644 mutopia/Coriolan/bassi.ly create mode 100644 mutopia/Coriolan/violi.ly diff --git a/CHANGES b/CHANGES index 7b324464f7..95feb90029 100644 --- a/CHANGES +++ b/CHANGES @@ -1,25 +1,13 @@ ---- ../lilypond-1.3.88/CHANGES Wed Sep 20 00:59:45 2000 -++ b/CHANGES Sat Sep 23 19:39:02 2000 -@@ -1,3 +1,11 @@ -1.3.88.mb1 -========== +1.3.89 +====== -* Changed handling of the interscoreline paper variable. - The value should be a string with a TeX length. - It's now possible to to get even bottom of the pages using - interscoreline="16pt plus 1fill" +* Some fixes to Coriolan. - 1.3.87.hwn1 - =========== - 1.3.88.hwn1.jcn2 -=========== +* Fixed some stupid core dumps processing Coriolan. -* Made small fixes for ascii output. +* Fixed several problems with part-combiner's part-switching. -* Made fix for soli in part-comibiner. - -1.3.88.jcn1 -=========== +* Fixes for ASCII output. * Added feature to part combiner that should allow part-switching only for entire measures. Currently, it is controlled by a new @@ -32,12 +20,39 @@ * Added skip (M) to some iterators. -1.3.88 -====== +* maintain minimum-length by shifting for hyphens at start of +line. (patch courtesy Christophe Rhodes) + +* mudela-book fixes (courtesy Tom Cato Amundsen): documentation +update, LaTeX example, landscape support. -1.3.87.hwn1 +1.3.88.hwn2 =========== +* Added elt properties for Tie: + - details + - x-gap + - staffline-clearance + +* Added elt properties for Slur + - y-free + - details + +* Removed C++ support for barNumberScriptPadding, now in +generic-property.scm (but they're deprecated anyway) + +* Changed threshold in Align_interface to be in staffspace + +* changed minVerticalAlign and maxVerticalAlign to be in staffspace. +A better way: do \push #'threshold = #(cons A B ). (WARNING: +INCOMPATIBLE CHANGE) + +* moved translator definitions out of \paper { }, only instantiate in +\paper. + +1.3.88 +====== + * Sequential_iterator::get_music (), part combiner now works. * Changed paper variables into elt properties: @@ -47,7 +62,7 @@ - beam-flag-width-function to Beam. Grace_align_item: - - horizontal-space: spacing of is configurable + - horizontal-space: spacing of grace notes is configurable Volta_spanner: - height @@ -71,6 +86,8 @@ * added input/test/bagpipe.ly + + 1.3.87 ====== diff --git a/Documentation/topdocs/index.tely b/Documentation/topdocs/index.tely index c67e55cf87..548e23c16f 100644 --- a/Documentation/topdocs/index.tely +++ b/Documentation/topdocs/index.tely @@ -160,11 +160,6 @@ they tend to be very big and don't help with describing the problem. For discussions concerning LilyPond. @end itemize -If you want to unsubscribe use the same procedure as subscribing, but -substitute @code{unsubscribe} where you would put @code{subscribe}. - -@unnumberedsubsec Webmaster's Disclaimer - These pages were entirely created from a @strong{development snapshot} of the LilyPond package. The version of this webpage is printed at the bottom. diff --git a/Documentation/user/GNUmakefile b/Documentation/user/GNUmakefile index 14857cc768..a045e99d94 100644 --- a/Documentation/user/GNUmakefile +++ b/Documentation/user/GNUmakefile @@ -2,18 +2,18 @@ depth=../.. -DATA_FILES = $(wildcard *.data) -datafiles = $(addprefix $(outdir)/,$(DATA_FILES:.data=.html)) -DOC_FILES = $(wildcard *.doc) -DVI_FILES = $(addprefix $(outdir)/,$(DOC_FILES:.doc=.dvi) $(TELY_FILES:.tely=.dvi)) +LATEX_FILES =$(wildcard *.latex) + +DVI_FILES = $(addprefix $(outdir)/,$(LATEX_FILES:.latex=.dvi) $(TELY_FILES:.tely=.dvi)) + +EXTRA_DIST_FILES= $(LATEX_FILES) $(wildcard *.itexi *.itely) -EXTRA_DIST_FILES= $(DOC_FILES) $(DATA_FILES) $(wildcard *.itexi *.itely) - HTML_FILES = $(addprefix $(outdir)/, $(TELY_FILES:.tely=.html)) PS_FILES = $(DVI_FILES:.dvi=.ps) $(OUTDOC_FILES:.doc=.ps) $(OUTTEX_FILES:.tex=.ps) + PS_GZ_FILES= $(addsuffix .gz, $(PS_FILES)) STEPMAKE_TEMPLATES=tex texinfo documentation diff --git a/Documentation/user/latex-mudela-example.latex b/Documentation/user/latex-mudela-example.latex new file mode 100644 index 0000000000..5b6c08e80e --- /dev/null +++ b/Documentation/user/latex-mudela-example.latex @@ -0,0 +1,161 @@ +\documentclass[a4paper, 12pt]{article} +%\def\pre MudelaExample{This if before} +%\def\pre MudelaExample{This is after} +%\usepackage{landscape} +\begin{document} +%uncomment this to try twocolumn mode +%\twocolumn + + +\section{Mudelabook + LaTeX} + +This is an examplefile for mixing Lilypond and Latex. It is also +used to test mudela-book. View the source to see how it is done. + +A simple scale: + +\begin{mudela} +\score{ + \notes\relative c'{c d e f g a b c} +} +\end{mudela} + +Mudela-book search for the \verb|\score| command when it decides +if the code is only a fragment. Thus, in the following code, you have +to use \verb|fragment| option, because the comment confuses mudela-book. + +\begin[fragment]{mudela} +c d e % \score +\end{mudela} + +There is also a shorthand version \verb|\mudela{c' e' g'}|: + +\mudela{c' e' g'} + +that is the same as writing +\begin{verbatim} +\begin[eps]{mudela} +c' e' g' +\end{mudela} +\end{verbatim} + +This C major +\begin[eps, 11pt]{mudela} +c' e' g' +\end{mudela} +and C minor \mudela[11pt]{c' es' g'} chords are floating inside the text. + +\subsection{verb and verbatim} + +As you see, the begin/end verbatim command inside +does not confuse mudela-book: + +\verb|\begin{mudela}c d e\end{mudela}| + +Neither does a verbatim inside verb: + +\verb|\begin{verbatim}\begin{mudela}c d e\end{mudela}\end{verbatim}| + +or verb inside verbatim: + +\begin{verbatim} +\verb|\begin{mudela}c d e\end{mudela}| +\end{verbatim} + +But this is just to stress \verb|mudela-book|. What you need is: + +\verb|\mudela{c' d' e'}| + +and + +\begin{verbatim} +\begin{mudela} +c d e +\end{mudela} +\end{verbatim} + +\subsection{The 'verbatim' and 'intertext' option} +This shows the verbatim option: +\begin[verbatim, intertext="gives this music:"]{mudela} +c' d' e' +\end{mudela} + +\subsection{LaTeX comments} +This is a line with mudela code after the comment char % \mudela{} +% \mudela{} + +If you do not see any music from the heading 'LaTeX comments' and until +this line, then mudela-book is handling latex comments pretty well :-) + +\subsection{To float or not to float} +This music +\begin[eps]{mudela} +c' e' +\end{mudela} +should be floating inside the text by using the \verb|eps| options. + +This music + +\begin[eps]{mudela} +c' e' +\end{mudela} + +has also the \verb|eps| options, but is not floating because there +are an emptry line before and after the mudela block. That is +correct behaviour because it follows La\TeX{} convention that an +empty line signals a new paragraph. Note that the \verb|eps| option +is not necessary when you want the music in a paragraph on its own. + +\subsection{More examples} + +Itemize environment: +\begin{itemize} +\item \mudela[11pt]{ c'} do +\item \mudela[11pt]{d'} re +\item \mudela[11pt]{e'} mi +\item \mudela[11pt]{f'} fa +\item \mudela[11pt]{g'} sol +\end{itemize} + +Tables\footnote{ and footnote: \mudela[eps,11pt]{c' e' g'} }: +\marginpar{ Yes, even as marginpar +\mudela[eps,11pt]{c' d' e'} } + +\begin{tabular}{|l|l|r|} +\hline +\em Notes & \em Name \\ +\hline +\mudela[11pt, filename="cdur"]{} & major \\ +\mudela[11pt]{} & minor \\ +\mudela[11pt]{} & diminished \\ +\mudela[11pt]{} & augmented \\ +\hline +\end{tabular} + +\pagebreak + +Testing of spacing. The next music is surrounded by an empty line. +text text text text text text text text text text text text +text text text text text text text text text text text text + +\begin{mudela} +\score{ \notes\relative c'{ c d e f g a b c} } +\end{mudela} + +text text text text text text text text text text text text +text text text text text text text text text text text text +text text text text text text text text text text text text + +Next has no empty lines. +text text text text text text text text text text text text +text text text text text text text text text text text text +text text text text text text text text text text text text +\begin{mudela} +\score{ \notes\relative c'{ c d e f g a b c} } +\end{mudela} +text text text text text text text text text text text text +text text text text text text text text text text text text + + + +\end{document} diff --git a/Documentation/user/mudela-book.tely b/Documentation/user/mudela-book.tely index 7df11604a1..cc16d77403 100644 --- a/Documentation/user/mudela-book.tely +++ b/Documentation/user/mudela-book.tely @@ -79,22 +79,335 @@ translation approved by the Free Software Foundation. @section Introduction +[ The tutorial part is at the moment commented out and moved to +the end of this document ] + + [TODO: THIS MANUAL IS NOT FINISHED YET. FIXME.] -@ignore -Mudela-book is a script that process your La@TeX{} file and with great -help from GNU LilyPond it translates blocks of mudela code it finds -inside @code{mudela} environments to tex or eps graphics. It then -creates a new file that can be sent through La@TeX{} to create a -@file{.dvi} file with lines of music integrated with text. +@command{mudela-book} is a script that helps integrating mudela with +La@TeX{} or TeXinfo. @command{mudela-book} runs Lilypond on fragments +of mudela in your source file, and includes the results into a +document that can be processed with La@TeX{}, @command{makeinfo} +or @command{texi2dvi}. +The result is a text document with formatted music integrated. -Mudela-book will do its best to try to align the music to the left and -right margins. Currently the most used papersizes and one- and -twocolumn mode is supported, but if you use the geometry-package from -La@TeX{} or change the margins things will break. +@command{mudela-book} will do its best to try to align the music to +the left and right margins. Currently the most used papersizes and +one- and twocolumn mode is supported. But if you use some more +advances features, like the geometry-package or change the margins in +La@TeX{} or use @code{@@pagesize} in texinfo, will break. This document assumes you have basic knowledge of GNU LilyPond and -La@TeX{}. +La@TeX{} or texinfo. + +@section TeXinfo reference + +Your markup the mudela code like this: +@example +@@mudela[options, go, here] + YOUR MUDELA CODE +@@end mudela +@end example + +or + +@example +@@mudela[option, go, here]@{ YOUR MUDELA CODE @} +@end example + +@command{mudela-book} knows the default margins, and a few papersizes. +These commands should be in the beginning of the document: +@itemize @bullet +@item @code{@@afourpaper} +@item @code{@@afourwide} +@item @code{@@smallbook} +@end itemize +@code{@@pagesizes} are not supported. + +@subsection{Examples} + +Two simple examples. First a complete block: + +@example +@@mudela[26pt] +c' d' e' f' g'2 g' +@@end mudela +@end example + +produces this music: +@mudela +c' d' e' f' g'2 g' +@end mudela + +Then the short version: +@example +@@mudela[11pt]@{@} +@end example + +and its music: + +@mudela[11pt]{} + + +@subsection{@@example and @@code} + +I'm not sure if this will go into the final documentation, this is +here mostly to remember me on why things are the way they are. + +@command{mudela-book} will do nothing with special with @code{@@code} and +@code{@@example} environments. The 'code' and 'example' commands +should work just as normal. People looking at document that should be +processed by @command{mudela-book}, should notice nothing special, except from +some block like this: +@example +@@mudela +BLABLA +@@end mudela +@end example + +or this: + +@code{@@mudela@{ BLABLA @}} + +Anything other is a bug in @command{mudela-book}. + +So to get this in the printed manual: + +@example +@@mudela[26pt] +\relative c'@{c d e f g2 g@} +@@end mudela +@end example + +you have to write this: + +@example +@@example +@@@@mudela[26pt] +\relative c'@@@{c d e f g2 g@@@} +@@@@end mudela +@@end example +@end example + +Simply explained, every '@{', '@}' and '@@' has to be written as '@@@{', +'@@@}' and '@@@@'. This is how it works in plain texinfo too. + +@section La@TeX{} reference + +Your markup the mudela code like this: +@example +\begin[option, go, here]@{mudela@} + YOUR MUDELA CODE +\end@{mudela@} +@end example + +or + +@example +\mudela@{ YOUR MUDELA CODE @} +@end example + +The 'geometry' package is is not supported. The most popular +papersizes should work. + +Mudela-book know about the @code{\onecolumn} and +@code{\twocolumn} commands. + +The music will be surrounded by @code{\preMudelaExample} and +@code{\postMudelaExample}. The variables are +defined to nothing by default, and the user can redefine them +to whatever he wants. +@strong{[UGH: THIS DOES NOT HAPPEN WHEN +YOU USE THE SHORT FORM, \MUDELA@{ ... @}, CHECK OUT WHY]} + +@subsection{@code{landscape} package} +There is some simple support for landscape paper format, and this +can be combined with the @code{\twocolumn} command. Only a4 and +letter paper is supported, more to come... + +A more complete +support, maybe also supporting the geometry package is planned, but +there are more work that has to be done on @command{mudela-book} +first. + +This should work: +@example +\documentclass@{article@} +\usepackage@{landscape@} +\begin@{document@} +\twocolumn +BLA BLA BLA +\end@{document@} +@end example + +@subsection{Examples} + +@example +\begin[26pt]@{mudela@} +c' d' e' f' g'2 g'2 +\end@{mudela@} +@end example + +produces this music: + +@mudela[26pt] +c' d' e' f' g'2 g'2 +@end mudela + +Then the short version: +@example +\mudela[11pt]@{@} +@end example + +and its music: + +@mudela[11pt]{} + + +@subsection{\begin@{verbatim@} and \verb|\verb|} + +There work just as expected. Look at @file{mb-latex.tex} for details. + +@section Options + +@table @samp +@item eps + the music is created as eps graphics that can be inserted in + the middle of a text line, not only as a separate paragraph. + (La@TeX{} only) +@item verbatim + CONTENTS is copied into the source enclosed in a verbatim block, + followed by any text given with the @code{intertext} option, then + the actual music is displayed. This option does not work with + the short version of the mudela blocks: + + @code{ @@mudela@{ CONTENTS @} } and @code{ \mudela@{ CONTENTS @} } + +@item intertext="text inside apostrophs" + Used in conjunction with @code{verbatim} option. +@item filename=FILENAME + Save the mudela code to FILENAME instead of using a hash value + of CONTENTS. +@item 11pt, 13pt, 16pt, 20pt, 26pt + set the fontsize to use for the music +@item singleline + linewidth = -1. +@item multiline + linewidth = textwidth +@item fragment +@item nonfragment + Override @command{mudela-book} autodetection of what type of code is in the + mudela block, voice contents or complete code. +@end table + +@section Invocation + +When you run @command{mudela-book} it will generate lots of small +files that Lilypond will process. So to avoid all the garbage in +your source directory, you should either change to a temporary +directory, or use the @code{--outdir} commandline options: + +@code{cd out && mudela-book ../yourfile.tex} + +@code{mudela-book --outdir=out yourfile.tex} + + +For latex input, the file to give to latex has ext @file{.latex}. +TeXinfo input will be written to a file with ext @file{.texi}. So be +careful, don't give the source file that ext, or the file will be +overwritten. + +@strong{[UGH: IS THIS THE BEST WAY TO DO IT. MAYBE ADD A COMMENT LINE TO THE +GENERATED FILE, SO MUDELA-BOOK CAN TEST IF THE FILE IT IS TO OVERWRITE +IS GENERATED.]} + +@strong{About the input} + +If the file contains the ``block'' + +@example + + \begin@{mudela@} + CONTENTS + \end@{mudela@} + +@end example + +then LilyPond is run on CONTENTS. @command{mudela-book} puts the result back, +surrounded by @code{\preMudelaExample} and @code{\postMudelaExample} +commands. @code{\preMudelaExample} and @code{posMudelaExample} is +defined to nothing by default, and the user can redefine them +to whatever he wants. + + +@subsection Command line options + +@table @samp + +@item @option{-f}, @option{--format=} + Specify the document type to process, @code{latex} or @code{texi}. + @command{mudela-book} usually figure out this automatically. +@item --default-music-fontsize=??pt + Set the fontsize to use for mudela if no fontsize is given + as option. +@item --force-music-fontsize=??pt + Force all mudela to use this fontsize, overriding options + given to \begin@{mudela@} +@item -I DIR, --include=DIR + include path +@item -M, --dependencies + Write dependencies to out-www/filename.dep +@item --dep-prefix=PREF + prepend PREF before each -M dependency +@item -n, --no-lily + don't run lilypond +@item --no-pictures + don't generate pictures +@item --read-lys + don't write ly files. This way you can do + @example + mudela-book file.tely + convert-mudela + mudela-book --read-lys + @end example +@item --outname=FILE + The name of La@TeX{} file to output. If this option is not given, + the output name derived from the input name. +@item --outdir= + where to place generated files +@item --version + print version information +@item --help + Print a short help message +@end table + + + +@command{mudela-book} is written in python 1.5, so you have to install +@uref{http://www.python.org,python}. + + + +@section Bugs + +The La@TeX{} \includeonly@{...@} command is ignored. + +Ignores almost all La@TeX{} commands that changes margins and linewidths. + +La@TeX{} comments can confuse command{mudela-book}: +@example +% this music will be displayed: \mudela@{c d e@} +@end example + +@section Authors + +@email{hanwen@@cs.uu.nl, Han-Wen Nienhuys}, @uref{http://www.cs.uu.nl/people/hanwen} + +@email{tca@@gnu.org, Tom Cato Amundsen} + +@bye +@ignore So what does this look like? Well, here is an example: @mudela[veryverbatim, intertext="produces this music:"] @@ -149,7 +462,7 @@ Very often, if you mix music and text, the music is often only a few notes or at most a few bars. This music should be as short as possible and not stretched to be aligned to the right margin. -If you only write voice-contents in the mudela block, mudela-book +If you only write voice-contents in the mudela block, @command{mudela-book} will set the @code{linewidth} variable to -1, so Lilypond will make the music as short as possible but without breaking the line. Here is a well know harmonic progression: @@ -198,7 +511,7 @@ You can also use @code{mudelafile} (on a separate line, FIXME), to include another file. @section Fontsize options You can use all lilypond fontsizes in -mudela-book. The default 16pt fontsize is probably to big to be +@command{mudela-book}. The default 16pt fontsize is probably to big to be included in the middle of the text, 11pt or 13pt is probably better. The code can look like this: @@ -258,8 +571,8 @@ lines. @section Just in case... The options @code{fragment} and @code{nonfragment} will override -mudela-book when it scans the mudela code to see if it is voice -contents or complete code. This might be useful if mudela-book choose +@command{mudela-book} when it scans the mudela code to see if it is voice +contents or complete code. This might be useful if @command{mudela-book} choose wrong. Since there is no finder's fee which doubles every year, there is no @@ -322,108 +635,4 @@ Verbatim environments will also ignore the page margins. That is a feature of La@TeX{}. (But you usually put things inside a verbatim environment when you don't want La@TeX{} to do any linebreaking) - -@section Texinfo behavior - -[TODO] - -@section Invocation - -@file{mudela-book} is a script that helps integrating mudela and -La@TeX{}. mudela-book runs LilyPond on fragments of mudela in your -source file, and includes the results into document that can be -processed with La@TeX{}. The result is a text document with formatted -music integrated. - -Lilypond will by default create all output files in directory @file{out}. -The file to give to latex has ext @file{.latex}. - -@strong{About the input} - -If the file contains the ``block'' - -@example - - \begin@{mudela@} - CONTENTS - \end@{mudela@} - -@end example - -then LilyPond is run on CONTENTS. mudela-book puts the result back, -surrounded by @code{\preMudelaExample} and @code{\postMudelaExample} -commands. @code{\preMudelaExample} and @code{posMudelaExample} is -defined to nothing by default, and the user can redefine them -to whatever he wants. - -@code{\begin} takes the following options: @end ignore - - -@subsection Command line options - -@table @samp - -@item -f, --format= - Specify the document type to process, @code{latex} or @code{texi}. - @file{mudela-book} usually figure out this automatically. -@item --default-music-fontsize=??pt - Set the fontsize to use for mudela if no fontsize is given - as option. -@item --force-music-fontsize=??pt - Force all mudela to use this fontsize, overriding options - given to \begin@{mudela@} -@item -I DIR, --include=DIR - include path -@item -M, --dependencies - Write dependencies to out-www/filename.dep -@item --dep-prefix=PREF - prepend PREF before each -M dependency -@item -n, --no-lily - don't run lilypond -@item --no-pictures - don't generate pictures -@item --read-lys - don't write ly files. This way you can do - @example - mudela-book file.tely - convert-mudela - mudela-book --read-lys - @end example -@item --outname=FILE - The name of La@TeX{} file to output. If this option is not given, - the output name derived from the input name. -@item --outdir= - where to place generated files -@item --version - print version information -@item --help - Print a short help message -@end table - - - -@file{mudela-book} is written in python 1.5, so you have to install -@uref{http://www.python.org,python}. - - - -@section Bugs - -The La@TeX{} \includeonly@{...@} command is ignored. - -Ignores almost all La@TeX{} commands that changes margins and linewidths. - -La@TeX{} comments can confuse mudela-book: -@example -% this music will be displayed: \mudela@{c d e@} -@end example - -@section Authors - -@email{hanwen@@cs.uu.nl, Han-Wen Nienhuys}, @uref{http://www.cs.uu.nl/people/hanwen} - -@email{tca@@gnu.org, Tom Cato Amundsen} - -@bye - diff --git a/Documentation/user/refman.itely b/Documentation/user/refman.itely index c5ce7effca..cd30314058 100644 --- a/Documentation/user/refman.itely +++ b/Documentation/user/refman.itely @@ -2485,9 +2485,7 @@ Nevertheless, here are some variables you may want to use or change: ly2dvi. @item @code{interscoreline}@indexcode{interscoreline} - Sets the spacing between the score lines. The value should be - a string with a length specified in TeX syntax. - Defaults to @code{"16 pt"}. + Sets the spacing between the score lines. Defaults to 16 pt. @item @code{output}@indexcode{output} Specifies an alternate name for the the output @file{s}. @@ -2681,9 +2679,7 @@ The engravers for paper output are: @item @code{Bar_number_engraver}@indexcode{Bar_number_engraver} Engrave bar numbers. These numbers appear at the start of each - line. Not normally in any translator. Can be added to - @code{Score} for score-wide numbering or to @code{Staff} for - numbering on each staff. + line. Part of @code{Score} context. @item @code{Beam_engraver}@indexcode{Beam_engraver} Handles beam requests by engraving beams. Normally appears in diff --git a/VERSION b/VERSION index e699856edd..23eb5f64a8 100644 --- a/VERSION +++ b/VERSION @@ -1,8 +1,8 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=1 MINOR_VERSION=3 -PATCH_LEVEL=88 -MY_PATCH_LEVEL=mb1 +PATCH_LEVEL=89 +MY_PATCH_LEVEL= # use the above to send patches: MY_PATCH_LEVEL is always empty for a # released version. diff --git a/input/test/beam-cross-staff.ly b/input/test/beam-cross-staff.ly index fd96d8c81c..08e442157f 100644 --- a/input/test/beam-cross-staff.ly +++ b/input/test/beam-cross-staff.ly @@ -20,14 +20,6 @@ s1 } > - \paper{ - \translator{ - \PianoStaffContext - minVerticalAlign = 3.0*\staffheight; - maxVerticalAlign = 3.0*\staffheight; - } -% linewidth=-1.; - } } \version "1.3.59"; diff --git a/input/test/part-combine-score.ly b/input/test/part-combine-score.ly index 17244b7d77..59f4bf94eb 100644 --- a/input/test/part-combine-score.ly +++ b/input/test/part-combine-score.ly @@ -34,12 +34,11 @@ a2 \property VoiceCombineThread.soloADue = ##f a } > - \context PianoStaff < - \context StaffCombineStaff=one \skip 1*9; - \context StaffCombineStaff=two \skip 1*9; - \context StaffCombineStaff=one \partcombine StaffCombineStaff - \context StaffCombineVoice=one \notes\relative c'' - %\context StaffCombineThread=one \notes\relative c'' + \context PianoStaff = violi < + \context StaffCombineStaff=oneVioli { \clef alto; \skip 1*9;} + \context StaffCombineStaff=twoVioli { \clef alto; \skip 1*9;} + \context StaffCombineStaff=oneVioli \partcombine StaffCombineStaff + \context StaffCombineVoice=one \notes\relative c' { c4 d e f c d e f @@ -48,12 +47,10 @@ c d e f c d e f c4 d e f - a8 a a a - b b b b + a8 a a a b b b b d1 } - \context StaffCombineVoice=two \notes\relative c'' - %\context StaffCombineThread=two \notes\relative c'' + \context StaffCombineVoice=two \notes\relative c' { c4 d e f c d e f @@ -62,11 +59,41 @@ c4 d e f c2 e2 c,4 d e f - a8 a a a - b b b b + a8 a a a b b b b b1 } > + \context PianoStaff = lower < + \context StaffCombineStaff=oneBassi { \clef bass; \skip 1*9;} + \context StaffCombineStaff=twoBassi { \clef bass; \skip 1*9;} + \context StaffCombineStaff=oneBassi \partcombine StaffCombineStaff + \context StaffCombineVoice=oneB \notes\relative c + { + \clef bass; + c1 + d + e + f + c + d + e + f + c + } + \context StaffCombineVoice=twoB \notes\relative c + { + \clef bass; + c1 + d4 e d e + e1 + f4 g f g + c1 + d4 e d e + e + f4 g f g + c1 + } + > > \paper { diff --git a/input/test/vertical-extent.ly b/input/test/vertical-extent.ly index f35fd36ef2..b8cf58ed87 100644 --- a/input/test/vertical-extent.ly +++ b/input/test/vertical-extent.ly @@ -13,11 +13,7 @@ } > \paper{ - interscoreline = "3.0mm"; - -% % Alternative to fill the pages with evenly distributed score lines: -% interscoreline = "3.0mm plus 1fill"; - + interscoreline = 3.0\mm; \translator{\ScoreContext \remove "Bar_number_engraver";} \translator{\StaffContext StaffMinimumVerticalExtent = #'(-2.0 . 2.0)} } diff --git a/lily/align-interface.cc b/lily/align-interface.cc index 4527bbf41b..621c691203 100644 --- a/lily/align-interface.cc +++ b/lily/align-interface.cc @@ -12,6 +12,7 @@ #include "score-element.hh" #include "group-interface.hh" #include "axis-group-interface.hh" +#include "paper-def.hh" /* This callback is set in the children of the align element. It does @@ -98,8 +99,9 @@ Align_interface::do_side_processing (Score_element * me, Axis a) SCM thr = me->get_elt_property ("threshold"); if (gh_pair_p (thr)) { - threshold[SMALLER] = gh_scm2double (gh_car (thr)); - threshold[BIGGER] = gh_scm2double (gh_cdr (thr)); + Real ss = me->paper_l ()-> get_var ("staffspace"); + threshold[SMALLER] = ss *gh_scm2double (gh_car (thr)); + threshold[BIGGER] = ss * gh_scm2double (gh_cdr (thr)); } Real where_f=0; diff --git a/lily/align-note-column-engraver.cc b/lily/align-note-column-engraver.cc index 162d74441c..f8adafad7d 100644 --- a/lily/align-note-column-engraver.cc +++ b/lily/align-note-column-engraver.cc @@ -15,6 +15,7 @@ #include "directional-element-interface.hh" #include "side-position-interface.hh" #include "local-key-item.hh" +#include "paper-def.hh" /** Catch notes, and put them in a row. Used for aligning grace notes. @@ -96,14 +97,15 @@ Align_note_column_engraver::process_acknowledged () UGH UGH: separate note-spacing into separate class, and use that to space grace notes. */ - SCM grsp = get_property ("graceAccidentalSpace"); + SCM grsp = get_property ("graceAccidentalSpace") ; if (gh_number_p(grsp)) { /* ugh. */ Real extra_space = gh_scm2double(grsp); - SCM e = gh_cons (gh_double2scm (-extra_space), gh_double2scm (0.0)); + SCM e = gh_cons (gh_double2scm (-extra_space * paper_l ()->get_var ("staffspace")), + gh_double2scm (0.0)); now_column_l_->set_elt_property ("extra-space", e); } } diff --git a/lily/bar-number-engraver.cc b/lily/bar-number-engraver.cc index 4fe7d7172f..8c698b6e12 100644 --- a/lily/bar-number-engraver.cc +++ b/lily/bar-number-engraver.cc @@ -115,26 +115,6 @@ Bar_number_engraver::create_items () text_p_ = new Item (b); Side_position::set_axis(text_p_,Y_AXIS); - SCM prop = get_property ("barNumberDirection"); - if (!isdir_b (prop)) - { - prop = gh_int2scm (UP); - } - text_p_->set_elt_property ("direction", prop); - - SCM padding = get_property ("barNumberScriptPadding"); - if (gh_number_p(padding)) - { - text_p_->set_elt_property ("padding", padding); - } - else - { - text_p_ - ->set_elt_property ("padding", - gh_double2scm(paper_l ()->get_var ("interline"))); - } - - announce_element (text_p_, 0); } diff --git a/lily/bar.cc b/lily/bar.cc index 5419f3fa4b..721c807da4 100644 --- a/lily/bar.cc +++ b/lily/bar.cc @@ -68,10 +68,6 @@ Bar::compound_barline (Score_element*me, String str, Real h) { return me->lookup_l ()->blank (Box (Interval(0, 0), Interval (-h/2, h/2))); } - if (str == "scorepostbreak") - { - return simple_barline (me, me->paper_l ()->get_var ("barthick_score"), h); - } else if (str == "|") { return thin; diff --git a/lily/beam.cc b/lily/beam.cc index f619e04b9c..124dc7f9c0 100644 --- a/lily/beam.cc +++ b/lily/beam.cc @@ -403,10 +403,11 @@ Beam::suspect_slope_b (Score_element*me, Real y, Real dy) /* steep slope running against lengthened stem is suspect */ + Real ss = me->paper_l ()->get_var ("staffspace"); Real first_ideal = Stem::calc_stem_info (first_visible_stem (me)).idealy_f_; Real last_ideal = Stem::calc_stem_info (last_visible_stem (me)).idealy_f_; - Real lengthened = me->paper_l ()->get_var ("beam_lengthened"); - Real steep = me->paper_l ()->get_var ("beam_steep_slope"); + Real lengthened = gh_scm2double (me->get_elt_property ("outer-stem-length-limit")) * ss; + Real steep = gh_scm2double (me->get_elt_property ("slope-limit")); // ugh -> use commonx Real dx = last_visible_stem (me)->relative_coordinate (0, X_AXIS) - first_visible_stem (me)->relative_coordinate (0, X_AXIS); diff --git a/lily/break-align-item.cc b/lily/break-align-item.cc index c325aa1aa3..91ea3fea3e 100644 --- a/lily/break-align-item.cc +++ b/lily/break-align-item.cc @@ -66,7 +66,7 @@ Break_align_item::do_alignment (Score_element *me) me->add_offset_callback (Align_interface::center_on_element, X_AXIS); } - Real interline= me->paper_l ()->get_var ("interline"); + Real interline= me->paper_l ()->get_var ("staffspace"); Link_array elems; Link_array all_elems = Pointer_group_interface__extract_elements (me, (Score_element*)0, diff --git a/lily/crescendo.cc b/lily/crescendo.cc index c21897faca..35177fac01 100644 --- a/lily/crescendo.cc +++ b/lily/crescendo.cc @@ -24,12 +24,31 @@ Crescendo::set_interface (Score_element*s) MAKE_SCHEME_CALLBACK(Crescendo,brew_molecule); + +/* + + TODO: + + * should span the crescendo on any dynamic-text items, and + calculate their dimensions to determine shortening; junk shortening + code and related elt props. + + * separate the dashed-line version and the hairpin version into two + brew_molecule functions. + + * generalise dashed-line into generic text spanner, for ottava, accelerando, etc. + + +*/ SCM Crescendo::brew_molecule (SCM smob) { Score_element *me= unsmob_element (smob); Spanner * sp = dynamic_cast(me); - Real absdyn_dim = me->paper_l ()-> get_var ("crescendo_shorten"); + Real ss = me->paper_l ()->get_var ("staffspace"); + Real sl = me->paper_l ()->get_var ("stafflinethickness"); + + Real absdyn_dim = gh_scm2double (me->get_elt_property ("shorten-for-letter")); Real extra_left = sp->get_broken_left_end_align (); SCM dir = me->get_elt_property("grow-direction"); @@ -87,7 +106,7 @@ Crescendo::brew_molecule (SCM smob) me->paper_l ())); m.add_molecule (start_text); - pad = me->paper_l ()->get_var ("interline") / 2; + pad = me->paper_l ()->get_var ("staffspace") / 2; // ugh. width -= start_text.extent (X_AXIS).length (); width -= pad; @@ -97,10 +116,12 @@ Crescendo::brew_molecule (SCM smob) SCM at; s =me->get_elt_property ("spanner"); Real height; + if (gh_string_p (s) && ly_scm2string (s) == "dashed-line") { - Real thick = me->paper_l ()->get_var ("crescendo_dash_thickness"); - Real dash = me->paper_l ()->get_var ("crescendo_dash"); + Real thick = gh_scm2double (me->get_elt_property ("dash-thickness")) * sl ; + Real dash = gh_scm2double (me->get_elt_property ("dash-length")) * ss; + height = thick; at = gh_list (ly_symbol2scm (ly_scm2string (s).ch_C ()), gh_double2scm (thick), @@ -111,8 +132,8 @@ Crescendo::brew_molecule (SCM smob) else { bool continued = broken[Direction (-gd)]; - height = me->paper_l()->get_var ("crescendo_height"); - Real thick = me->paper_l ()->get_var ("crescendo_thickness"); + height = ss * gh_scm2double (me->get_elt_property ("height")); + Real thick = sl * gh_scm2double (me->get_elt_property ("thickness")); const char* hairpin = (gd < 0)? "decrescendo" : "crescendo"; diff --git a/lily/cross-staff.cc b/lily/cross-staff.cc index 68a18a9de4..ccd424ce8e 100644 --- a/lily/cross-staff.cc +++ b/lily/cross-staff.cc @@ -3,7 +3,7 @@ #include "align-interface.hh" #include "spanner.hh" #include "warn.hh" - +#include "paper-def.hh" /* JUNKME */ @@ -21,9 +21,11 @@ calc_interstaff_dist (Item *item, Spanner *span) || !scm_equal_p (gh_car (threshold), gh_cdr (threshold))) warning (_ ("minVerticalAlign != maxVerticalAlign: cross staff spanners may be broken")); - interstaff = 0.0; + + + interstaff = item->paper_l ()->get_var ("staffspace"); if (gh_pair_p (threshold)) - interstaff = gh_scm2double (gh_car (threshold)); + interstaff = gh_scm2double (gh_car (threshold)) * interstaff; Score_element * span_refpoint = span; while (span_refpoint->parent_l (Y_AXIS) != common) diff --git a/lily/dynamic-engraver.cc b/lily/dynamic-engraver.cc index a2da4e1b2b..8b2df51acd 100644 --- a/lily/dynamic-engraver.cc +++ b/lily/dynamic-engraver.cc @@ -268,7 +268,10 @@ Dynamic_engraver::do_process_music () { index_set_cell (cresc_p_->get_elt_property ("dynamic-drul"), LEFT, text_p_->self_scm ()); - if (finished_cresc_p_) + + if (finished_cresc_p_ + // I don't see why, but we need this check + && gh_pair_p (finished_cresc_p_->get_elt_property ("dynamic-drul"))) index_set_cell (finished_cresc_p_->get_elt_property ("dynamic-drul"), RIGHT, text_p_->self_scm ()); } @@ -302,6 +305,7 @@ Dynamic_engraver::do_removal_processing () { current_cresc_req_->origin ()->warning (_ ("unterminated (de)crescendo")); cresc_p_->suicide (); + cresc_p_ = 0; } } diff --git a/lily/grace-align-item.cc b/lily/grace-align-item.cc index d58bd8e7b3..fb11733906 100644 --- a/lily/grace-align-item.cc +++ b/lily/grace-align-item.cc @@ -20,11 +20,9 @@ Grace_align_item::before_line_breaking (SCM smob) Score_element*me = unsmob_element (smob); SCM space = me->get_elt_property ("horizontal-space"); - Real ss = me->paper_l ()->get_var ("staffspace"); - me->set_elt_property ("threshold", - gh_cons (gh_double2scm (ss *gh_scm2double (space)), - gh_double2scm (infinity_f))); + gh_cons (space, + gh_double2scm (infinity_f))); dynamic_cast(me)->column_l ()->set_elt_property ("contains-grace", SCM_BOOL_T); return SCM_UNSPECIFIED; diff --git a/lily/hyphen-spanner.cc b/lily/hyphen-spanner.cc index 50259cc314..a798afe422 100644 --- a/lily/hyphen-spanner.cc +++ b/lily/hyphen-spanner.cc @@ -15,6 +15,7 @@ #include "molecule.hh" #include "paper-def.hh" #include "hyphen-spanner.hh" +#include "paper-column.hh" #include "spanner.hh" #include "item.hh" @@ -60,7 +61,28 @@ Hyphen_spanner::brew_molecule (SCM smob) */ if(l < w) l = sqrt(l*w); - + else + { + /* OK, we have a problem. Usually this means that we're on the + first column, and we have a long lyric which extends to near + the offset for stuff */ + /* This test for being on the first column has been shamelessly + ripped from spanner.cc */ + Paper_column *sc = dynamic_cast (sp->get_bound(LEFT)->column_l()); + if (sc != NULL && + sc->break_status_dir () == RIGHT) + { + /* We are on the first column, so it's probably harmless to + get the minimum length back by extending leftwards into + the space under the clef/key sig/time sig */ + bounds[LEFT] = bounds[RIGHT] - l; + } + else + { + /* We can't get the length desired. Maybe we should warn. */ + l = w; + } + } Box b (Interval (-l/2,l/2), Interval (h,h+th)); Molecule mol (sp->lookup_l ()->filledbox (b)); mol.translate_axis (bounds.center () @@ -80,3 +102,4 @@ Hyphen_spanner::Hyphen_spanner (Spanner*s) { elt_l_ = s; } + diff --git a/lily/include/align-interface.hh b/lily/include/align-interface.hh index d17392f3b3..f570a60509 100644 --- a/lily/include/align-interface.hh +++ b/lily/include/align-interface.hh @@ -14,25 +14,39 @@ #include "lily-proto.hh" /* - TODO: rewrite this comment. - + Order elements top to bottom/left to right/right to left etc. + + + ******* - Order elements top to bottom/left to right/right to left etc.. + element properties + + stacking-dir -- stack contents of elements in which direction ? - TODO: implement padding. + align-dir -- Which side to align? -1: left side, 0: centered (around + center_l_ if not nil, or around center of width), 1: right side - document usage of this. + threshold -- (cons MIN MAX), where MIN and MAX are dimensions in + staffspace + alignment-done -- boolean to administrate whether we've done the alignment already (to ensure that the process is done only once) + group-center-element -- element which will be at the center of the group + after aligning (when using Align_interface::center_on_element) + elements -- to be aligned elements + + axes -- list of axis numbers. Should contain only one number. + ******* - element properties + Reads the following from its elements + + + minimum-space -- (cons LEFT RIGHT) - stacking-dir - - Which side to align? -1: left side, 0: centered (around - center_l_ if not nil, or around center of width), 1: right side + extra-space -- (cons LEFT RIGHT) + */ struct Align_interface { static Real alignment_callback (Score_element *,Axis); diff --git a/lily/include/beam.hh b/lily/include/beam.hh index 2310752807..cd917f8d60 100644 --- a/lily/include/beam.hh +++ b/lily/include/beam.hh @@ -39,7 +39,11 @@ damping -- damping factor (real). - + outer-stem-length-limit -- catch suspect beam slopes, set slope to zero if + outer stem is lengthened more than this (in staffspace) + + slope-limit -- set slope to zero if slope is running away steeper than this. + */ class Beam { diff --git a/lily/include/hyphen-spanner.hh b/lily/include/hyphen-spanner.hh index e8947a4209..fb114a914a 100644 --- a/lily/include/hyphen-spanner.hh +++ b/lily/include/hyphen-spanner.hh @@ -17,8 +17,20 @@ The length of the hyphen line should stretch based on the size of the gap between syllables. + +properties: + + thickness -- thickness of line (in stafflinethickness) + + height -- vertical offset (in staffspace) + + minimum-length -- try to make the hyphens at least this long. Also works + as a scaling parameter for the length + + word-space -- elongate left by this much (FIXME: cumbersome semantics) + */ -struct Hyphen_spanner // interface +struct Hyphen_spanner { public: Spanner* elt_l_; diff --git a/lily/include/music-iterator.hh b/lily/include/music-iterator.hh index 25d099eccc..1709a5d8e8 100644 --- a/lily/include/music-iterator.hh +++ b/lily/include/music-iterator.hh @@ -35,16 +35,28 @@ thus changing the state of the interpretation context. get_music (M) -- return all events starting at M (pre: no events - before M). + before M). No side-effects - skip (M) -- remove all events at M from the pending queue. + skip (M) -- remove all events starting before M (leave the ones that + start M). no side-effects on interpretation context + + TODO: + + merge pending_moment and process. + */ class Music_iterator { +protected: + Moment music_length_; + public: VIRTUAL_COPY_CONS (Music_iterator); + Moment music_length_mom () const; + + Music_iterator (); Music_iterator (Music_iterator const&); virtual ~Music_iterator (); @@ -54,7 +66,7 @@ public: then its children. Returns the iterator that succeeded */ Music_iterator * try_music (Music *) const; - + /** The translation unit that we this iterator is reporting to now. */ diff --git a/lily/include/part-combine-music-iterator.hh b/lily/include/part-combine-music-iterator.hh index 12ffb1aa12..32a6bc951c 100644 --- a/lily/include/part-combine-music-iterator.hh +++ b/lily/include/part-combine-music-iterator.hh @@ -39,6 +39,7 @@ private: Moment first_until_; Moment second_until_; int state_; + String suffix_; }; #endif /* PART_COMBINE_MUSIC_ITERATOR_HH */ diff --git a/lily/include/sequential-music-iterator.hh b/lily/include/sequential-music-iterator.hh index 92f0ecea5c..d4f83c4585 100644 --- a/lily/include/sequential-music-iterator.hh +++ b/lily/include/sequential-music-iterator.hh @@ -26,8 +26,8 @@ public: virtual void construct_children (); virtual Moment pending_moment () const; virtual bool ok () const; - virtual SCM get_music (Moment)const; virtual void skip (Moment); + virtual SCM get_music (Moment)const; protected: virtual void process (Moment); @@ -39,12 +39,7 @@ private: SCM cursor_; Music_iterator * iter_p_; - /* - perhaps these can be virtual and protected iso. private? - */ - void start_next_element(); - void leave_element(); - void set_sequential_music_translator(); + void descend_to_child (); }; #endif // SEQUENTIAL_MUSIC_ITERATOR_HH diff --git a/lily/include/simple-music-iterator.hh b/lily/include/simple-music-iterator.hh index c9b861dce3..963eb0c616 100644 --- a/lily/include/simple-music-iterator.hh +++ b/lily/include/simple-music-iterator.hh @@ -14,7 +14,7 @@ class Simple_music_iterator : public Music_iterator { protected: - Moment length_mom_; + Moment last_processed_mom_; public: VIRTUAL_COPY_CONS (Music_iterator); @@ -22,9 +22,8 @@ public: Simple_music_iterator (Simple_music_iterator const &); virtual void process (Moment); virtual bool ok ()const; - virtual void skip (Moment); virtual Moment pending_moment ()const; - virtual void construct_children (); + virtual void skip (Moment); }; #endif /* SIMPLE_MUSIC_ITERATOR_HH */ diff --git a/lily/include/slur-bezier-bow.hh b/lily/include/slur-bezier-bow.hh index 96b6cd0420..a899dc46f6 100644 --- a/lily/include/slur-bezier-bow.hh +++ b/lily/include/slur-bezier-bow.hh @@ -34,7 +34,7 @@ public: Real hinf, Real r0); Bezier get_bezier () const; - void minimise_enclosed_area (Paper_def* paper_l); + void minimise_enclosed_area (Paper_def* paper_l, Real beauty); Real fit_factor () const; void blow_fit (); Real enclosed_area_f () const; diff --git a/lily/include/slur.hh b/lily/include/slur.hh index 001c8fa19f..349b549dad 100644 --- a/lily/include/slur.hh +++ b/lily/include/slur.hh @@ -17,7 +17,17 @@ valid areas for the middle control points. Used in de_uglyfy. They are a bit empirical. - + details -- alist containing contaning a few magic constants. + + note-columns -- list of elt pointers to note columns. + + attachment -- cons of symbols, '(LEFT-TYPE . RIGHT-TYPE), where + both types may be alongside-stem, stem, head or loose-end + + direction -- up or down? + + y-free -- ? + */ class Slur { diff --git a/lily/line-of-score.cc b/lily/line-of-score.cc index 9af28cc404..bc70174dbc 100644 --- a/lily/line-of-score.cc +++ b/lily/line-of-score.cc @@ -322,7 +322,7 @@ Line_of_score::post_processing (bool last_line) gh_double2scm (height), SCM_UNDEFINED)); - Real il = paper_l ()->get_var ("interline"); + Real il = paper_l ()->get_var ("staffspace"); /* all elements. diff --git a/lily/mark-engraver.cc b/lily/mark-engraver.cc index 9ada64765f..d58823470f 100644 --- a/lily/mark-engraver.cc +++ b/lily/mark-engraver.cc @@ -127,7 +127,7 @@ Mark_engraver::create_items (Request *rq) { text_p_ ->set_elt_property ("padding", - gh_double2scm(paper_l ()->get_var ("interline"))); + gh_double2scm(paper_l ()->get_var ("staffspace"))); } diff --git a/lily/music-iterator.cc b/lily/music-iterator.cc index 3806c4e7f7..8c3c2fe3a6 100644 --- a/lily/music-iterator.cc +++ b/lily/music-iterator.cc @@ -51,6 +51,7 @@ Music_iterator::Music_iterator (Music_iterator const& src) // clone_i_ = src.clone_i_ + 1; handle_ = *src.handle_.clone (); music_l_ = src.music_l_; + music_length_ = src.music_length_; } Music_iterator::~Music_iterator () @@ -85,12 +86,6 @@ Music_iterator::pending_moment () const } -void -Music_iterator::skip (Moment) -{ - assert (0); -} - void Music_iterator::process (Moment) { @@ -102,6 +97,11 @@ Music_iterator::ok () const return false; } +void +Music_iterator::skip (Moment ) +{ +} + SCM Music_iterator::get_music (Moment)const { @@ -156,9 +156,18 @@ Music_iterator::static_get_iterator_p (Music *m) } p->music_l_ = m; + p->music_length_ = m->length_mom (); + return p; } + +Moment +Music_iterator::music_length_mom() const +{ + return music_length_; +} + void Music_iterator::init_translator (Music *m, Translator_group *report_l) { diff --git a/lily/music-wrapper-iterator.cc b/lily/music-wrapper-iterator.cc index c052d14ff5..132ba004d4 100644 --- a/lily/music-wrapper-iterator.cc +++ b/lily/music-wrapper-iterator.cc @@ -18,7 +18,10 @@ Music_wrapper_iterator::Music_wrapper_iterator () Music_wrapper_iterator::Music_wrapper_iterator (Music_wrapper_iterator const &src) : Music_iterator (src) { - child_iter_p_ = src.child_iter_p_->clone (); + if (src.child_iter_p_) + child_iter_p_ = src.child_iter_p_->clone (); + else + child_iter_p_ = 0; } Music_wrapper_iterator::~Music_wrapper_iterator () @@ -39,10 +42,18 @@ Music_wrapper_iterator::ok () const { return child_iter_p_ && child_iter_p_->ok (); } - void Music_wrapper_iterator::skip (Moment m) { + /* + FIXME: should make sure that the initial try_music () is skipped as + well, if you would do + + iter = get_iterator (Side_effect_music); // eg. property setting + iter->skip (1/2) + iter->process () + + */ child_iter_p_->skip (m); } diff --git a/lily/part-combine-music-iterator.cc b/lily/part-combine-music-iterator.cc index 5673b9fa77..754b1023bb 100644 --- a/lily/part-combine-music-iterator.cc +++ b/lily/part-combine-music-iterator.cc @@ -128,9 +128,12 @@ Part_combine_music_iterator::get_state (Moment) { int state = UNKNOWN; Part_combine_music const *p = dynamic_cast (music_l_); - Translator_group *first_translator = first_iter_p_->report_to_l ()->find_create_translator_l (p->what_str_, "one"); + Translator_group *first_translator = first_iter_p_->report_to_l ()->find_create_translator_l (p->what_str_, "one" + suffix_); SCM s = first_translator->get_property (ly_symbol2scm ("changeMoment")); + if (!gh_pair_p (s)) + return state; + Moment change_mom = *unsmob_moment (gh_car (s)); Moment diff_mom = *unsmob_moment (gh_cdr (s)); @@ -139,30 +142,42 @@ Part_combine_music_iterator::get_state (Moment) if (!now.mod_rat (change_mom)) { SCM interval = SCM_BOOL_F; - Moment first_mom = first_until_ - now; - Moment second_mom = second_until_ - now; + if (first_until_ < now) + first_until_ = now; + if (second_until_ < now) + second_until_ = now; + + Moment first_mom = first_until_; + Moment second_mom = second_until_; + Moment diff_until = diff_mom + now; bool first = true; Music_iterator *first_iter = first_iter_p_->clone (); Music_iterator *second_iter = second_iter_p_->clone (); - while ((first_mom ok () || second_iter->ok ())) + + Moment last_pending (-1); + Moment pending = now; + while (now < diff_until + && (first_iter->ok () || second_iter->ok ()) + + // urg, this is a hack, haven't caught this case yet + && (pending != last_pending)) { - Moment m; if (!second_iter->ok ()) - m = first_iter->pending_moment (); + pending = first_iter->pending_moment (); else if (!first_iter->ok ()) - m = second_iter->pending_moment (); + pending = second_iter->pending_moment (); else - m = first_iter->pending_moment () pending_moment (); + pending = first_iter->pending_moment () pending_moment (); + last_pending = pending; Array first_pitches; Array first_durations; - get_music_info (m, first_iter, &first_pitches, &first_durations); + get_music_info (pending, first_iter, &first_pitches, &first_durations); Array second_pitches; Array second_durations; - get_music_info (m, second_iter, &second_pitches, &second_durations); + get_music_info (pending, second_iter, &second_pitches, &second_durations); if (first_pitches.size () && second_pitches.size ()) { @@ -175,36 +190,16 @@ Part_combine_music_iterator::get_state (Moment) { first_durations.sort (Duration::compare); first_mom += first_durations.top ().length_mom (); - if (first && !first_pitches.empty ()) - first_until_ = first_mom + now; } if (second_durations.size ()) { second_durations.sort (Duration::compare); second_mom += second_durations.top ().length_mom (); - if (first && !second_pitches.empty ()) - second_until_ = second_mom + now; } - first = false; - -#if 0 /* DEBUG */ - printf ("now: %s\n", now.str ().ch_C ()); - printf ("first: "); - for (int i = 0; i < first_pitches.size (); i++) - { - printf ("%s, ", first_pitches[i].str ().ch_C ()); - } - printf ("\nsecond: "); - for (int i = 0; i < second_pitches.size (); i++) - { - printf ("%s, ", second_pitches[i].str ().ch_C ()); - } - printf ("\n"); -#endif if (!first_pitches.empty () && second_pitches.empty () - && !(second_until_ > now)) + && !(second_until_ > now)) { state |= UNRELATED; state &= ~UNISILENCE; @@ -249,6 +244,8 @@ Part_combine_music_iterator::get_state (Moment) if (!(state & ~(UNIRHYTHM | UNISILENCE))) state |= UNISILENCE; } + else if (!state) + state |= UNRELATED; else state &= ~(UNISILENCE); @@ -269,18 +266,17 @@ Part_combine_music_iterator::get_state (Moment) state &= ~(SPLIT_INTERVAL); } -#if 0 - Moment next = (first_mom ok ()) - first_iter->skip (next); - if (second_iter->ok ()) - second_iter->skip (next); -#else + if (first && !first_pitches.empty ()) + first_until_ = first_mom; + if (first && !second_pitches.empty ()) + second_until_ = second_mom; + first = false; + if (first_iter->ok ()) - first_iter->skip (first_mom + now); + first_iter->skip (pending); if (second_iter->ok ()) - second_iter->skip (second_mom + now); -#endif + second_iter->skip (pending); + now = pending; } delete first_iter; delete second_iter; @@ -297,8 +293,17 @@ Part_combine_music_iterator::process (Moment m) - Use three named contexts (be it Thread or Voice): one, two, solo. Let user pre-set (pushproperty) stem direction, remove dynamic-engraver, and such. + + **** Tried this, but won't work: + + Consider thread switching: threads "one", "two" and "both". + User can't pre-set the (most important) stem direction at + thread level! */ + if (suffix_.empty_b ()) + suffix_ = first_iter_p_->report_to_l ()->daddy_trans_l_->id_str_.cut_str (3, INT_MAX); + int state = get_state (m); if (state) state_ = state; @@ -307,25 +312,25 @@ Part_combine_music_iterator::process (Moment m) Part_combine_music const *p = dynamic_cast (music_l_); - bool combined_b = first_iter_p_->report_to_l ()->daddy_trans_l_ + + bool previously_combined_b = first_iter_p_->report_to_l ()->daddy_trans_l_ == second_iter_p_->report_to_l ()->daddy_trans_l_; - String to_id = combined_b ? "one" : "two"; - if ((!(state & UNIRHYTHM) && combined_b) - || ((state & SPLIT_INTERVAL) && combined_b) - || ((state & (SOLO1 | SOLO2)) && combined_b) - || (((state & (UNIRHYTHM | UNISILENCE)) - && !combined_b && !(state & SPLIT_INTERVAL) - && !(state & (SOLO1 | SOLO2))))) - { - combined_b = !combined_b; - to_id = combined_b ? "one" : "two"; - change_to (second_iter_p_, p->what_str_, to_id); - } + bool combine_b = previously_combined_b; + + if (!(state & UNIRHYTHM) + || (state & SPLIT_INTERVAL) + || (state & (SOLO1 | SOLO2))) + combine_b = false; + else if (state & (UNIRHYTHM | UNISILENCE)) + combine_b = true; + if (combine_b != previously_combined_b) + change_to (second_iter_p_, p->what_str_, (combine_b ? "one" : "two") + + suffix_); - Translator_group *first_translator = first_iter_p_->report_to_l ()->find_create_translator_l (p->what_str_, "one"); - Translator_group *second_translator = second_iter_p_->report_to_l ()->find_create_translator_l (p->what_str_, "two"); + Translator_group *first_translator = first_iter_p_->report_to_l ()->find_create_translator_l (p->what_str_, "one" + suffix_); + Translator_group *second_translator = second_iter_p_->report_to_l ()->find_create_translator_l (p->what_str_, "two" + suffix_); /* hmm diff --git a/lily/rest-collision.cc b/lily/rest-collision.cc index f5605bc667..952bded8fa 100644 --- a/lily/rest-collision.cc +++ b/lily/rest-collision.cc @@ -172,7 +172,7 @@ Rest_collision::do_shift (Score_element *me, SCM elts) return SCM_UNSPECIFIED; // staff ref'd? - Real staff_space = me->paper_l()->get_var ("interline"); + Real staff_space = me->paper_l()->get_var ("staffspace"); /* FIXME staff_space = rcol->rests[0]->staff_space (); diff --git a/lily/script.cc b/lily/script.cc index c4c875f563..333593a2d8 100644 --- a/lily/script.cc +++ b/lily/script.cc @@ -28,7 +28,7 @@ Script::get_molecule(Score_element * me, Direction d) } else if (key == ly_symbol2scm ("accordion")) { - return me->lookup_l ()->accordion (gh_cdr (s), me->paper_l()->get_var("interline")); + return me->lookup_l ()->accordion (gh_cdr (s), me->paper_l()->get_var("staffspace")); } else assert (false); diff --git a/lily/sequential-music-iterator.cc b/lily/sequential-music-iterator.cc index 8e78b281e9..bfeb3cd925 100644 --- a/lily/sequential-music-iterator.cc +++ b/lily/sequential-music-iterator.cc @@ -24,22 +24,24 @@ Sequential_music_iterator::Sequential_music_iterator (Sequential_music_iterator { cursor_ = src.cursor_; here_mom_ = src.here_mom_; - iter_p_ = src.iter_p_->clone (); + if (src.iter_p_) + iter_p_ = src.iter_p_->clone (); + else + iter_p_ = 0; } Sequential_music_iterator::~Sequential_music_iterator() { if (iter_p_) { - /* if (iter_p_->ok () ) +#if 0 + if (iter_p_->ok () ) music_l_->origin ()->warning (_ ("Must stop before this music ends")); - */ +#endif delete iter_p_; - iter_p_ = 0; } } - void Sequential_music_iterator::construct_children() { @@ -47,39 +49,28 @@ Sequential_music_iterator::construct_children() while (gh_pair_p (cursor_ )) { - start_next_element(); - if (!iter_p_->ok()) - { - leave_element(); - } - else + iter_p_ = get_iterator_p (unsmob_music (gh_car (cursor_))); + + if (iter_p_->ok()) { - set_sequential_music_translator(); - break; + descend_to_child (); + return; } - } -} - -void -Sequential_music_iterator::leave_element() -{ - delete iter_p_; - iter_p_ =0; - Moment elt_time = unsmob_music (gh_car (cursor_))->length_mom (); - here_mom_ += elt_time; - cursor_ =gh_cdr (cursor_); -} -void -Sequential_music_iterator::start_next_element() -{ - assert (!iter_p_); - iter_p_ = get_iterator_p (unsmob_music (gh_car (cursor_))); + delete iter_p_ ; + iter_p_ =0; + cursor_ = gh_cdr (cursor_); + } } + /* + move to context of child iterator if it is deeper down in the + hierarchy. + */ void -Sequential_music_iterator::set_sequential_music_translator() +Sequential_music_iterator::descend_to_child () { + Translator_group * child_report = child_report = iter_p_->report_to_l (); if (dynamic_cast (iter_p_)) child_report = child_report->daddy_trans_l_; @@ -88,34 +79,9 @@ Sequential_music_iterator::set_sequential_music_translator() set_translator (child_report); } -void -Sequential_music_iterator::skip (Moment until) -{ - while (1) - { - SCM nm = iter_p_->get_music (until - here_mom_); - - Moment m = 0; - for (SCM i = nm; gh_pair_p(i); i = gh_cdr (i)) - m = m >? unsmob_music (gh_car (i))->length_mom (); - - delete iter_p_; - - cursor_ = gh_cdr (cursor_); - - iter_p_ = 0; - if (gh_pair_p (cursor_)) - iter_p_ = get_iterator_p (unsmob_music (gh_car (cursor_))); - else - return; - - if (m > Moment (0)) - return; - } -} /* - [todo: translate] + Hier staat in feite: haal alle muziek op (startend op tijd HERE) tot je iets met lengte L > 0 tegenkomt. Aangezien de preconditie is dat @@ -136,13 +102,13 @@ Sequential_music_iterator::skip (Moment until) redenering helderder is. */ -#if 1 SCM Sequential_music_iterator::get_music (Moment until)const { - if (until < pending_moment ()) - return SCM_EOL; SCM s = SCM_EOL; + if (until < pending_moment ()) + return s; + SCM curs = cursor_; Music_iterator * iter = iter_p_->clone (); while (1) @@ -167,71 +133,71 @@ Sequential_music_iterator::get_music (Moment until)const } return s; } -#else -SCM -Sequential_music_iterator::get_music (Moment until) const +/* + Skip events till UNTIL. We don't do any other side effects (such as + moving descending to child iterator contexts, because they might + depend on \context specs and \translator changes being executed + + */ +void +Sequential_music_iterator::skip (Moment until) { - Sequential_music_iterator* i = dynamic_cast (this->clone ()); - SCM s = SCM_EOL; - while (1) - { - Moment local_until = until - i->here_mom_; - while (i->iter_p_->ok ()) - { - Moment here = i->iter_p_->pending_moment (); - if (here != local_until) - goto finalise; - - s = gh_append2 (i->iter_p_->get_music (local_until), s); - i->iter_p_->skip (local_until); - } - - if (!i->iter_p_->ok ()) - { - i->leave_element (); - - if (gh_pair_p (i->cursor_)) - i->start_next_element (); - else - goto finalise; - } - } - finalise: - delete i; - return s; + SCM curs = cursor_; + while (1) + { + Moment l =iter_p_->music_length_mom (); + if (l >= until - here_mom_) + iter_p_->skip (until - here_mom_); + + if (iter_p_->ok ()) + return ; + + here_mom_ = here_mom_ + l; + delete iter_p_; + iter_p_ =0; + + curs = gh_cdr (curs); + + if (!gh_pair_p (curs)) + return ; + else + iter_p_ = get_iterator_p (unsmob_music (gh_car (curs))); + } } -#endif - void Sequential_music_iterator::process (Moment until) { - if (ok ()) + while (1) { - while (1) - { - Moment local_until = until - here_mom_; - while (iter_p_->ok ()) - { - Moment here = iter_p_->pending_moment (); - if (here != local_until) - return ; - - iter_p_->process (local_until); - } + iter_p_->process (until - here_mom_); + + /* + if the iter is still OK, there must be events left that have + + TIME > LEFT - if (!iter_p_->ok ()) - { - set_sequential_music_translator (); - leave_element (); - - if (gh_pair_p (cursor_)) - start_next_element (); - else - return ; - } - } + */ + if (iter_p_->ok ()) + return ; + + here_mom_ += iter_p_->music_length_mom (); + + descend_to_child (); + delete iter_p_; + iter_p_ =0; + + cursor_ = gh_cdr (cursor_); + + if (!gh_pair_p (cursor_)) + return ; + else + { + delete iter_p_; + iter_p_ = get_iterator_p (unsmob_music (gh_car (cursor_))); + } } + } Moment diff --git a/lily/simple-music-iterator.cc b/lily/simple-music-iterator.cc index b185f8ac24..c4a78e9583 100644 --- a/lily/simple-music-iterator.cc +++ b/lily/simple-music-iterator.cc @@ -21,19 +21,12 @@ Simple_music_iterator::Simple_music_iterator (Simple_music_iterator const &src) : Music_iterator (src) { last_processed_mom_ = src.last_processed_mom_; - length_mom_ = src.length_mom_; -} - -void -Simple_music_iterator::construct_children () -{ - length_mom_ = music_l_->length_mom (); } bool Simple_music_iterator::ok ()const { - return last_processed_mom_ < length_mom_; + return last_processed_mom_ < music_length_mom (); } Moment @@ -42,7 +35,7 @@ Simple_music_iterator::pending_moment ()const if (music_l_) return Moment (0); else - return length_mom_; + return music_length_mom (); } void diff --git a/lily/slur-bezier-bow.cc b/lily/slur-bezier-bow.cc index e23f528a24..0240e99f87 100644 --- a/lily/slur-bezier-bow.cc +++ b/lily/slur-bezier-bow.cc @@ -144,12 +144,10 @@ Slur_bezier_bow::area_x_gradients_array (Real area) algorithm, instead of this homebrew. */ void -Slur_bezier_bow::minimise_enclosed_area (Paper_def* paper_l) +Slur_bezier_bow::minimise_enclosed_area (Paper_def* paper_l, Real beauty) { Real length = curve_.control_[3][X_AXIS]; - - Real sb = paper_l->get_var ("slur_beautiful"); - Real beautiful = sb * length * slur_height (length, h_inf_, r_0_); + Real beautiful = beauty * length * slur_height (length, h_inf_, r_0_); DEBUG_OUT << to_str ("Beautiful: %f\n", beautiful); DEBUG_OUT << to_str ("Length: %f\n", length); diff --git a/lily/slur.cc b/lily/slur.cc index ca200b2b24..0ef9b48299 100644 --- a/lily/slur.cc +++ b/lily/slur.cc @@ -135,6 +135,8 @@ Slur::set_extremities (Score_element*me) { // for (SCM s = get_elt_property ("slur-extremity-rules"); s != SCM_EOL; s = gh_cdr (s)) + + // FIXME: global GUILE scope used! for (SCM s = scm_eval2 (ly_symbol2scm ("slur-extremity-rules"), SCM_EOL); s != SCM_EOL; s = gh_cdr (s)) @@ -190,9 +192,9 @@ Slur::broken_trend_offset (Score_element *me, Direction dir) Offset o; if (Spanner *mother = dynamic_cast (me->original_l_)) { - for (int i = dir == LEFT ? 0 : mother->broken_into_l_arr_.size (); - dir == LEFT ? i < mother->broken_into_l_arr_.size () : i; - dir == LEFT ? i++ : --i) + for (int i = dir == LEFT ? 0 : mother->broken_into_l_arr_.size () - 1; + dir == LEFT ? i < mother->broken_into_l_arr_.size () : i > 0; + dir == LEFT ? i++ : i--) { if (mother->broken_into_l_arr_[i - dir] == me) { @@ -286,7 +288,9 @@ Slur::get_attachment (Score_element*me,Direction dir, } } - + + + // FIXME SCM l = scm_assoc (scm_listify (a, gh_int2scm (stem ? Stem::get_direction (stem) : 1 * dir), @@ -353,7 +357,8 @@ Slur::encompass_offset (Score_element*me, /* leave a gap: slur mustn't touch head/stem */ - o[Y_AXIS] += dir * me->paper_l ()->get_var ("slur_y_free"); + o[Y_AXIS] += dir * gh_scm2double (me->get_elt_property ("y-free")) * + me->paper_l ()->get_var ("staffspace"); return o; } @@ -478,10 +483,14 @@ Slur::brew_molecule (SCM smob) void Slur::set_control_points (Score_element*me) { - Real staff_space = Staff_symbol_referencer::staff_space ((Score_element*)me); - Real h_inf = me->paper_l ()->get_var ("slur_height_limit_factor") * - staff_space; - Real r_0 = me->paper_l ()->get_var ("slur_ratio"); + Real staff_space = Staff_symbol_referencer::staff_space ((Score_element*)me); + + SCM details = me->get_elt_property ("details"); + SCM h_inf_scm = scm_assq (ly_symbol2scm ("height-limit"), details); + SCM r_0_scm = scm_assq (ly_symbol2scm ("ratio"), details); + + Real r_0 = gh_scm2double (gh_cdr (r_0_scm)); + Real h_inf = staff_space * gh_scm2double (gh_cdr (h_inf_scm)); Slur_bezier_bow bb (get_encompass_offset_arr (me), Directional_element_interface::get (me), @@ -491,14 +500,21 @@ Slur::set_control_points (Score_element*me) { Real length = bb.curve_.control_[3][X_AXIS]; Real default_height = slur_height (length, h_inf, r_0); - bb.minimise_enclosed_area (me->paper_l()); - - Real bff = me->paper_l ()->get_var ("slur_force_blowfit"); + + SCM ssb = scm_assq (ly_symbol2scm ("beautiful"), details); + Real sb =gh_scm2double (gh_cdr (ssb)); + + bb.minimise_enclosed_area (me->paper_l(), sb); + SCM sbf = scm_assq (ly_symbol2scm ("force-blowfit"), details); + Real bff = 1.0; + if (gh_pair_p (sbf) && gh_number_p (gh_cdr (sbf))) + bff = gh_scm2double (gh_cdr (sbf)); + bb.curve_.control_[1][Y_AXIS] *= bff; bb.curve_.control_[2][Y_AXIS] *= bff; bb.blow_fit (); - Real sb = me->paper_l ()->get_var ("slur_beautiful"); + Real beautiful = length * default_height * sb; Real area = bb.enclosed_area_f (); diff --git a/lily/spanner.cc b/lily/spanner.cc index 7272c2d91e..184c253b9c 100644 --- a/lily/spanner.cc +++ b/lily/spanner.cc @@ -104,10 +104,12 @@ Spanner::do_break_processing () span_p->set_bound(LEFT,bounds[LEFT]); span_p->set_bound(RIGHT,bounds[RIGHT]); - if (bounds[LEFT]->line_l () - && bounds[LEFT]->line_l () != bounds[RIGHT]->line_l ()) + if (!bounds[LEFT]->line_l () + + || !bounds[RIGHT]->line_l () + || bounds[LEFT]->line_l () != bounds[RIGHT]->line_l ()) { - programming_error ("bounds[LEFT]->line_l () != bounds[RIGHT]->line_l ()"); + programming_error ("bounds of spanner are invalid"); #if 0 /* lily crashes upon displaying this ... @@ -122,20 +124,6 @@ Spanner::do_break_processing () #endif span_p->suicide (); } - else if (!bounds[LEFT]->line_l ()) - { - // bounds[LEFT]->line_l ()->typeset_element (span_p); - // broken_into_l_arr_.push (span_p); - programming_error ("bounds[LEFT]->line_l () == 0"); - span_p->suicide (); - } - else if (!bounds[RIGHT]->line_l ()) - { - // bounds[RIGHT]->line_l ()->typeset_element (span_p); - // broken_into_l_arr_.push (span_p); - programming_error ("bounds[RIGHT]->line_l () == 0"); - span_p->suicide (); - } else { bounds[LEFT]->line_l ()->typeset_element (span_p); diff --git a/lily/staff-symbol-referencer.cc b/lily/staff-symbol-referencer.cc index 85b52f5aab..b4a2351ea3 100644 --- a/lily/staff-symbol-referencer.cc +++ b/lily/staff-symbol-referencer.cc @@ -53,7 +53,7 @@ Staff_symbol_referencer::staff_space (Score_element*me) if (st) return Staff_symbol::staff_space (st); else if (me->pscore_l_ && me->paper_l ()) - return me->paper_l ()->get_var ("interline"); + return me->paper_l ()->get_var ("staffspace"); return 0.0; } diff --git a/lily/system-start-delimiter-engraver.cc b/lily/system-start-delimiter-engraver.cc index 35189db939..493be5a667 100644 --- a/lily/system-start-delimiter-engraver.cc +++ b/lily/system-start-delimiter-engraver.cc @@ -52,7 +52,7 @@ System_start_delimiter_engraver::acknowledge_element (Score_element_info inf) */ if (gh_symbol_p (gl) && gl == ly_symbol2scm ("brace") && gh_symbol_p (my_gl) && my_gl == ly_symbol2scm ("bracket")) - inf.elem_l_->translate_axis ( -paper_l ()->get_var ("interline"), X_AXIS); // ugh + inf.elem_l_->translate_axis ( -paper_l ()->get_var ("staffspace"), X_AXIS); // ugh } } diff --git a/lily/tie.cc b/lily/tie.cc index d40b0c3369..645f04b9b2 100644 --- a/lily/tie.cc +++ b/lily/tie.cc @@ -127,7 +127,7 @@ Tie::get_control_points (SCM smob) Real staff_space = Staff_symbol_referencer::staff_space (me); - Real x_gap_f = me->paper_l ()->get_var ("tie_x_gap"); + Real x_gap_f = gh_scm2double (me->get_elt_property ("x-gap")); Score_element* commonx = me->common_refpoint (me->get_bound (LEFT), X_AXIS); commonx = me->common_refpoint (me->get_bound (RIGHT), X_AXIS); @@ -167,10 +167,14 @@ Tie::get_control_points (SCM smob) } Direction dir = Directional_element_interface::get(me); - - Real h_inf = me->paper_l ()->get_var ("tie_height_limit_factor") * staff_space; - Real r_0 = me->paper_l ()->get_var ("tie_ratio"); + SCM details = me->get_elt_property ("details"); + + SCM lim // groetjes aan de chirurgendochter. + = scm_assq (ly_symbol2scm ("height-limit"),details); + + Real h_inf = gh_scm2double (gh_cdr (lim)) * staff_space; + Real r_0 = gh_scm2double (gh_cdr (scm_assq (ly_symbol2scm ("ratio"),details))); Bezier b = slur_shape (width, h_inf, r_0); @@ -224,8 +228,11 @@ Tie::get_control_points (SCM smob) Real ry = rint (y/staff_space) * staff_space; Real diff = ry - y; Real newy = y; - if (fabs (y) <= Staff_symbol_referencer::staff_radius (me) - && fabs (diff) < me->paper_l ()->get_var ("tie_staffline_clearance")) + + Real clear = staff_space * gh_scm2double (me->get_elt_property ("staffline-clearance")); + + if (fabs (y) <= Staff_symbol_referencer::staff_radius (me) + && fabs (diff) < clear) { newy = ry - 0.5 * staff_space * sign (diff) ; } diff --git a/lily/tuplet-spanner.cc b/lily/tuplet-spanner.cc index f154c010e5..34ed2efd0a 100644 --- a/lily/tuplet-spanner.cc +++ b/lily/tuplet-spanner.cc @@ -69,7 +69,7 @@ Tuplet_spanner::brew_molecule (SCM smob) Real ncw = column_arr.top ()->extent(X_AXIS).length (); Real w = dynamic_cast(me)->spanner_length () + ncw; - Real staff_space = me->paper_l ()->get_var ("interline"); + Real staff_space = me->paper_l ()->get_var ("staffspace"); Direction dir = Directional_element_interface::get (me); Real dy = gh_scm2double (me->get_elt_property ("delta-y")); SCM number = me->get_elt_property ("text"); diff --git a/lily/vertical-align-engraver.cc b/lily/vertical-align-engraver.cc index 40eba8acf7..fa4d80f0a8 100644 --- a/lily/vertical-align-engraver.cc +++ b/lily/vertical-align-engraver.cc @@ -34,7 +34,7 @@ Vertical_align_engraver::Vertical_align_engraver() void Vertical_align_engraver::do_creation_processing() { - valign_p_ =new Spanner (SCM_EOL); // todo -> basic props + valign_p_ =new Spanner (get_property ("basicVerticalAlignmentProperties")); Align_interface::set_interface (valign_p_); Align_interface::set_axis (valign_p_,Y_AXIS); valign_p_->set_elt_property ("stacking-dir", @@ -58,6 +58,7 @@ Vertical_align_engraver::do_removal_processing() valign_p_->set_elt_property ("threshold", gh_cons (min,max)); } + valign_p_->set_bound(RIGHT,unsmob_element (get_property ("currentCommandColumn"))); typeset_element (valign_p_); valign_p_ =0; diff --git a/lily/volta-spanner.cc b/lily/volta-spanner.cc index e244e6ad7c..1ce8128d9d 100644 --- a/lily/volta-spanner.cc +++ b/lily/volta-spanner.cc @@ -63,7 +63,7 @@ Volta_spanner::brew_molecule (SCM smob) no_vertical_end = false; #endif - Real staff_space = me->paper_l ()->get_var ("interline"); + Real staff_space = me->paper_l ()->get_var ("staffspace"); Real staff_thick = me->paper_l ()->get_var ("stafflinethickness"); Real half_space = staff_space / 2; Real left = dynamic_cast(me)->get_broken_left_end_align (); diff --git a/lilypond-mode.el b/lilypond-mode.el index 237f0a347d..65e7b340b0 100644 --- a/lilypond-mode.el +++ b/lilypond-mode.el @@ -79,8 +79,8 @@ (mapcar (function (lambda (x) (modify-syntax-entry (car x) (cdr x) lily-mode-syntax-table))) - '(( ?\( . "." ) ( ?\) . "." ) - ( ?\[ . "." ) ( ?\] . "." ) + '(( ?\( . "()" ) ( ?\) . ")(" ) ; need matching parens for inline lisp + ( ?\[ . "." ) ( ?\] . "." ) ( ?\{ . "(}" ) ( ?\} . "){" ) ( ?\< . "(>" )( ?\> . ")>") ( ?\$ . "." ) ( ?\% . "." ) ( ?\& . "." ) diff --git a/ly/declarations.ly b/ly/declarations.ly index a5af61a2c0..452bc2b2ca 100644 --- a/ly/declarations.ly +++ b/ly/declarations.ly @@ -37,7 +37,7 @@ melismaEnd = \property Staff.melismaBusy = ##f papersize = "a4" - +\include "engraver.ly" \include "generic-paper.ly" \include "paper20.ly" diff --git a/ly/engraver.ly b/ly/engraver.ly index 03e7cd9689..f41e94da6f 100644 --- a/ly/engraver.ly +++ b/ly/engraver.ly @@ -43,10 +43,9 @@ StaffContext=\translator { \accepts "Voice"; -}; +} -\translator{\StaffContext } -\translator { +ChoirStaffContext = \translator { \type "Engraver_group_engraver"; \name ChoirStaff; alignmentReference = \center; @@ -69,13 +68,11 @@ RhythmicStaffContext=\translator{ \consists "Output_property_engraver"; Generic_property_list = #generic-staff-properties - - barSize = 4.0 * \staffspace ; % JUNKME \consists "Pitch_squash_engraver"; \consists "Separating_line_group_engraver"; \name RhythmicStaff; - + basicBarProperties \push #'bar-size = #4 basicVoltaSpannerProperties \push #'minimum-space = #15 % urg, in \pt basicVoltaSpannerProperties \push #'padding = #5 % urg, in \pt basicStaffSymbolProperties \push #'line-count = #1 @@ -86,8 +83,8 @@ RhythmicStaffContext=\translator{ \consists "Staff_symbol_engraver"; \consistsend "Axis_group_engraver"; \accepts "Voice"; -}; -\translator{\RhythmicStaffContext} +} + VoiceContext = \translator { \type "Engraver_group_engraver"; @@ -133,7 +130,7 @@ VoiceContext = \translator { \consists "Skip_req_swallow_translator"; \accepts Thread; % bug if you leave out this! \accepts Grace; -}; +} GraceContext=\translator { \type "Grace_engraver_group"; @@ -174,11 +171,8 @@ GraceContext=\translator { basicBeamProperties \push #'beam-space-function = #(lambda (x) 0.5) weAreGraceContext = ##t - graceAccidentalSpace= 1.5 * \staffspace; % JUNKME -}; - -\translator{\GraceContext} -\translator {\VoiceContext} + graceAccidentalSpace= 1.5 ; % in staff space +} ThreadContext = \translator{ \type Engraver_group_engraver; @@ -188,9 +182,8 @@ ThreadContext = \translator{ Generic_property_list = #generic-thread-properties \consists "Property_engraver"; \name Thread; -}; +} -\translator{\ThreadContext} GrandStaffContext=\translator{ \type "Engraver_group_engraver"; \name GrandStaff; @@ -201,23 +194,19 @@ GrandStaffContext=\translator{ \consists "Property_engraver"; Generic_property_list = #generic-grand-staff-properties \accepts "Staff"; -}; -\translator{\GrandStaffContext} +} PianoStaffContext = \translator{\GrandStaffContext alignmentReference = \center; \consists "Vertical_align_engraver"; - % JUNKME - minVerticalAlign = 3.0*\staffheight; - maxVerticalAlign = 3.0*\staffheight; + basicVerticalAlignmentProperties \push #'threshold = #'(12 . 12) % \consistsend "Axis_group_engraver"; \name "PianoStaff"; - -}; -\translator{\PianoStaffContext} +} + StaffGroupContext= \translator { \type "Engraver_group_engraver"; \consists "Span_bar_engraver"; @@ -237,9 +226,8 @@ StaffGroupContext= \translator { \accepts "Lyrics"; \accepts "ChordNames"; -}; +} -\translator { \StaffGroupContext } % UGH! JUNKME LyricsVoiceContext= \translator{ @@ -255,8 +243,14 @@ LyricsVoiceContext= \translator{ \consists "Stanza_number_engraver"; phrasingPunctuation = #".,;:!?\"" -}; -\translator{ \LyricsVoiceContext } +} +NoteNamesContext = \translator { + \type "Engraver_group_engraver"; + \name NoteNames; + \consistsend "Axis_group_engraver"; + \consists "Note_name_engraver"; + \consists "Separating_line_group_engraver"; +} LyricsContext = \translator { \type "Engraver_group_engraver"; @@ -267,8 +261,7 @@ LyricsContext = \translator { \consistsend "Axis_group_engraver"; \accepts "LyricVoice"; -}; -\translator { \LyricsContext } +} ChordNameVoiceContext = \translator { \type "Engraver_group_engraver"; @@ -278,9 +271,7 @@ ChordNameVoiceContext = \translator { \consistsend "Axis_group_engraver"; \consists "Separating_line_group_engraver"; \consists "Chord_name_engraver"; -}; -\translator {\ChordNameVoiceContext} - +} ChordNameContext = \translator { \type "Engraver_group_engraver"; \name ChordNames; @@ -290,8 +281,7 @@ ChordNameContext = \translator { \consists "Output_property_engraver"; \accepts "ChordNameVoice"; \consistsend "Axis_group_engraver"; - }; -\translator { \ChordNameContext } + } ScoreWithNumbers = \translator { @@ -299,20 +289,20 @@ ScoreWithNumbers = \translator { % uncomment to bar numbers on a whole system. \consists "Bar_number_engraver"; -}; +} StupidScore = \translator { \type "Score_engraver"; \name Score; \consists "Note_heads_engraver"; -}; +} BarNumberingStaffContext = \translator { \StaffContext \consists "Mark_engraver"; -}; +} HaraKiriStaffContext = \translator { \StaffContext @@ -320,7 +310,7 @@ HaraKiriStaffContext = \translator { \consistsend "Hara_kiri_engraver"; \consists "Instrument_name_engraver"; \accepts "Voice"; -}; +} %{ The HaraKiriStaffContexts doesn't override \name, so it is still named `Staff'. @@ -331,7 +321,7 @@ HaraKiriStaffContext = \translator { OrchestralPartStaffContext = \translator { \StaffContext \consists "Mark_engraver"; -}; +} ScoreContext = \translator { \type Score_engraver; @@ -457,6 +447,8 @@ ScoreContext = \translator { (breakable . #t) (visibility-lambda . ,begin-of-line-visible) (name . "barnumber") + (padding . 1.0) + (direction . 1) ) basicBeamProperties = #basic-beam-properties @@ -504,6 +496,11 @@ ScoreContext = \translator { basicCrescendoProperties = #`( (molecule-callback . ,Crescendo::brew_molecule) (interfaces . (crescendo-interface dynamic-interface)) + (thickness . 1.0) + (shorten-for-letter . 4.0) + (height . 0.6666) + (dash-thickness . 1.2) + (dash-length . 4.0) (name . "crescendo") ) basicDotColumnProperties = #`( @@ -679,6 +676,8 @@ ScoreContext = \translator { (after-line-breaking-callback . ,Slur::after_line_breaking) (de-uglify-parameters . ( 1.5 0.8 -2.0)) + (details . ((height-limit . 2.0) (ratio . 0.333) (force-blowfit . 0.5) (beautiful . 0.5))) + (y-free . 0.75) (name . "slur") ) basicSpacingSpannerProperties =#`( @@ -746,7 +745,10 @@ ScoreContext = \translator { (interfaces . (tie-interface)) (molecule-callback . ,Tie::brew_molecule) (spacing-procedure . ,Tie::set_spacing_rods) + (staffline-clearance . 0.24) + (details . ((ratio . 0.333) (height-limit . 1.0))) (thickness . 1.2) + (x-gap . 0.2) (minimum-length . 2.5) (name . "tie") ) @@ -830,24 +832,19 @@ ScoreContext = \translator { (minimum-space . 25) (name . "volta brace") ) + basicVerticalAlignmentProperties = #`( + (axes 1) + (interfaces . (align-interface axis-group-interface)) + (name . "vertical alignment") + ) basicVerticalAxisGroupProperties = #`( (axes 1) (interfaces . (axis-group-interface)) (name . "Y-axis group") ) -}; - -\translator { \ScoreContext } +} OrchestralScoreContext= \translator { \ScoreContext - -}; - -\translator { - \type "Engraver_group_engraver"; - \name NoteNames; - \consistsend "Axis_group_engraver"; - \consists "Note_name_engraver"; - \consists "Separating_line_group_engraver"; } + diff --git a/ly/paper-as9.ly b/ly/paper-as9.ly index ba07ca8832..2c1fdb044e 100644 --- a/ly/paper-as9.ly +++ b/ly/paper-as9.ly @@ -5,8 +5,11 @@ paper_as_nine = \paper { staffheight = 9.\char; - font_large = 4.; - font_Large = 4.; +% font_large = 4.; +% font_Large = 4.; +% font_normal = 4.; + font_large = 1.; + font_Large = 1.; font_normal = 4.; font_script = 1.; diff --git a/ly/params.ly b/ly/params.ly index 85661e39d6..640a603464 100644 --- a/ly/params.ly +++ b/ly/params.ly @@ -7,9 +7,8 @@ TODO: * cleanup * use elt properties, iso. paper variables. -%} - +%} paperfile = \papersize + ".ly"; % paperfile = "a4.ly"; @@ -19,9 +18,6 @@ paperfile = \papersize + ".ly"; staffspace = \staffheight / 4.0; stafflinethickness = \staffspace / 10.0; -% deprecated -interline = \staffspace; - %{ The space taken by a note is determined by the formula @@ -69,43 +65,6 @@ arithmetic_multiplier = 0.9 * 1.32 * \staffspace ; arithmetic_basicspace = 2.0; -% -% UGH; junk these! -% - -% catch suspect beam slopes, set slope to zero if -% outer stem is lengthened more than -beam_lengthened = 0.2 * \staffspace; -% and slope is running away steeper than -beam_steep_slope = 0.2 / 1.0; - - - -%{ - Slur parameters. - - See Documentation/programmer/fonts.doc - - TODO: -> elt-properties. -%} -% Height-limit (h_inf) = factor * staff_space -slur_height_limit_factor = 2.0; -slur_ratio = 1.0 / 3.0; - -slur_thickness = 1.2 * \stafflinethickness; - -slur_force_blowfit = 0.5; -slur_beautiful = 0.5; - - -%{ -Horizontal space between centre of notehead and slur. -%} -% OSU: suggested gap = ss / 5; -slur_x_gap = \staffspace / 5.0; -slur_y_gap = 0.25 * \staffspace; -slur_y_free = 0.75 * \staffspace; -slur_x_minimum = 1.5 * \staffspace; % URG: the magic constants for area asymmetry bezier_pct_c0 = -0.2; @@ -115,27 +74,9 @@ bezier_pct_in_max = 1.2; bezier_area_steps = 1.0; -%{ - Tie parameters -%} - -tie_height_limit_factor = 1.0 ; -tie_ratio = \slur_ratio; - -% OSU: tie gap == slur gap -tie_x_gap = 0.2 * \staffspace; -tie_staffline_clearance = 2.0 *\slur_thickness; - % vertical space between lines of text. line_kern = \staffspace; -% chop off this much when next to pp / ff sign. -crescendo_shorten = 4.0 * \staffspace; -crescendo_thickness = \stafflinethickness; -crescendo_height = 0.666 * \staffspace; -crescendo_dash_thickness = 1.2*\stafflinethickness; -crescendo_dash = 4.0*\staffspace; - % optical correction amount. stemSpacingCorrection = 0.5*\staffspace; @@ -175,10 +116,23 @@ will cause scores to be set looser compression_energy_factor = 0.6; +\translator { \NoteNamesContext } +\translator { \ScoreContext } +\translator { \ChoirStaffContext} +\translator { \GraceContext} +\translator { \RhythmicStaffContext} +\translator { \StaffContext } +\translator { \VoiceContext} +\translator { \StaffGroupContext } +\translator { \ChordNameContext } +\translator { \ChordNameVoiceContext} +\translator { \GrandStaffContext} +\translator { \LyricsContext } +\translator { \ThreadContext} +\translator { \PianoStaffContext} +\translator { \LyricsVoiceContext } -\include "engraver.ly"; - diff --git a/make/out/lilypond.lsm b/make/out/lilypond.lsm index bf81c2fc7d..546aa7ca7f 100644 --- a/make/out/lilypond.lsm +++ b/make/out/lilypond.lsm @@ -1,15 +1,15 @@ Begin3 Title: LilyPond -Version: 1.3.88 -Entered-date: 20SEP00 +Version: 1.3.89 +Entered-date: 23SEP00 Description: Keywords: music notation typesetting midi fonts engraving Author: hanwen@cs.uu.nl (Han-Wen Nienhuys) janneke@gnu.org (Jan Nieuwenhuizen) Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys) Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert - 1000k lilypond-1.3.88.tar.gz + 1000k lilypond-1.3.89.tar.gz Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/ - 1000k lilypond-1.3.88.tar.gz + 1000k lilypond-1.3.89.tar.gz Copying-policy: GPL End diff --git a/make/out/lilypond.spec b/make/out/lilypond.spec index 479bbe52b2..47166fb29e 100644 --- a/make/out/lilypond.spec +++ b/make/out/lilypond.spec @@ -1,9 +1,9 @@ Name: lilypond -Version: 1.3.88 +Version: 1.3.89 Release: 1 Copyright: GPL Group: Applications/Publishing -Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.88.tar.gz +Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.89.tar.gz Summary: A program for printing sheet music. URL: http://www.cs.uu.nl/~hanwen/lilypond # Icon: lilypond-icon.gif diff --git a/mutopia/Coriolan/bassi-part.ly b/mutopia/Coriolan/bassi-part.ly index ab28f5de68..00184d02d0 100644 --- a/mutopia/Coriolan/bassi-part.ly +++ b/mutopia/Coriolan/bassi-part.ly @@ -9,29 +9,7 @@ copyright = "public domain"; \version "1.3.59"; -\include "global.ly" -\include "violoncello.ly" -\include "contrabasso.ly" - -bassiGroup = \context PianoStaff = bassi_group \notes < - %\global - \context StaffCombineStaff=one { - \clef "bass"; - \key es \major; - \skip 1*314; - \bar "|."; - } - \context StaffCombineStaff=two { - \clef "bass"; - \key es \major; - \skip 1*314; - \bar "|."; - } - - \context StaffCombineStaff=one \partcombine StaffCombineStaff - \context StaffCombineVoice=one \violoncello - \context StaffCombineVoice=two \contrabasso -> +\include "bassi.ly" \score{ \bassiGroup diff --git a/mutopia/Coriolan/bassi.ly b/mutopia/Coriolan/bassi.ly new file mode 100644 index 0000000000..785c8405dd --- /dev/null +++ b/mutopia/Coriolan/bassi.ly @@ -0,0 +1,41 @@ +\header{ +filename = "bassi.ly"; +% %title = "Ouvert\\"ure zu Collins Trauerspiel \\"Coriolan\\" Opus 62"; +description = ""; +composer = "Ludwig van Beethoven (1770-1827)"; +enteredby = "JCN"; +copyright = "public domain"; +} + +\version "1.3.59"; + +\include "global.ly" +\include "violoncello.ly" +\include "contrabasso.ly" + +bassiGroup = \context PianoStaff = bassi_group \notes < + %\global + \context StaffCombineStaff=oneBassi { + \property StaffCombineStaff.midiInstrument = #"cello" + \property StaffCombineStaff.instrument = #"Violoncello\ne\nContrabasso" + \property StaffCombineStaff.instr = #"Vc." + \clef "bass"; + \key es \major; + \skip 1*314; + \bar "|."; + } + \context StaffCombineStaff=twoBassi { + \property StaffCombineStaff.midiInstrument = #"contrabass" + \property StaffCombineStaff.instrument = #"Contrabasso" + \property StaffCombineStaff.instr = #"Cb." +% \property StaffCombineStaff.transposing = #-12 + \clef "bass"; + \key es \major; + \skip 1*314; + \bar "|."; + } + + \context StaffCombineStaff=oneBassi \partcombine StaffCombineStaff + \context StaffCombineVoice=one \violoncello + \context StaffCombineVoice=two \contrabasso +> diff --git a/mutopia/Coriolan/contrabasso.ly b/mutopia/Coriolan/contrabasso.ly index 1e8f4c1a24..77544490e5 100644 --- a/mutopia/Coriolan/contrabasso.ly +++ b/mutopia/Coriolan/contrabasso.ly @@ -18,7 +18,6 @@ contrabasso = \notes \relative c { c'1\ff ~ | c | f,4-. r r2 | - \property Staff.instr = #"Vc.\nCb." r1 | c'1\ff ~ | c | @@ -30,8 +29,8 @@ contrabasso = \notes \relative c { c4 r4 r2 | c4 r4 r2 | r1 | - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" c'4.\< c8 bes4. bes8 | %20 @@ -46,8 +45,8 @@ contrabasso = \notes \relative c { % copied 14 from cello - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" bes'4.\< bes8 as4. as8 | g4 \!g4-.\f r2 | R1 @@ -82,8 +81,8 @@ contrabasso = \notes \relative c { )as,4 r r r8 as(| )g4 r r r8 g(| )d'4 r r r8 d(| - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" )es4\< r r r8 es(| )as,4 r r r8 as(| )g4 r r r8 g(| @@ -98,15 +97,15 @@ contrabasso = \notes \relative c { )bes4 r r r8 bes(| )as4 r r r8 as(| )e4 r r r8 e(| - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" )f4\< r r r8 f(| )bes4 r r r8 bes(| %70 \!)as2\ff g | fis d' | - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" g,4\p\< r r r8 g(| )c4 r r r8 c(| % ) { s2 s4 \!s8}> | @@ -119,8 +118,8 @@ contrabasso = \notes \relative c { d4\pp r d r | d r d r | %80 - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" d r d\< r | d r d r | d r d r | @@ -196,6 +195,7 @@ contrabasso = \notes \relative c { f | b,2\sf r | b2\sf r | + %160 R1*3 | bes2\ff r | bes2\sf r | @@ -216,8 +216,8 @@ contrabasso = \notes \relative c { %180 )e4 r r r8 e(| )b'4 r r r8 b(| - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" )c4\< r r r8 c(| )f,4 r r r8 f(| )e4 r r r8 e'(| @@ -232,8 +232,8 @@ contrabasso = \notes \relative c { )g,4 r r r8 g(| )f4 r r r8 f(| )cis'4 r r r8 cis(| - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" )d4\< r r r8 d(| %195 @@ -242,40 +242,40 @@ contrabasso = \notes \relative c { dis b | es4\p r r r8 es(| )a,4 r r r8 a(| + )g1 | %200 - )g1 | f | % copied 18 from cello - [f8(g f g][f g f)g] | - es!4\fp r e r | + es'!4\fp r e r | f r g r | - - %205 as r g r | f r fis r | + + %205 g r g r | g r g r | - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" g r g\< r | + g r g r | %210 g r g r | g r g r | - g r g r | \!f2.\ff()es4 | d( c d )c | + f2.\ff()es4 | %215 - f2.\ff()es4 | d( c d )c | bes2.\ff()as4 | g( f g )f | bes2.\ff()as4 | + g( f g )f | %220 - f'4 r r2 | + f4 r r2 | f'4 r r2 | f4 r r2 | f4 r r2 | @@ -288,7 +288,7 @@ contrabasso = \notes \relative c { %230 f4 r8 f g4 r8 g | - c,4\p r r2 | + c4\p r r2 | r2 r4 r8 b\f | c4 r r2 | r2 r4 r8 b\f | @@ -297,7 +297,7 @@ contrabasso = \notes \relative c { R1*3 | %copied 59 from cello - [c,8\f e g as][bes, d fis g]| + [c8\f e g as][bes, d fis g]| %240 [as, c e f!][g, bes d es]| @@ -315,8 +315,8 @@ contrabasso = \notes \relative c { %250 )es4 r r r8 es(| )b4 r r r8 b(| - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" )c4\< r r r8 c(| )f4 r r r8 f,(| )es1 | @@ -329,8 +329,8 @@ contrabasso = \notes \relative c { bes\f | %260 - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" as4.\p\< as'8 g4. g8 | f4. f8 es4. es8 | as4. as8 g4. g8 | @@ -373,8 +373,8 @@ contrabasso = \notes \relative c { f,4-. g-. r2 | %290 - \property Voice.decrescendoText = "dim." - \property Voice.decrescendoSpanner = "dashed-line" + \property StaffCombineVoice.decrescendoText = "dim." + \property StaffCombineVoice.decrescendoSpanner = "dashed-line" as4\> r b r | R1 | \!c4\p r r2| @@ -387,30 +387,23 @@ contrabasso = \notes \relative c { r2 r4 f, | c' r r2 | r2 r4 f, | + + %300 c' r r2 | R1 | f,4 r r2 | R1 | c'4 r r2 | + + %305 R1 | f,4 r r2 | R1*3 | + + %310 c'4\pp r r2 | R1 | c4 r r2 | c4 r r2 | c4 r r2 | } - -%%%contrabassoStaff = \context Staff = contrabasso < -%%% \property Staff.midiInstrument = #"contrabass" -%%% \property Staff.instrument = #"Contrabasso" -%%% \property Staff.instr = #"Cb." -%%% \property Staff.transposing = #-12 -%%% \clef "bass"; -%%% \notes \context Voice=one< -%%% \global -%%% \contrabasso -%%% > -%%%> - diff --git a/mutopia/Coriolan/coriolan.ly b/mutopia/Coriolan/coriolan.ly index ea8f927ad3..0c9a454a81 100644 --- a/mutopia/Coriolan/coriolan.ly +++ b/mutopia/Coriolan/coriolan.ly @@ -13,7 +13,7 @@ copyright = "public domain"; \include "global.ly" \include "paper16.ly" -\include "contrabasso.ly" +\include "bassi.ly" \include "clarinetti.ly" \include "corni.ly" \include "fagotti.ly" @@ -21,11 +21,9 @@ copyright = "public domain"; \include "oboi.ly" \include "timpani.ly" \include "trombe.ly" -\include "viola-1.ly" -\include "viola-2.ly" +\include "violi.ly" \include "violino-1.ly" \include "violino-2.ly" -\include "violoncello.ly" legniGroup = \context StaffGroup = legni_group < @@ -51,45 +49,6 @@ violiniGroup = \context GrandStaff = violini_group < \violinoIIStaff > -violiGroup = \context PianoStaff = violi_group \notes < - \context StaffCombineStaff=one { - \clef "alto"; - \key es \major; - \skip 1*314; - \bar "|."; - } - \context StaffCombineStaff=two { - \clef "alto"; - \key es \major; - \skip 1*314; - \bar "|."; - } - - \context StaffCombineStaff=one \partcombine StaffCombineStaff - \context StaffCombineVoice=one \violaI - \context StaffCombineVoice=two \violaII -> - -bassiGroup = \context PianoStaff = bassi_group \notes < - \context StaffCombineStaff=one { - \clef "bass"; - \key es \major; - \skip 1*314; - \bar "|."; - } - \context StaffCombineStaff=two { - \clef "bass"; - \key es \major; - \skip 1*314; - \bar "|."; - } - - \context StaffCombineStaff=one \partcombine StaffCombineStaff - \context StaffCombineVoice=one \violoncello - \context StaffCombineVoice=two \contrabasso -> - - archiGroup = \context StaffGroup = archi_group < \violiniGroup \violiGroup diff --git a/mutopia/Coriolan/viola-1.ly b/mutopia/Coriolan/viola-1.ly index 3649bdd732..03ffeb7e1b 100644 --- a/mutopia/Coriolan/viola-1.ly +++ b/mutopia/Coriolan/viola-1.ly @@ -32,8 +32,8 @@ violaI = \notes \relative c { [c,8-. es-.] [es()d] [d-. g-.] g4-"ten." | [c,8-. es-.] [es()d] [d-. as'-.] [as()g] | [g8-. c-.] [c()b] [b-. f'-.] [f()es] | - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" es4.\< es8 d4. d8 | %20 c4. c8 \!b4\f r4 | @@ -43,15 +43,15 @@ violaI = \notes \relative c { r4 [des8\p()c][c-. ges'-.][ges()f] | %25 [f-. bes-.][bes()a][a-. es'-.][es()des] | - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" des4.\< des8 c4. c8 | bes4 \!bes4-.\f r2 | R1 % same rhythm as violins... r8 c-.\p c4. c8-. c4~ | - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" [c8\< c-.]c2.~ | %30 [c8 c-.]c2.~ | @@ -84,8 +84,8 @@ violaI = \notes \relative c { )g4 r r r8 g(| %55 )d4 r r r8 d(| - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" )es4 r\< r r8 es(| )as4 r r r8 as(| )g4 r r r8 g(| @@ -100,15 +100,15 @@ violaI = \notes \relative c { )bes4 r r r8 bes(| )as4 r r r8 as(| )e4 r r r8 e(| - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" )f4\< r r r8 f(| )bes4 r r r8 bes | %70 \!c2:\ff bes: | a: fis: | - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" g4\p\< r r r8 g(| )c,4 r r r8 c | [\!f8\sf(\>as f as][f g d)\!g] | @@ -119,8 +119,8 @@ violaI = \notes \relative c { [d,-.\pp d'-.] es4. es8-. d4 ~ | [d8 d-.] es4. es8-. d4 ~ | %80 - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" [d8\< d-.] es4. es8-. d4 ~ | [d8 d-.] es4. es8-. d4 ~ | [d8 d-.] es4. es8-. d4 ~ | @@ -187,8 +187,8 @@ violaI = \notes \relative c { [e g b c][des c g e]| [f as c des][c des as f]| [g bes d es][d es bes g]| - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" [as\< c d es][f es c as]| %131 [g bes d es][f es bes g]| @@ -211,8 +211,8 @@ violaI = \notes \relative c { [g,: bes: c: des:][f,: bes: c: des:]| [e,: g: bes: des:][c,: e: g: c:]| %shared with cello from here on - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" [f,8\p\< as c des][es, g b c]| [des, f a bes][c, es g as]| % uhuh, still 'same as cello'; @@ -268,8 +268,8 @@ violaI = \notes \relative c { %180 )e4 r r r8 e8(| )b'4 r r r8 b8(| - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" )c4 r\< r r8 c,8(| % copied )f4 r r r8 f8(| @@ -284,8 +284,8 @@ violaI = \notes \relative c { d,4\p r r r8 d8(| )g4 r r r8 g8(| )f4 r r r8 f8(| - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" )cis4\< r r r8 cis8(| )d4 r r r8 d8(| %195 @@ -306,8 +306,8 @@ violaI = \notes \relative c { r[c\p(as)c]r[c(a)c] | [b-. g'-.] as4. as8-. g4 ~ | [g8 g-.] as4. as8-. g4 ~ | - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" [g8 g-.\<] as4. as8-. g4 ~ | [g8 g-.] as4. as8-. g4 ~ | %210 @@ -350,8 +350,8 @@ violaI = \notes \relative c { %240 f,4 r r2 | R1*11 | - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" c'4\p\< r r r8 c8(| )f4 r r r8 f,8(| )es1 | @@ -364,8 +364,8 @@ violaI = \notes \relative c { e'2:16\f e: | %260 - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" [as,8\p\< f']f4. es8 es4 ~ | [es8 as]as4. g8 g4 ~ | [g8 f]f4. es8 es4 ~ | @@ -400,8 +400,8 @@ violaI = \notes \relative c { es4-. e-. r2 | f4-. g-. r2 | %290 - \property Voice.decrescendoText = "dim." - \property Voice.decrescendoSpanner = "dashed-line" + \property StaffCombineVoice.decrescendoText = "dim." + \property StaffCombineVoice.decrescendoSpanner = "dashed-line" as4\> r g r | R1 | \!c4\p r r2 | @@ -414,18 +414,3 @@ violaI = \notes \relative c { c4 r r2 | c4 r r2 | } - -%%% urg -%%%\include "viola-2.ly"; -%%% -%%%violaIStaff = \context Staff = violai < -%%% \property Staff.midiInstrument = #"viola" -%%% \property Staff.instrument = #"Viola" -%%% \property Staff.instr = #"Vla." -%%% \clef "alto"; -%%% \notes \context Voice=one < -%%% \global -%%% \violaI -%%% > -%%%> - diff --git a/mutopia/Coriolan/viola-2.ly b/mutopia/Coriolan/viola-2.ly index 05b75c0f8e..b7f3effbd6 100644 --- a/mutopia/Coriolan/viola-2.ly +++ b/mutopia/Coriolan/viola-2.ly @@ -32,8 +32,8 @@ violaII = \notes \relative c { [c,8-. es-.] [es()d] [d-. g-.] g4-"ten." | [c,8-. es-.] [es()d] [d-. as'-.] [as()g] | [g8-. c-.] [c()b] [b-. f'-.] [f()es] | - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" es4.\< es8 d4. d8 | %20 c4. c8 \!b4\f r4 | @@ -43,15 +43,15 @@ violaII = \notes \relative c { r4 [des8\p()c][c-. ges'-.][ges()f] | %25 [f-. bes-.][bes()a][a-. es'-.][es()des] | - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" des4.\< des8 c4. c8 | bes4 \!bes4-.\f r2 | R1 % same rhythm as violins... r8 c,-.\p c4. c8-. c4~ | - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" [c8\< c-.]c2.~ | %30 [c8 c-.]c2.~ | @@ -84,8 +84,8 @@ violaII = \notes \relative c { )g4 r r r8 g(| %55 )d4 r r r8 d(| - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" )es4 r\< r r8 es(| )as4 r r r8 as(| )g4 r r r8 g(| @@ -100,15 +100,15 @@ violaII = \notes \relative c { )bes4 r r r8 bes(| )as4 r r r8 as(| )e4 r r r8 e(| - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" )f4\< r r r8 f(| )bes4 r r r8 bes | %70 \!as2:\ff g: | fis: d: | - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" g4\p\< r r r8 g(| )c,4 r r r8 c | [\!f8\sf(\>as f as][f g d)\!g] | @@ -119,8 +119,8 @@ violaII = \notes \relative c { [d-.\pp d'-.] es4. es8-. d4 ~ | [d8 d-.] es4. es8-. d4 ~ | %80 - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" [d8\< d-.] es4. es8-. d4 ~ | [d8 d-.] es4. es8-. d4 ~ | [d8 d-.] es4. es8-. d4 ~ | @@ -187,8 +187,8 @@ violaII = \notes \relative c { [e g b c][des c g e]| [f as c des][c des as f]| [g bes d es][d es bes g]| - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" [as\< c d es][f es c as]| %131 [g bes d es][f es bes g]| @@ -211,8 +211,8 @@ violaII = \notes \relative c { [g,: bes: c: des:][f,: bes: c: des:]| [e,: g: bes: des:][c,: e: g: c:]| %shared with cello from here on - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" [f,8\p\< as c des][es, g b c]| [des, f a bes][c, es g as]| % uhuh, still 'same as cello'; @@ -268,8 +268,8 @@ violaII = \notes \relative c { %180 )e4 r r r8 e8(| )b'4 r r r8 b8(| - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" )c4 r\< r r8 c,8(| % copied )f4 r r r8 f8(| @@ -284,8 +284,8 @@ violaII = \notes \relative c { d,4\p r r r8 d8(| )g4 r r r8 g8(| )f4 r r r8 f8(| - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" )cis4\< r r r8 cis8(| )d4 r r r8 d8(| %195 @@ -306,8 +306,8 @@ violaII = \notes \relative c { r[as\p(d,)as']r[a(es)a] | [g-. g'-.] as4. as8-. g4 ~ | [g8 g-.] as4. as8-. g4 ~ | - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" [g8 g-.\<] as4. as8-. g4 ~ | [g8 g-.] as4. as8-. g4 ~ | %210 @@ -350,8 +350,8 @@ violaII = \notes \relative c { %240 f,4 r r2 | R1*11 | - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" c'4\p\< r r r8 c8(| )f4 r r r8 f,8(| )es1| @@ -364,8 +364,8 @@ violaII = \notes \relative c { bes2:16\f bes: | %260 - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" [as8\p\< f']f4. es8 es4 ~ | [es8 as]as4. g8 g4 ~ | [g8 f]f4. es8 es4 ~ | @@ -400,8 +400,8 @@ violaII = \notes \relative c { es4-. e-. r2 | f4-. g-. r2 | %290 - \property Voice.decrescendoText = "dim." - \property Voice.decrescendoSpanner = "dashed-line" + \property StaffCombineVoice.decrescendoText = "dim." + \property StaffCombineVoice.decrescendoSpanner = "dashed-line" as4\> r g r | R1 | \!c4\p r r2 | diff --git a/mutopia/Coriolan/violi-part.ly b/mutopia/Coriolan/violi-part.ly index ffb79d3d95..0116a65afb 100644 --- a/mutopia/Coriolan/violi-part.ly +++ b/mutopia/Coriolan/violi-part.ly @@ -9,28 +9,7 @@ copyright = "public domain"; \version "1.3.59"; -\include "global.ly" -\include "viola-1.ly" -\include "viola-2.ly" - -violiGroup = \context PianoStaff = violi_group \notes < - \context StaffCombineStaff=one { - \clef "alto"; - \key es \major; - \skip 1*314; - \bar "|."; - } - \context StaffCombineStaff=two { - \clef "alto"; - \key es \major; - \skip 1*314; - \bar "|."; - } - - \context StaffCombineStaff=one \partcombine StaffCombineStaff - \context StaffCombineVoice=one \violaI - \context StaffCombineVoice=two \violaII -> +\include "violi.ly" \score{ \violiGroup diff --git a/mutopia/Coriolan/violi.ly b/mutopia/Coriolan/violi.ly new file mode 100644 index 0000000000..ac753a8485 --- /dev/null +++ b/mutopia/Coriolan/violi.ly @@ -0,0 +1,39 @@ +\header{ +filename = "violi.ly"; +% %title = "Ouvert\\"ure zu Collins Trauerspiel \\"Coriolan\\" Opus 62"; +description = ""; +composer = "Ludwig van Beethoven (1770-1827)"; +enteredby = "JCN"; +copyright = "public domain"; +} + +\version "1.3.59"; + +\include "global.ly" +\include "viola-1.ly" +\include "viola-2.ly" + +violiGroup = \context PianoStaff = violi_group \notes < + \context StaffCombineStaff=oneVioli { + \property StaffCombineStaff.midiInstrument = #"viola" + \property StaffCombineStaff.instrument = #"Viola" + \property StaffCombineStaff.instr = #"Vla." + \clef "alto"; + \key es \major; + \skip 1*314; + \bar "|."; + } + \context StaffCombineStaff=twoVioli { + \property StaffCombineStaff.midiInstrument = #"viola" + \property StaffCombineStaff.instrument = #"Viola II" + \property StaffCombineStaff.instr = #"Vla. II" + \clef "alto"; + \key es \major; + \skip 1*314; + \bar "|."; + } + + \context StaffCombineStaff=oneVioli \partcombine StaffCombineStaff + \context StaffCombineVoice=one \violaI + \context StaffCombineVoice=two \violaII +> diff --git a/mutopia/Coriolan/violoncello.ly b/mutopia/Coriolan/violoncello.ly index 1a07ac60e4..7877ef4c1f 100644 --- a/mutopia/Coriolan/violoncello.ly +++ b/mutopia/Coriolan/violoncello.ly @@ -17,7 +17,7 @@ violoncello = \notes \relative c { c'1\ff ~ | c | f,4-. r r2 | - \property Staff.instr = #"Vc.\nCb." + \property StaffCombineStaff.instr = #"Vc.\nCb." r1 | c'1\ff ~ | c | @@ -29,8 +29,8 @@ violoncello = \notes \relative c { c4 r4 r2 | c4 r4 r2 | r1 | - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" c'4.\< c8 bes4. bes8 | %20 @@ -43,8 +43,8 @@ violoncello = \notes \relative c { %25 [f-. bes-.][bes()a][a-. es'-.][es()des]| - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" bes4.\< bes8 as4. as8 | g4 \!g4-.\f r2 | R1 @@ -85,8 +85,8 @@ violoncello = \notes \relative c { %55 [bes(as'f as][bes as f)bes,~] | - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" [bes\<(g'es g][bes g es)bes~] | [bes(f'd f][bes f d)bes~] | [bes(g'es g][bes g es)bes~] | @@ -107,8 +107,8 @@ violoncello = \notes \relative c { %70 as2\ff g | fis d | - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" [g8\p\<(bes' g bes][d bes g)d~] | [d8(a' fis a][d a fis)d] | [\!f!8\sf\>(as f as][f g d)g] | @@ -121,8 +121,8 @@ violoncello = \notes \relative c { r4 r8 d d4. d8 | %80 - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" r4 r8 d d4.\< d8 | r4 r8 d d4. d8 | r4 r8 d d4. d8 | @@ -198,8 +198,8 @@ violoncello = \notes \relative c { [e g b c][des c g e]| [f as c des][c des as f]| [g bes d es][d es bes g]| - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" [as\< c d es][f es c as]| %131 @@ -223,8 +223,8 @@ violoncello = \notes \relative c { [g,: bes: c: des:][f,: bes: c: des:]| [e,: g: bes: des:][c: e: g: c:]| %shared with cello from here on - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" [f,8\p\< as c des][es, g b c]| [des, f a bes][c, es g as]| % uhuh, still 'same as cello'; @@ -284,8 +284,8 @@ violoncello = \notes \relative c { %180 [g(e' c d][g e c )g~] | [g(f' d f][g f d )g,~] | - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" [g\<(e' c d][g e c )g~] | [g(d' b d][g d b )g~] | @@ -304,8 +304,8 @@ violoncello = \notes \relative c { [a( g' e g][a g e )a,!~] | %195 - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" [a8\<( f' d f][a f d )a!~] | [a( e' cis e][a e c )g] | \!f2\ff e | @@ -324,8 +324,8 @@ violoncello = \notes \relative c { f r fis r | g r g r | g r g r | - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" g r g\< r | %210 @@ -386,8 +386,8 @@ violoncello = \notes \relative c { %250 )es4 r r r8 es(| )b4 r r r8 b(| - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" )c4\< r r r8 c(| )f4 r r r8 f,(| )es1 | @@ -400,8 +400,8 @@ violoncello = \notes \relative c { bes\f | %260 - \property Voice.crescendoText = "cresc." - \property Voice.crescendoSpanner = "dashed-line" + \property StaffCombineVoice.crescendoText = "cresc." + \property StaffCombineVoice.crescendoSpanner = "dashed-line" as4.\p\< as'8 g4. g8 | f4. f8 es4. es8 | as4. as8 g4. g8 | @@ -444,8 +444,8 @@ violoncello = \notes \relative c { f,4-. g-. r2 | %290 - \property Voice.decrescendoText = "dim." - \property Voice.decrescendoSpanner = "dashed-line" + \property StaffCombineVoice.decrescendoText = "dim." + \property StaffCombineVoice.decrescendoSpanner = "dashed-line" as4\> r b r | R1 | \!c4\p r r2| @@ -457,8 +457,8 @@ violoncello = \notes \relative c { c4 r r2 | [c8-.-"arco" es-.][es()d][d-. as'-.][as()g] | R1 - \property Voice.decrescendoText = "sempre pi\\`u piano" - \property Voice.decrescendoSpanner = "" + \property StaffCombineVoice.decrescendoText = "sempre pi\\`u piano" + \property StaffCombineVoice.decrescendoSpanner = "" \times 2/3 { c,4\> ( es c ~ } \times 2/3 { c as' )g } | %300 @@ -482,15 +482,3 @@ violoncello = \notes \relative c { c4 r r2 | c4 r r2 | } - -%%%violoncelloStaff = \context Staff = violoncello < -%%% \property Staff.midiInstrument = #"cello" -%%% \property Staff.instrument = #"Violoncello\ne\nContrabasso" -%%% \property Staff.instr = #"Vc." -%%% \clef "bass"; -%%% \notes \context Voice=one< -%%% \global -%%% \violoncello -%%% > -%%%> - diff --git a/scm/basic-properties.scm b/scm/basic-properties.scm index 28c1bec72b..469cc1e3fe 100644 --- a/scm/basic-properties.scm +++ b/scm/basic-properties.scm @@ -42,7 +42,8 @@ (before-line-breaking-callback . ,Beam::before_line_breaking) (after-line-breaking-callback . ,Beam::after_line_breaking) (default-neutral-direction . 1) - + (outer-stem-length-limit . 0.2) + (slope-limit . 0.2) (beam-flag-width-function . ,default-beam-flag-width-function) (beam-space-function . ,default-beam-space-function) (damping . 1) diff --git a/scm/generic-property.scm b/scm/generic-property.scm index befcda71bc..6de6407461 100644 --- a/scm/generic-property.scm +++ b/scm/generic-property.scm @@ -120,6 +120,17 @@ ) ) +(define generic-bar-number-properties + (cons 'bar-number-interface + (list + (list 'barNumberScriptPadding number? 'padding) + (list 'barNumberDirection dir? 'direction) + ) + + ) + ) + + ; don't do this yet. Depends on whennn the staff is really announced (define generic-staff-symbol-properties (cons 'staff-symbol-interface diff --git a/scripts/as2text.scm b/scripts/as2text.scm index a8cb01b82d..e4e80e262d 100644 --- a/scripts/as2text.scm +++ b/scripts/as2text.scm @@ -237,7 +237,7 @@ Options: (define (get-font name) ;; urg - (if (equal? name "as-dummy") + (if (equal? (substring name 0 (min (string-length name) 8)) "as-dummy") (get-font "default") (let ((entry (assoc name fonts))) (if entry @@ -334,7 +334,7 @@ Options: (define (load-font name mag) ;; urg: don't load dummy font - (if (not (equal? name "as-dummy")) + (if (not (equal? (substring name 0 (min (string-length name) 8)) "as-dummy")) (let ((text (af-gulp-file (string-append name ".af")))) (if (< 0 (string-length text)) (let* ((char-list (cdr @@ -376,7 +376,7 @@ Options: (set! fonts (cons (cons "default" (generate-default-font)) fonts)) (display "\n" (current-error-port)) (if (and (defined? 'mudelapaperlinewidth) - (> mudelapaperlinewidth 0)) + (> (string->number mudelapaperlinewidth) 0)) (set! canvas-width (inexact->exact (string->number mudelapaperlinewidth)))))) (set! canvas-height height) diff --git a/scripts/mudela-book.py b/scripts/mudela-book.py index c60924d434..85a055d175 100644 --- a/scripts/mudela-book.py +++ b/scripts/mudela-book.py @@ -1,7 +1,13 @@ #!@PYTHON@ # vim: set noexpandtab: -# TODO: Figure out clean set of options. -# add support for .lilyrc +# TODO: +# * Figure out clean set of options. +# * add support for .lilyrc +# * %\def\preMudelaExample should be ignored by mudela-book because +# it is commented out +# * if you run mudela-book once with --no-pictures, and then again +# without the option, then the pngs will not be created. You have +# to delete the generated .ly files and rerun mudela-book. import os import stat @@ -15,7 +21,7 @@ import __main__ program_version = '@TOPLEVEL_VERSION@' if program_version == '@' + 'TOPLEVEL_VERSION' + '@': - program_version = '1.3.69-very-unstable' + program_version = '1.3.85' include_path = [os.getcwd()] @@ -36,18 +42,22 @@ default_text_fontsize = 12 # indices are no. of columns, papersize, fontsize # Why can't this be calculated? latex_linewidths = { - 1: {'a4':{10: 345, 11: 360, 12: 390}, - 'a5':{10: 276, 11: 276, 12: 276}, - 'b5':{10: 345, 11: 356, 12: 356}, - 'letter':{10: 345, 11: 360, 12: 390}, - 'legal': {10: 345, 11: 360, 12: 390}, - 'executive':{10: 345, 11: 360, 12: 379}}, - 2: {'a4':{10: 167, 11: 175, 12: 190}, - 'a5':{10: 133, 11: 133, 12: 133}, - 'b5':{10: 167, 11: 173, 12: 173}, - 'letter':{10: 167, 11: 175, 12: 190}, - 'legal':{10: 167, 11: 175, 12: 190}, - 'executive':{10: 167, 11: 175, 12: 184}}} + 1: { 'a4':{10: 345, 11: 360, 12: 390}, + 'a4-landscape': {10: 598, 11: 596, 12:592}, + 'a5':{10: 276, 11: 276, 12: 276}, + 'b5':{10: 345, 11: 356, 12: 356}, + 'letter':{10: 345, 11: 360, 12: 390}, + 'letter-landscape':{10: 598, 11: 596, 12:596}, + 'legal': {10: 345, 11: 360, 12: 390}, + 'executive':{10: 345, 11: 360, 12: 379}}, + 2: { 'a4':{10: 167, 11: 175, 12: 190}, + 'a4-landscape': {10: 291, 11: 291, 12: 291}, + 'a5':{10: 133, 11: 133, 12: 133}, + 'b5':{10: 167, 11: 173, 12: 173}, + 'letter':{10: 167, 11: 175, 12: 190}, + 'letter-landscape':{10: 270, 11: 267, 12: 269}, + 'legal':{10: 167, 11: 175, 12: 190}, + 'executive':{10: 167, 11: 175, 12: 184}}} texi_linewidths = { 'a4': {12: 455}, @@ -152,23 +162,27 @@ re_dict = { 'option-sep' : ', *', 'header': r"""\\documentclass(\[.*?\])?""", + # ^(?m)[^%]* is here so we can comment it out + 'landscape': r"^(?m)[^%]*\\usepackage{landscape}", 'preamble-end': '\\\\begin{document}', 'verbatim': r"""(?s)(?P\\begin{verbatim}.*?\\end{verbatim})""", 'verb': r"""(?P\\verb(?P.).*?(?P=del))""", 'mudela-file': r'\\mudelafile(\[(?P.*?)\])?\{(?P.+)}', - 'mudela' : '(?m)\\\\mudela(\[(?P.*?)\])?{(?P.*?)}', + 'mudela' : '(?m)^[^%]*?\\\\mudela(\[(?P.*?)\])?{(?P.*?)}', #'mudela-block': r"""(?m)^[^%]*?\\begin(\[(?P.*?)\])?{mudela}(?P.*?)\\end{mudela}""", 'mudela-block': r"""(?s)\\begin(\[(?P.*?)\])?{mudela}(?P.*?)\\end{mudela}""", 'def-post-re': r"""\\def\\postMudelaExample""", 'def-pre-re': r"""\\def\\preMudelaExample""", 'intertext': r',?\s*intertext=\".*?\"', - 'ignore': r"(?m)(?P%.*?^)", + #'ignore': r"(?m)(?P%.*?^)", + 'ignore': r"(?m)(?P^%.*)$", 'numcols': r"(?P\\(?Pone|two)column)", }, 'texi': { 'include': '@mbinclude[ \n\t]+(?P[^\t \n]*)', 'input': no_match, + 'landscape': no_match, 'header': no_match, 'preamble-end': no_match, 'verbatim': r"""(?s)(?P@example\s.*?@end example\s)""", @@ -235,12 +249,16 @@ def compose_full_body (body, opts): else: paper = 'letter' # yes, latex use letter as default, at least # my tetex distro + if 'landscape' in opts: + paper = paper + '-' + 'landscape' music_size = default_music_fontsize latex_size = default_text_fontsize for o in opts: m = re.search ('^(.*)paper$', o) if m: paper = m.group (1) + if 'landscape' in opts: + paper = paper + '-' + 'landscape' if g_force_mudela_fontsize: music_size = g_force_mudela_fontsize @@ -300,6 +318,9 @@ def scan_preamble (str): options = ['a4widepaper'] elif string.find(str[:x], "@smallbook") != -1: options = ['smallbookpaper'] + m = get_re ('landscape').search(str) + if m: + options.append('landscape') m = get_re ('header').search( str) # should extract paper & fontsz. if m and m.group (1): @@ -473,6 +494,7 @@ def schedule_mudela_block (chunk, extra_opts): TODO has format [basename, extension, extension, ... ] """ + #print "-schedule_mudela_block", extra_opts if len(chunk) == 3: (type, body, opts) = chunk complete_body = None @@ -571,7 +593,9 @@ def compile_all_files (chunks): if e == 'eps': eps.append (base) elif e == 'tex': - tex.append (base + '.ly') + #ugh + if base + '.ly' not in tex: + tex.append (base + '.ly') elif e == 'png' and g_do_pictures: png.append (base) d = os.getcwd() @@ -719,8 +743,8 @@ def do_file(input_filename): chunks = chop_chunks(chunks, 'mudela', make_mudela) chunks = chop_chunks(chunks, 'mudela-file', make_mudela_file) chunks = chop_chunks(chunks, 'mudela-block', make_mudela_block) - #for c in chunks: print c, "\n" chunks = chop_chunks(chunks, 'ignore', do_ignore) + #for c in chunks: print "c:", c chunks = chop_chunks(chunks, 'numcols', do_columns) global_options = scan_preamble(chunks[0][1]) chunks = process_mudela_blocks(my_outname, chunks, global_options) diff --git a/tex/lilyponddefs.tex b/tex/lilyponddefs.tex index 40a8c7955a..f6bca234e4 100644 --- a/tex/lilyponddefs.tex +++ b/tex/lilyponddefs.tex @@ -37,7 +37,7 @@ \ifundefined{mudelapaperinterscoreline} \def\interscoreline{\vskip 16pt\myfilbreak} \else - \def\interscoreline{\vskip\mudelapaperinterscoreline\myfilbreak} + \def\interscoreline{\vskip\mudelapaperinterscoreline pt\myfilbreak} \fi \def\placebox#1#2#3{% \botalign{\hbox{\raise #1\leftalign{\kern #2{}#3}}}}% -- 2.39.5