]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-1.3.5
authorfred <fred>
Tue, 26 Mar 2002 22:43:22 +0000 (22:43 +0000)
committerfred <fred>
Tue, 26 Mar 2002 22:43:22 +0000 (22:43 +0000)
45 files changed:
Documentation/programmer/README-W32.texi [new file with mode: 0644]
Documentation/programmer/regression-test.tely
input/test/tie-accidental.ly
input/test/timing.fly [new file with mode: 0644]
lily/auto-beam-engraver.cc
lily/bar-engraver.cc
lily/bar-number-engraver.cc
lily/base-span-bar-engraver.cc
lily/beam-engraver.cc
lily/break-align-engraver.cc [new file with mode: 0644]
lily/break-align-item.cc
lily/chord-tremolo-engraver.cc
lily/clef-engraver.cc
lily/command-request.cc
lily/global-translator.cc
lily/include/align-element.hh
lily/include/base-span-bar-engraver.hh
lily/include/break-align-item.hh
lily/include/command-request.hh
lily/include/debug.hh
lily/include/global-translator.hh
lily/include/staff-info.hh
lily/include/time-signature-engraver.hh
lily/include/timing-engraver.hh
lily/include/timing-translator.hh
lily/key-engraver.cc
lily/local-key-engraver.cc
lily/multi-measure-rest-engraver.cc
lily/musical-pitch.cc
lily/note-name-engraver.cc [new file with mode: 0644]
lily/repeat-engraver.cc
lily/score-element.cc
lily/score.cc
lily/span-score-bar-engraver.cc
lily/staff-info.cc
lily/staff-margin-engraver.cc
lily/time-description.cc
lily/time-signature-engraver.cc
lily/timing-engraver.cc
lily/timing-translator.cc
lily/warn.cc
ly/auto-beam-settings.ly
ly/engraver.ly
scm/generic-property.scm
scripts/convert-mudela.py

diff --git a/Documentation/programmer/README-W32.texi b/Documentation/programmer/README-W32.texi
new file mode 100644 (file)
index 0000000..8abbb88
--- /dev/null
@@ -0,0 +1,820 @@
+\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
index f878b785869b14f71d897a3c065e7e4740f48486..3675d89ca7c7f7d6cf20ebfc1a9676319fe0ebc4 100644 (file)
@@ -129,12 +129,13 @@ The horizontal middle should not overlap with a staffline.
 
 @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}
 
index 15722ba40309977f9fbd5dd4561657cad5304657..162e23d8cf6af9f1f272e39c3ce1ebb67c56c7c6 100644 (file)
@@ -1,12 +1,12 @@
 
-\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
+       >
+}
diff --git a/input/test/timing.fly b/input/test/timing.fly
new file mode 100644 (file)
index 0000000..e73d89a
--- /dev/null
@@ -0,0 +1,16 @@
+
+
+% \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
index fd519c340cf011b24f1bfc1e45db4cb783c31807..294a1d2858f2bc0e1c1cdb5d98e1cb4c5d411cbe 100644 (file)
@@ -54,9 +54,10 @@ Auto_beam_engraver::consider_end_and_begin (Moment test_mom)
   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;
@@ -104,7 +105,7 @@ Auto_beam_engraver::consider_end_and_begin (Moment test_mom)
   /*
     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
@@ -160,7 +161,7 @@ Auto_beam_engraver::consider_end_and_begin (Moment test_mom)
 
   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);
 
@@ -175,7 +176,7 @@ Auto_beam_engraver::consider_end_and_begin (Moment test_mom)
     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 ();
 }
@@ -189,7 +190,7 @@ Auto_beam_engraver::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*
index e5a61176a6f65014dab7e685b217d5952ff7db3f..e8b29882f86e45bb3d667a1941c8292adaa1c4d7 100644 (file)
@@ -32,7 +32,7 @@ Bar_engraver::create_bar ()
   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);
index e7df04ae89dfa6dbdbbcd7b15897d7f1facb15f1..c8a0aa01bb193d0cdd15682b5f7b8f35afdd2325 100644 (file)
@@ -8,7 +8,7 @@
 
 
 #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"
@@ -25,14 +25,14 @@ void
 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 ());
     }
 }
 
index 24ba35b14bc0d7f24cdc806ea9e8b6d170893b9f..5b3ea4437e8addaee56bb73b948aeea38632be2f 100644 (file)
@@ -16,7 +16,6 @@ Base_span_bar_engraver::Base_span_bar_engraver()
 {
   spanbar_p_ =0;
   use_priority_b_ = true;
-  break_priority_i_ = 0;
 }
 
 Span_bar*
@@ -59,8 +58,7 @@ Base_span_bar_engraver::acknowledge_element (Score_element_info i)
 
          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
            {
index 8f0f52cf1c72c1f35f0754d62de9729d794384b2..e98ab845527c6682b8b1ef57824b6cf4af690c45 100644 (file)
@@ -13,7 +13,7 @@
 #include "beam.hh"
 #include "stem.hh"
 #include "warn.hh"
-#include "time-description.hh"
+#include "timing-translator.hh"
 #include "beaming.hh"
 #include "score-engraver.hh"
 
@@ -93,7 +93,7 @@ Beam_engraver::do_process_requests ()
 
       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;
       
diff --git a/lily/break-align-engraver.cc b/lily/break-align-engraver.cc
new file mode 100644 (file)
index 0000000..20909e5
--- /dev/null
@@ -0,0 +1,122 @@
+/*   
+  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);
+    }
+}
index 2718fdcd945089fe958640b5cdf43880b9025349..dd6ab6490db031c79ab086750c3d29a7b58e585d 100644 (file)
@@ -145,42 +145,3 @@ Break_align_item::Break_align_item ()
   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);
-}
-
index 88886254218a8abad8dbe67daee14036051a4620..567c31ec6a6b0db8f506ce69501665a3c268eead 100644 (file)
@@ -8,7 +8,7 @@
 */
 
 #include "duration-convert.hh"
-#include "time-description.hh"
+#include "timing-translator.hh"
 #include "chord-tremolo-engraver.hh"
 #include "stem.hh"
 #include "beam.hh"
index deaac87548b9890d5ec364125a1014850027fdb7..3d33c6cc7e99aede4e8adaac77b830dc7330ce4d 100644 (file)
@@ -17,7 +17,7 @@
 #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"
@@ -175,6 +175,7 @@ Clef_engraver::create_clef()
   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;
     }
index 35f0cdac4c10295d10d1d83e289f996350405c1d..c9f75ead8515b42c0279c7bed4d474a995e408fe 100644 (file)
 #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
@@ -52,18 +31,7 @@ Bar_req::Bar_req (String s)
   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
@@ -85,11 +53,6 @@ Clef_change_req::Clef_change_req (String s)
   clef_str_ = s;
 }
 
-void
-Partial_measure_req::do_print () const
-{
-  DEBUG_OUT << length_mom_;
-}
 
 void
 Time_signature_change_req::do_print () const
index 997b34e4827a7cce36f1b783b1b4fdd7a57a2618..9728a4c0f265553823b6f94b7b73f0775c070ce0 100644 (file)
 
 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++)
@@ -45,6 +44,7 @@ Global_translator::moments_left_i() const
 void
 Global_translator::prepare (Moment m)
 {
+  prev_mom_  = now_mom_;
   now_mom_ = m;
 }
 
index 4f5434d55db09684c9526f13a7cf68ac9e784014..ff8dddf6f6121704cf406ae1bab1ba2198e3a7ac 100644 (file)
   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_ ;
index 87a24103c35641b29c6436fb7cc0bce9c09b464f..b4caf237d0cc572bf0da408b03758cc6a6d30822 100644 (file)
@@ -37,7 +37,6 @@ protected:
     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();
index 120f14920da0cc2ec072518e672af11e1ede142a..f5b8378a3bb9f1e149772c6c1ab7b3264164184c 100644 (file)
@@ -19,10 +19,7 @@ class Break_align_item : public Axis_align_item {
 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
index ee64d1fe2789e6fc89185092a21ae336954fd22e..9b24ac4b35c6a4967468252967cd13cd2aa57ef5 100644 (file)
@@ -55,16 +55,6 @@ protected:
   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
@@ -81,18 +71,6 @@ protected:
   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  {
index ef6f87e0dd68ce963083adae5c324250d016f1c9..63df6b6afcf0d9f9510582033c2a59c085083eb3 100644 (file)
@@ -13,9 +13,6 @@
 #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;
 
index 00f8ed8204029f21f35422f16fe454a198a7ca30..fbb8f8d37e8d26237ef7cca8173a1d4633b5848b 100644 (file)
@@ -22,7 +22,8 @@ class Global_translator : public virtual Translator_group{
   PQueue<Moment> extra_mom_pq_;
 public:
   VIRTUAL_COPY_CONS(Translator);
-  Moment last_mom_;
+  Moment final_mom_;
+  Moment prev_mom_;
   Moment now_mom_;
   Global_translator();
 
index 3eaa1a4e48f2415152f47037dc4b2dc0f5b2545e..5484f4fb979113efaaa67abc960aad0e89cb4c66 100644 (file)
@@ -17,7 +17,6 @@
     JUNKME.
  */
 struct Staff_info {
-  Time_description const *time_C_;
   Score_column *musical_l_;
   Score_column *command_l_;
 
index 9567489243c32643e0863c87943547deed842990..39770351c7fd41232ee5dd1d736acc2d39842f2b 100644 (file)
@@ -9,8 +9,8 @@
 
 #ifndef TIME_SIG_ENGRAVER_HH
 #define TIME_SIG_ENGRAVER_HH
+
 #include "engraver.hh"
-#include "time-description.hh"
 
 /**
   generate time_signatures. 
@@ -24,6 +24,5 @@ public:
   Time_signature * time_signature_p_;
 
   Time_signature_engraver();
-  
 };
 #endif // TIME_SIG_ENGRAVER_HH
index 99621579ecb3eb7b3ed0788130174ccc06fe411b..bcbbfd6e51a9d072debf61dbbaf0b26cb3db985a 100644 (file)
@@ -21,7 +21,6 @@ class Timing_engraver : public Timing_translator, public Engraver
 
   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:
index ad2517ee226693db34b9466b5e4d163fd0f71c45..afe7d20316cd3a0056ca2049fdafa272eb7f79f3 100644 (file)
@@ -10,8 +10,9 @@
 #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
@@ -19,17 +20,26 @@ 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
index c7b1675fa1bb1fc7fc2f18b700b1d170793dc13c..f69786091b5e72c51119b8268495620f0970bc3a 100644 (file)
@@ -13,7 +13,7 @@
 #include "musical-request.hh"
 #include "local-key-item.hh"
 #include "bar.hh"
-#include "time-description.hh"
+#include "timing-translator.hh"
 
 Key_engraver::Key_engraver ()
 {
@@ -33,7 +33,8 @@ Key_engraver::create_key ()
   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_));
       
index 85c857f36951d32b62a7365fd8b7297465418ba6..32d793d6d880dd8883ce7aa62eede1e6d2e41495 100644 (file)
@@ -13,7 +13,7 @@
 #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"
 
@@ -153,8 +153,10 @@ Local_key_engraver::acknowledge_element (Score_element_info info)
 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);
index e4e115b4dc6d3affc9abe0b24496aace4882da6f..cd6efa31723b2ed8875264042e9daaeb850e510e 100644 (file)
@@ -10,7 +10,8 @@
 #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"
 
 
@@ -71,13 +72,16 @@ Multi_measure_rest_engraver::do_process_requests ()
 {
   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 ();
     }
 }
 
@@ -85,9 +89,12 @@ void
 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_);
@@ -105,13 +112,15 @@ Multi_measure_rest_engraver::do_pre_move_processing ()
 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;
     }
 
index fedf7adcb091cfec918eed3318bb01a07ef62d21..409c71d92b496b6fb63563cdb317d87498f86d3a 100644 (file)
@@ -107,11 +107,8 @@ Musical_pitch::str () const
       while (o--)
        s += to_str (',');
     }
-#if 0  
-  if (octave_i_)
-    s  += String ((octave_i_> 0)? "^": "_") + to_str (octave_i_);
-#endif
-  
+
+
   return s;
 }
 
diff --git a/lily/note-name-engraver.cc b/lily/note-name-engraver.cc
new file mode 100644 (file)
index 0000000..46c7ab5
--- /dev/null
@@ -0,0 +1,67 @@
+/*   
+  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);
index 3be9fb02e2a607aae720d5f430b80115fd74a814..b389d92ee5ae258fe7c0ba4943af54039cb5d262 100644 (file)
 #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"
index 85254c42786ca668d31af99471c1fc3c975ef1d2..fd619447f010d3142ae056156d50a2faa5f153b0 100644 (file)
@@ -122,6 +122,9 @@ Score_element::remove_elt_property (String key)
   return s;
 }
 
+/*
+  UGH. assoc vs. assq
+ */
 void
 Score_element::set_elt_property (String k, SCM v)
 {
index b51795072149875b7df07676593781c81584a951..cc73e09c1c8b264b562ec8f347fe0b795b074815 100644 (file)
@@ -57,7 +57,7 @@ Score::run_translator (Music_output_def *odef_l)
       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_);
index 1c6a21541c791c3b3bfdb80ee15518ea240abfab..770aa4c4c5983357a4183f13e7629ffeac7dde30 100644 (file)
@@ -17,8 +17,7 @@ Span_score_bar_engraver::get_span_bar_p () const
 {
   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;
 }
@@ -27,7 +26,6 @@ Span_score_bar_engraver::get_span_bar_p () const
 Span_score_bar_engraver::Span_score_bar_engraver ()
 {
   use_priority_b_ = true;
-  break_priority_i_ = -4;
 }
 
 Span_bar*
index a527bc3c18f598c4aa6fb82d790e1cc960168063..da993f9d9576806baa64cc180ad36156e3e0f9bb 100644 (file)
@@ -13,7 +13,6 @@
 
 Staff_info::Staff_info()
 {
-  time_C_ = 0;
   command_l_ =0;
   musical_l_ =0;
 }
index 13c9c7f9e6e8bdd83d9db6cbb8ad024d0bd00bbb..44dfb2df2419f3741e83fd10e98fbae38ffc2e09 100644 (file)
@@ -8,7 +8,7 @@
 
 #include "staff-margin-engraver.hh"
 #include "bar.hh"
-#include "time-description.hh"
+#include "timing-translator.hh"
 #include "text-item.hh"
 #include "staff-side.hh"
 
index 7bff5347e21e52df4591f8551200c9d91e9c7998..2874444da422707f7515c546e953f5cafbe1f870 100644 (file)
 /*
-  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();
-}
index e30d1619e214cdba5acdfa9c2cb0dfcfa17bfc71..bba35fe2b1d9421f1f3ea7cd4ab034eb03a210e7 100644 (file)
@@ -39,9 +39,9 @@ Time_signature_engraver::do_process_requests()
       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);
     }
 
   
@@ -54,7 +54,6 @@ Time_signature_engraver::do_pre_move_processing()
 {
   if (time_signature_p_) 
     {
-
       typeset_element (time_signature_p_);
       time_signature_p_ =0;
     }
index 29ee1d6d8c508f29f03e69e1f2c4e30a432a0e76..ac2373da6a0c39d8a0d23cb41bae1185e15d022b 100644 (file)
 #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);
@@ -57,7 +52,8 @@ Timing_engraver::which_bar ()
       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) : "";
index 03479ed5b87e0e917a1dbc0d781be14d79e72a81..4e4ef89a6b9375ad4048ee50a4b90521f3599e5f 100644 (file)
@@ -1,11 +1,13 @@
 /*
   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"
@@ -58,48 +60,24 @@ Timing_translator::do_process_requests()
        {
          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);
-    }
 }
 
 
@@ -121,8 +99,19 @@ Timing_translator::do_pre_move_processing()
   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);
+    }
 }
 
 
@@ -131,21 +120,128 @@ ADD_THIS_TRANSLATOR(Timing_translator);
 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));
 }
index 532d2e3fb89809227264adfcfd3a3595778d9c92..36231783801d492490c1755e13438e6a00e9ada5 100644 (file)
@@ -10,7 +10,7 @@
 #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"
@@ -20,18 +20,3 @@ ostream &warnout (cerr);
 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);
-}
index c3f20c4886027718c985eef89114a7c304f98c2b..50044c786e9e1306a98d94c574147f254b509e74 100644 (file)
 %   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)
index cd6f98cf44c6bb16522977e03bb8adb76e4a6a0e..8fec27817a39467ed5ab409776a15311af581f20 100644 (file)
@@ -309,7 +309,16 @@ ScoreContext = \translator {
        \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;
@@ -323,6 +332,7 @@ ScoreContext = \translator {
        \accepts "GrandStaff";
        \accepts "ChoirStaff";
        \accepts "PianoStaff";
+       \accepts "NoteNames";
 
        clefBreakPriority = #-2
        breathingSignBreakPriority = #-4
@@ -341,3 +351,10 @@ OrchestralScoreContext= \translator {
 
        \accepts "HaraKiriStaff";
 };
+
+\translator {
+       \type "Engraver_group_engraver";
+       \name NoteNames;
+       \consistsend "Axis_group_engraver";
+       \consists "Note_name_engraver";
+}
index 88b6b6a3e19cae5729d7b18e240f0d436fd17e01..e12646599d288ce48584e537a2ed4d3e12765b2e 100644 (file)
        (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))
        )
   )
index b23b0e6cdd31fe117ba1cc546829daccc27991cc..7daa574c6261c3430b250a3c23c4ed137deb9e06 100644 (file)
@@ -377,6 +377,16 @@ if 1:
        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}')
+
 ############################