+pl 4.uu1
+ - input/test/ \property fixes.
+ - gcc 2.95 fix
+
+pl 4.hwn1
+ - Break_align_engraver,
+ break align order from \property breakAlignOrder
+ - junked Score_priority_engraver
+ - moved Time_description into Timing_translator
+ - use properties for timing, see input/test/timing.fly
+ * removed \cadenza ; now use \property Score.timing
+ * \property measurePosition
+ * \property measureLength
+ * \property currentBarNumber
+ - Note_name_engraver , \context NoteNames
+
+
pl 4.jcn1
- junked some chord guessing code
- bf: lookup size (-1) for chord-name accidentals
- bf: ly2dvi's MFINPUTS setting
+*************
pl 2.jcn3
- chords:
* Chord is item
\keysignature bes;
\tempo 2=60;
}
-\version "1.2.0";
+\version "1.3.4";
% \include "score-paper.ly"
flute1 = \notes \relative c'' {
--- /dev/null
+\input texinfo @c -*-texinfo-*-
+@setfilename README-W32.info
+@settitle LilyPond on W32
+
+
+@node Top, , , (dir)
+
+@chapter LilyPond on W32
+
+FIXME: remove yodl refs.
+
+[FIXME: THIS DOCUMENTED IS OUTDATED]
+
+No, there's no reason to be concered, Lily should work in
+Windows-NT(/95/98?) too. The setup may not be easy or smooth. This
+document will help you getting started.
+
+
+@section DISCLAIMER
+
+If you have the Cygnus gnu-windows32 port of the GNU utils, LilyPond
+will work in Windows-NT (/95/98?).
+
+We still recommend you use Unix. In particular, use GNU/Linux: We've
+been there, and we've seen it happen several times. It is @strong{much}
+easier and quicker to install RedHat Linux and LilyPond than to
+obtain, compile and install all the necessary tools to compile and run
+LilyPond on Windows.
+
+``Ok, thanks for the suggestions. I can't run Linux or I don't want
+to run Unix. What can I expect?''
+
+@itemize @bullet
+@item LilyPond development is moving quite fast, and all developers use Unix.
+ Newly added features may require some attention to get them to work.
+@item LilyPond depends on a number of other packages that usually are
+ available on Unix boxes, but are not installed by default on Windows.
+@end itemize
+
+
+LilyPond will now install/extract in a unix-like tree:
+@example
+
+ usr/[local/]bin/
+ usr/[local/]share/lilypond/*
+
+@end example
+
+etc.
+
+Lily runs in a the unix-like Cygnus gnu-windows environment;
+hopefully Cygnus will adopt the @file{/usr/[local/]} tree too.
+
+@*
+If you really don't want usr/ in your root directory, but rather scatter
+your programs and packages all over your harddisk, do something like:
+@example
+
+ md lilypond
+ cd lilypond
+ unzip ../lilypond-0.1.77.exe.zip
+
+@end example
+
+and add @file{lilypond/usr/bin} to your @file{PATH} and
+@file{lilypond/usr/share/lilypond} to your @file{LILYINCLUDE}.
+
+
+If you've received a binary release of LilyPond (@file{.exe.zip}),
+you may skip the following sections.
+
+
+It can be done! Occasionally, the Cygnus b19.1 cross compiler and
+utilities under GNU/Linux are used to make the binary @file{.exe.zip}
+releases (some makefile hacking was needed to build this stuff). Jeffrey
+Reed tries to keep-up with LilyPond development, and is doing quite
+well. His latest release is available on
+@uref{http://home.austin.rr.com/jbr/jeff/lilypond/}.
+
+
+I have heard of such tools that think they're probably much smarter than the
+packager and thus decide for themselves that they don't need to unpack certain
+files (e.g., empty directories such as bin/out).
+
+To unpack the lilypond sources, you should do something like: @example
+
+ tar zxf releases/lilypond-x.y.z.tar.gz
+
+@end example
+
+
+If you're familiar with the GNU/Cygnus development package, you may skip
+this.
+
+Don't forget to set
+@example
+
+ /start/settings/control-panel/system/environment/system-variables:
+ GCC_EXEC_PREFIX=/Cygnus/b19/H-i386-cygwin32/lib/gcc-lib/
+ MAKE_MODE=UNIX
+
+@end example
+
+You want to run bash, while building Lily:
+@example
+
+ c:\bash
+ bash-2.01$
+
+@end example
+
+The install instructions mention something like:
+@example
+
+ configure
+ make
+ make install
+
+@end example
+
+Now for a small UNIX lesson: The current working directory (cwd) is
+by default not in your PATH, like it is under DOS (for security reasons).
+Check this by looking at the output of:
+@example
+
+ echo $PATH
+
+@end example
+
+The cwd looks like @code{'::'} or @code{':.'}. If it's not there, you may
+add the cwd to your path:
+@example
+
+ PATH=$PATH:.
+
+@end example
+
+or you must use './' when issuing a command in th cwd, try:
+@example
+
+ ./configure
+ make
+
+@end example
+
+My point of reference comes from 15 odd years working with a variety
+of @code{UNIX} platforms. I am relatively new to Windows-NT and, even
+though I am a card carrying @code{UNIX} bigot, I am excited about the
+NT OS. My goals for lilypond are to give back to the Free Software
+Foundation a little of what they have given me over the years and to
+contribute to the lilypond project by supporting a Windows-NT port. I
+hope that someday we can distribute and run lilypond on the NT OS in a
+much more native fashion.
+
+@itemize @bullet
+
+@item Building lilypond on Windows-NT
+@item Maintaining lilypond on Windows-NT
+@item Running lilypond on Windows-NT
+
+@end itemize
+
+
+Currently as stated above lilypond is primarily a @code{UNIX} thing.
+The Windows-NT port is based on the @code{UNIX} environment provided by
+@uref{http://www.cygnus.com,Cygnus}. Therefore the first step is to
+download and install the Cygnus development kit:
+
+@uref{http://www.cygnus.com/misc/gnu-win32/}
+
+Please follow the documentation Cygnus has on there web site for
+downloading and installing. The important part is that you down load
+the entire development kit. I believe it is @file{full.exe}. The
+installation will ask you where you want to install it. I will refer
+to Cygnus installation directory as @file{/gnuwin32/cygwin-b20}. There
+should be a @file{README} file that contains installation instructions.
+After the installation is complete you should have a @emph{Cygnus}
+shortcut in your @emph{Program} section of your @emph{Start Menu}. This
+shortcut is your door to the @code{UNIX} world and I will refer to the
+resulting window as a @file{bash} shell.
+
+The shortcut points to @file{/gnuwin32/cygwin-b20/cygnus.bat}. The
+following is my @file{cygnus.bat} file.
+
+@example
+
+@@ECHO OFF
+rem default environment
+
+rem GNU cygnus installation
+
+SET CYGREL=B19.1
+SET MAKE_MODE=unix
+SET LOCAL_ROOT=d:\gnuwin32
+SET LOCAL_FS=d:/gnuwin32
+SET LOCAL_DIR=d:/gnuwin32/cygwin-b20
+SET CYGROOT=%LOCAL_ROOT%\cygwin-b20
+SET CYGFS=%LOCAL_FS%/cygwin-b20
+SET TCL_LIBRARY=%CYGROOT%\share\tcl8.0
+rem
+rem This was not in the original but is needed by lots of packages
+rem
+SET BISON_SIMPLE=%CYGFS%/share/bison.simple
+
+rem
+rem I place the cygnus stuff in front of /WINNT
+rem
+
+SET PATH=d:\bin;%LOCAL_ROOT%\bin;%CYGROOT%\H-i586-cygwin32\bin;%PATH%
+SET MANPATH=%LOCAL_ROOT%\man;%LOCAL_ROOT%\cygwin-b20\full-man\man
+SET INFOPATH=%LOCAL_FS%/cygwin-b20/full-man/info;%LOCAL_FS%/cygwin-b20/info;%LOCAL_DIR%/info
+
+rem General tools not included with Cygnus Development Kit
+
+rem CVS
+
+SET PATH=%PATH%;%LOCAL_ROOT%\cvs-1.9.28\bin
+SET INFOPATH=%INFOPATH%;%LOCAL_FS%/cvs-1.9.28/info
+SET MANPATH=%MANPATH%;%LOCAL_ROOT%\cvs-1.9.28\man
+
+rem EMACS
+
+SET PATH=%PATH%;%LOCAL_ROOT%\emacs-19.34\bin
+SET INFOPATH=%INFOPATH%;%LOCAL_FS%/emacs-19.34/info
+
+rem VIM
+
+SET VIM=%LOCAL_ROOT%\vim-4.6\doc
+SET PATH=%PATH%;%LOCAL_ROOT%\vim-4.6
+
+rem TeX
+
+SET PATH=%PATH%;%LOCAL_ROOT%\texmf\miktex\bin
+
+rem a2ps
+
+SET PATH=%PATH%;%LOCAL_ROOT%\a2ps-4.10\bin
+SET INFOPATH=%INFOPATH%;%LOCAL_FS%/a2ps-4.10/info
+SET MANPATH=%MANPATH%;%LOCAL_ROOT%\a2ps-4.10\man
+
+rem python
+
+SET PATH=%PATH%;\Program Files\Python
+
+rem perl
+
+SET PATH=%PATH%;\qub
+
+rem yodl
+
+uname -sv
+bash -login
+
+@end example
+
+Please look over this carefully. Be careful with the forward and
+backward slash notations. The paths specified were done for good
+reasons. Maybe someday we will all be using @code{UNC}. Note the
+@code{BISON} entry and the @code{PATH} ordering in particular. Also note
+that the generic @file{cygnus.bat} you will be looking at does not
+include alot of the packages listed. We will be installing some of
+these.
+
+The installation also suggests that you create a directory @file{/bin}
+and copy @file{/gnuwin32/cygwin-b20/H-i586-cygwin32/bin/sh.exe} to
+@file{/bin}. The @file{sh.exe} shell provided by Cygnus is a descendant
+of the @file{ash} shell. The @file{sh.exe} shell has improved greatly
+and is much faster than the @file{bash} shell for script invocations.
+So this is my recommendation for post installation steps. From a
+@file{bash} shell:
+
+@itemize @bullet
+@item @code{cd /}
+@item @code{mkdir bin}
+@item @code{cd /bin}
+@item @code{cp /gnuwin32/cygwin-b20/H-i586-cygwin32/bin/sh.exe sh.exe}
+@item @code{cp /gnuwin32/cygwin-b20/H-i586-cygwin32/bin/bash.exe bash.exe}
+@item @code{cd /}
+@item @code{mkdir /tmp}
+@item @code{chmod a+rwx tmp}
+@item @code{mkdir /etc}
+@item @code{cd /etc}
+@item @code{mkpasswd -l > passwd}
+@item @code{mkgroup -l > group}
+@end itemize
+
+
+There is also some discussion of how you want to @emph{mount} the Cygnus
+development kit. @emph{mount} is a @code{UNIX} term that refers to the
+mechanism used to provide a disk resource to the filesystem. Cygnus
+supplies a mechinism for @emph{mounting} a filesystem as a @code{DOS} like
+resource or a @code{UNIX} like resource. Among other things this
+attempts to deal with the text file carriage return line feed on
+@code{DOS} versus the line feed on @code{UNIX} and the issue that @code{DOS}
+has two file types, text and binary. Where @code{UNIX} deals with a
+single streams type. My opinion on this matter currently is to use
+binary mounts only. This can be accomplished by:
+
+@itemize @bullet
+@item From a bash shell, umount /
+@item mount -b d: /
+@end itemize
+
+If you have other disks that you intend to use for data generated by
+cygnus tools you will have to mount those devices with the @emph{-b}
+switch.
+
+
+@uref{http://www.xraylith.wisc.edu/~khan/software/gnu-win32/egcs.html}
+
+Cygnus now distributes the ecgs compiler with cygwin-b20.
+
+
+@uref{http://www.gnu.org/order/ftp.html}
+
+Considering the origin of the major contributors of lilypond, this is a
+must. However before we actually do a @strong{GNU} build we have to
+discuss some caveats of the Windows-NT OS in particular the naming of
+executable files. @code{Windows-NT} uses a .exe extension where @code{UNIX}
+does not use an extension. This causes a problem during the
+installation portion of a @strong{GNU} build. The following script can be
+used to help alleviate this problem.
+
+@example
+
+#!/bin/sh
+
+realinstall=/gnuwin32/cygwin-b20/H-i586-cygwin32/bin/install.exe
+args=''
+while [ $# -ne 0 ]
+do
+ case $1 in
+ -*) args="$args $1"
+ ;;
+
+ *) if [ -f $1.exe ]; then
+ args="$args $1.exe"
+ else
+ args="$args $1"
+ fi
+ ;;
+ esac
+ shift
+done
+
+$realinstall $args
+
+@end example
+
+I place this in script @file{~/bin}. The LilyPond configure, build,
+and install process handles this with it's own install script. In
+addition there are patches to the cygnus install command that also
+deals with this problem. Having said that, here is how one
+might build the @emph{gettext} package.
+
+@itemize @bullet
+@item download the package from one of the ftp sites.
+@item From a bash shell, cd ~/usr/src.
+@item tar zxf gettext-0.10.tar.gz
+@item cd gettext-0.10
+@item ./configure --prefix=$CYGFS/H-i586-cygwin32
+@item make
+@item make install
+@end itemize
+
+
+@uref{http://www.gnu.org/order/ftp.html}
+
+Following the instructions for @emph{gettext} package to download, build,
+and install the @emph{groff} package.
+
+
+@uref{http://www.python.org}
+
+Python is the scripting language of choice for a lilypond build.
+There is a native @code{Windows-NT} self extracting binary distribution
+available. I recommend installing Python in a directory that does
+@strong{not} have spaces. And then place it in the bash shell path by
+editing $CYGFS/cygnus.bat.
+
+
+@uref{http://www.cpan.org}
+
+I believe perl is used in some legacy scripts to date. There is a
+native @code{Windows-NT} self extracting binary distribution available.
+I recommend installing Perl in a directory that does @strong{not} have
+spaces. And then place it in the bash shell path by editing
+$CYGFS/cygnus.bat.
+
+The development methodology of @emph{LilyPond} relies on a the following
+directory structure:
+
+
+@example
+
+$HOME/usr/src/
+ |-releases/
+ |-patches/
+ |-test/
+
+@end example
+
+@table @samp
+
+@item releases/ Downloaded and generated releases live here. For
+example @file{lilypond-1.1.17.tar.gz}.
+
+@item patches/ Downloaded and generated patches live here. For
+example @file{lilypond-1.1.17.diff.gz}.
+
+@item test/ This directory is used to generate releases and patches.
+
+@end table
+
+I strongly recommend using this file structure to build @emph{yodl} and
+@emph{lilypond}.
+
+@itemize @bullet
+@item download the package from
+@uref{http://www.xs4all.nl/~jantien/yodl/} to
+@file{$HOME/usr/src/releases}.
+@item From a bash shell, cd @file{$HOME/usr/src}.
+@item tar zxf releases/yodl-@emph{<version>}.tar.gz
+@item cd yodl-@emph{<version>}
+@item ./configure --prefix=/gnuwin32/yodl-@emph{<version>} --srcdir=.
+Since @emph{yodl} is under development I choose to install it in a
+version rooted directory. This allows me to test newly released
+versions without losing a known working version.
+
+@item make
+@item make install
+@item place it in the bash shell path by editing $CYGFS/cygnus.bat.
+For example:
+@example
+rem yodl
+
+SET PATH=%PATH%;%LOCAL_ROOT%\yodl-1.31.7\bin
+
+
+@end example
+
+@end itemize
+
+
+
+GUILE, GNU's Ubiquitous Intelligent Language for Extension, is a
+library that implements the Scheme language plus various convenient
+facilities. It's designed so that you can link it into an application
+or utility to make it extensible. GNU's plan is to link this library
+into all GNU programs that call for extensibility.
+
+@itemize @bullet
+@item download guile-1.3 patch from
+@uref{http://home.austin.rr.com/jbr/jeff/lilypond/guile.patch} and save it
+to @file{/tmp/guile.patch}.
+@item download guile-1.3 from one of GNU's ftp sites.
+@item From a bash shell, tar zxf guile-1.3.tar.gz
+@item cd guile-1.3
+@item patch -p2 < /tmp/guile.patch
+@item LD=/gnuwin32/cygwin-b20/H-i586-cygwin32/bin/ld \ @*
+ ./configure --prefix=$CYGFS/H-i586-cygwin32
+@item make sure bin_PROGRAMS macro in libguile/Makefile does @emph{not} have the
+.exe extension during the build
+@item make
+@item make sure bin_PROGRAMS in libguile/Makefile @emph{does} have the
+.exe extension during the install. Yuck.
+@item make install
+@end itemize
+
+
+@itemize @bullet
+@item download the package from
+@uref{http://www.cs.uu.nl/people/hanwen/lilypond/} to
+@file{$HOME/usr/src/releases}.
+@item From a bash shell, cd @file{$HOME/usr/src}.
+@item tar zxf releases/lilypond-@emph{<version>}.tar.gz
+@item cd lilypond-@emph{<version>}
+@item ./configure --prefix=/gnuwin32/lilypond-@emph{<version>} \ @*
+ --srcdir=. @*
+Since @emph{lilypond} is under development I choose to install it in a
+version rooted directory. This allows me to test newly released
+versions without losing a known working version.
+@item make
+@item make install
+@item place it in the bash shell path by editing $CYGFS/cygnus.bat.
+For example:
+@example
+rem lilypond
+
+SET PATH=%PATH%;%LOCAL_ROOT%\lilypond-1.1.17\bin
+
+
+@end example
+
+@end itemize
+
+
+If you have built @emph{lilypond} on @code{Windows-NT} using the directory
+ and the process described
+in section FIXME, then you are ready to maintain
+@emph{lilypond}. It can not be that easy!? Well, there is one caveat.
+Currently to use the @file{stepmake/bin/release.py} and
+@file{stepmake/bin/package-diff.py} scripts you need to obtain/build a
+version of @emph{python} that was built with @strong{Cygnus} development kit.
+The process I used is as follows:
+
+@itemize @bullet
+@item obtain python source from @uref{http://www.python.org}
+@item tar zxf /tmp/python-@emph{<version>}.tar.gz
+@item cd python-@emph{<version>}
+@item configure --prefix=/gnuwin32/Python-@emph{<version>}
+@item edit toplevel @file{Makefile} @code{EXE} macro so it reads @code{EXE=.exe}
+@item make
+@item make install
+@item place it in the bash shell path by editing $CYGFS/cygnus.bat.
+For example:
+@example
+rem python
+
+SET PATH=%PATH%;%LOCAL_ROOT%\python-1.5.1\bin
+
+
+@end example
+
+@end itemize
+
+I choose to build @emph{lilypond} with the standard @code{Windows-NT}
+@emph{python} and use the @strong{Cygnus} version for using the release
+scripts. This way I can make sure the @code{Windows-NT} @emph{python}
+version is able to build @emph{lilypond}. Currently there are several
+issues with the release scripts. Using @code{os.link} and
+@code{os.system(set -x;...)} are to name a few.
+
+To generate a new release and patch you must use the directory
+. And follow the
+instructions found in @file{PATCH.txt}. Editing
+@file{Documentation/AUTHORS.yo}, @file{VERSION}, and @file{NEWS} is also
+required. When my edits are complete and tested I:
+
+@itemize @bullet
+@item Edit @file{config.make} and change @emph{python} path to the
+@strong{Cygnus} version: @code{PYTHON=/gnuwin32/Python-1.5.1/bin/python}.
+@item make release
+@end itemize
+
+The new release is placed in @file{releases} directory and the patch is
+placed in the @file{patches} directory. I email the new patch to
+@email{gnu-music-discuss@@gnu.org}. More than one patch a day can be
+generated by:
+
+@itemize @bullet
+@item cd $HOME/usr/src
+@item tar zxf releases/lilypond-@emph{<version>}.@emph{<patchlevel>}
+@item use your normal configure
+@item make edits
+@item Change @file{VERSION} to increment @emph{<patchlevel>}
+@item Change @file{NEWS}
+@item make release
+@end itemize
+
+
+We are now distributing a formated binary distribution for
+Windows-NT. Please refer to
+@uref{http://home.austin.rr.com/jbr/jeff/lilypond/} for current news,
+download, installation, and running information.
+
+Jeffrey B. Reed @email{daboys@@austin.rr.com}
+
+@section RUNNING LILYPOND -- by Dominique Cretel
+
+You may want to refer to section FIXME, for more current
+information about downloading, installing, and running the Windows-NT
+binary distribution.
+
+@enumerate i
+@item First, I have download tha 0.1.64 version of LilyPond music software.
+
+@item Then I extract it in a temp directory, and I move the directory
+"lilypond-0.1.64" to the root directory of my D drive.
+
+@item I go to the D:\Lilypond-0.1.64\tex directory to modify the
+lilyponddefs.tex file (lines 75 and 84), and comment all
+cmbx15 ans cmbx14, and replace them by cmbx12.
+
+@item build a command file like this:
+Note: I use MiKTeX to process the tex file generated.
+
+@example
+
+---begin ly2dvi.bat
+echo off
+set ver=0.1.64
+set path=%path%;d:\lilypond-%ver%\bin
+lilypond -I d:\lilypond-%ver%\init %1
+rem *** pause
+
+set path=c:\texmf\miktex\bin;%path%
+set TEXINPUTS=%TEXINPUTS%;d:\lilypond-%ver%\tex
+set MFINPUTS=%MFINPUTS%;d:\lilypond-%ver%\mf
+tex %1.tex
+rem *** pause
+
+dvips %1.dvi
+rem *** pause
+
+set path=%path%;d:\gstools\gsview
+gsview32 %1.ps
+---end ly2dvi.bat
+
+@end example
+
+@item execute lilypond by doing:
+@example
+
+ly2ps silly <Enter>
+
+@end example
+
+@end enumerate
+
+Note:
+@*
+You'll better have to put the SET commands lines in a separate command
+file to avoid consumming each time environnment ressources.
+
+Bye,@*
+Dominique Cretel @email{dominique.cretel@@cfwb.be}
+
+@section PROBLEMS AND ANWSWERS
+
+This is all to confusing. I have:
+@enumerate i
+@item downloaded @file{/tmp/lilypond-0.1.78.tar.gz}
+@item @example
+
+ cd ~/usr/src
+
+@end example
+
+@item @example
+
+ tar zxf /tmp/lilypond-0.1.78.tar.gz
+
+@end example
+
+@item @example
+
+ ./configure --prefix=/users/jeff/lilypond-0.1.78 \--enable-tex-prefix=/users/jeff/lilypond-0.1.78/texmf \--enable-tex-dir=/users/jeff/lilypond-0.1.78/texmf/tex \--enable-mf-dir=/users/jeff/lilypond-0.1.78/texmf/mf
+
+@end example
+
+@item @example
+
+ make
+
+@end example
+
+@item @example
+
+ make install
+
+@end example
+
+@end enumerate
+
+I did have a problem with lilypond.info. And I will look into this
+further. After mending lilypond.info issue, it compiled and install
+with no problems.
+
+I have 64 Meg of physical memory and 64 Meg of swap. Actually I need
+to increase the swap space. If a memory problem is occuring it most
+likely is during the link process of lilypond. There is a boat load
+of objects to link.
+
+Jan the mount -b stuff is confussing to me. I have the entire system
+mounted _without_ -b and only use -b on certain paths for programs
+that create binary files that do not use O_BINARY open option. By the
+way the midi file open is one of these cases, I need to look into
+that. I have had no problems with this methodology.
+
+
+The windows multiroot filesystem is an utterly broken concept. Please
+do everything on one (urg) drive, C:.
+
+@example
+
+> configure
+> creating cache ./config.cache
+> [..]
+> creating config.make
+> creating config.hh
+> cd: lstat /d failed
+
+@end example
+
+Ok, this looks like another stupid windows problem.
+You're working on 'drive D:', right?
+
+I can think of some solutions, but i don't know if they work;
+i just had to do some work in windows some time ago. If you
+have problems with this, please ask @email{gnu-win32@@cygnus.com}.
+I'll start with the simplest:
+@itemize @bullet
+ @item do everything on drive C:, or
+ @item explicitely mount drive d:, work from there:
+ @example
+
+ mkdir -p /mnt/d
+ mount d: /mnt/d
+ cd /mnt/d/lilypond-x.y.z/
+
+@end example
+
+ @item make d:/ the root of cygnus, in cmd.exe/command.exe do:
+ @example
+
+ umount /
+ mount d: /
+
+@end example
+
+@end itemize
+
+
+> - First I have installed Python (for win32) "Pyth151.exe" and "Configure
+@*
+> don't find it. I had to put it in the path for configure find it?
+@*
+
+Yes, of course. It should be possible to have different versions of tools
+installed (e.g. perl 4 and perl 5). The best way to tell people (or tools
+like configure) which one to use is to put it in the path?
+
+Another small unix lesson: Where under dos each program installs itself
+into a nice directory
+@example
+
+ c:\DosProgram\*
+
+@end example
+
+under unix, installation is handled centrally. Executables go in
+@file{/usr/bin} (or @file{/usr/local/bin}), and are always in your path.
+
+
+@example
+
+> 4. make -C lily don't work. I get an error (see below). I get several
+> object files in the ./lily/out directory (34 files: 17 *.dep, 16 *.o,
+> and 1 *.hh):
+> [...]
+> include/engraver-group.hh:35: virtual memory exhausted
+> make: *** [out/bar-grav.o] Error 1
+> bash-2.01$
+
+
+@end example
+
+Ok, so everything works now, there's only some error with one of the
+source files. Lets see which one (and now the cc's now why they're
+reading this :-)
+
+It looks like you've run out of memory. You should compile without
+optimisation, gcc/egcs need a lot of memory for optimising.
+Reconfigure without optimisation:
+@example
+
+ configure --disable-optimise
+
+@end example
+
+or edit @file{config.make}:
+@example
+
+ ## USER_CXXFLAGS = -g # -O no optimise!
+ USER_CXXFLAGS = -g
+
+@end example
+
+There are some other things to look at: how much RAM do you have
+(please say something > 8Mb :-)? Although it might be an egcs bug,
+you should have a look at the size of your swap file.
+For an US version of windows, you should find it here:
+@example
+
+ /start/settings/control-panel/system/performance/virtual-memory
+
+@end example
+
+you see, amongst others, these entries:
+@example
+
+ paging file size for selected drive:
+
+ space-available: xx
+ initial-size: xx
+ maximum-size: xx
+
+ total paging file size for all drives
+
+ currently allocated: xx
+
+@end example
+
+Try to set:
+@example
+
+ initial-size: 64
+ maximum-size: 128
+
+@end example
+
+Make sure that:
+@itemize @bullet
+@item maximum-size >= 128 Mb
+@item urrently-allocated + space-available >= 128 Mb
+@end itemize
+
+
+@bye
@mudelafile{tie.ly}
-When tieing notes with accidentals across a bar boundary, the
-accidental must not be drawn on the note in the new bar.
-Instead, the next note of the same pitch in this bar should always show the
-accidental (even if it's natural).
-Well, and slurring a accidentaled note to a natural one across bar
-boundaries should be explicit...
+When tieing notes with accidentals across a bar boundary, the accidental
+must not be drawn on the note in the new bar. Instead, the next note of
+the same pitch in this bar should always show the accidental (even if
+it's natural). Slurring a accidentaled note to a natural one across bar
+boundaries should be explicit.
+
+Pitches can be verified by printing them with the @code{NoteNames} context.
@mudelafile{tie-accidental.ly}
@item @email{oliva@@dcc.unicamp.br, Alexandre Oliva},
@uref{http://sunsite.unicamp.br/~oliva/}
testing
-@item @email{pinard@@iro.umontreal.ca, Franc,ois Pinard},
+@item @email{pinard@@iro.umontreal.ca, Franc@,ois Pinard},
parts of Documentation/Vocab*, started internationalization stuff
+@item @email{portnoy@ai.mit.edu,Stephen Peters} pdfTeX support
@item @email{glenprideaux@@iname.com, Glen Prideaux},
minor bug fix to script used to generate doc++ documentation
@item @email{Roy.Rankin@@alcatel.com.au, Roy R. Rankin},
\alternative
\bar
\breathe
- \cadenza
\chordmodifiers
\chords
\clef
-@example
- \cadenza@keyindex{cadenza} @var{togglevalue} @code{;}
-@end example
-
-Music expression that toggles the automatic generation of bar lines.
-If @var{togglevalue} is 1, bar line generation is turned off. If
-@var{togglevalue} is 0, a bar line is immediately printed and
-automatic bar generation is turned on.
@example
@mudela[]
\score {
\notes {
- \cadenza 1;
+ \cadenzaOn
%\property Voice.textStyle = typewriter
\clef subbass; c'4-"\kern -5mm subbass"
\clef bass; c'4^"\kern -2mm bass"
@mudela[]
\score {
\notes {
- \cadenza 1;
+ \cadenzaOn
\clef alto; c'4_"\kern -2mm alto"
\clef mezzosoprano; c'4^"\kern -9mm mezzosoprano"
\clef soprano; c'4_"\kern -6mm soprano"
@mudela[fragment,verbatim,center]
\notes \context Staff {
- \cadenza 1;
+ \cadenzaOn
<a c'> <b d' > <c' e'>
< { a b c' } { c' d' e' } >
}
.* TODO
. * make this file understandable for 3rd parties.
. * break align order from SCM list.
-. * time description should be put into SCM
-. * context in embedded SCM errors.
-
+. * \accepts -> \acceptedby
+. * context in embedded SCM errors.
. * eradicate all VIRTUAL_COPY_CONS () macros ; use indexed creation,
eg.
. * bracket pdf hack
. * Mondrup:
-- I would like the possibility of forcing clef- and key- changes to be
-printed _after_ the new bar line
-
- I would like an option to define the number of systems on which the
score must be distributed. As it is now it seems that I may only
influence that indirectly through the gourlay_maxmeasures property.
PACKAGE_NAME=LilyPond
MAJOR_VERSION=1
MINOR_VERSION=3
-PATCH_LEVEL=4
-MY_PATCH_LEVEL=jcn1
+PATCH_LEVEL=5
+MY_PATCH_LEVEL=
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
# released version.
SUBDIRS=test bugs tutorial
-examples=praeludium-fuga-E star-spangled-banner just-friends paddy
+examples=praeludium-fuga-E star-spangled-banner paddy
flexamples=
LOCALSTEPMAKE_TEMPLATES=mutopia
}}
-\version "1.2.0";
+\version "1.3.4";
* organ staff...
%}
-\version "1.2.0";
+\version "1.3.4";
\include "paper20.ly"
-\version "1.2.0";
+\version "1.3.4";
oden = \lyrics{
O |
-\version "1.2.0";
+\version "1.3.4";
one = \notes\relative c{
c'' d e f
}
}
-\version "1.2.0";
+\version "1.3.4";
* organ staff...
%}
-\version "1.2.0";
+\version "1.3.4";
-\version "1.2.0";
+\version "1.3.4";
ritme = \notes\transpose c'' {
\time 4/4;
}
-\version "1.2.14";
+\version "1.3.4";
\score { \notes
\relative c'' \context Staff {
- \property Staff.textEmptyDimension = "1"
+ \emptyText
\repeat "semi" 2 { \time 4/4; c4^"cuivr\\'e"_\fermata }
\alternative {
{ \property Voice.textStyle = "italic" d-4_"cantabile" }
| | | |--|
x| x| x| x| x|
%}
- \property Voice.beamAutoEnd = "2/4"
+ \property Voice.beamAutoEnd = #(make-moment 2 4)
c8 c c c16 c
}
c8 c c c
c16 c c c c c c c
% from here on consider ending beam every 1/4 note
- \property Voice.beamAutoEnd = "1/4"
+ \property Voice.beamAutoEnd = #(make-moment 1 4)
c8 c c c
% manually override autobeam with weird beaming
c8 [c c] c
c8 c c4
r8 c c c
% no autobeaming
- \property Voice.beamAuto = "0"
+ \property Voice.beamAuto = #f
c8 c c c
}
\paper{
}}
-\version "1.2.0";
+\version "1.3.4";
-\version "1.3.2";
+\version "1.3.4";
\header{
enteredby = "jcn";
c1 c1 c1 c1\break
c1 c1 c1 c1\break
- \property Score.currentBarNumber = "25"
+ \property Score.currentBarNumber = 25
c1 c1 c1 c1
}
\paper{ \translator {\BarNumberingStaffContext }}}
-\version "1.2.0";
+\version "1.3.4";
onestaff = \context Staff = foo\notes {
\property Staff.instr = instr
-\version "1.2.0";
+\version "1.3.4";
\score{
\notes\transpose c'{
- \property Score.beamquantisation = \none
+ \property Score.beamQuantisation = #'none
[a'8 <a' g''>]
[c <c e,>]
}
}
-\version "1.2.0";
+\version "1.3.4";
}
}
-\version "1.2.0";
+\version "1.3.4";
-\version "1.2.0";
+\version "1.3.4";
\score{
\notes\transpose c''{
- \property Score.beamquantisation = 3 % TEST
+ \property Score.beamQuantisation = 'test
[c8 c] [c c] [c c] [c c]
[a' a'] [a' a'] [a' a'] [a' a']
\score{
\notes\relative c''{
- \property Score.beamquantisation = \none
- % \property Score.beamquantisation = \normal
- % \property Score.beamquantisation = \traditional
+ \property Score.beamQuantisation = #'none
+ % \property Score.beamQuantisation = #'normal
+ % \property Score.beamQuantisation = #'traditional
[g16 e f g]
}
\paper{
TestedFeatures = "beams and beamflags";
}
-\version "1.2.0";
+\version "1.3.4";
\score{
<
-% \property Score.beamquantisation = \none
+% \property Score.beamQuantisation = #'none
\context GrandStaff <
\notes\transpose c' {
-\version "1.2.0";
+\version "1.3.4";
\score {
\notes \relative c' {
"(Feta definitively is not an abbreviation of Font-En-TjA)";
}
-\version "1.2.0";
+\version "1.3.4";
shortlong = \notes{
c4()c( c c |
>
}
-\version "1.2.0";
+\version "1.3.4";
}
-\version "1.2.0";
+\version "1.3.4";
-\version "1.3.2";
+\version "1.3.4";
%{
Would this be acceptable/good enough/convenient for entry?
-\version "1.2.0";
+\version "1.3.4";
\score {
\notes{
\context Staff \notes\relative c''{
c c c c
% coda-klugde: let volta span only one bar
- \property Staff.voltaSpannerDuration = "1"
+ \property Staff.voltaSpannerDuration = #(make-moment 1 1)
\repeat semi 5 { d d d d }
\alternative { { e e e e f f f f }
{ g g g g } }
copyright = "public domain";
Tested = "test the Collision resolution ";
}
-\version "1.2.0";
+\version "1.3.4";
twovoice = \context Staff \notes <
\context Voice=i { \stemdown c4 d e f g2~ g4 a [c8 d e f] c2| }
-\version "1.2.0";
+\version "1.3.4";
\score {
\notes {
- \property Staff.barAlways = "1"
+ \property Staff.barAlways = ##t
\property Staff.defaultBarType = ":|:"
c4 c4 c4 c4 }
}
-\version "1.2.0";
+\version "1.3.4";
\score{
\notes{
>
}
-\version "1.2.0";
+\version "1.3.4";
}
-\version "1.2.0";
+\version "1.3.4";
-\version "1.2.0";
+\version "1.3.4";
FontBody= \notes\transpose c''{
\bar "|:";
% "(Feta definitively is not an abbreviation of Font-En-TjA)";
}
-\version "1.2.0";
+\version "1.3.4";
\include "font-body.ly"
\score{
% "(Feta definitively is not an abbreviation of Font-En-TjA)";
}
-\version "1.2.0";
+\version "1.3.4";
\include "paper16.ly"
\include "font-body.ly"
gourlay_maxmeasures =5.;
}
}
-\version "1.2.0";
+\version "1.3.4";
%\stemdown \shifton
\property Voice.verticalDirection=-1
\property Voice.horizontalNoteShift=1
- \property Voice.forceHorizontalShift = "-0.1"
+ \property Voice.forceHorizontalShift = #-0.1
<bes f'>
}
>
% perhaps the current modifier approach is too simplistic
-\version "1.2.0";
+\version "1.3.4";
gmsus=\notes\relative c \chords{
g1
-\version "1.2.0";
+\version "1.3.4";
%{
-\version "1.2.0";
+\version "1.3.4";
voiceOne = \notes \relative c'' {
a1 a a
-\version "1.2.0";
+\version "1.3.4";
toeter_i = \notes\relative c <{
\property Staff.instrument = "Toeters"
\context Staff <
- \context Voice =VA {\property Voice.verticalDirection=1 \property Voice.horizontalNoteShift = "0" g'' }
- \context Voice =VB {\property Voice.verticalDirection=1 \property Voice.horizontalNoteShift = "1" e }
- \context Voice =VC {\property Voice.verticalDirection=1 \property Voice.horizontalNoteShift = "2" c }
- \context Voice =VD {\property Voice.verticalDirection=1 \property Voice.horizontalNoteShift = "3" a }
- \context Voice =VE {\property Voice.verticalDirection=1 \property Voice.horizontalNoteShift = "4" f }
+ \context Voice =VA {\property Voice.verticalDirection=1 \property Voice.horizontalNoteShift = 0 g'' }
+ \context Voice =VB {\property Voice.verticalDirection=1 \property Voice.horizontalNoteShift = 1 e }
+ \context Voice =VC {\property Voice.verticalDirection=1 \property Voice.horizontalNoteShift = 2 c }
+ \context Voice =VD {\property Voice.verticalDirection=1 \property Voice.horizontalNoteShift = 3 a }
+ \context Voice =VE {\property Voice.verticalDirection=1 \property Voice.horizontalNoteShift = 4 f }
>
>
}
-\version "1.2.0";
+\version "1.3.4";
/Mats B
%}
-\version "1.2.0";
+\version "1.3.4";
incipit = \notes\relative c'{
<b1 fis' b d>
-\version "1.2.0";
+\version "1.3.4";
%{
test key itemv breaking
-\version "1.2.0";
+\version "1.3.4";
blah = \notes {
-\version "1.2.0";
+\version "1.3.4";
\score{
\notes\relative c'{
[c16 \stemdown c'' \stemboth c,, d]
copyright = "public domain";
}
-\version "1.2.0";
+\version "1.3.4";
m =\notes \relative c'' {
- \property Staff.automaticMelismata = "1"
+ \property Staff.automaticMelismata = ##t
\autoBeamOff
g4 r8 \times 2/3 { g'8( f )e } r8 \grace { [d16 c b] } e4
- \property Staff.textEmptyDimension = "1"
+ \emptyText
d8.^"melisma" \melisma c16
\melismaEnd
b }
-\version "1.2.0";
+\version "1.3.4";
global = \notes {
s1 | \mark "A";
>
\paper { Gourlay_maxmeaures = 2.; }
}
-\version "1.2.0";
+\version "1.3.4";
\score { \notes { \time 3/4; \key cis; R2.*5 R2. R2.*5 }
\paper {
- \translator { \ScoreContext skipBars = 1; }
+ \translator {
+ \ScoreContext
+ skipBars = ##t
+ }
linewidth = -1.;
}
}
-\version "1.2.0";
+\version "1.3.4";
voice_one = \notes\transpose c''{ \stemup
R1 * 2 | f'4-. r r2 | R1 * 3 |
f'4-. r r2 | R1 * 3 |
es'4-. r r2 | r1 |
- \property Score.skipBars = 1
+ \property Score.skipBars = ##t6
g4-. r r2 | g4-. r r2 |
R1 * 5 |
r2 r4 g4-. |
R1 * 2 | f'4-. r r2 | R1 * 3 |
f'4-. r r2 | R1 * 3 |
es'4-. r r2 | r1 |
- \property Score.skipBars = 1
+ \property Score.skipBars = ##t6
g4-. r r2 | g4-. r r2 |
R1 * 5 |
r2 r4 g4-. |
\context Staff <
\context Voice = "a" {
f2 f8 g a b
- \property Voice.noStemExtend = 1
+ \property Voice.noStemExtend = ##t
f2 f8 g a b
}
\context Voice = "b" {
c''2 c8 b a g
- \property Voice.noStemExtend = 1
+ \property Voice.noStemExtend = ##t
c2 c8 b a g
}
>
}
}
-\version "1.2.0";
+\version "1.3.4";
-\version "1.2.0";
+\version "1.3.4";
\score{
\notes \transpose c''{
\score
{
- \notes { c1 c1 \property Score.skipBars = 1 c1 \break R1*8 c1 c1 c1 c1
+ \notes { c1 c1 \property Score.skipBars = ##t c1 \break R1*8 c1 c1 c1 c1
}
\paper {
-\version "1.2.0";
+\version "1.3.4";
m = \notes \relative c''{
c1 | c2 c | c c | c c | c c | c c | c c | c c |
-\version "1.2.0";
+\version "1.3.4";
\score {
\context Voice=VoiceOne
-\property Voice.graceFraction = "1/4"
+\property Voice.graceFraction = #(make-moment 1 4)
\grace c8 d4 d d d d
-\property Voice.graceFraction = "1/2"
+\property Voice.graceFraction = #(make-moment 1 2)
\grace { e16 f e f } d4 d d d d
}
}
-\version "1.2.0";
+\version "1.3.4";
r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 r128
\property Staff.restStyle = "mensural"
-\property Staff.textEmptyDimension = 1
+\emptyText
r\longa^"restStyle = \"mensural\"" r\breve r1 r2 r4 r8 r16 r32 r64 r128 r128
-\version "1.2.0";
+\version "1.3.4";
blah = \notes{ \transpose c'' {
c'4 c4
-\property Voice.fontsize= "-2"
+\property Voice.fontsize= -2
b16 * 1 / 2 (
-\property Voice.fontsize= "0" )
+\property Voice.fontsize= 0 )
g4 *31/32
a a g2
"(Feta definitively is not an abbreviation of Font-En-TjA)";
}
-\version "1.2.0";
+\version "1.3.4";
shortlong = \notes{
c4()c( c c |
}
}
-\version "1.2.0";
+\version "1.3.4";
% test damping
-\version "1.2.0";
+\version "1.3.4";
\score{
\notes\relative c'{
-\version "1.2.0";
+\version "1.3.4";
\score{
\notes\transpose c'{
}
}
-\version "1.2.0";
+\version "1.3.4";
TestedFeatures = "This file tests various spacings";
}
-\version "1.2.0";
+\version "1.3.4";
multipart = \notes \relative c'{
\context StaffGroup <
-\version "1.2.0";
+\version "1.3.4";
nt = \notes { c1 \break c1 c1 }
stuff = \notes \relative c'' <
\context Staff = stone { \nt }
-\version "1.2.0";
+\version "1.3.4";
\score {
}
-\version "1.2.0";
+\version "1.3.4";
\score {
\notes \relative c' < \context Voice {
- \property Staff.staffLineLeading = "4"
- \property Staff.fontSize = "-1"
- \property Voice.fontSize = "-1"
+ \property Staff.staffLineLeading = 4
+ \property Staff.fontSize = #-1
+ \property Voice.fontSize = #-1
- \property Voice . dynamicDirection = \up \stemdown
+ \property Voice . dynamicDirectionection = \up \stemdown
%\key gis;
c8 d [e f g a] b c \ff
}
-\context Staff = VB { \property Voice . dynamicDirection = \down c,,4 \ff c c c }
+\context Staff = VB { \property Voice . dynamicDirectionection = \down c,,4 \ff c c c }
>
\paper { linewidth = -1.; }
}
-\version "1.2.0";
+\version "1.3.4";
-\version "1.2.0";
+\version "1.3.4";
\score{
\notes \transpose c'''{
\stemup
}
-\version "1.2.0";
+\version "1.3.4";
beamintervals = \notes{
\time 7/4;
instrument= "Violoncello";
}
-\version "1.2.0";
+\version "1.3.4";
% this is an example of extreme dynamics
-\version "1.2.0";
+\version "1.3.4";
$somewhat_long = \lyrics{
\property Lyrics . textStyle = "roman"
% the thumb-script is used in cello music to indicate a note that should
% be played with your thumb.
-\version "1.2.0";
+\version "1.3.4";
\score { \notes \relative c'' {
[<a8_\thumb a'8-3(> <)b_\thumb b'-3>
-\score { \notes
- \relative cis' {
-
-\time 4/4;
-gis'2 gis ~ |
+thenotes = \notes \relative cis' { \time 4/4; gis'2 gis ~ |
gis gis4 gis |
g2 gis ~ |
gis g4 gis |
g2 gis( |
-)g gis4 gis |
-}}
+)g gis4 gis | }
+
+\score { < \context Staff \thenotes
+ \context NoteNames \thenotes
+ >
+}
--- /dev/null
+
+
+% \property Score. measurePosition = #(make-moment -1 4)
+\partial 4;
+c''4 c4 c4 c2 c1
+\cadenzaOn [c8 d e f] [g a b c b c b c]
+\cadenzaOff
+c4 c4 c4 c4
+\property Score. measureLength = #(make-moment 5 4)
+
+c1 c4
+c1 c4
+c4 c4
+\property Score. measurePosition = #(make-moment -3 8)
+b8 b b
+c4 c1
instrument= "Instrument";
}
-\version "1.2.0";
+\version "1.3.4";
\score{
\notes
}
-\version "1.2.0";
+\version "1.3.4";
vOne = \notes \relative c''{
\clef"violin";
}
}
-\version "1.2.0";
+\version "1.3.4";
-\version "1.2.0";
+\version "1.3.4";
\score {
\notes <
\context GrandStaff < {
- \property GrandStaff . maxVerticalAlign = "60."
- \property GrandStaff . minVerticalAlign = "35."
+ \property GrandStaff . maxVerticalAlign = #60.0
+ \property GrandStaff . minVerticalAlign = #35.0
c'1 \break c'''''1
}
}
}
-\version "1.2.0";
+\version "1.3.4";
copyright = "public domain";
}
-\version "1.2.0";
+\version "1.3.4";
melodie = \notes\relative c'' {
\clef "violin";
auto beaming, adding lyrics to notes, hyphens
%}
-\version "1.2.0";
+\version "1.3.4";
melody = \notes \relative c'' {
\clef violin;
if (!timer_l_)
return;
- Time_description const *time = &timer_l_->time_;
- int num = time->whole_per_measure_ / time->one_beat_;
- int den = time->one_beat_.den_i ();
+ int num;
+ int den;
+ timer_l_->get_time_signature (&num, &den);
+
String time_str = String ("time") + to_str (num) + "_" + to_str (den);
String type_str;
/*
first guess: end beam at end of beat
*/
- Moment end_mom = time->one_beat_;
+ Moment end_mom = timer_l_->one_beat_;
/*
second guess: property generic time exception
Rational r;
if (end_mom)
- r = time->whole_in_measure_.mod_rat (end_mom);
+ r = timer_l_->measure_position ().mod_rat (end_mom);
else
r = Moment (1);
return;
if (begin_mom)
- r = time->whole_in_measure_.mod_rat (begin_mom);
+ r = timer_l_->measure_position ().mod_rat (begin_mom);
if (!stem_l_arr_p_ && (!begin_mom || !r))
begin_beam ();
}
assert (!grouping_p_);
grouping_p_ = new Beaming_info_list;
beam_start_moment_ = now_mom ();
- beam_start_location_ = timer_l_->time_.whole_in_measure_;
+ beam_start_location_ = timer_l_->measure_position ();
}
Beam*
if (!bar_p_)
{
bar_p_ = new Staff_bar;
- bar_p_->set_elt_property ("break-priority", gh_int2scm (0));
+ bar_p_->set_elt_property ("break-aligned", SCM_BOOL_T);
// urg: "" != empty...
SCM default_type = get_property ("defaultBarType", 0);
#include "bar-number-engraver.hh"
-#include "time-description.hh"
+#include "timing-translator.hh"
#include "timing-engraver.hh"
#include "engraver-group-engraver.hh"
#include "text-item.hh"
Bar_number_engraver::do_process_requests ()
{
Translator *tr = daddy_grav_l ()->get_simple_translator ("Timing_engraver");
- Timing_translator *timer = dynamic_cast<Timing_translator*>(tr);
- Time_description *time = &timer->time_;
+ Timing_translator *time = dynamic_cast<Timing_translator*>(tr);
- if (!time->whole_in_measure_ && !time->cadenza_b_ && now_mom () > Moment (0))
+ // todo include (&&!time->cadenza_b_ )
+ if (!time->measure_position () && now_mom () > Moment (0))
{
create_items (0);
- text_p_->text_str_ = to_str (time->bars_i_);
+ text_p_->text_str_ = to_str (time->bars_i ());
}
}
{
spanbar_p_ =0;
use_priority_b_ = true;
- break_priority_i_ = 0;
}
Span_bar*
if (use_priority_b_)
{
- spanbar_p_->set_elt_property ("break-priority",
- gh_int2scm (break_priority_i_));
+ spanbar_p_->set_elt_property ("break-aligned", SCM_BOOL_T);
}
else
{
#include "beam.hh"
#include "stem.hh"
#include "warn.hh"
-#include "time-description.hh"
+#include "timing-translator.hh"
#include "beaming.hh"
#include "score-engraver.hh"
Translator * t = daddy_grav_l ()->get_simple_translator ("Timing_engraver");
Timing_engraver *timer = dynamic_cast<Timing_engraver*> (t);
- beam_start_location_ = (t) ? timer->time_.whole_in_measure_ : Moment (0);
+ beam_start_location_ = (t) ? timer->measure_position () : Moment (0);
beam_start_mom_ = now_mom();
beam_info_p_ = new Beaming_info_list;
--- /dev/null
+/*
+ break-align-engraver.cc -- implement Break_align_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ */
+#include "engraver.hh"
+#include "protected-scm.hh"
+#include "break-align-item.hh"
+#include "axis-group-item.hh"
+
+class Break_align_engraver : public Engraver
+{
+ Break_align_item *align_l_;
+ Protected_scm column_alist_;
+protected:
+ virtual void acknowledge_element(Score_element_info i);
+ virtual void do_pre_move_processing ();
+ void add_column (SCM);
+
+public:
+ VIRTUAL_COPY_CONS(Translator);
+ Break_align_engraver ();
+};
+
+
+
+ADD_THIS_TRANSLATOR(Break_align_engraver);
+
+void
+Break_align_engraver::add_column (SCM smob)
+{
+ Score_element * e = SMOB_TO_TYPE (Score_element, smob);
+ align_l_->add_element (e);
+ typeset_element (e);
+}
+
+void
+Break_align_engraver::do_pre_move_processing ()
+{
+ SCM order = get_property ("breakAlignOrder", 0);
+ for (; gh_pair_p (order); order = gh_cdr (order))
+ {
+ SCM p = scm_assoc ( gh_car (order), column_alist_);
+ if (gh_pair_p (p))
+ {
+ add_column (gh_cdr (p));
+ column_alist_ = scm_assoc_remove_x (column_alist_, gh_car (order));
+ }
+ }
+
+ for (SCM p = column_alist_; gh_pair_p (p); p = gh_cdr (p))
+ {
+ SCM pair = gh_car (p);
+ add_column (gh_cdr (pair));
+ }
+
+
+ column_alist_ = SCM_EOL;
+
+ if (align_l_)
+ {
+ typeset_element (align_l_);
+ align_l_ = 0;
+ }
+}
+
+
+Break_align_engraver::Break_align_engraver ()
+{
+ column_alist_ = SCM_EOL;
+ align_l_ =0;
+}
+
+void
+Break_align_engraver::acknowledge_element (Score_element_info inf)
+{
+ if (Item * item_l = dynamic_cast <Item *> (inf.elem_l_))
+ {
+ if (item_l->empty_b (X_AXIS) || item_l->parent_l (X_AXIS))
+ return;
+
+ SCM bp=item_l->remove_elt_property ("breakable");
+ bool breakable = (gh_boolean_p (bp) && gh_scm2bool (bp));
+ if (!breakable)
+ return ;
+
+ SCM al = item_l->remove_elt_property ("break-aligned");
+ if (!gh_boolean_p (al ) || !gh_scm2bool (al))
+ return ;
+
+
+ if (!align_l_)
+ {
+ align_l_ = new Break_align_item;
+ align_l_->set_elt_property ("breakable", SCM_BOOL_T);
+ announce_element (Score_element_info (align_l_,0));
+ }
+
+ SCM name = ly_str02scm (inf.elem_l_->name());
+ SCM s = scm_assoc (name, column_alist_);
+
+ Axis_group_item * group = 0;
+ if (s != SCM_BOOL_F)
+ {
+ Score_element *e = SMOB_TO_TYPE(Score_element, gh_cdr(s));
+ group = dynamic_cast<Axis_group_item*> (e);
+ }
+ else
+ {
+ group = new Axis_group_item;
+ group->set_axes (X_AXIS,X_AXIS);
+ group->set_elt_property ("origin", name);
+ group->set_parent (align_l_, Y_AXIS);
+ announce_element (Score_element_info (group, 0));
+ column_alist_ = scm_assoc_set_x (column_alist_, name, group->self_scm_);
+ }
+ group->add_element (item_l);
+ }
+}
stacking_dir_ = RIGHT;
set_axis (X_AXIS);
}
-
-void
-Break_align_item::add_breakable_item (Item *it)
-{
- SCM pr = it->remove_elt_property ("break-priority");
-
- if (pr == SCM_UNDEFINED)
- return;
-
- int priority = gh_scm2int (pr);
-
- Score_element * column_l = get_elt_by_priority (priority);
- Axis_group_item * hg=0;
- if (column_l)
- {
- hg = dynamic_cast<Axis_group_item*> (column_l);
- }
- else
- {
- hg = new Axis_group_item;
- hg->set_axes (X_AXIS,X_AXIS);
-
- /*
- this is quite ridiculous, but we do this anyway, to ensure that no
- warning bells about missing Y refpoints go off later on.
- */
- hg->set_parent (this, Y_AXIS);
- hg->set_elt_property ("origin", ly_str02scm (it->name ()));
-
- pscore_l_->typeset_element (hg);
- add_element_priority (hg, priority);
-
- if (priority == 0)
- center_l_ = hg;
- }
-
- hg->add_element (it);
-}
-
*/
#include "duration-convert.hh"
-#include "time-description.hh"
+#include "timing-translator.hh"
#include "chord-tremolo-engraver.hh"
#include "stem.hh"
#include "beam.hh"
#include "clef-item.hh"
#include "debug.hh"
#include "command-request.hh"
-#include "time-description.hh"
+#include "timing-translator.hh"
#include "note-head.hh"
#include "key-item.hh"
#include "local-key-item.hh"
if (!clef_p_)
{
Clef_item *c= new Clef_item;
+ c->set_elt_property ("break-aligned", SCM_BOOL_T);
announce_element (Score_element_info (c, clef_req_l_));
clef_p_ = c;
}
#include "debug.hh"
#include "musical-request.hh"
-void
-Cadenza_req::do_print () const
-{
-#ifndef NPRINT
- DEBUG_OUT << (int)on_b_;
-#endif
-}
-
-bool
-Cadenza_req::do_equal_b (Request const *r) const
-{
- Cadenza_req const*cad = dynamic_cast <Cadenza_req const *> (r);
- return cad && cad->on_b_ == on_b_;
-}
-
-Cadenza_req::Cadenza_req (bool b)
-{
- on_b_ =b;
-}
-
-
bool
Bar_req::do_equal_b (Request const *r) const
type_str_ = s;
}
-Partial_measure_req::Partial_measure_req (Moment m)
-{
- length_mom_ =m;
-}
-bool
-Partial_measure_req::do_equal_b (Request const* r) const
-{
- Partial_measure_req const*p = dynamic_cast <Partial_measure_req const*> (r);
-
- return p&& p->length_mom_ == length_mom_;
-}
bool
Barcheck_req::do_equal_b (Request const *r) const
clef_str_ = s;
}
-void
-Partial_measure_req::do_print () const
-{
- DEBUG_OUT << length_mom_;
-}
void
Time_signature_change_req::do_print () const
Global_translator::Global_translator()
{
- last_mom_ = 0;
}
void
Global_translator::add_moment_to_process (Moment m)
{
- if (m > last_mom_)
+ if (m > final_mom_)
return;
for (int i=0; i < extra_mom_pq_.size(); i++)
void
Global_translator::prepare (Moment m)
{
+ prev_mom_ = now_mom_;
now_mom_ = m;
}
document usage of this.
*/
class Align_element : public virtual Axis_group_element {
+
+ /*
+ ugh. JUNKME
+
+ */
Hash_table<Score_element*,int> priority_i_hash_;
public:
Interval threshold_interval_ ;
horizontal alignment priority, otherwise, hang the spanbar on the
acknowledged bar. */
bool use_priority_b_;
- int break_priority_i_;
virtual void acknowledge_element (Score_element_info);
virtual void do_pre_move_processing();
protected:
virtual void do_pre_processing();
public:
- void add_breakable_item (Item *it);
-
Break_align_item ();
VIRTUAL_COPY_CONS(Score_element);
-
};
#endif // BREAK_ALIGN_ITEM_HH
bool do_equal_b (Request const *) const;
};
-class Partial_measure_req : public Timing_req {
-public:
- Moment length_mom_;
-
- Partial_measure_req (Moment);
-protected:
- VIRTUAL_COPY_CONS(Music);
- virtual void do_print () const;
- bool do_equal_b (Request const *) const;
-};
/**
todo: allow C time_signature
VIRTUAL_COPY_CONS(Music);
};
-/// toggle Cadenza mode
-class Cadenza_req : public Timing_req {
-public:
- /// turn on?
- bool on_b_;
- Cadenza_req (bool);
-protected:
- virtual void do_print () const;
-
- bool do_equal_b (Request const *) const;
- VIRTUAL_COPY_CONS(Music);
-};
/// check if we're at start of a measure.
class Barcheck_req : public Timing_req {
#include "flower-debug.hh"
#include "warn.hh"
-void error_t (const String& s, Time_description const & t_tdes);
-void error_t (String const &s, const Moment &when);
-
// progress
extern ostream *mlog;
/** a spanner which can be pointing "up" or "down".
- JUNKME?
+ JUNKME
*/
class Directional_spanner : public Spanner, public Directional_element {
public:
-
/// offset of "center" relative to left-column/0-pos of staff
virtual Offset center() const;
virtual Direction get_default_dir() const;
+ VIRTUAL_COPY_CONS(Score_element);
protected:
virtual void do_pre_processing();
};
PQueue<Moment> extra_mom_pq_;
public:
VIRTUAL_COPY_CONS(Translator);
- Moment last_mom_;
+ Moment final_mom_;
+ Moment prev_mom_;
Moment now_mom_;
Global_translator();
JUNKME.
*/
struct Staff_info {
- Time_description const *time_C_;
Score_column *musical_l_;
Score_column *command_l_;
+++ /dev/null
-/*
- moment.hh -- part of GNU LilyPond
-
- (c) 1996--1999 Han-Wen Nienhuys
-*/
-
-#ifndef tdes_HH
-#define tdes_HH
-
-#include "moment.hh"
-#include "lily-proto.hh"
-#include "array.hh"
-
-/// full info on where we are
-struct Time_description {
- Moment when_;
-
- /// if true, no bars needed, no reduction of whole_in_measure
- bool cadenza_b_;
-
- /// current measure info
- Moment whole_per_measure_;
-
- /*
- ugh: naming! junk whole_ prefixes.
- */
- /// where am i
- Moment whole_in_measure_;
-
- /// how long is one beat?
- Moment one_beat_;
-
- /// idem
- int bars_i_;
-
- void set_cadenza (bool);
- Moment when_mom () const { return when_; }
- void OK() const;
- Time_description();
- void add (Moment dt);
- bool allow_time_signature_change_b();
- String str() const;
- void print() const;
- void setpartial (Moment p);
- String try_set_partial_str (Moment) const;
- Moment barleft() const;
- Moment next_bar_moment() const;
- void set_time_signature (int,int);
- static int compare (const Time_description&, const Time_description&);
-};
-
-#include "compare.hh"
-
-
-INSTANTIATE_COMPARE(Time_description&,Time_description::compare);
-
-
-void
-process_timing_reqs (Time_description &time_,
- Rhythmic_grouping *default_grouping,
- Array<Timing_req*> const& timing_req_l_arr);
-#endif // Time_description_HH
-
#ifndef TIME_SIG_ENGRAVER_HH
#define TIME_SIG_ENGRAVER_HH
+
#include "engraver.hh"
-#include "time-description.hh"
/**
generate time_signatures.
Time_signature * time_signature_p_;
Time_signature_engraver();
-
};
#endif // TIME_SIG_ENGRAVER_HH
Bar_req * bar_req_l_;
protected:
- virtual void fill_staff_info (Staff_info&);
virtual bool do_try_music (Music * );
virtual void do_post_move_processing ();
public:
#ifndef TIMING_TRANSLATOR_HH
#define TIMING_TRANSLATOR_HH
+#include "moment.hh"
#include "translator.hh"
-#include "time-description.hh"
+
#include "parray.hh"
class Timing_translator : public virtual Translator
public:
VIRTUAL_COPY_CONS(Translator);
Time_signature_change_req * time_signature_req_l () const;
-
- Time_description time_;
-
+ Timing_translator ();
Link_array<Timing_req> timing_req_l_arr_;
protected:
- virtual void do_print () const;
virtual void do_creation_processing ();
virtual bool do_try_music (Music *req_l);
virtual void do_process_requests();
virtual void do_pre_move_processing();
virtual void do_post_move_processing();
+public:
+ /// how long is one beat?
+ Moment one_beat_;
+
+ /// JUNKME
+ int bars_i () const;
+
+ Moment measure_position () const;
+ Moment measure_length () const;
+ void set_time_signature (int, int);
+ void get_time_signature (int *, int*) const;
+
};
#endif // TIMING_TRANSLATOR_HH
#include "musical-request.hh"
#include "local-key-item.hh"
#include "bar.hh"
-#include "time-description.hh"
+#include "timing-translator.hh"
Key_engraver::Key_engraver ()
{
if (!item_p_)
{
item_p_ = new Key_item;
- item_p_->set_elt_property ("break-priority", gh_int2scm(-1)); // ugh
+ item_p_->set_elt_property ("break-aligned", SCM_BOOL_T); // ugh
+
item_p_->multi_octave_b_ = key_.multi_octave_b_;
announce_element (Score_element_info (item_p_,keyreq_l_));
#include "key-item.hh"
#include "tie.hh"
#include "note-head.hh"
-#include "time-description.hh"
+#include "timing-translator.hh"
#include "engraver-group-engraver.hh"
#include "grace-align-item.hh"
void
Local_key_engraver::do_process_requests()
{
- Time_description const * time_C_ = get_staff_info().time_C_;
- if (time_C_ && !time_C_->whole_in_measure_)
+ Translator * tr = daddy_grav_l()->get_simple_translator ("Timing_engraver"); // ugh
+ Timing_translator * time_C_ = dynamic_cast<Timing_translator*> (tr);
+
+ if (time_C_ && !time_C_->measure_position ())
{
SCM n = get_property ("noResetKey",0);
bool no_res = gh_boolean_p (n) && gh_scm2bool (n);
#include "multi-measure-rest.hh"
#include "multi-measure-rest-engraver.hh"
#include "score-column.hh"
-#include "time-description.hh"
+#include "engraver-group-engraver.hh"
+#include "timing-translator.hh"
#include "bar.hh"
{
if (multi_measure_req_l_ && !mmrest_p_)
{
- Time_description const *time = get_staff_info().time_C_;
+
+ Translator * tr = daddy_grav_l()->get_simple_translator ("Timing_engraver"); // ugh
+ Timing_translator * time = dynamic_cast<Timing_translator*> (tr);
+
mmrest_p_ = new Multi_measure_rest;
if(dynamic_cast<Repetitions_req *> (multi_measure_req_l_))
mmrest_p_->set_elt_property ("alt-symbol",
ly_str02scm ("scripts-repeatsign"));
announce_element (Score_element_info (mmrest_p_, multi_measure_req_l_));
- start_measure_i_ = time->bars_i_;
+ start_measure_i_ = time->bars_i ();
}
}
Multi_measure_rest_engraver::do_pre_move_processing ()
{
Moment now (now_mom ());
- Time_description const *time = get_staff_info().time_C_;
+ Translator * tr = daddy_grav_l()->get_simple_translator ("Timing_engraver"); // ugh
+ Timing_translator * time = dynamic_cast<Timing_translator*> (tr);
+
+
if (mmrest_p_ && (now >= rest_moments_[START])
- && !time->whole_in_measure_
+ && !time->measure_position ()
&& (mmrest_p_->column_arr_.size () >= 2))
{
typeset_element (mmrest_p_);
void
Multi_measure_rest_engraver::do_post_move_processing ()
{
- Time_description const *time = get_staff_info().time_C_;
+ Translator * tr = daddy_grav_l()->get_simple_translator ("Timing_engraver"); // ugh
+ Timing_translator * time = dynamic_cast<Timing_translator*> (tr);
+
Moment now (now_mom ());
- if (mmrest_p_ && !time->whole_in_measure_)
+ if (mmrest_p_ && !time->measure_position ())
{
lastrest_p_ = mmrest_p_;
- lastrest_p_->measures_i_ = time->bars_i_ - start_measure_i_;
+ lastrest_p_->measures_i_ = time->bars_i () - start_measure_i_;
mmrest_p_ = 0;
}
while (o--)
s += to_str (',');
}
-#if 0
- if (octave_i_)
- s += String ((octave_i_> 0)? "^": "_") + to_str (octave_i_);
-#endif
-
+
+
return s;
}
{"alternative", ALTERNATIVE},
{"bar", BAR},
{"breathe", BREATHE},
- {"cadenza", CADENZA},
{"chordmodifiers", CHORDMODIFIERS},
{"chords", CHORDS},
{"clef", CLEF},
{"translator", TRANSLATOR},
{"transpose", TRANSPOSE},
{"type", TYPE},
- {"version", VERSION},
{0,0}
};
--- /dev/null
+/*
+ note-name-engraver.cc -- implement Note_name_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ */
+
+#include "engraver.hh"
+#include "musical-request.hh"
+#include "text-item.hh"
+
+class Note_name_engraver : public Engraver
+{
+public:
+ VIRTUAL_COPY_CONS(Translator);
+ Link_array<Note_req> req_l_arr_;
+ Link_array<Text_item> texts_;
+ virtual bool do_try_music (Music*m);
+ virtual void do_process_requests ();
+ virtual void do_pre_move_processing ();
+};
+
+bool
+Note_name_engraver::do_try_music (Music *m)
+{
+ if (Note_req *r = dynamic_cast<Note_req* > (m))
+ {
+ req_l_arr_.push (r);
+ return true;
+ }
+ return false;
+}
+
+
+void
+Note_name_engraver::do_process_requests ()
+{
+ String s ;
+ for (int i=0; i < req_l_arr_.size (); i++)
+ {
+ if (i)
+ s += " ";
+ s += req_l_arr_[i]->pitch_.str ();
+ }
+ if (s.length_i())
+ {
+ Text_item * t = new Text_item;
+ t->text_str_ = s;
+ announce_element (Score_element_info (t, req_l_arr_[0]));
+ texts_.push (t);
+ }
+}
+
+void
+Note_name_engraver::do_pre_move_processing ()
+{
+ for (int i=0; i < texts_.size (); i++)
+ {
+ typeset_element (texts_[i]);
+ }
+ texts_.clear() ;
+ req_l_arr_.clear ();
+}
+
+ADD_THIS_TRANSLATOR(Note_name_engraver);
#include "auto-change-music.hh"
// mmm
-Mudela_version oldest_version ("1.1.52");
+Mudela_version oldest_version ("1.3.4");
%token TRANSPOSE
%token TYPE
%token CONTEXT
-%token VERSION
/* escaped */
%token E_CHAR E_EXCLAMATION E_SMALLER E_BIGGER
$1-> set_spot (THIS->here_input ());
((Simultaneous_music*)$$) ->add_music ($1);//ugh
}
+ | PARTIAL duration_length ';' {
+ Translation_property * p = new Translation_property;
+ p->var_str_ = "measurePosition";
+ p->value_ = (new Moment (-$2->length_mom ()))->smobify_self ();
+ delete $2;
+ Context_specced_music * sp = new Context_specced_music (p);
+ $$ =sp ;
+ sp-> translator_type_str_ = "Score";
+ }
;
command_req:
| tempo_request {
$$ = $1;
}
- | CADENZA unsigned {
- $$ = new Cadenza_req ($2);
- }
- | PARTIAL duration_length {
- $$ = new Partial_measure_req ($2->length_mom ());
- delete $2;
- }
| CLEF STRING {
$$ = new Clef_change_req (ly_scm2string ($2));
#include "musical-request.hh"
#include "multi-measure-rest.hh"
#include "command-request.hh"
-#include "time-description.hh"
+#include "timing-translator.hh"
#include "engraver-group-engraver.hh"
#include "repeated-music.hh"
-#include "time-description.hh"
+#include "timing-translator.hh"
#include "volta-spanner.hh"
#include "note-column.hh"
#include "paper-def.hh"
return s;
}
+/*
+ UGH. assoc vs. assq
+ */
void
Score_element::set_elt_property (String k, SCM v)
{
+++ /dev/null
-/*
- score-align-reg.cc -- implement Score_priority_engraver
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-*/
-
-#include "dimension-cache.hh"
-#include "axis-group-item.hh"
-#include "score-priority-engraver.hh"
-#include "item.hh"
-#include "dictionary-iter.hh"
-#include "break-align-item.hh"
-
-
-Score_priority_engraver::Score_priority_engraver()
-{
- halign_p_ = 0;
-}
-
-void
-Score_priority_engraver::do_pre_move_processing()
-{
- for (int i=0; i < column_p_arr_.size ();i++)
- typeset_element (column_p_arr_[i]);
- column_p_arr_.clear ();
-
- if (halign_p_)
- {
- typeset_element (halign_p_);
- halign_p_ =0;
- }
-}
-
-/*
- TODO: move this logic into Break_align_item
- */
-void
-Score_priority_engraver::acknowledge_element (Score_element_info inf)
-{
- if (Item * item_l = dynamic_cast <Item *> (inf.elem_l_))
- {
- if (item_l->empty_b (X_AXIS) || item_l->parent_l (X_AXIS))
- return;
-
- SCM bp=item_l->remove_elt_property ("breakable");
- bool breakable = (bp != SCM_UNDEFINED);
- if (!breakable)
- return ;
-
-
- if (!halign_p_)
- {
- halign_p_ = new Break_align_item;
- halign_p_->set_elt_property ("breakable", SCM_BOOL_T);
- announce_element (Score_element_info (halign_p_,0));
- }
-
- halign_p_->add_breakable_item (item_l);
- }
-}
-
-ADD_THIS_TRANSLATOR(Score_priority_engraver);
-
return ;
}
*mlog << '\n' << _("Interpreting music...") << flush;
- trans_p->last_mom_ = music_p_->length_mom ();
+ trans_p->final_mom_ = music_p_->length_mom ();
Music_iterator * iter = Music_iterator::static_get_iterator_p (music_p_);
{
Span_bar*s = new Span_bar;
s->type_str_ = "scorebar";
- s->set_elt_property ("break-priority",
- gh_int2scm (-4));
+ s->set_elt_property ("break-aligned",SCM_BOOL_T);
return s;
}
Span_score_bar_engraver::Span_score_bar_engraver ()
{
use_priority_b_ = true;
- break_priority_i_ = -4;
}
Span_bar*
Staff_info::Staff_info()
{
- time_C_ = 0;
command_l_ =0;
musical_l_ =0;
}
#include "staff-margin-engraver.hh"
#include "bar.hh"
-#include "time-description.hh"
+#include "timing-translator.hh"
#include "text-item.hh"
#include "staff-side.hh"
/*
- time-description.cc -- implement Time_description
+ timing-translator.cc -- implement Timing_translator
source file of the GNU LilyPond music typesetter
(c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
-#include "time-description.hh"
+#include "timing-translator.hh"
+#include "translator-group.hh"
#include "debug.hh"
-
-String
-Time_description::str () const
-{
- String s ("Time_description { ");
- if (cadenza_b_)
- s += String ("(") + _("cadenza") + ")";
- s += "at ";
- s += when_.str ();
- s +="\ntime_signature " + (whole_per_measure_/one_beat_).str () +":" +
- (Moment (Moment (1)/one_beat_)).str ();
- s += "\nposition " + to_str (bars_i_) + ":"+ whole_in_measure_.str () +"\n}\n";
- return s;
-}
-
-void
-Time_description::print() const
-{
-#ifndef NPRINT
- DEBUG_OUT << str ();
-#endif
-}
-
-void
-Time_description::OK() const
-{
-#ifndef NDEBUG
- if (!cadenza_b_)
- assert (whole_in_measure_ < whole_per_measure_);
- assert (Moment (0) <= whole_in_measure_);
- assert (one_beat_);
-#endif
-}
-
-void
-Time_description::set_cadenza (bool b)
-{
- if (cadenza_b_ && !b)
- {
- if (whole_in_measure_)
- {
- bars_i_ ++; // should do?
- whole_in_measure_ = 0;
- }
- }
- cadenza_b_ = b ;
-}
-
-Time_description::Time_description()
-{
- whole_per_measure_ = 1;
- whole_in_measure_ =0;
- one_beat_ = Moment (1,4);
- when_ = 0;
- bars_i_ = 1; // musician start counting at 1
- cadenza_b_ = false;
-}
-
-void
-Time_description::add (Moment dt)
-{
- assert (dt >= Moment (0));
- when_ += dt;
- whole_in_measure_ += dt;
-
- while (!cadenza_b_ && whole_in_measure_ >= whole_per_measure_)
- {
- whole_in_measure_ -= whole_per_measure_;
- bars_i_ ++;
- }
-}
-
-void
-Time_description::set_time_signature (int l, int o)
-{
- assert (o);
- one_beat_ = Moment (1)/Moment (o);
- whole_per_measure_ = Moment (l) * one_beat_;
-}
-
-bool
-Time_description::allow_time_signature_change_b()
-{
- return!(whole_in_measure_);
-}
-
-/**
- retrieve error messages.
- @return
- error messages if not possible, "" if possible
- */
-String
-Time_description::try_set_partial_str (Moment p) const
-{
- if (p<Moment (0))
- return (_ ("Partial measure must be non-negative"));
- if (p > whole_per_measure_)
- return (_ ("partial measure too large"));
- return "";
-}
-
-void
-Time_description::setpartial (Moment p)
-{
- whole_in_measure_ = whole_per_measure_ - p;
-}
-
-Moment
-Time_description::barleft() const
-{
- assert (!cadenza_b_);
- return whole_per_measure_-whole_in_measure_;
-}
-
-Moment
-Time_description::next_bar_moment() const
-{
- return when_ + barleft();
-}
args.push (req->beats_i_);
args.push (req->one_beat_i_);
- time_signature_p_ = new Time_signature ();
+ time_signature_p_ = new Time_signature;
time_signature_p_->args_ = args;
- time_signature_p_->set_elt_property ("break-priority", gh_int2scm (1)); // 1
+ time_signature_p_->set_elt_property ("break-aligned", SCM_BOOL_T);
}
{
if (time_signature_p_)
{
-
typeset_element (time_signature_p_);
time_signature_p_ =0;
}
#include "score-element-info.hh"
#include "multi-measure-rest.hh"
-void
-Timing_engraver::fill_staff_info (Staff_info &inf)
-{
- inf.time_C_ = &time_;
-}
ADD_THIS_TRANSLATOR(Timing_engraver);
if (!gh_boolean_p (nonauto) && gh_scm2bool (nonauto))
{
SCM always = get_property ("barAlways", 0);
- if (!time_.whole_in_measure_ || gh_boolean_p (always) && gh_scm2bool (always))
+ if (!measure_position ()
+ || (gh_boolean_p (always) && gh_scm2bool (always)))
{
SCM def=get_property ("defaultBarType" ,0);
return (gh_string_p (def))? ly_scm2string (def) : "";
/*
timing-translator.cc -- implement Timing_translator
+
source file of the GNU LilyPond music typesetter
(c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
+#include "debug.hh"
#include "timing-translator.hh"
#include "command-request.hh"
#include "translator-group.hh"
{
int b_i= m_l->beats_i_;
int o_i = m_l->one_beat_i_;
- if (! time_.allow_time_signature_change_b())
- tr_l->warning (_ ("time signature change not allowed here"));
- else
- {
- time_.set_time_signature (b_i, o_i);
- }
- }
- else if (Partial_measure_req *pm = dynamic_cast <Partial_measure_req *> (tr_l))
- {
- Moment m = pm->length_mom_;
- String error = time_.try_set_partial_str (m);
- if (error.length_i ())
- {
- tr_l->warning (error);
- }
- else
- time_.setpartial (m);
+ set_time_signature (b_i, o_i);
}
else if (dynamic_cast <Barcheck_req *> (tr_l))
{
- if (time_.whole_in_measure_)
+ if (measure_position ())
{
tr_l ->warning (_f ("barcheck failed at: %s",
- time_.whole_in_measure_.str ()));
+ measure_position ().str ()));
+ // resync
+ daddy_trans_l_->set_property("measurePosition",
+ (new Moment)->smobify_self ());
+
- time_.whole_in_measure_ = 0; // resync
}
}
- else if (Cadenza_req *cr = dynamic_cast <Cadenza_req *> (tr_l))
- {
- time_.set_cadenza (cr->on_b_);
- }
}
- Translator_group * tr=0;
- SCM barn = get_property ("currentBarNumber", &tr);
- if (gh_number_p(barn))
- {
- time_.bars_i_ = gh_scm2int (barn);
- tr->set_property ("currentBarNumber", SCM_UNDEFINED);
- }
}
bool allbars = !(gh_boolean_p (sb)&&gh_scm2bool (sb));
// urg: multi bar rests: should always process whole of first bar?
- if (!time_.cadenza_b_ && allbars)
- global_l->add_moment_to_process (time_.next_bar_moment ());
+ SCM tim = get_property ("timing", 0);
+ bool timb = gh_boolean_p (tim) && gh_scm2bool ( tim);
+
+
+ if (timb && allbars)
+ {
+ Moment barleft = (measure_length () - measure_position ());
+
+ if (barleft < Moment (0))
+ barleft = 0;
+
+ global_l->add_moment_to_process (now_mom () + barleft);
+ }
}
void
Timing_translator::do_creation_processing()
{
- time_.when_ = now_mom ();
+ daddy_trans_l_->set_property ("timing" , SCM_BOOL_T);
+ daddy_trans_l_->set_property ("currentBarNumber" , gh_int2scm (1));
+ daddy_trans_l_->set_property("measurePosition",
+ (new Moment)->smobify_self());
+ daddy_trans_l_->set_property("measureLength",
+ (new Moment (1))->smobify_self());
+
}
+Moment
+Timing_translator::measure_length () const
+{
+ SCM l = get_property("measureLength",0);
+ if (SMOB_IS_TYPE_B(Moment, l))
+ return *SMOB_TO_TYPE (Moment, l);
+ else
+ return Moment (1);
+}
+
+
void
-Timing_translator::do_post_move_processing()
+Timing_translator::get_time_signature (int *n, int *d) const
{
- time_.add (now_mom () - time_.when_);
+ *n = measure_length () / one_beat_;
+ *d = one_beat_.den_i ();
+}
+void
+Timing_translator::set_time_signature (int l, int o)
+{
+ one_beat_ = Moment (1)/Moment (o);
+ Moment len = Moment (l) * one_beat_;
+ daddy_trans_l_->set_property ("measureLength",
+ (new Moment (len))->smobify_self ());
+}
+
+Timing_translator::Timing_translator()
+{
+ one_beat_ = Moment( 1,4);
+}
+
+
+Moment
+Timing_translator::measure_position () const
+{
+ SCM sm = get_property ("measurePosition",0);
+
+ Moment m =0;
+ if (SMOB_IS_TYPE_B (Moment, sm))
+ {
+ m = *SMOB_TO_TYPE (Moment, sm);
+ while (m < Moment (0))
+ m += measure_length ();
+ }
+
+ return m;
}
void
-Timing_translator::do_print () const
+Timing_translator::do_post_move_processing()
+{
+ Translator *t = this;
+ Global_translator *global_l =0;
+ do
+ {
+ t = t->daddy_trans_l_ ;
+ global_l = dynamic_cast<Global_translator*> (t);
+ }
+ while (!global_l);
+
+ Moment dt = global_l->now_mom_ - global_l -> prev_mom_;
+ if (dt < Moment (0))
+ {
+ programming_error ("Moving backwards in time");
+ dt = 0;
+ }
+
+ if (!dt)
+ return;
+
+ Moment * measposp =0;
+
+ SCM s = get_property ("measurePosition", 0);
+ if (SMOB_IS_TYPE_B (Moment, s))
+ {
+ measposp = SMOB_TO_TYPE (Moment,s);
+ }
+ else
+ {
+ measposp = new Moment;
+ daddy_trans_l_->set_property ("measurePosition", measposp->smobify_self ());
+ }
+
+ *measposp += dt;
+ // don't need to set_property
+
+ Translator_group * tr =daddy_trans_l_;
+ SCM barn = get_property ("currentBarNumber", &tr);
+ int b = 0;
+ if (gh_number_p(barn))
+ {
+ b = gh_scm2int (barn);
+ }
+
+ SCM cad = get_property ("timing", 0);
+ bool c= gh_boolean_p (cad ) && gh_scm2bool (cad);
+
+ Moment len = measure_length ();
+ while (c && *measposp >= len)
+ {
+ *measposp -= len;
+ b ++;
+ }
+
+ tr->set_property ("currentBarNumber", gh_int2scm (b));
+}
+
+
+
+int
+Timing_translator::bars_i () const
{
-#ifndef NPRINT
- time_.print ();
-#endif
+ return gh_scm2int (get_property ("currentBarNumber", 0));
}
#include "debug.hh"
#include "my-lily-lexer.hh"
#include "moment.hh"
-#include "time-description.hh"
+#include "timing-translator.hh"
#include "source-file.hh"
#include "source.hh"
#include "main.hh"
ostream *mlog (&cerr);
-
-void
-error_t (String const & s, Moment const & r)
-{
- String t_mom = r.trunc_rat ().str () + (r - r.trunc_rat ()).str ();
- String e=s+ " (t = " + t_mom + ")";
- error (e);
-}
-
-void
-error_t (String const & s, Time_description const &t_tdes)
-{
- String e=s+ " (at t=" + to_str (t_tdes.bars_i_) + ": " + (t_tdes.whole_in_measure_).str () + ")\n";
- error (e);
-}
% end beams with 16th notes each 1/4 note
% end beams with 32th notes each 1/8 note
+
+%{
+
+UGH UGH.
+
+Fixme: should use an alist
+
+autoBeamSettings = (list
+ (cons (list (make-moment MEASURE) TIME-SIGNATURE) (make-moment INTERVAL)
+ ..
+
+ )
+
+
+
+%}
+
+
+
+
+
+
+
+
+
+
time3_2beamAutoEnd = #(make-moment 1 2)
%time3_2beamAutoEnd_16 = #(make-moment 1 4)
time3_2beamAutoEnd_16 = #(make-moment 1 4)
% Toplevel initialisation file.
-\version "1.2.0";
+\version "1.3.4";
\include "declarations.ly"
% Toplevel initialisation file.
-\version "1.2.0";
+\version "1.3.4";
\include "declarations.ly";
% Toplevel initialisation file.
-\version "1.2.0";
+\version "1.3.4";
\include "declarations.ly"
% Toplevel initialisation file.
-\version "1.2.0";
+\version "1.3.4";
\include "declarations.ly"
\consists "Timing_engraver";
\consists "Span_score_bar_engraver";
- \consists "Score_priority_engraver";
+% \consists "Score_priority_engraver";
+ \consists "Break_align_engraver";
+ breakAlignOrder = #'(
+ "Span_bar"
+ "Breathing_sign"
+ "Clef_item"
+ "Key_item"
+ "Staff_bar"
+ "Time_signature"
+ )
\consists "Spacing_engraver";
\consists "Vertical_align_engraver";
alignmentReference = \down;
\accepts "GrandStaff";
\accepts "ChoirStaff";
\accepts "PianoStaff";
+ \accepts "NoteNames";
clefBreakPriority = #-2
breathingSignBreakPriority = #-4
\accepts "HaraKiriStaff";
};
+
+\translator {
+ \type "Engraver_group_engraver";
+ \name NoteNames;
+ \consistsend "Axis_group_engraver";
+ \consists "Note_name_engraver";
+}
% Toplevel initialisation file.
-\version "1.2.0";
+\version "1.3.4";
\include "declarations.ly"
% Toplevel initialisation file.
-\version "1.2.0";
+\version "1.3.4";
\include "declarations.ly";
-\version "1.2.0";
+\version "1.3.4";
paper_sixteen = \paper {
staffheight = 16.0\pt;
% paper20.ly
-\version "1.2.0";
+\version "1.3.4";
paper_twenty = \paper {
staffheight = 20.0\pt;
% paper23.ly
-\version "1.2.0";
+\version "1.3.4";
paper_twentythree = \paper {
staffheight = 23.0\pt;
%}
-\version "1.2.16";
+\version "1.3.4";
%hmm, (these) abbrevs suck, imo
% i guess they're meant as some form of doco
shifton = \property Voice.horizontalNoteShift = #1
shiftoff = \property Voice.horizontalNoteShift = #0
+cadenzaOn = \property Score.timing = ##f
+cadenzaOff = { \property Score.timing = ##t
+ \property Score.measurePosition = #(make-moment 0 1)
+ }
+
+
onevoice = {
\stemboth \shiftoff
}
Begin3
Title: LilyPond
-Version: 1.3.4
-Entered-date: 08NOV99
+Version: 1.3.5
+Entered-date: 10NOV99
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.4.tar.gz
+ 1000k lilypond-1.3.5.tar.gz
Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
- 1000k lilypond-1.3.4.tar.gz
+ 1000k lilypond-1.3.5.tar.gz
Copying-policy: GPL
End
Name: lilypond
-Version: 1.3.4
+Version: 1.3.5
Release: 1
Copyright: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.4.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.5.tar.gz
Summary: A program for printing sheet music.
URL: http://www.cs.uu.nl/~hanwen/lilypond
Packager: Han-Wen Nienhuys <hanwen@cs.uu.nl>
copyright = "public domain";
}
-\version "1.2.0";
+\version "1.3.4";
\include "global.ly"
\include "violoncello.ly"
copyright = "public domain";
}
-\version "1.2.0";
+\version "1.3.4";
\include "global.ly"
\include "clarinetti.ly"
}
-\version "1.2.0";
+\version "1.3.4";
\include "clarinetto-1.ly"
\include "clarinetto-2.ly"
}
-\version "1.2.0";
+\version "1.3.4";
clarinetto1 = \notes \relative c {
R1 *2 | d''4-.\ff r r2 | R1 *3 | e4-. r r2 | R1 *3 |
}
-\version "1.2.0";
+\version "1.3.4";
clarinetto2 = \notes \relative c {
R1*2 bes''4-.\ff r r2 | R1*3 | cis4-. r r2 | R1 *3 |
copyright = "public domain";
}
-\version "1.2.0";
+\version "1.3.4";
\include "global.ly"
\include "contrabasso.ly"
copyright = "public domain";
}
-\version "1.2.0";
+\version "1.3.4";
contrabasso = \notes \relative c {
% \translator Staff=violoncello
copyright = "public domain";
}
-\version "1.2.0";
+\version "1.3.4";
\include "global.ly"
copyright = "public domain";
}
-\version "1.2.0";
+\version "1.3.4";
\include "global.ly"
\include "corni.ly"
}
-\version "1.2.0";
+\version "1.3.4";
\include "corno-1.ly"
\include "corno-2.ly"
copyright = "public domain";
}
-\version "1.2.0";
+\version "1.3.4";
corno1 = \notes \relative c {
R1 *2 | f''4-.\ff r r2 | R1 *3 | f4-. r r2 | R1 *3 |
copyright = "public domain";
}
-\version "1.2.0";
+\version "1.3.4";
corno2 = \notes \relative c {
R1 *2 | d''4-.\ff r r2 | R1 *3 | d4-. r r2 | R1 *3 |
}
-\version "1.2.0";
+\version "1.3.4";
\include "global.ly"
\include "fagotti.ly"
}
-\version "1.2.0";
+\version "1.3.4";
\include "fagotto-1.ly"
\include "fagotto-2.ly"
}
-\version "1.2.0";
+\version "1.3.4";
fagotto1 = \notes \relative c {
R1 *2 | as'4-.\ff r r2 | R1 *3 | as4-. r r2 | R1 *3 |
copyright = "public domain";
}
-\version "1.2.0";
+\version "1.3.4";
fagotto2 = \notes \relative c {
R1 *2 | f4-.\ff r r2 | R1 *3 | f4-. r r2 | R1 *3 |
}
-\version "1.2.0";
+\version "1.3.4";
\include "global.ly"
\include "flauti.ly"
}
-\version "1.2.0";
+\version "1.3.4";
\include "flauto-1.ly"
\include "flauto-2.ly"
copyright = "public domain";
}
-\version "1.2.0";
+\version "1.3.4";
flauto1 = \notes \relative c {
R1 *2 | c'''4-.\ff r r2 | R1 *3 | d4-. r r2 | R1 *3 |
copyright = "public domain";
}
-\version "1.2.0";
+\version "1.3.4";
flauto2 = \notes \relative c {
R1 *2 | as'''4-.\ff r r2 | R1 *3 | b4-. r r2 | R1 *3 |
}
-\version "1.2.0";
+\version "1.3.4";
global = \notes {
\time 4/4;
copyright = "public domain";
}
-\version "1.2.0";
+\version "1.3.4";
oboe1 = \notes \relative c'' {
R1 *2 | as'4-.\ff r r2 | R1 *3 | as4-. r r2 | R1 *3 |
}
-\version "1.2.0";
+\version "1.3.4";
oboe2 = \notes \relative c{
R1 *2| f''4-.\ff r r2 | R1 *3 | f4-. r r2 | R1 *3 |
}
-\version "1.2.0";
+\version "1.3.4";
\include "global.ly"
\include "oboi.ly"
}
-\version "1.2.0";
+\version "1.3.4";
\include "oboe-1.ly"
\include "oboe-2.ly"
}
-\version "1.2.0";
+\version "1.3.4";
timpani = \notes \relative c {
R1 *2 | c4-.\ff r r2 | R1 *3 | c4-. r r2 | R1 *3 |
}
-\version "1.2.0";
+\version "1.3.4";
\include "global.ly"
\include "trombe.ly"
}
-\version "1.2.0";
+\version "1.3.4";
\include "trombo-1.ly"
\include "trombo-2.ly"
copyright = "public domain";
}
-\version "1.2.0";
+\version "1.3.4";
trombo1 = \notes \relative c {
R1 *2 | c''4-.\ff r r2 | R1 *3 | c4-. r r2 | R1 *3 |
copyright = "public domain";
}
-\version "1.2.0";
+\version "1.3.4";
trombo2 = \notes \relative c {
R1 *2 | c'4-.\ff r r2 | R1 *3 | c4-. r r2 | R1 *3 |
copyright = "public domain";
}
-\version "1.2.0";
+\version "1.3.4";
viola1 = \notes \relative c {
c'1\ff ~ | c | f,4-. r r2 | r1 |
copyright = "public domain";
}
-\version "1.2.0";
+\version "1.3.4";
viola2 = \notes \relative c {
% starts on (actualy, most part is on) same staff as viola1
copyright = "public domain";
}
-\version "1.2.0";
+\version "1.3.4";
\include "global.ly"
\include "viola-1.ly"
copyright = "public domain";
}
-\version "1.2.0";
+\version "1.3.4";
\include "global.ly"
\include "violino-1.ly"
copyright = "public domain";
}
-\version "1.2.0";
+\version "1.3.4";
violino1 = \notes \relative c {
c'1\ff ~ | c | <f4-. c'-. as'-.> r r2 | R1 |
copyright = "public domain";
}
-\version "1.2.0";
+\version "1.3.4";
\include "global.ly"
\include "violino-2.ly"
copyright = "public domain";
}
-\version "1.2.0";
+\version "1.3.4";
violino2 = \notes \relative c {
c'1\ff ~ | c | <f4-. c'-. as'-.> r r2 | R1 |
copyright = "public domain";
}
-\version "1.2.0";
+\version "1.3.4";
\include "global.ly"
\include "violoncello.ly"
}
-\version "1.2.0";
+\version "1.3.4";
violoncello = \notes \relative c {
c1\ff ~ | c | f,4-. r r2 | r1 | c'1\ff ~ | c | f,4-. r r2 |
under the Gnu Public Licence.
%}
-\version "1.2.0";
+\version "1.3.4";
$voice_one = \notes \relative c' {
a'2 bes4. [c16 bes] | a4 d ~ d c ~ | c b ~ [b8 a] a4 ~|
Tested Features: cross staff auto beams and slurs, grace notes, no bars
%}
-\version "1.2.0";
+\version "1.3.4";
\include "nederlands.ly"
Tested Features: cross staff auto beams and slurs, grace notes, no bars
%}
-\version "1.2.0";
+\version "1.3.4";
\include "nederlands.ly"
Tested Features:
%}
-\version "1.2.0";
+\version "1.3.4";
\include "nederlands.ly"
copyright = "public domain";
}
-\version "1.2.0";
+\version "1.3.4";
\include "standchen.ly"
copyright = "public domain";
}
-\version "1.2.0";
+\version "1.3.4";
% fool make-website
% \include "standchen.ly";
Note: Original key F.
%}
-\version "1.2.0";
+\version "1.3.4";
vocalVerse = \notes\relative c''{
- \property Voice.dynamicDirection=1
+ \property Voice.dynamicDirectionection=1
\times 2/3 { [ g8( )as] g } c4. g8 |
\times 2/3 { [ f8( )g] f } c'4 f,8 r |
g4.-> f8 \times 2/3 { [ f( )es] d } |
}
vocalThrough = \notes\relative c{
- \property Voice.dynamicDirection=1
+ \property Voice.dynamicDirectionection=1
g''8. g16 b8. b16 d8. d16 |
c4 b r |
g4. b8 d8. c16 |
}
bassIntro = \notes\relative c{
- \property Voice.dynamicDirection=1
+ \property Voice.dynamicDirectionection=1
%1
<c,2 c'> r4 |
<as2 as'> r4 |
bassVerseOne = \notes\relative c{
% \clef bass;
- \property Voice.dynamicDirection=1
+ \property Voice.dynamicDirectionection=1
%5
<c,2 c'> r4 |
<as2 as'> r4 |
}
bassEentje = \notes\relative c{
- \property Voice.dynamicDirection=1
+ \property Voice.dynamicDirectionection=1
<c,8 c'> [<c' f as!> <f as c> <c f as> <f as c> <c f as>] |
c,8 [<c' e g> <e g c> <c e g> <e g c> <c e g>] |
<g,8 g'> [<d'' g> <g b> <d g> <g b> <d g>] |
}
bassThrough = \notes\relative c{
- \property Voice.dynamicDirection=1
+ \property Voice.dynamicDirectionection=1
%61
<g,8^"cresc." g'> [<g' b d> <b d f> <g b d> <as!-> b-> d->> <b d f>] |
<g,8 g'> [<g' d'> <d' f> <g, d'> <as-> b-> d->> <b d f>] |
\property Voice.noAutoBeaming = "1"
\property Staff.automaticMelismata=1
- \property Voice.dynamicDirection = \up
+ \property Voice.dynamicDirectionection = \up
\skip 4 * 12;
\vocalVerse
\skip 4 * 24;
metre = "6 6. 8 6. D";
}
-\version "1.2.0";
+\version "1.3.4";
sop=\notes \transpose c''{
ees2 ees4 ees4 g2 g2 | c'1.
metre = "10 10 . 11 11";
}
-\version "1.2.0";
+\version "1.3.4";
sop = \notes \transpose c''{
f4 | d' bes c' | f2 \bar "||";
metre = "10 11. 11 11. and refrain";
}
-\version "1.2.0";
+\version "1.3.4";
sop=\notes \relative c'' {
b2 gis4. a8 |b2 e,2 |
metre = "8 7 8 7 D";
}
-\version "1.2.0";
+\version "1.3.4";
sop=\notes \relative c'' {
b4 b c d | d c b a | g g a b | b4. a8 a2 |
}
-\version "1.2.0";
+\version "1.3.4";
%{
Note: there are other verses, but the three here seem to be
piece = "Allemande";
}
-\version "1.2.0";
+\version "1.3.4";
global = \notes{
\time 4/4;
%%
%% Noe liknende skjer også i mellom andre og tredje stemme i takt 28
-\version "1.2.0";
+\version "1.3.4";
global = \notes{
\time 2/4;
copyright = "Public Domain";
}
-\version "1.2.0";
+\version "1.3.4";
global = \notes {
\time 4/4;
-\version "1.2.0";
+\version "1.3.4";
$global_i = \notes{
\time 12/8;
-\version "1.2.0";
+\version "1.3.4";
$global_ii = \notes{
\time 4/4;
copyright = "Public Domain";
}
-\version "1.2.0";
+\version "1.3.4";
\include "global-i.ly"
\include "violoncello-i.ly";
copyright = "Public Domain";
}
-\version "1.2.0";
+\version "1.3.4";
\include "global-ii.ly"
\include "violoncello-ii.ly";
copyright = "Public Domain";
}
-\version "1.2.0";
+\version "1.3.4";
% {
copyright = "Public Domain";
}
-\version "1.2.0";
+\version "1.3.4";
$violino_i = \notes\relative c'' {
\property Voice.beamAutoEnd = "3/8"
copyright = "Public Domain";
}
-\version "1.2.0";
+\version "1.3.4";
$violino_ii = \notes\relative c''{
R1*8 |
\$violino_ii
\$global_ii
>
-\version "1.2.0";
+\version "1.3.4";
copyright = "Public Domain";
}
-\version "1.2.0";
+\version "1.3.4";
% {
copyright = "Public Domain";
}
-\version "1.2.0";
+\version "1.3.4";
% {
\include "violino-i.ly";
copyright = "Public Domain";
}
-\version "1.2.0";
+\version "1.3.4";
% {
\include "violino-i.ly";
copyright = "Public Domain";
}
-\version "1.2.0";
+\version "1.3.4";
$violoncello_i = \notes\relative c{
\property Voice.beamAutoEnd = "3/8"
copyright = "Public Domain";
}
-\version "1.2.0";
+\version "1.3.4";
$violoncello_ii = \notes\relative c{
r2 a'2|c e,| f8(e)d2 e8()fis| g a bes2 a8()gis|
copyright = "Public Domain";
}
-\version "1.2.0";
+\version "1.3.4";
% {
copyright = "public domain";
}
-\version "1.2.0";
+\version "1.3.4";
% upper = \context Staff \notes\relative c {
upper = \context Staff=upper \notes\relative c {
+%{
+
+ Six Petits Preludes,
+ Collection Johann Peter Kellner
+ ca 1703 - 1707
+
+
+
+ Kellner was a student of Bach's.
+
+%}
+
\header{
-filename = "preludes-2.ly";
-%
-% page 10
-%
-% Six Petits Preludes
-% Collection Johann Peter Kellner
-% ca 1703- 1707
-composer = "Johann Sebastian Bach (1685-1750)";
-enteredby = "jcn";
-copyright = "public domain";
+ copyright = "public domain";
+ source = "Ed. Henry Lemoine Urtext";
+
+
+ composer = "Johann Sebastian Bach (1685-1750)";
+ enteredby = "jcn,hwn";
+ copyright = "public domain";
+
+ % mutopia headers.
+ mutopiatitle = "Prelude";
+ mutopiacomposer = "J.S.Bach";
+ mutopiainstrument = "Piano";
+ style = "baroque";
+ copyright = "Public Domain";
+ tagline = "\\\\This music is part of the Mutopia project, http://sca.uwaterloo.ca/Mutopia/\\\\It has been typeset and placed in the public domain by Jan Nieuwenhuizen.\\\\Unrestricted modification and redistribution is permitted and encouraged - copy this music and share it!";
+ maintainer = "janneke@gnu.org";
+ lastupdated = "1999/Nov/8";
}
-\version "1.2.0";
+%{
+Old versions of LilyPond include this prelude with dynamics and fingerings.
+
+%}
+
+
+
+\version "1.3.4";
upper = \context Staff \notes\relative c{
\context Voice=i
\property Voice . textStyle = "italic"
- r8\mf c'-1( e-2 g-4 e-2 c-1 bes'-5 g-3 |
- )a-4\< c,-1( f-2 a-4 f c c'-5 a-3 |
- )b-4 g-1( b-2 d-4 b-2 g f'-5 \!d-3 |
+ r8 c'( e g e c bes' g |
+ )a c,( f a f c c' a |
+ )b g( b d b g f' d |
<
- {\stemup )e2-4\f r4 e-5 }
+ {\stemup )e2 r4 e }
\context Voice = ii {\stemdown <c2 g > r4 <c g > }
>
\stemboth |
<
- { \stemup d2-4 r4 d-4 }
+ { \stemup d2 r4 d }
\context Voice = ii { \stemdown <c2 a > r4 <c a > }
>
\stemboth |
\context Voice = ii { \stemdown <b 8 g > }
>
\stemboth
- g, 8-1\mf( b-2 d-4
+ g, 8( b d
<
- { \stemup )b 4 e-5 }
+ { \stemup )b 4 e }
\context Voice = ii { \stemdown g, 4 b }
>
\stemboth |
<
- { \stemup c2 r4 < {c-5 ~ c8} {a 4 ~ a 8} > }
+ { \stemup c2 r4 < {c ~ c8} {a 4 ~ a 8} > }
\context Voice=ii { \stemdown c2 r4 e, 4 ~ e 8 }
>
\stemboth
- d,-1\p( fis-2 a-4 fis-2 d-1 c'-5 a-3 |
- )b-4\< g-1( b-2 d-4 b-2 g-1 f'!-5 d-3 |
- )e-4 g,-1( c-2 e-4 c-2 g g'-5 e-3 |
- )fis-4 a,-1( c-2 fis-4 c a a'-5 \!fis-3 |
+ d,( fis a fis d c' a |
+ )b g( b d b g f'! d |
+ )e g,( c e c g g' e |
+ )fis a,( c fis c a a' fis |
<
- { \stemup )g2-5\f }
+ { \stemup )g2 }
\context Voice = ii { \stemdown <d2 b > }
>
\stemboth
- r4 b4-2( |
- c,8-1 e-2 g c g-2 e-1 bes'-4 g-2 |
- )a16->-3 g-2 f-1 e-3 d c b !-3 a-2
- b-3\< g-1 a b c-1 d e \!f |
- g4-5\ff
+ r4 b4( |
+ c,8 e g c g e bes' g |
+ )a16-> g f e d c b ! a
+ b g a b c d e f |
+ g4
<
- { \stemup c,2-5 b 4-4 }
- \context Voice=ii { \stemdown g 2-2 d 4-1 }
+ { \stemup c,2 b 4 }
+ \context Voice=ii { \stemdown g 2 d 4 }
>
\stemboth
<
\context Voice=ii { \stemdown c,1 ~ | c ~ | c }
>
\stemboth |
- r8 c-5( e-3 g-1 e-3 c-5 c' e,-4 |
- )fis-3 d-5( fis-3 a-1 fis-3 d-5 d' fis,-4 |
- )g2-3 r4 g-2( |
- )a8 a,-5( c-4 e-2 c-4 a-5 g' e-3 |
- )fis2 r4 d-4 |
+ r8 c( e g e c c' e, |
+ )fis d( fis a fis d d' fis, |
+ )g2 r4 g( |
+ )a8 a,( c e c a g' e |
+ )fis2 r4 d |
g-\mordent-"(\\textsharp)" g, 4 g'-\mordent g, |
% mordents in brackets...
g'-\mordent g, g'-\mordent g, |
g'-\mordent g, g'-\mordent g, |
- g'8 g,-5( b-4 d-2 b-4 g-5 f'!-1 d-3 |
- )e-2 c-4 e-2 g-1 e-3 c-5 c' e,-4 |
+ g'8 g,( b d b g f'! d |
+ )e c e g e c c' e, |
\property Voice . textStyle = "finger"
f1^"3\\_1" ~ |
- f8 d-3 e-2 c-4 g'4-1 g,^"5\\_2" |
+ f8 d e c g'4 g,^"5\\_2" |
<c1 c,1>
\bar "|.";
}
switch staffs to avoid leger lines.
%}
-\version "1.2.13";
+\version "1.3.4";
upper = \notes \transpose c'' {
enteredby = "jcn";
copyright = "public domain";
}
-\version "1.2.0";
+\version "1.3.4";
one = \context Staff \notes\relative c {
\context Voice=i
enteredby = "jcn";
copyright = "public domain";
}
-\version "1.2.0";
+\version "1.3.4";
upper = \context Staff \notes\relative c{
enteredby = "jcn";
copyright = "public domain";
}
-\version "1.2.0";
+\version "1.3.4";
one = \context Staff \notes\relative c{
-\version "1.2.0";
+\version "1.3.4";
\include "allemande-urtext.ly";
>
-\version "1.2.0";
+\version "1.3.4";
-\version "1.2.0";
+\version "1.3.4";
\include "allemande-urtext.ly";
-\version "1.2.0";
+\version "1.3.4";
\include "courante-urtext.ly";
\$courante_b
>
-\version "1.2.0";
+\version "1.3.4";
-\version "1.2.0";
+\version "1.3.4";
\include "courante-urtext.ly";
-\version "1.2.0";
+\version "1.3.4";
\include "gigue-urtext.ly";
\$gigue_b
>
-\version "1.2.0";
+\version "1.3.4";
-\version "1.2.0";
+\version "1.3.4";
\include "gigue-urtext.ly";
-\version "1.2.0";
+\version "1.3.4";
\include "menuetto-urtext.ly";
d2.
}
-\version "1.2.0";
+\version "1.3.4";
-\version "1.2.0";
+\version "1.3.4";
\include "menuetto-urtext.ly";
-\version "1.2.0";
+\version "1.3.4";
\include "prelude-urtext.ly";
\$prelude_b
>
-\version "1.2.0";
+\version "1.3.4";
-\version "1.2.0";
+\version "1.3.4";
\include "prelude-urtext.ly";
-\version "1.2.0";
+\version "1.3.4";
\include "sarabande-urtext.ly";
\$sarabande_b
>
-\version "1.2.0";
+\version "1.3.4";
-\version "1.2.0";
+\version "1.3.4";
\include "sarabande-urtext.ly";
%{
TODO: use autobeaming.
%}
-\version "1.2.13";
+\version "1.3.4";
tenor =
% It would be nice to squeeze this onto two pages, but I am not sure
% if it would work with US paper.
-\version "1.2.13";
+\version "1.3.4";
global = \notes {
\key c \minor;
lastupdated = "1999/Oct/14";
}
-\version "1.2.13";
+\version "1.3.4";
% should do programmable input.
soprane =
\midi{ \tempo 4 = 100; }
}
-\version "1.2.0";
+\version "1.3.4";
-\version "1.2.0";
+\version "1.3.4";
corI=\notes\relative c'' {
\key c;
% Process with 'ly2dvi -s parts.ly' to get the separate parts.
-\version "1.2.0";
+\version "1.3.4";
\include "global.ly"
\include "wood.ly"
"Statens Musikbibliotek, Stockholm, Sweden";
}
-\version "1.2.0";
+\version "1.3.4";
\include "global.ly"
\include "wood.ly"
\property Staff.instr = "Cor."
\context Voice = corI <
\globalNoKey
- \stemup \property Voice.dynamicDirection = \up
+ \stemup \property Voice.dynamicDirectionection = \up
\property Voice.articulationScriptVerticalDirection = \up
\corI
>
\context Voice = corII {
- \stemdown \property Voice.dynamicDirection = \down
+ \stemdown \property Voice.dynamicDirectionection = \down
\property Voice.articulationScriptVerticalDirection = \down
\corII
}
\property Staff.instr = "Trp."
\context Voice = trpI <
\globalNoKey
- \stemup \property Voice.dynamicDirection = \up
+ \stemup \property Voice.dynamicDirectionection = \up
\property Voice.articulationScriptVerticalDirection = \up
\trpI
>
\context Voice = trpII {
- \stemdown \property Voice.dynamicDirection = \down
+ \stemdown \property Voice.dynamicDirectionection = \down
\property Voice.articulationScriptVerticalDirection = \down
\trpII
}
-\version "1.2.0";
+\version "1.3.4";
viI=\notes\relative c'' {
-\version "1.2.0";
+\version "1.3.4";
flauto=\notes\relative c''' {
\clef "treble";
%}
-\version "1.2.13";
+\version "1.3.4";
cad = \notes \relative c' {
\property Score.midiInstrument = "french horn"
\context Staff {
\emptyText
- \cadenza 1;
+ \cadenzaOn
\clef "violin";
aftergrace = \property Grace.graceAlignPosition = \right
-\version "1.2.13";
+\version "1.3.4";
\include "allegro.ly"
\include "romanze.ly"
definition below. --MB
%}
-\version "1.2.0";
+\version "1.3.4";
global = \notes {
\property StaffGroup.timeSignatureStyle = "old"
e2 r8 d d d16 e |
fis a g fis e d c b a8 d d d16 e |
fis4 g2 fis!4 |
- \cadenza 1;
+ \cadenzaOn
g\breve
}
}>
c8 g g g16 a b d c b a g fis e |
d8 d' d d16 e fis16 a g fis e d c b |
a d c b a g fis e d4 d' |
- \cadenza 1;
+ \cadenzaOn
b\breve
}
}>
d1^"3 4 3" | G^"3 4 3" |
c2 G | d1^"\\textsharp" ( |
) d^"3 4 3" |
- \cadenza 1;
+ \cadenzaOn
G\breve
}
}>
(list
(list 'breathingSignVerticalDirection dir? 'direction)
(list 'verticalDirection dir? 'direction)
- (list 'breathingSignBreakPriority number? 'break-priority
- ))))
+ )))
(define generic-clef-properties
(cons "Clef_item"
(list
- (list 'clefBreakPriority number? 'break-priority)
(list 'clefStyle string? 'style))
)
)
program_name = 'abc2ly'
version = '@TOPLEVEL_VERSION@'
if version == '@' + 'TOPLEVEL_VERSION' + '@':
- version = '1.2.9' # uGUHGUHGHGUGH
+ version = '(unknown version)' # uGUHGUHGHGUGH
import __main__
import getopt
conversions.append ((1,2,1), conv,
'dynamicDir -> dynamicDirection')
+if 1:
+ def conv(str):
+ str = re.sub ('\\\\cadenza *0 *;', '\\\\cadenzaOff', str)
+ str = re.sub ('\\\\cadenza *1 *;', '\\\\cadenzaOn', str)
+
+ return str
+
+ conversions.append ((1,3,4), conv,
+ '\\cadenza -> \cadenza{On|Off}')
+
############################