---- ../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
* 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:
- 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
* added input/test/bagpipe.ly
+
+
1.3.87
======
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.
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
--- /dev/null
+\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{<c' e' g'>}
+% \mudela{<c' e' g'>}
+
+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"]{<c' e' g'>} & major \\
+\mudela[11pt]{<c' es' g'>} & minor \\
+\mudela[11pt]{<c' es' ges'>} & diminished \\
+\mudela[11pt]{<c' e' gis'>} & 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}
@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]@{<c' e' g'>@}
+@end example
+
+and its music:
+
+@mudela[11pt]{<c' e' g'>}
+
+
+@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]@{<c' e' g'>@}
+@end example
+
+and its music:
+
+@mudela[11pt]{<c' e' g'>}
+
+
+@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:"]
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:
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:
@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
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
-
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}.
@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
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.
s1
}
>
- \paper{
- \translator{
- \PianoStaffContext
- minVerticalAlign = 3.0*\staffheight;
- maxVerticalAlign = 3.0*\staffheight;
- }
-% linewidth=-1.;
- }
}
\version "1.3.59";
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
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
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 {
}
>
\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)}
}
#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
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;
#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.
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);
}
}
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);
}
{
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;
/*
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);
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<Score_element> elems;
Link_array<Score_element> all_elems
= Pointer_group_interface__extract_elements (me, (Score_element*)0,
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<Spanner*>(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");
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;
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),
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";
#include "align-interface.hh"
#include "spanner.hh"
#include "warn.hh"
-
+#include "paper-def.hh"
/*
JUNKME
*/
|| !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)
{
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 ());
}
{
current_cresc_req_->origin ()->warning (_ ("unterminated (de)crescendo"));
cresc_p_->suicide ();
+ cresc_p_ = 0;
}
}
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<Item*>(me)->column_l ()->set_elt_property ("contains-grace", SCM_BOOL_T);
return SCM_UNSPECIFIED;
#include "molecule.hh"
#include "paper-def.hh"
#include "hyphen-spanner.hh"
+#include "paper-column.hh"
#include "spanner.hh"
#include "item.hh"
*/
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<Paper_column*> (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 ()
{
elt_l_ = s;
}
+
#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);
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
{
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_;
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 ();
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.
*/
Moment first_until_;
Moment second_until_;
int state_;
+ String suffix_;
};
#endif /* PART_COMBINE_MUSIC_ITERATOR_HH */
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);
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
class Simple_music_iterator : public Music_iterator
{
protected:
- Moment length_mom_;
+
Moment last_processed_mom_;
public:
VIRTUAL_COPY_CONS (Music_iterator);
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 */
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;
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
{
gh_double2scm (height),
SCM_UNDEFINED));
- Real il = paper_l ()->get_var ("interline");
+ Real il = paper_l ()->get_var ("staffspace");
/*
all elements.
{
text_p_
->set_elt_property ("padding",
- gh_double2scm(paper_l ()->get_var ("interline")));
+ gh_double2scm(paper_l ()->get_var ("staffspace")));
}
// clone_i_ = src.clone_i_ + 1;
handle_ = *src.handle_.clone ();
music_l_ = src.music_l_;
+ music_length_ = src.music_length_;
}
Music_iterator::~Music_iterator ()
}
-void
-Music_iterator::skip (Moment)
-{
- assert (0);
-}
-
void
Music_iterator::process (Moment)
{
return false;
}
+void
+Music_iterator::skip (Moment )
+{
+}
+
SCM
Music_iterator::get_music (Moment)const
{
}
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)
{
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 ()
{
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);
}
{
int state = UNKNOWN;
Part_combine_music const *p = dynamic_cast<Part_combine_music const* > (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));
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 <? second_mom) < diff_mom
- && (first_iter->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 () <? second_iter->pending_moment ();
+ pending = first_iter->pending_moment () <? second_iter->pending_moment ();
+ last_pending = pending;
Array<Musical_pitch> first_pitches;
Array<Duration> first_durations;
- get_music_info (m, first_iter, &first_pitches, &first_durations);
+ get_music_info (pending, first_iter, &first_pitches, &first_durations);
Array<Musical_pitch> second_pitches;
Array<Duration> 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 ())
{
{
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;
if (!(state & ~(UNIRHYTHM | UNISILENCE)))
state |= UNISILENCE;
}
+ else if (!state)
+ state |= UNRELATED;
else
state &= ~(UNISILENCE);
state &= ~(SPLIT_INTERVAL);
}
-#if 0
- Moment next = (first_mom <? second_mom) + now;
- if (first_iter->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;
- 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;
Part_combine_music const *p = dynamic_cast<Part_combine_music const* > (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
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 ();
}
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);
{
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()
{
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<Grace_iterator*> (iter_p_))
child_report = child_report->daddy_trans_l_;
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
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)
}
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<Sequential_music_iterator *> (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
: 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
if (music_l_)
return Moment (0);
else
- return length_mom_;
+ return music_length_mom ();
}
void
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);
{
// 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))
Offset o;
if (Spanner *mother = dynamic_cast<Spanner*> (me->original_l_))
{
- for (int i = dir == LEFT ? 0 : mother->broken_into_l_arr_.size ();
- dir == LEFT ? i < mother->broken_into_l_arr_.size () : i;
- dir == LEFT ? i++ : --i)
+ 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)
{
}
}
-
+
+
+ // FIXME
SCM l = scm_assoc
(scm_listify (a,
gh_int2scm (stem ? Stem::get_direction (stem) : 1 * dir),
/*
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;
}
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),
{
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 ();
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 ...
#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);
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;
}
*/
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
}
}
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);
}
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);
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) ;
}
Real ncw = column_arr.top ()->extent(X_AXIS).length ();
Real w = dynamic_cast<Spanner*>(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");
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",
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;
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<Spanner*>(me)->get_broken_left_end_align ();
(mapcar (function
(lambda (x) (modify-syntax-entry
(car x) (cdr x) lily-mode-syntax-table)))
- '(( ?\( . "." ) ( ?\) . "." )
- ( ?\[ . "." ) ( ?\] . "." )
+ '(( ?\( . "()" ) ( ?\) . ")(" ) ; need matching parens for inline lisp
+ ( ?\[ . "." ) ( ?\] . "." )
( ?\{ . "(}" ) ( ?\} . "){" )
( ?\< . "(>" )( ?\> . ")>")
( ?\$ . "." ) ( ?\% . "." ) ( ?\& . "." )
papersize = "a4"
-
+\include "engraver.ly"
\include "generic-paper.ly"
\include "paper20.ly"
\accepts "Voice";
-};
+}
-\translator{\StaffContext }
-\translator {
+ChoirStaffContext = \translator {
\type "Engraver_group_engraver";
\name ChoirStaff;
alignmentReference = \center;
\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
\consists "Staff_symbol_engraver";
\consistsend "Axis_group_engraver";
\accepts "Voice";
-};
-\translator{\RhythmicStaffContext}
+}
+
VoiceContext = \translator {
\type "Engraver_group_engraver";
\consists "Skip_req_swallow_translator";
\accepts Thread; % bug if you leave out this!
\accepts Grace;
-};
+}
GraceContext=\translator {
\type "Grace_engraver_group";
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;
Generic_property_list = #generic-thread-properties
\consists "Property_engraver";
\name Thread;
-};
+}
-\translator{\ThreadContext}
GrandStaffContext=\translator{
\type "Engraver_group_engraver";
\name GrandStaff;
\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";
\accepts "Lyrics";
\accepts "ChordNames";
-};
+}
-\translator { \StaffGroupContext }
% UGH! JUNKME
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";
\consistsend "Axis_group_engraver";
\accepts "LyricVoice";
-};
-\translator { \LyricsContext }
+}
ChordNameVoiceContext = \translator {
\type "Engraver_group_engraver";
\consistsend "Axis_group_engraver";
\consists "Separating_line_group_engraver";
\consists "Chord_name_engraver";
-};
-\translator {\ChordNameVoiceContext}
-
+}
ChordNameContext = \translator {
\type "Engraver_group_engraver";
\name ChordNames;
\consists "Output_property_engraver";
\accepts "ChordNameVoice";
\consistsend "Axis_group_engraver";
- };
-\translator { \ChordNameContext }
+ }
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
\consistsend "Hara_kiri_engraver";
\consists "Instrument_name_engraver";
\accepts "Voice";
-};
+}
%{
The HaraKiriStaffContexts doesn't override \name,
so it is still named `Staff'.
OrchestralPartStaffContext = \translator {
\StaffContext
\consists "Mark_engraver";
-};
+}
ScoreContext = \translator {
\type Score_engraver;
(breakable . #t)
(visibility-lambda . ,begin-of-line-visible)
(name . "barnumber")
+ (padding . 1.0)
+ (direction . 1)
)
basicBeamProperties = #basic-beam-properties
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 = #`(
(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 =#`(
(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")
)
(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";
}
+
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.;
* cleanup
* use elt properties, iso. paper variables.
-%}
-
+%}
paperfile = \papersize + ".ly";
% paperfile = "a4.ly";
staffspace = \staffheight / 4.0;
stafflinethickness = \staffspace / 10.0;
-% deprecated
-interline = \staffspace;
-
%{
The space taken by a note is determined by the formula
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;
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;
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";
-
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
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
\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
--- /dev/null
+\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
+>
c'1\ff ~ |
c |
f,4-. r r2 |
- \property Staff.instr = #"Vc.\nCb."
r1 |
c'1\ff ~ |
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
% 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
)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(|
)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(|
% )<b1\sf\> { s2 s4 \!s8}> |
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 |
f |
b,2\sf r |
b2\sf r |
+ %160
R1*3 |
bes2\ff r |
bes2\sf r |
%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'(|
)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
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 |
%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 |
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]|
%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 |
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 |
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|
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
-%%% >
-%%%>
-
\include "global.ly"
\include "paper16.ly"
-\include "contrabasso.ly"
+\include "bassi.ly"
\include "clarinetti.ly"
\include "corni.ly"
\include "fagotti.ly"
\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 <
\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
[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 |
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.~ |
)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(|
)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] |
[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 ~ |
[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]|
[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';
%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(|
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
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
%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 |
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 ~ |
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 |
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
-%%% >
-%%%>
-
[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 |
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.~ |
)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(|
)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] |
[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 ~ |
[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]|
[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';
%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(|
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
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
%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|
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 ~ |
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 |
\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
--- /dev/null
+\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
+>
c'1\ff ~ |
c |
f,4-. r r2 |
- \property Staff.instr = #"Vc.\nCb."
+ \property StaffCombineStaff.instr = #"Vc.\nCb."
r1 |
c'1\ff ~ |
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
%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
%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~] |
%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] |
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 |
[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: 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';
%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~] |
[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 |
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
%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 |
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 |
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|
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
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
-%%% >
-%%%>
-
(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)
)
)
+(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
(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
(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
(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)
#!@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
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()]
# 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},
'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<code>\\begin{verbatim}.*?\\end{verbatim})""",
'verb': r"""(?P<code>\\verb(?P<del>.).*?(?P=del))""",
'mudela-file': r'\\mudelafile(\[(?P<options>.*?)\])?\{(?P<filename>.+)}',
- 'mudela' : '(?m)\\\\mudela(\[(?P<options>.*?)\])?{(?P<code>.*?)}',
+ 'mudela' : '(?m)^[^%]*?\\\\mudela(\[(?P<options>.*?)\])?{(?P<code>.*?)}',
#'mudela-block': r"""(?m)^[^%]*?\\begin(\[(?P<options>.*?)\])?{mudela}(?P<code>.*?)\\end{mudela}""",
'mudela-block': r"""(?s)\\begin(\[(?P<options>.*?)\])?{mudela}(?P<code>.*?)\\end{mudela}""",
'def-post-re': r"""\\def\\postMudelaExample""",
'def-pre-re': r"""\\def\\preMudelaExample""",
'intertext': r',?\s*intertext=\".*?\"',
- 'ignore': r"(?m)(?P<code>%.*?^)",
+ #'ignore': r"(?m)(?P<code>%.*?^)",
+ 'ignore': r"(?m)(?P<code>^%.*)$",
'numcols': r"(?P<code>\\(?P<num>one|two)column)",
},
'texi': {
'include': '@mbinclude[ \n\t]+(?P<filename>[^\t \n]*)',
'input': no_match,
+ 'landscape': no_match,
'header': no_match,
'preamble-end': no_match,
'verbatim': r"""(?s)(?P<code>@example\s.*?@end example\s)""",
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
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):
TODO has format [basename, extension, extension, ... ]
"""
+ #print "-schedule_mudela_block", extra_opts
if len(chunk) == 3:
(type, body, opts) = chunk
complete_body = None
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()
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)
\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}}}}%