Generated by hanwen@cs.uu.nl,
From = lilypond-1.7.6, To = lilypond-1.7.7

usage 

    cd lilypond-source-dir; patch -E -p1 < lilypond-1.7.6-1.7.7.diff

Patches do not contain automatically generated files 
or (urg) empty directories, 
i.e., you should run

	./autogen.sh
	./configure [your options.]

	
diff -purN ../lilypond-1.7.6/aclocal.m4 ./aclocal.m4
--- ../lilypond-1.7.6/aclocal.m4	2002-10-28 01:26:34.000000000 +0100
+++ ./aclocal.m4	2002-11-14 11:29:14.000000000 +0100
@@ -250,10 +250,10 @@ AC_DEFUN(STEPMAKE_DATADIR, [
     local_package_datadir=$package_datadir/$FULL_VERSION
     build_package_datadir=$builddir/share/$package
     
-    DATADIR=$(echo ${datadir} | sed "s!\\\${prefix}!$presome!")
-    PACKAGE_DATADIR=$(echo ${package_datadir} | sed "s!\\\${prefix}!$presome!")
-    LOCAL_PACKAGE_DATADIR=$(echo ${local_package_datadir} | sed "s!\\\${prefix}!$presome!")
-    BUILD_PACKAGE_DATADIR=$(echo ${build_package_datadir} | sed "s!\\\${prefix}!$presome!")
+    DATADIR=`echo ${datadir} | sed "s!\\\${prefix}!$presome!"`
+    PACKAGE_DATADIR=`echo ${package_datadir} | sed "s!\\\${prefix}!$presome!"`
+    LOCAL_PACKAGE_DATADIR=`echo ${local_package_datadir} | sed "s!\\\${prefix}!$presome!"`
+    BUILD_PACKAGE_DATADIR=`echo ${build_package_datadir} | sed "s!\\\${prefix}!$presome!"`
     
     AC_SUBST(datadir)
     AC_SUBST(package_datadir)
@@ -344,7 +344,7 @@ AC_DEFUN(STEPMAKE_GETTEXT, [
     if test "$prefix" = "NONE"; then
 	    presome=${ac_default_prefix}
     fi
-    LOCALEDIR=$(echo ${localedir} | sed "s!\\\${prefix}!$presome!")
+    LOCALEDIR=`echo ${localedir} | sed "s!\\\${prefix}!$presome!"`
     
     AC_SUBST(localedir)
     AC_DEFINE_UNQUOTED(LOCALEDIR, "${LOCALEDIR}")
@@ -565,16 +565,18 @@ AC_DEFUN(STEPMAKE_INIT, [
 
     STEPMAKE_PROGS(TAR, tar, REQUIRED)
 
-    if test "x`uname`" = "xHP-UX"; then
-	AC_PATH_PROG(BASH, bash, /bin/sh)
+    if test "$(echo 2)" != "2" ||
+	test "x`uname`" = "xHP-UX"; then
+	AC_PATH_PROG(KSH, ksh, /bin/ksh)
+	AC_PATH_PROG(BASH, bash, $KSH)
 	STEPMAKE_WARN(avoiding buggy /bin/sh)
-	AC_PATH_PROG(SHELL, bash, /bin/ksh)
+	AC_PATH_PROG(SHELL, bash, $KSH)
     else
-	AC_PATH_PROG(BASH, bash, /bin/sh)
 	SHELL=/bin/sh
-	AC_SUBST(SHELL)
+	AC_PATH_PROG(BASH, bash, $SHELL)
     fi
-
+    AC_SUBST(SHELL)
+    
     STEPMAKE_PATH_PROG(PYTHON, python, REQUIRED)
 
     if expr "$MAKE" : '.*\(echo\)' >/dev/null; then
@@ -693,7 +695,7 @@ AC_DEFUN(STEPMAKE_LIBTOOL, [
     REVISION=$PATCH_LEVEL
     # CURRENT=$MINOR_VERSION
     CURRENT=`expr $MINOR_VERSION + 1`
-    # AGE=$(expr $MAJOR_VERSION + 1)
+    # AGE=`expr $MAJOR_VERSION + 1`
     AGE=$MAJOR_VERSION
     AC_SUBST(CURRENT)
     AC_SUBST(REVISION)
diff -purN ../lilypond-1.7.6/buildscripts/new-chords.py ./buildscripts/new-chords.py
--- ../lilypond-1.7.6/buildscripts/new-chords.py	2002-11-04 01:52:15.000000000 +0100
+++ ./buildscripts/new-chords.py	2002-11-14 15:12:54.000000000 +0100
@@ -3,6 +3,9 @@
 import re
 import string
 import sys
+import getopt
+import os
+
 
 def sub_chord (m):
 	str = m.group(1)
@@ -109,8 +112,12 @@ if old_syntax:
 	chordend = '>>'
 
 
+marker_str = '%% new-chords-done %%'
 
 def sub_chords (str):
+	if re.search (marker_str,str):
+		return str
+	
 	str= re.sub (r'\\<', '@STARTCRESC@', str)
 	str= re.sub (r'\\>', '@STARTDECRESC@', str)
 	str= re.sub (r'([_^-])>', r'\1@ACCENT@', str)
@@ -125,5 +132,22 @@ def sub_chords (str):
 	str= re.sub (r'@ACCENT@', '>', str)
 	return str
 
+(opts, files)= getopt.getopt( sys.argv[1:], 'e',['edit'])
+edit = 0
+for (o,a) in opts:
+	if o == '-e' or o == '--edit':
+		edit = 1
+
+for a in files:
+	str = open (a).read()
+	if re.search (str, marker_str):
+		continue
+	
+	str = sub_chords (str)  + marker_str + '\n'
 
-print  sub_chords (open (sys.argv[1]).read())
+	if edit:
+		open (a + '.NEW', 'w').write (str)
+		os.rename (a, a + '~')
+		os.rename (a + '.NEW', a)
+	else:
+		print str
diff -purN ../lilypond-1.7.6/ChangeLog ./ChangeLog
--- ../lilypond-1.7.6/ChangeLog	2002-11-04 11:53:01.000000000 +0100
+++ ./ChangeLog	2002-11-14 11:28:33.000000000 +0100
@@ -1,5 +1,158 @@
+2002-11-14  Han-Wen Nienhuys  <hanwen@cs.uu.nl>
+
+	* Documentation/user/*.tely: new chord syntax.
+
+	* input/regression/[bc]*.ly (texidoc): syntax updates.
+	
+2002-11-13  Heikki Junes <hjunes@cc.hut.fi>
+
+	* lilypond.words: add vocabulary to be used in auto-completion
+
+	* vimrc: autocompletion in Insert/Replace-mode with <Ctrn-N>
+
+	* lilypond.vim: allow note name at EOF
+
+2002-11-13  Han-Wen Nienhuys  <hanwen@cs.uu.nl>
+
+	* buildscripts/new-chords.py (edit): -e option: inline editing.
+
+	* input/regression/a*.ly (texidoc): syntax updates.
+
+	* Documentation/user/lilypond-book.itely (Integrating La@TeX{} and
+	music): elucidations. 
+
+2002-11-11 Juergen Reuter  <reuter@ipd.uka.de>
+
+	* lily/include/lily-proto.hh, ly/engraver-init.ly,
+	ly/spanners-init.ly, scm/grob-description.scm,
+	scm/grob-property-description.scm, scm/music-types.scm,
+	lily/cluster-engraver.cc, lily/cluster.cc,
+	lily/include/cluster.hh, input/test/cluster.ly: cluster
+	implementation
+
+	* lily/include/lookup.hh, lily/lookup.cc, scm/pdf.scm
+	ps/music-drawing-routines.ps, scm/ascii-script.scm, scm/ps.scm,
+	scm/sketch.scm, scm/tex.scm: support for dots and polygons added
+
+	* lily/lookup.cc: bugfix: fixed infinite loop in frame ()
+
+	* mf/parmesan-heads.mf: bugfix: vaticana punctum set_char_box
+
+	* scm/grob-description.scm: bugfix: by default, use default note
+	head style when engraving ligatures
+
+	* lily/note-heads-engraver.cc: bugfix: do not steal ligature events
+
+	* lily/mensural-ligature-engraver.cc: bugfix: accept ligature
+	events
+
+	* lily/ligature-bracket-engraver.cc: bugfix: accept ligature events
+
+	* input/test/ancient-font.ly: bugfix: style -> flag-style
+
+	* lily/ligature-engraver.cc: indentation fix
+
+	* lily/parser.yy: indentation fixes
+	
+2002-11-09  Han-Wen Nienhuys  <hanwen@cs.uu.nl>
+
+	* input/regression/measure-grouping.ly: more elaborate example.
+
+	* lily/moment.cc: ly:add-moment, ly:mul-moment,
+	ly:div-moment. New functions 
+
+	* scm/music-functions.scm (set-time-signature): new function,
+	allow inline time sig settings with measure grouping.
+
+	* lily/parser.yy (command_element): move time sig construction
+	into Scheme.
+
+	* lily/side-position-interface.cc (out_of_staff): new function,
+	like padding, but keep minimum distance from staff. Easier than
+	linespanners (dynamics, pedals), but roughly the same effect.
+
+2002-11-10 Heikki Junes  <hjunes@cc.hut.fi>
+
+	* emacs-mode.el: Added spanish-note-replacements 
+        (<carlos.betancourt@chello.be>).
+
+	* vimrc: (Un)commenting with <(S-)F12>, tidy.
+
+2002-11-08  Heikki Junes  <hjunes@cc.hut.fi>
+
+	* lilypond.vim: Do not fontify cises, desis, etc.
+
+	* vimrc: view dvi with <S-F6>
+
+2002-11-08  Han-Wen Nienhuys  <hanwen@cs.uu.nl>
+
+	* lily/lookup.cc (triangle): new function.
+
+	* input/regression/measure-grouping.ly (texidoc): new file: show
+	triangles and brackets for beat groups of 3 and 2.
+
+	* lily/include/measure-grouping-spanner.hh (class
+	Measure_grouping): new file.
+
+	* lily/measure-grouping-spanner.cc (brew_molecule): new file
+
+	* lily/measure-grouping-engraver.cc (class
+	Measure_grouping_engraver): new file.
+
+2002-11-06  Jan Nieuwenhuizen  <janneke@gnu.org>
+
+	* Merge from stable:
+
+	    cvs update -jlilypond_1_6_6 -jlilypond_1_6_6_1
+	
+	* ly/paper16-init.ly (paperSixteen): Bugfix: set fonts instead of
+	stylesheet.
+
+	* ly/paper19.ly: Include paper19-init.ly.
+
+	* ly/paper19-init.ly: New file.
+
+	* Documentation/user/tutorial.itely (First steps): Fix first
+	example for font test.
+
+	* input/tutorial/brahms-tweaked.ly: Fix by hand for font test.
+
+	* ChangeLog: Add 1.7.6 release marker (see below).
+
+	* stepmake/stepmake/python-module-vars.make (EXTRA_DIST_FILES):
+	Add .py files.
+
+2002-11-06  Han-Wen Nienhuys  <hanwen@cs.uu.nl>
+
+	* input/tutorial/sammartini.ly (bassvoices): to new syntax.
+
+	* input/tutorial/*.ly: update to new syntax.
+
+	* lily/parser.yy (Composite_music): new transpose syntax,
+	\transpose FROM TO MUSIC. 
+
+2002-11-04  Jan Nieuwenhuizen  <janneke@gnu.org>
+
+	* scripts/lilypond-book.py: * scripts/ly2dvi.py: Fix: redirect
+	latex progress/error output to stderr (by default this goes to
+	stdout).  Show lilypond progress, even when not verbose.
+
+	* python/lilylib.py (system): New optional parameter to control
+	showing of progress.
+
+	* scm/backend-documentation-lib.scm (check-dangling-properties):
+	Fix error message.
+
+	* lily/text-item.cc (ADD_INTERFACE): Remove align, magnify.  Add
+	axis, extent.
+
+	* scm/grob-property-description.scm (magnify): Remove.
+	(extent, axis): Add.
+
 2002-11-03  Han-Wen Nienhuys  <hanwen@cs.uu.nl>
 
+	* VERSION: Release 1.7.6.
+
 	* scripts/convert-ly.py: more uniformization substitutions.
 
 	* buildscripts/new-chords.py (sub_chords): new file.
@@ -416,6 +569,61 @@
 	(schedule_lilypond_block): Implement `noquote' option for LaTeX
 	mode.
 
+2002-11-03  Jan Nieuwenhuizen  <janneke@gnu.org>
+
+	* ChangeLog: Add 1.6.6 release marker.  See below.
+
+	* stepmake/stepmake/po-targets.make: Remove --c++ option.
+
+	* scripts/midi2ly.py: Fix global syntax warnings.
+
+	* GNUmakefile.in: Generate builddir locale tree too.
+
+	* scripts/ly2dvi.py:
+	* scripts/midi2ly.py: 
+	* scripts/mup2ly.py: 
+	* scripts/update-lily.py:
+	* lily/main.cc (setup_paths): Fix for locales setup.
+
+2002-10-29  Jan Nieuwenhuizen  <janneke@gnu.org>
+
+	* Documentation/windows/installing.texi: Soften wording about
+	necessity of becoming Administrator.  tommie@iae.nl reports this
+	does not seem to be necessary for his flavour of Windows 2000.
+	Explicitely discourage text mode mounts.
+
+2002-10-27  Han-Wen Nienhuys  <hanwen@cs.uu.nl>
+
+	* lily/rest.cc (after_line_breaking): backport dot position fix.
+
+	* lily/rest-collision.cc (do_shift): also remove dots for suicided
+	rests. Thanks to Klaus Zimmermann for finding this bug.
+
+2002-10-24  Jan Nieuwenhuizen  <janneke@gnu.org>
+
+	* Documentation/topdocs/INSTALL.texi: Correction for broken /bin/sh.
+
+2002-10-24  Han-Wen Nienhuys  <hanwen@cs.uu.nl>
+
+	* Documentation/user/music-glossary.tely: fix links.
+
+2002-10-21  Werner Lemberg  <wl@gnu.org>
+
+	* tex/lily-ps-defs.tex (\lilypondsetdimen): Define ID macro.
+	(\lilypondpostscript): Define PS macros `lyscaleXXX' (`XXX' is the
+	scaling factor) only once and use them in the definition of
+	\embeddedps.
+	* ps/music-drawing-routines.ps (skeel): Removed.
+
+2002-10-21  Jan Nieuwenhuizen  <janneke@gnu.org>
+
+	* stepmake/aclocal.m4: Changed 6 instances of $( ) to ` `, for
+	Solaris7, as we don't use nested $( ) constructs.
+
+2002-10-21  Han-Wen Nienhuys  <hanwen@cs.uu.nl>
+
+	* VERSION: Release 1.6.6.
+	
 2002-10-21  Jan Nieuwenhuizen  <janneke@gnu.org>
 
 	* Documentation/topdocs/INSTALL.texi: Add note about using ksh for
diff -purN ../lilypond-1.7.6/Documentation/topdocs/INSTALL.texi ./Documentation/topdocs/INSTALL.texi
--- ../lilypond-1.7.6/Documentation/topdocs/INSTALL.texi	2002-10-28 01:26:21.000000000 +0100
+++ ./Documentation/topdocs/INSTALL.texi	2002-11-12 11:47:55.000000000 +0100
@@ -730,11 +730,11 @@ CFLAGS='-I /usr/pkg/include' LDFLAGS='-L
 @file{/bin/sh} is not yet POSIX compliant, but @file{/bin/ksh} or bash
 is.  Please run configure like:
 @example
-        /bin/ksh -c ./configure
+        CONFIG_SHELL=/bin/ksh ksh -c ./configure
 @end example
 or
 @example
-        bash -c ./configure
+        CONFIG_SHELL=/bin/bash bash -c ./configure
 @end example
 
 @item Sparc64/Solaris 2.6, GNU make-3.77
diff -purN ../lilypond-1.7.6/Documentation/user/appendices.itely ./Documentation/user/appendices.itely
--- ../lilypond-1.7.6/Documentation/user/appendices.itely	2002-10-09 17:14:30.000000000 +0200
+++ ./Documentation/user/appendices.itely	2002-11-06 13:33:34.000000000 +0100
@@ -71,7 +71,7 @@ scheme = \chords {
 \score {
   \notes <
     \context ChordNames \scheme
-    \context Staff \transpose c'' \scheme
+    \context Staff \transpose c c' \scheme
   >
   \paper {
     linewidth = 5.7\in
@@ -135,7 +135,7 @@ scheme = \chords {
 \score {
   \notes <
     \context ChordNames \scheme
-    \context Staff \transpose c'' \scheme
+    \context Staff \transpose c c' \scheme
   >
   \paper {
     linewidth = 5.7\in
diff -purN ../lilypond-1.7.6/Documentation/user/internals.itely ./Documentation/user/internals.itely
--- ../lilypond-1.7.6/Documentation/user/internals.itely	2002-10-21 00:44:13.000000000 +0200
+++ ./Documentation/user/internals.itely	2002-11-14 11:28:33.000000000 +0100
@@ -235,7 +235,7 @@ Second, contexts are created automatical
 music expressions.  Consider the following example.
 
 @lilypond[verbatim, singleline]
-\score { \context Score \notes { c'4 ( d' )e' } }
+\score { \context Score \notes { c'4-( d' e'-) } }
 @end lilypond
 
 @noindent
@@ -246,27 +246,6 @@ case, a Thread, Voice, and Staff context
 sequential music is also interpreted with the same Thread, Voice, and
 Staff context, putting the notes on the same staff, in the same voice.
 
-This is a convenient mechanism, but do not expect opening chords to work
-without @code{\context}.  For every note, a separate staff is
-instantiated.
-
-@cindex explicit context
-@cindex starting with chords
-@cindex chords, starting with
-
-@lilypond[verbatim, singleline]
-\score { \notes <c'4 es'> } 
-@end lilypond
-
-Of course, if the chord is preceded by a normal note in sequential
-music, the chord will be interpreted by the Thread of the preceding
-note:
-
-@lilypond[verbatim,singleline]
-\score { \notes { c'4 <c'4 es'> } }
-@end lilypond
-
-
 @node Context properties
 @subsection Context properties
 
@@ -625,12 +604,18 @@ are expressed in two different ways:
   < { a b c' } { c' d' e' } >
 }
 @end lilypond
+However, using @code{<} and @code{>} for chords turns up various
+syntactical peculiarities. For this reason, a special syntax for
+chords was introduced in version 1.7: @code{<< >>}.
+
 
-Other compound music expressions include
 
+
+
+Other compound music expressions include
 @example
 \repeat @var{expr}
-\transpose @var{pitch} @var{expr}
+\transpose @var{from} @var{to} @var{expr}
 \apply @var{func} @var{expr}
 \context @var{type} = @var{id} @var{expr}
 \times @var{fraction} @var{expr}
diff -purN ../lilypond-1.7.6/Documentation/user/lilypond-book.itely ./Documentation/user/lilypond-book.itely
--- ../lilypond-1.7.6/Documentation/user/lilypond-book.itely	2002-10-28 01:26:21.000000000 +0100
+++ ./Documentation/user/lilypond-book.itely	2002-11-14 11:28:34.000000000 +0100
@@ -22,9 +22,10 @@ LilyPond code, process it separately to 
 
 @command{lilypond-book} provides you with a way to automate this
 process: This program extracts snippets of music from your document,
-runs LilyPond on them, and substitutes the resulting pictures back.
-The line width and font size definitions for the music are adjusted
-to match the layout of your document.
+runs LilyPond on them, and outputs your document with the resulting
+pictures substituted for the music you entered.  The line width and
+font size definitions for the music are adjusted to match the layout
+of your document.
 
 It can work on La@TeX{}, @code{html} or texinfo documents.  A tutorial
 on using lilypond-book is in @ref{Integrating text and music}.
@@ -59,7 +60,9 @@ You specify the LilyPond code like this:
 @@lilypondfile[options, go, here]@{@var{filename}@}
 @end example
 
-We show two simple examples here.  First a complete block:
+Then you run lilypond-book on it, and the result is a file you can
+process with texinfo. We show two simple examples here.  First a
+complete block:
 
 @example
 @@lilypond[26pt]
@@ -77,13 +80,13 @@ produces this music:
 Then the short version:
 
 @example
-@@lilypond[11pt]@{<c' e' g'>@}
+@@lilypond[11pt]@{<<c' e' g'>>@}
 @end example
 
 @noindent
 and its music:
 
-@lilypond[11pt]{<c' e' g'>}
+@lilypond[11pt]{ <<c' e' g'>> }
 
 @command{lilypond-book} knows the default margins and a few paper
 sizes.  One of these commands should be in the beginning of the document:
@@ -105,7 +108,8 @@ music, so you can make a HTML document w
 @node Integrating La@TeX{} and music
 @section Integrating La@TeX{} and music
 
-You specify LilyPond code like this:
+
+  You specify LilyPond code like this:
 
 @example
 \begin[options, go, here]@{lilypond@}
@@ -124,7 +128,8 @@ or
 \lilypond@{ YOUR LILYPOND CODE @}
 @end example
 
-We show some examples here.
+Then you run lilypond-book on it, and the result is a file you can
+process with La@TeX{}. We show some examples here.
 
 @example
 \begin[26pt]@{lilypond@}
@@ -142,13 +147,13 @@ produces this music:
 Then the short version:
 
 @example
-\lilypond[11pt]@{<c' e' g'>@}
+\lilypond[11pt]@{<<c' e' g'>>@}
 @end example
 
 @noindent
 and its music:
 
-@lilypond[11pt]{<c' e' g'>}
+@lilypond[11pt]{<<c' e' g'>>}
 
 You can use whatever commands you like in the document preamble,
 the part of the document before @code{\begin@{document@}}.
@@ -180,7 +185,8 @@ You specify LilyPond code like this:
 @end example
 
 @noindent
-produces
+Then you run lilypond-book on it, and the result is a file you can
+process with La@TeX{}. The final result look like
 
 @example
 <lilypond relative1 verbatim>
@@ -192,8 +198,7 @@ produces
   \key c \minor r8 c16 b c8 g as c16 b c8 d | g,4
 @end lilypond
 
-Inline picture:
-
+For inline pictures, use @code{<lilypond ... />} syntax, eg.
 @example
 Some music in <lilypond a b c/> a line of text.
 @end example
diff -purN ../lilypond-1.7.6/Documentation/user/music-glossary.tely ./Documentation/user/music-glossary.tely
--- ../lilypond-1.7.6/Documentation/user/music-glossary.tely	2002-10-07 14:23:19.000000000 +0200
+++ ./Documentation/user/music-glossary.tely	2002-11-14 14:54:48.000000000 +0100
@@ -7,8 +7,8 @@
 @end html
 
 @ifhtml
-This document is also available in @uref{glossary.ps.gz,gzipped
-PostScript} and @uref{glossary.pdf,PDF}.
+This document is also available in @uref{music-glossary.ps.gz,gzipped
+PostScript} and @uref{music-glossary.pdf,PDF}.
 @end ifhtml
 
 @titlepage
@@ -289,7 +289,7 @@ the duration of the long a. is proportio
 \time 4/4
 
 \property Score.TextScript \set #'font-style = #'large
-<d4_"notation" a fis> r
+<<d a fis>>4_"notation" r
 { \property Voice.Stem \override #'flag-style = #""
   \grace g16
   \property Voice.Stem \revert #'flag-style
@@ -302,7 +302,7 @@ fis8 e16 fis
 g8 fis16 g |
 \cadenzaOn a4 \bar "||" \cadenzaOff }
 \notes\relative c'' {
-<d4_"performance" a fis> r g16 () fis e fis a () g fis g |
+<<d a fis>>4_"performance" r g16 () fis e fis a () g fis g |
 \cadenzaOn a4 \bar "||" \cadenzaOff }
 @end lilypond
 
@@ -314,8 +314,8 @@ An appoggiatura may have more notes prec
   \time 2/4
   \property Score.TextScript \set #'font-style = #'large
   \grace { bes16 } as8_"notation" as16 bes as8 g |
-  \grace { [as16 ( bes] } < ) c4 as >
-  \grace { [as16 ( bes] } < ) c4 as > \bar "||"
+  \grace { [as16-( bes] } << c as >>4-)
+  \grace { [as16-( bes] } << c as >>4-) \bar "||"
   \grace { bes16 } as8_"performance" as16 bes as8 g |
   < \context Voice = va { \stemUp\tieUp as32 bes c8. as32 bes c8. }
     \context Voice = vb { \stemDown\tieDown as16 ~ as8. as16 ~ as8. } >
@@ -712,12 +712,12 @@ chords are denoted open chords
 \property Voice.TextScript \set #'font-style = #'large
 \addlyrics
 \context Staff \notes\relative c'' {
-  <g1 b d> s s
-  <g bes d> s s
-  <g bes des> s s
-  <g b dis> s s
-  <g b d f> s s
-  <g b d f a> s s
+  <<g b d>>1 s s
+  <<g bes d>> s s
+  <<g bes des>> s s
+  <<g b dis>> s s
+  <<g b d f>> s s
+  <<g b d f a>> s s
 }
 \context Lyrics \lyrics{
   \property Lyrics . LyricText \override #'alignment = #-1
@@ -1521,7 +1521,7 @@ but equal pitch.
 \property Score.TextScript \set #'font-style = #'large
 \addlyrics
 \context Staff \notes\relative c'' {
-  gis1 s s as s s <des g,!> s s <cis g!> s s
+  gis1 s s as s s <<des g,!>> s s <<cis g!>> s s
 }
 \context Lyrics \lyrics {
   \property Lyrics . LyricText \override #'alignment = #-1
@@ -1757,8 +1757,8 @@ variants of the base chords.
 \property Score.TextScript \set #'font-style = #'large
 \addlyrics
 \context Voice \notes\relative c'' {
-  < g1 e c > < a f d > < b g e >
-  < c a f > < d b g > < e c a > < f d b > }
+  <<g e c >>1 << a f d >> << b g e >>
+  <<c a f >> << d b g >> << e c a >> << f d b >> }
 \context Lyrics \lyrics { T Sp Dp S D Tp "D{\\kern-5pt}$\\mid$" }
 @end lilypond
 
@@ -1907,8 +1907,8 @@ section.  @aref{functional harmony}.
     \time 4/4
     \clef treble
     \context Voice
-    \partial 4 < c4 g e > |
-    < c a f > < b g d > < c2 g e >
+    \partial 4 << c g e >>4 |
+    << c a f >> << b g d >> << c g e >>2
   }
   \property Score.LyricText \set #'font-style = #'large
   \addlyrics
@@ -1942,13 +1942,13 @@ Consonances:
 \property Score.barNonAuto = ##t
 \property Score.TextScript \set #'font-style = #'large
 \context Voice \notes\relative c'' {
-  <g1_"unisone  " g> s
-  <g1_"third  " b> s
-  <g1_"fourth  " c> s
-  <g1_"fifth  " d'> s
-  <g1_"sixth  " e'> s
-  <g1_"octave  " g'> s
-  <g1_"decime" b'> s s
+  <<g g>>1_"unisone  " s
+  <<g b>>_"third  " s
+  <<g c>>_"fourth  " s
+  <<g d'>>_"fifth  " s
+  <<g e'>>_"sixth  " s
+  <<g g'>>_"octave  " s
+  <<g b'>>_"decime" s s
 }
 @end lilypond
 
@@ -1958,9 +1958,9 @@ Dissonances:
 \property Score.barNonAuto = ##t
 \property Score.TextScript \set #'font-style = #'large
 \context Voice  \notes\relative c'' {
-  <g1_"second  " a> s s
-  <g1_"seventh  " f'> s s
-  <g1_"ninth" a'> s s
+  <<g a>>1_"second  " s s
+  <<g f'>>_"seventh  " s s
+  <<g a'>>_"ninth" s s
 }
 @end lilypond
 
@@ -2001,14 +2001,14 @@ of such two forms an octave.
 \property Score.TextScript \set #'font-style = #'large
 \addlyrics
 \context Voice \notes\relative c'' {
-  < g1 g > s
-  < g^"minor" as > s
-  < g^"major" a! > s
-  < g^"augm" ais > s
-  < gis^"dimin" bes > s
-  < g!^"minor" bes > s
-  < g^"major" b! > s
-  < g^"augm" bis > s
+  << g g >>1 s
+  << g as >>^"minor" s
+  << g a! >> s
+  << g ais >>^"augm" s
+  << gis bes >>^"dimin" s
+  << g! bes >>^"minor" s
+  << g b! >>^"major" s
+  << g bis >>^"augm" s
 }
 \context Lyrics \lyrics {
   "unisone  " "second  " "second  " "second  "
@@ -2022,14 +2022,14 @@ of such two forms an octave.
 \property Score.TextScript \set #'font-style = #'large
 \addlyrics
 \context Staff \notes\relative c'' {
-  < g1^"perfect" c > s
-  < g^"augm" cis > s
-  < g^"perfect" d' > s
-  < g^"dim" des' > s
-  < gis^"dimin" es' > s
-  < g!^"minor" es' > s
-  < g^"major" e'! > s
-  < g^"augm" eis' > s
+  << g c >>^"perfect" s
+  << g cis >>^"augm"  s
+  << g d' >>^"perfect"  s
+  << g des' >> ^"dim" s
+  << gis es' >>^"dimin"  s
+  << g! es' >>^"minor"  s
+  << g e'! >>^"major"  s
+  << g eis' >>^"augm"  s
 }
 \context Lyrics \lyrics {
   "fourth  " "fourth  " "fifth  " "fifth  "
@@ -2043,14 +2043,14 @@ of such two forms an octave.
 \property Score.TextScript \set #'font-style = #'large
 \addlyrics
 \context Staff \notes\relative c'' {
-  < gis1^"dimin" f'! > s
-  < g!^"minor" f'! > s
-  < g^"major" fis' > s
-  < g g' > s
-  < g^"minor" as' > s
-  < g^"major" a'! > s
-  < g^"minor" bes' > s
-  < g^"major" b'! > s
+  << gis f'! >>1^"dimin"  s
+  << g! f'! >>^"minor"  s
+  << g fis' >>^"major"  s
+  << g g' >> s
+  << g as' >>^"minor"  s
+  << g a'! >>^"major"  s
+  << g bes' >>^"minor"  s
+  << g b'! >>^"major"  s
 }
 \context Lyrics \lyrics {
   "seventh  " "seventh  " "seventh  " "octave  "
@@ -2074,9 +2074,9 @@ The difference between an interval and a
 \property Score.barNonAuto = ##t
 \property Score.TextScript \set #'font-style = #'large
 \context Staff \notes\relative c'' {
-  < g1_"second  " a > s s < g'_"seventh  " a, > s s \bar "||"
-  < g,_"third  " b > s s < g'_"sixth  " b, > s s \bar "||"
-  < g,_"fourth  " c > s s < g'_"fifth  " c, > s s \bar "||"
+  << g  a >>1_"second " s s << g' a, >>_"seventh " s s \bar "||"
+  << g, b >>_"third  " s s << g' b, >>_"sixth  " s s \bar "||"
+  << g, c >>_"fourth  " s s << g' c, >>_"fifth  " s s \bar "||"
 }
 @end lilypond
 
@@ -3695,7 +3695,7 @@ with figures designating the chief @aref
         es4 d c bes | bes }
       \context Voice = rhb {
         \stemDown
-        < bes8 g > as < as f > g < g es > f < d f > es | < g4 es > }
+        << bes g >>8 as << as f >> g << g es >> f << d f >> es | << g es >>4 }
     >
   }
   \addlyrics
@@ -3797,7 +3797,7 @@ relative pitches.
 @lilypond[13pt]
 \context Staff {
   \time 3/4
-  \transpose bes\relative c'' {
+  \transpose c bes \relative c'' {
     \key g \major
     d4 g,8 a b c | d4 g, g | e' c8 d e fis | g4 g, g \bar "|."
   }
diff -purN ../lilypond-1.7.6/Documentation/user/refman.itely ./Documentation/user/refman.itely
--- ../lilypond-1.7.6/Documentation/user/refman.itely	2002-10-28 01:26:22.000000000 +0100
+++ ./Documentation/user/refman.itely	2002-11-14 11:28:34.000000000 +0100
@@ -322,7 +322,7 @@ Durations can also be produced through G
 
 Dot placement for chords is not perfect.  In some cases, dots overlap:
 @lilypond[]
- \context Voice { <f,4. c'' d e f> }
+ <<f, c'' d e f>>4.
 @end lilypond
 
 
@@ -339,7 +339,7 @@ slurs, which indicate articulation, or p
 musical phrasing.  A tie is entered using the tilde symbol `@code{~}'.
 
 @lilypond[fragment,verbatim,center]
-  e' ~ e' <c' e' g'> ~ <c' e' g'>
+  e' ~ e' <<c' e' g'>> ~ <<c' e' g'>>
 @end lilypond
 
 When a tie is applied to a chord, all note heads (whose pitches match) are
@@ -351,7 +351,7 @@ If you want less ties created for a chor
 for every tied chord.
 @lilypond[fragment,verbatim,center]
   \property Voice.sparseTies = ##t
-  <c' e' g'> ~ <c' e' g'>
+  <<c' e' g'>> ~ <<c' e' g'>>
 @end lilypond
 
 In its meaning a tie is just a way of extending a note duration, similar
@@ -599,9 +599,9 @@ preceding note.
 
 @lilypond[fragment,verbatim,center]
   \relative c' {
-    c <c e g> 
-    <c' e g>
-    <c, e' g>
+    c <<c e g>> 
+    <<c' e g>>
+    <<c, e' g>>
   }
 @end lilypond 
 @cindex @code{\notes}
@@ -752,23 +752,27 @@ emacsclient --no-wait +%l %f
 If you use xemacs instead of emacs, you use @code{(gnuserve-start)} in
 your @file{.emacs}, and set @code{XEDITOR} to @code{gnuclient -q +%l %f}
 
-For using Vim, set @code{XEDITOR} to @code{gvim --remote +%l %f}, or use this
-argument with xdvi's @code{-editor} option.
+For using Vim, set @code{XEDITOR} to @code{gvim --remote +%l %f}, or
+use this argument with xdvi's @code{-editor} option.
+
 @cindex NEdit
 For using NEdit, set @code{XEDITOR} to @code{nc -noask +%l %f}, or
 use this argument with xdvi's @code{-editor} option.
 
 If can also make your editor jump to the exact location of the note
-you clicked. This is only supported on Emacs. Users of version 20 must
-apply the patch @file{emacsclient.patch}. Users of version 21 must
-apply @file{server.el.patch} (version 21.2 and earlier).  At the top
-of the @code{ly} file, replace the @code{set!} line with the following
-line,
+you clicked. This is only supported on Emacs and VIM. Users of Emacs version
+20 must apply the patch @file{emacsclient.patch}. Users of version 21
+must apply @file{server.el.patch} (version 21.2 and earlier).  At the
+top of the @code{ly} file, replace the @code{set-point-and-click} line
+with the following line,
 @example
 #(ly:set-point-and-click 'line-column)
 @end example
 @cindex line-colomn-location
-and set @code{XEDITOR} to @code{emacsclient --no-wait +%l:%c %f}.
+and set @code{XEDITOR} to @code{emacsclient --no-wait +%l:%c %f}.  Vim
+users can set @var{XEDITOR} to @code{gvim --remote +:%l:norm%c| %f}.
+
+
 
 @refbugs
 
@@ -962,6 +966,28 @@ inserted, and how automatic beams should
 value of @code{timeSignatureFraction} also causes a time signature
 symbol to be printed.
 
+More options are available through the Scheme function
+@code{set-time-signature}. In combination with the
+@internalsref{Measure_grouping_engraver}, it will create
+@internalsref{MeasureGrouping} signs. Such signs ease reading
+rhythmically complex modern music.  In the following example, the 9/8
+measure is subdivided in 2, 2, 2 and 3. This is passed to
+@code{set-time-signature} as the third argument @code{(2 2 2 3)}.
+
+@lilypond[verbatim]
+\score { \notes \relative c'' {
+   #(set-time-signature 9 8 '(2 2 2 3))
+   g8 g d d g g a8-[-( bes g-]-) | 
+   #(set-time-signature 5 8 '(3 2))
+   a4. g4
+   }
+   \paper {
+       linewidth = -1.0
+       \translator { \StaffContext
+         \consists "Measure_grouping_engraver"
+   }}}
+@end lilypond 
+
 @c .   {Partial}
 @subsection Partial
 @cindex Partial
@@ -1609,7 +1635,7 @@ input file:
 
 @lilypond[singleline,fragment,verbatim]
 \property Staff.autoAccidentals = #'( Staff (any-octave . 0) )
-cis'4 <c'' c'> r2 | cis'4 <c' c''> r2 | <cis' c''> r | <c'' cis'> r | 
+cis'4 <<c'' c'>> r2 | cis'4 <<c' c''>> r2 | <<cis' c''>> r | <<c'' cis'>> r | 
 @end lilypond
 
 The only solution is to manually insert the problematic
@@ -2701,7 +2727,7 @@ dutch pitch names anymore. Hence you mig
 up = \notes { crashcymbal4 hihat8 halfopenhihat hh hh hh openhihat }
 down = \notes { bassdrum4 snare8 bd r bd sn4 }
 \include "nederlands.ly"
-bass = \notes \transpose c, { a4. e8 r e g e }
+bass = \notes \transpose c c,, { a4. e8 r e g e }
 \score {
     <
         \apply #(drums->paper 'drums) \context Staff = drums <
@@ -2890,11 +2916,11 @@ f'4 g'4 a'4 \sostenutoUp
 @cindex @code{\arpeggio}
 
 You can specify an arpeggio sign on a chord by attaching an
-@code{\arpeggio} to a note of the chord.
+@code{\arpeggio} to a chord.
 
 
 @lilypond[fragment,relative,verbatim]
-  \context Voice <c\arpeggio e g c>
+  <<c e g c>>-\arpeggio
 @end lilypond
 
 When an arpeggio crosses staves in piano music, you attach an arpeggio
@@ -2904,8 +2930,8 @@ to the chords in both staves, and set
 @lilypond[fragment,relative,verbatim]
   \context PianoStaff <
     \property PianoStaff.connectArpeggios = ##t
-    \context Voice = one  { <c'\arpeggio e g c> }
-    \context Voice = other { \clef bass  <c,,\arpeggio e g>}
+    \context Voice = one  { <<c' e g c>>-\arpeggio }
+    \context Voice = other { \clef bass  <<c,, e g>>-\arpeggio}
   >  
 @end lilypond
 
@@ -2919,9 +2945,9 @@ arpeggio, you should set the arpeggio ob
 @lilypond[fragment,relative,verbatim]
   \context Voice {
      \property Voice.Arpeggio \set #'arpeggio-direction = #1
-     <c\arpeggio e g c>
+     <<c e g c>>-\arpeggio
      \property Voice.Arpeggio \set #'arpeggio-direction = #-1
-     <c\arpeggio e g c>
+     <<c e g c>>-\arpeggio
   }
 @end lilypond
 
@@ -2936,8 +2962,8 @@ arpeggiate the chord. To draw these brac
     \property PianoStaff.connectArpeggios = ##t
     \property PianoStaff.Arpeggio \override
         #'molecule-callback = \arpeggioBracket
-    \context Voice = one  { <c'\arpeggio e g c> }
-    \context Voice = other { \clef bass  <c,,\arpeggio e g>}
+    \context Voice = one  { <<c' e g c>>-\arpeggio }
+    \context Voice = other { \clef bass  <<c,, e g>>-\arpeggio }
   >  
 @end lilypond
 
@@ -3069,7 +3095,6 @@ middle C, in string order: thus the note
     \notes {
       a,4 c' a e' e c' a e'
     }
-
   > 
 @end lilypond
 
@@ -3124,13 +3149,13 @@ the standard staff.
 
 LilyPond has support for both entering and printing chords. 
 @lilypond[verbatim,singleline]
-twoWays = \notes \transpose c'' {
+twoWays = \notes \transpose c c' {
   \chords {
     c1 f:sus4 bes/f
   }
-  <c e g>
-  <f bes c'>
-  <f bes d'>
+  <<c e g>>
+  <<f bes c'>>
+  <<f bes d'>>
   }
 
 \score {
@@ -3169,7 +3194,7 @@ Throughout these examples, chords have b
 using @code{\transpose}.
 
 @lilypond[fragment,verbatim]
-\transpose c'' {
+\transpose c c' {
   \chords {
     c1  c:3-       c:7     c:8
     c:9 c:9-.5+.7+ c:3-.5- 
@@ -3191,7 +3216,7 @@ raises the 5th, `@code{dim}' which lower
 which replaces the 5th with a 4th.
 
 @lilypond[fragment,verbatim]
-\transpose c'' {
+\transpose c c' {
   \chords {
     c1:m c:min7 c:maj c:aug c:dim c:sus
   }
@@ -3204,7 +3229,7 @@ notes to be subtracted are listed after 
 separated by dots.
 
 @lilypond[fragment,verbatim,center]
-  \transpose c'' {
+  \transpose c c' {
     \chords {
       c1^3 c:7^5.3 c:8^7
     }
@@ -3218,7 +3243,7 @@ transposed down until it is the lowest n
 is not in the chord, a warning will be printed.
 
 @lilypond[fragment,verbatim,center]
-  \transpose c''' {
+  \transpose c c'' {
     \chords {
       c1 c/e c/g c:7/e
     }
@@ -3233,7 +3258,7 @@ adding the specified note to the chord, 
 so it becomes the lowest note in the chord.
 
 @lilypond[fragment,verbatim,center]
-  \transpose c''' {
+  \transpose c c'' {
     \chords {
       c1 c/+c c/+g c:7/+b
     }
@@ -3276,12 +3301,12 @@ directly using simultaneous music.
 
 @lilypond[verbatim,singleline]
 scheme = \notes {
-  \chords {a1 b c} <d f g>  <e g b>
+  \chords {a1 b c} <<d f g>>  <<e g b>>
 }
 \score {
   \notes<
     \context ChordNames \scheme
-    \context Staff \transpose c'' \scheme
+    \context Staff \transpose c c' \scheme
   >
 }
 @end lilypond
@@ -3300,7 +3325,7 @@ scheme = \chords {
     \context ChordNames {
         \property ChordNames.chordChanges = ##t
         \scheme }
-    \context Staff \transpose c'' \scheme
+    \context Staff \transpose c c' \scheme
   >
 \paper{linewidth= 9.\cm}
 }
@@ -3313,9 +3338,9 @@ are entered as a list of pitches:
 
 @lilypond[verbatim,center,singleline]
 scheme = \notes {
-  <c'1 e' g'>
-  <e' g' c''>
-  <e e' g' c''>
+  <<c' e' g'>>1
+  <<e' g' c''>>
+  <<e e' g' c''>>
 }
 
 \score {
@@ -3357,7 +3382,7 @@ scheme = \chords {
     \context ChordNames = jazz {
       \property ChordNames.ChordName \override
         #'style = #'jazz \scheme }
-    \context Staff \transpose c'' \scheme
+    \context Staff \transpose c c' \scheme
   >
 }
 @end lilypond
@@ -3461,7 +3486,7 @@ adds a box around the bar numbers:
 @end example
 @lilypond[noindent,noquote]
 \score {
-    \context Staff \notes \transpose c''' {
+    \context Staff \notes \transpose c c'' {
 	\property Score.BarNumber \override #'break-visibility = #end-of-line-invisible
 	\property Score.barNumberVisibility = #(every-nth-bar-number-visible 5)
 	\property Score.BarNumber \override #'molecule-callback =
@@ -3526,24 +3551,24 @@ the name to avoid a collision.
 A music expression can be transposed with @code{\transpose}.  The syntax
 is
 @example
-  \transpose @var{pitch} @var{musicexpr}
+  \transpose @var{from} @var{to} @var{musicexpr}
 @end example
 
-This means that middle C in @var{musicexpr} is transposed to
-@var{pitch}.
+This means that @var{musicexpr} is transposed to by the interval
+between @var{from} is @var{to}.
 
 @code{\transpose} distinguishes between enharmonic pitches: both
-@code{\transpose cis'} or @code{\transpose des'} will transpose up half
-a tone.  The first version will print sharps and the second version
-will print flats.
+@code{\transpose c cis} or @code{\transpose c des} will transpose up
+half a tone.  The first version will print sharps and the second
+version will print flats.
 
 @lilypond[singleline, verbatim]
 mus =\notes { \key d \major cis d fis g }
 \score { \notes \context Staff {
   \clef "F" \mus
   \clef "G"
-  \transpose g'' \mus
-  \transpose f'' \mus
+  \transpose c g' \mus
+  \transpose c f' \mus
 }}
 @end lilypond
 
@@ -4075,7 +4100,7 @@ a ligature by small square angles:
 
 @lilypond[singleline,verbatim]
 \score {
-    \notes \transpose c'' {
+    \notes \transpose c c' {
 	\[ g c a f d' \]
 	a g f
 	\[ e f a g \]
@@ -4118,7 +4143,7 @@ Example:
 
 @lilypond[singleline,verbatim]
 \score {
-    \notes \transpose c'' {
+    \notes \transpose c c' {
 	\property Score.timing = ##f
 	\property Score.defaultBarType = "empty"
 	\property Voice.NoteHead \set #'style = #'neo_mensural
@@ -4144,7 +4169,7 @@ following:
 
 @lilypond[singleline,verbatim]
 \score {
-    \notes \transpose c'' {
+    \notes \transpose c c' {
 	\property Score.timing = ##f
 	\property Score.defaultBarType = "empty"
 	\property Voice.NoteHead \set #'style = #'neo_mensural
@@ -4415,7 +4440,7 @@ property.
   \context Staff \outputproperty
   #(make-type-checker 'note-head-interface)
   #'extra-offset = #'(0.5 . 0.75)
-  <c8 e g> }
+  <<c e g>>8 }
 @end lilypond
 
 @cindex @code{extra-offset}
@@ -4846,9 +4871,9 @@ kneed stems.
 
 @lilypond
 \score {
-     \context PianoStaff \notes \transpose c''' <
+     \context PianoStaff \notes \transpose c c'' <
      \context Staff = up { s1 }
-     \context Staff = down { [c8 c \translator Staff=up <c d> c 
+     \context Staff = down { [c8 c \translator Staff=up <<c d>> c 
 \translator Staff=down c c c] }
      >
      \paper { linewidth = -1 }
diff -purN ../lilypond-1.7.6/Documentation/user/tutorial.itely ./Documentation/user/tutorial.itely
--- ../lilypond-1.7.6/Documentation/user/tutorial.itely	2002-11-04 11:53:05.000000000 +0100
+++ ./Documentation/user/tutorial.itely	2002-11-14 11:28:35.000000000 +0100
@@ -54,9 +54,12 @@ c d e f g a b
 @noindent
 then the result looks like this:
 
-@lilypond[notime]
-\property Score.timing = ##f
-\transpose c'' { c d e f g a b }
+@c ?
+@c \transpose c c' { c d e f g a b }
+@c @lily pond[notime]
+@c \property Score.timing = ##f
+@lilypond[notime, relative=2]
+c d e f g a b
 @end lilypond
 
 We will continue with this format: First we show a snippet of input,
@@ -72,7 +75,7 @@ a1 a2 a4 a16 a32
 @lilypond[notime]
 \property Score.timing = ##f
 \property Staff.autoBeaming = ##f
-\transpose c'' { a1 a2 a4 a16 a32 s16_" " }
+\transpose c c' { a1 a2 a4 a16 a32 s16_" " }
 @end lilypond
 
 If you don't specify a @rglos{duration}, the previous one is used: 
@@ -83,7 +86,7 @@ a4 a a2 a
 
 @lilypond[notime]
 \property Score.timing = ##f
-\transpose c'' { a a a2 a s16_" " }
+\transpose c c' { a a a2 a s16_" " }
 @end lilypond
 
 A @rglos{sharp} (@texisharp{}) is made by adding @samp{is}, a
@@ -97,7 +100,7 @@ cis1 ees fisis aeses
 
 @lilypond[notime]
 \property Score.timing = ##f
-\transpose c'' { cis1 ees fisis aeses s16_" " }
+\transpose c c' { cis1 ees fisis aeses s16_" " }
 @end lilypond
 
 Add a dot @samp{.} after the duration to get a @rglos{dotted note}:
@@ -108,7 +111,7 @@ a2. a4 a8. a16
 
 @lilypond[notime]
 \property Score.timing = ##f
-\transpose c'' { a2. a4 a8. a16 s16_" " }
+\transpose c c' { a2. a4 a8. a16 s16_" " }
 @end lilypond
 
 The @rglos{meter} (or @rglos{time signature}) can be set with the
@@ -815,13 +818,6 @@ r4 <<c e g>>4 <<c f a>>8
 @end quotation
 @separate
 
-@ignore
-@c te diepzinnig?
-@c hmm, te losjes, iig
-In general, @code{ < @var{stuff} > } is used when @var{stuff} all
-happens at the same time, like in chords, or (like in the two-staff
-example above) in a bunch of stacked staves.
-@end ignore
 
 You can combine beams and ties with chords.  Beam and tie markings
 must be placed outside the chord markers:
@@ -831,11 +827,12 @@ r4 <<c e g>>8-[ <<c f a>>-]-~ <<c f a>>
 @end lilypond
 @end quotation
 
+@ignore
 When you want to combine chords with slurs and dynamics, technical
 detail crops up: you have type these commands next to the notes, which
 means that they have to be inside the @code{< >}.  Don't get confused
 by the chord @code{< >} and the dynamic @code{\< \>}!
-
+@end ignore
 
 @quotation
 @example
@@ -1723,16 +1720,14 @@ precisely one @code{Voice} context, so w
 
 @separate
 @example 
-<c4-\arpeggio g' c>
+<<c g' c>>4-\arpeggio
 @end example 
-The delimiters @code{<} and @code{>} are shorthands for
-@code{\simultaneous @{} and @code{@}}. The expression enclosed in
-@code{<} and @code{>} is a chord.
+The delimiters @code{<<} and @code{>>} enclose the pitches of a chord.
+@code{\arpeggio} typesets an arpeggio sign (a wavy vertical line)
+before the chord.
 
 @cindex arpeggio
 
-@code{\arpeggio} typesets an arpeggio sign (a wavy vertical line) before
-the chord.
 
 @separate
 @example 
@@ -1774,7 +1769,7 @@ these notes are indeed processed by prec
 @code{\context}.
 @separate
 @example 
-\voiceOne s4  g8. b,16 c8 r <e'8. g> <f16 a> 
+\voiceOne s4  g8. b,16 c8 r <<e' g>>8. <<f a>>16
 @end example
 
 The oboes should have stems up to keep them from interfering with
@@ -1782,7 +1777,7 @@ the staff-jumping bass figure.  To do th
 
 @separate
 @example 
-\grace <e8( g> < d4 )f> <c2 e> 
+\grace <<e g>>-( <<d f>>4-) <<c e>>2 
 @end example
 @cindex @code{\grace}
 @cindex ornaments
@@ -1803,7 +1798,7 @@ of music is multiplied by the fraction. 
 of their notated duration, so in this case the fraction is 2/3.
 @separate
 @example 
-@{ <d8 f> <e g> <f a> @} 
+@{ <<d f>>8 <<e g>> <<f a>> @} 
 @end example 
 The piece of music to be `tripletted' is sequential music containing
 three chords.
@@ -1844,7 +1839,7 @@ This ends the two-part section.
 @separate
 @example 
 \stemBoth
-\grace <c,8( e> <)b8. d8.-\trill> <c16 e> |  
+\grace <<c, e>>8-( <<b d>>8.-\trill <<c e>>16 |  
 @end example
 @cindex trill
 @cindex stemBoth
diff -purN ../lilypond-1.7.6/Documentation/windows/installing.texi ./Documentation/windows/installing.texi
--- ../lilypond-1.7.6/Documentation/windows/installing.texi	2002-10-28 01:26:22.000000000 +0100
+++ ./Documentation/windows/installing.texi	2002-11-12 11:47:55.000000000 +0100
@@ -31,11 +31,13 @@ The binary LilyPond setup for Windows is
 @uref{http://cygwin.com, Cygwin} installation, including the LilyPond
 package for Cygwin.
 
-If you run Windows NT, 2000 or XP, please become administrator first
-(currently, installing as an ordinary user will not work).  Download
-and run @uref{http://cygwin.com/setup.exe, setup.exe}.  You will be
-asked some questions.  If you are unsure just click "Next".  Do not
-change the default install directory @file{c:/cygwin}.
+If you run Windows NT, 2000 or XP, please become administrator first;
+installing as an ordinary user does not seem to work on certain
+Windows-NT variants.  Download and run
+@uref{http://cygwin.com/setup.exe, setup.exe}.  You will be asked some
+questions.  If you are unsure just click "Next".  Do not change the
+default install directory @file{c:/cygwin}.  Do not change the default
+text type @samp{UNIX}, i.e., do not use @samp{DOS} mounts.
 
 In the Package View dialogue window, click on the Publishing section
 to view the available publishing software for Cygwin.  Make sure that
diff -purN ../lilypond-1.7.6/GNUmakefile.in ./GNUmakefile.in
--- ../lilypond-1.7.6/GNUmakefile.in	2002-11-04 11:53:01.000000000 +0100
+++ ./GNUmakefile.in	2002-11-12 11:47:54.000000000 +0100
@@ -126,6 +126,10 @@ default: $(config_h) builddir-setup
 
 builddir-setup: $(builddir)/share/lilypond-force
 
+PO_FILES = $(wildcard $(srcdir)/po/*.po)
+HELP_CATALOGS = $(PO_FILES:$(srcdir)/po/%.po=%)
+CATALOGS = $(HELP_CATALOGS:lilypond=) 
+
 $(builddir)/share/lilypond-force:
 # Preparing LilyPond tree for builddir exec
 	cd $(builddir) && rm -rf share
@@ -149,6 +153,10 @@ $(builddir)/share/lilypond-force:
 		ln -s ../../../mf/$(outconfbase) afm && \
 		ln -s ../../../mf/$(outconfbase) tfm && \
 		ln -s ../../../mf/$(outconfbase) type1
+	$(foreach i,$(CATALOGS), \
+		mkdir -p $(builddir)/share/locale/$i/LC_MESSAGES && \
+		cd $(builddir)/share/locale/$i/LC_MESSAGES && \
+		ln -fs ../../../../po/$(outconfbase)/$i.mo lilypond.mo &&) true
 	touch $@
 
 local-clean: builddir-setup-clean
diff -purN ../lilypond-1.7.6/input/mutopia/F.Schubert/standchen.ly ./input/mutopia/F.Schubert/standchen.ly
--- ../lilypond-1.7.6/input/mutopia/F.Schubert/standchen.ly	2002-11-04 11:53:09.000000000 +0100
+++ ./input/mutopia/F.Schubert/standchen.ly	2002-11-06 13:33:56.000000000 +0100
@@ -41,7 +41,7 @@ instrument = "Piano"
  footer = "Mutopia-2001/04/27-xx"
 } 
 
-\version "1.7.3"
+\version "1.7.5"
 
 dynamicUp = \property Voice.DynamicLineSpanner \override #'direction = #1
 dynamicRevert = \property Voice.DynamicLineSpanner \revert #'direction
@@ -434,12 +434,12 @@ grandStaff =  \context PianoStaff <
 %{
 	Transpose as you like for your voice
 	Range untransposed is c' to f'' (for tenors and sopranos)
-	\transpose a gives a' to d'' (for basses, who sing an octave down)
+	\transpose c' a gives a' to d'' (for basses, who sing an octave down)
 
 		\addlyrics 
-			\notes \transpose a \vocalStaff
+			\notes \transpose c' a \vocalStaff
 			\lyricStaff
-		\notes \transpose a \grandStaff
+		\notes \transpose c' a \grandStaff
 %}
 
 		\addlyrics
diff -purN ../lilypond-1.7.6/input/mutopia/J.S.Bach/Petites-Preludes/preludes-3.ly ./input/mutopia/J.S.Bach/Petites-Preludes/preludes-3.ly
--- ../lilypond-1.7.6/input/mutopia/J.S.Bach/Petites-Preludes/preludes-3.ly	2002-10-21 00:44:15.000000000 +0200
+++ ./input/mutopia/J.S.Bach/Petites-Preludes/preludes-3.ly	2002-11-06 13:33:56.000000000 +0100
@@ -14,10 +14,10 @@ note, some have dotted half notes.
 This file was partly generated using m4.
 %}
 
-\version "1.7.3"
+\version "1.7.5"
 
 
-upper =   \notes \transpose c'' {
+upper =   \notes \transpose c c' {
 	r16 [c es g] [es c es c] r c r c |
 	r16 [c es g] [es c es c] r c r c |
 	r16 [c f as] [f c f c] r c r c |
diff -purN ../lilypond-1.7.6/input/mutopia/J.S.Bach/wtk1-prelude1.ly ./input/mutopia/J.S.Bach/wtk1-prelude1.ly
--- ../lilypond-1.7.6/input/mutopia/J.S.Bach/wtk1-prelude1.ly	2002-07-17 01:57:05.000000000 +0200
+++ ./input/mutopia/J.S.Bach/wtk1-prelude1.ly	2002-11-06 13:33:56.000000000 +0100
@@ -15,11 +15,11 @@ enteredby = 	 "Shay Rojansky"
   lastupdated = "1999/Oct/14"
 }
 
-\version "1.5.68"
+\version "1.7.5"
 
 % should do programmable input.
 soprane = 
-    \notes \transpose c'' {
+    \notes \transpose c c' {
 	\context Staff <
 	% Real soprane
 	\context Voice = uVoice {
diff -purN ../lilypond-1.7.6/input/mutopia/R.Schumann/romanze-op28-2.ly ./input/mutopia/R.Schumann/romanze-op28-2.ly
--- ../lilypond-1.7.6/input/mutopia/R.Schumann/romanze-op28-2.ly	2002-10-21 00:44:15.000000000 +0200
+++ ./input/mutopia/R.Schumann/romanze-op28-2.ly	2002-11-06 13:33:56.000000000 +0100
@@ -5,7 +5,7 @@
 
 %% 19 is broken --hwn.
 %\include "paper19.ly"
-\version "1.7.3"
+\version "1.7.5"
 
 \header {
   title = "Romanzen"
@@ -36,7 +36,7 @@ global = \notes { \key fis \major \time 
   \repeat volta 2 { s2.*8 } s2.*26 \bar "|."
 }
 
-righta = \notes \transpose cis'' {
+righta = \notes \transpose c cis' {
  % \stemUp \slurUp \tieUp
  \stemUp
  \property Voice.Slur \override #'attachment = #'(stem . stem)
@@ -89,7 +89,7 @@ righta = \notes \transpose cis'' {
 
 }
 
-rightb = \notes \transpose cis'' {
+rightb = \notes \transpose c cis' {
  \relative c { \stemDown \slurDown
   \repeat volta 2 {
    a4^1( g8^1 b4^1 a8^1 |
@@ -112,7 +112,7 @@ rightb = \notes \transpose cis'' {
  \property Voice.Slur \override #'extra-offset =  #'(0 . 3)
  \property Voice.Slur \override #'beautiful = #42
  g( fes des fes b g_3 \! es_1 ges_2 a^3 ges f_1 ges_2 |
- r ges_2 b des_1 ges b,_2 des ges,^1 b, \d des,^1 \stemDown \transpose c {[b,_1 as,] |
+ r ges_2 b des_1 ges b,_2 des ges,^1 b, \d des,^1 \stemDown \transpose c' c {[b,_1 as,] |
  g,8 [b,16 g, e, cis,] )d,_4 \< f, h, d_3 f_2 \! r16 }
  \property Voice.Slur \revert #'extra-offset
  \property Voice.Slur \revert #'beautiful
@@ -135,7 +135,7 @@ rightb = \notes \transpose cis'' {
  f g16_2 b_1 a_2 gis_1 c_2 h, c cis_1 d_2 b,_1 |
  \tieDown c4.~<f,16 c \< > \tieBoth <f h>~[< \! f8^3 h \> > < \! e b^2>] |
  \translator Staff=mid
- \transpose c {
+ \transpose c' c {
   a4^1( g8^1 b4 a8^2 |
   f8..^1 f32^1 g8^2 )a8..   \slurUp <f32 f'^3(> <g8 g'^4> |
   <)a8.. a'^5> <f32 f'^3(> <g8 g'^4> <)a4. a'^5 \> > ~ |
@@ -143,7 +143,7 @@ rightb = \notes \transpose cis'' {
  }
 }
 
-lefta = \notes \transpose cis' {
+lefta = \notes \transpose c cis {
  \stemUp \slurUp \tieUp
  \repeat volta 2 {
   f4^1( e8^1 g4^1 f8^1 |
@@ -157,14 +157,14 @@ lefta = \notes \transpose cis' {
  }
  \d \tieBoth \slurDown
  <
- \transpose c {
+ \transpose c' c {
   g4 a8~a f g | a4 g8~g f e |
   d4 g8~g es f | g4 f8~f es d |
   c4 r8 f4 as8~ | as g b as4 ces'8~ |
   ces' b des' c'4 \context Voice=another { \stemUp \tieUp <es'8 es>~ |
   es' des'4^1~ \stemDown [des'8. c'16] }
  }
- \transpose c, {
+ \transpose c' c, {
   g4(-4 a8-3~a f-5 g-4 | a4-3 g8-#'(finger "4-3") ~g f-4 e-5 |
   )d4-#'(finger "4-5")( g8-3~g es f-4 | g4-3 f8-4~f es d-4 |
   )c4 r8 f4-4( as8-5~ | as g-4 )b-5 as4-5( ces'8-4~ |
@@ -192,7 +192,7 @@ lefta = \notes \transpose cis' {
  f~ f-\fermata |
 }
 
-leftb = \notes \transpose cis' {
+leftb = \notes \transpose c cis {
  \stemDown \slurDown \tieDown
  \repeat volta 2 {
   f16^\p c f, c e c-3 g c-2 f, c f c |
@@ -214,7 +214,7 @@ leftb = \notes \transpose cis' {
  fis^1 d d, d [a d_2] g, d g d_3 [b,_5( g_2] |
  ) a c_3 f, c [c' f_2] b, f b f_3 d' as |
  h, as d' as h, as() f'4.^\fermata-\arpeggio_2 ~
- \d \stemDown f'8. \clef G \stemBoth \tieBoth \transpose c'' {[e16_4( f g] [as des_3] [c8_4 <h, d f d'>]~ |
+ \d \stemDown f'8. \clef G \stemBoth \tieBoth \transpose c c' {[e16_4( f g] [as des_3] [c8_4 <h, d f d'>]~ |
  <h, d f d'>} \clef F [<c_3( f_1> <b,_4 e^2>] <)a,8._5 eis^1> h,16_4( c d |
  \voiceTwo
  es as,_3 g,8 fis,~fis, g,_4-\arpeggio gis,_5~ |
diff -purN ../lilypond-1.7.6/input/mutopia/W.A.Mozart/mozart-hrn3-allegro.ly ./input/mutopia/W.A.Mozart/mozart-hrn3-allegro.ly
--- ../lilypond-1.7.6/input/mutopia/W.A.Mozart/mozart-hrn3-allegro.ly	2002-07-17 01:57:05.000000000 +0200
+++ ./input/mutopia/W.A.Mozart/mozart-hrn3-allegro.ly	2002-11-06 13:33:56.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.5"
 \include  "mozart-hrn3-defs.ly"
 
 allegro =
@@ -160,7 +160,7 @@ allegro =
 
 \score
 {
-	\notes { \transpose bes \allegro }
+	\notes { \transpose c' bes \allegro }
 	\paper{ }
 	\header { piece = "allegro" opus = "" }	
 	\midi{ \tempo 4=90 }
diff -purN ../lilypond-1.7.6/input/mutopia/W.A.Mozart/mozart-hrn3-romanze.ly ./input/mutopia/W.A.Mozart/mozart-hrn3-romanze.ly
--- ../lilypond-1.7.6/input/mutopia/W.A.Mozart/mozart-hrn3-romanze.ly	2002-07-17 01:57:05.000000000 +0200
+++ ./input/mutopia/W.A.Mozart/mozart-hrn3-romanze.ly	2002-11-06 13:33:56.000000000 +0100
@@ -1,5 +1,5 @@
 
-\version "1.5.68"
+\version "1.7.5"
 \include  "mozart-hrn3-defs.ly"
 
 romanze = \notes \relative c' {
@@ -86,7 +86,7 @@ romanze = \notes \relative c' {
 
 \score
 {
-    \notes { \transpose bes \romanze }
+    \notes { \transpose c' bes \romanze }
 	\header { piece = "romanze" opus = "" }	
 	\midi{ \tempo 4 = 70  }
 	\paper{}
diff -purN ../lilypond-1.7.6/input/mutopia/W.A.Mozart/mozart-hrn3-rondo.ly ./input/mutopia/W.A.Mozart/mozart-hrn3-rondo.ly
--- ../lilypond-1.7.6/input/mutopia/W.A.Mozart/mozart-hrn3-rondo.ly	2002-07-17 01:57:05.000000000 +0200
+++ ./input/mutopia/W.A.Mozart/mozart-hrn3-rondo.ly	2002-11-06 13:33:56.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.5"
 
 % \include "mozart-hrn3-defs.ly"
 
@@ -187,7 +187,7 @@ rondo = \notes 	\relative c'
 
 \score
 {
-    \notes { \transpose bes	\rondo }
+    \notes { \transpose c' bes	\rondo }
 	\header { piece = "rondo" opus = "" }
 	\midi{ \tempo 4 = 100 }
 	\paper { }
diff -purN ../lilypond-1.7.6/input/no-notation/denneboom.ly ./input/no-notation/denneboom.ly
--- ../lilypond-1.7.6/input/no-notation/denneboom.ly	2002-07-17 01:57:06.000000000 +0200
+++ ./input/no-notation/denneboom.ly	2002-11-06 13:33:56.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.5"
 \header{
 filename = 	 "denneboom.ly"
 enteredby = 	 "jcn"
@@ -34,7 +34,7 @@ ugloeit = \lyrics{
 	licht ge- spreid 
 }
 
-oboom = \notes\transpose c''{
+oboom = \notes\transpose c c'{
 	g,8 |
 	c8. c16 c4. d8 | 
 	e8. e16 e4. e8 | 
@@ -42,7 +42,7 @@ oboom = \notes\transpose c''{
 	d8. c16 c4 r8
 }
 
-bos = \notes\transpose c''{
+bos = \notes\transpose c c'{
 	g8 | 
 	g e a4. g8 | 
 	g8. f16 f4 r8 f8 |
diff -purN ../lilypond-1.7.6/input/praeludium-fuga-E.ly ./input/praeludium-fuga-E.ly
--- ../lilypond-1.7.6/input/praeludium-fuga-E.ly	2002-07-17 01:57:04.000000000 +0200
+++ ./input/praeludium-fuga-E.ly	2002-11-06 13:33:38.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.5"
 \header {
   filename =    "praeludium-fuga-E.ly"
   title =       "praeludium and fuga in E-major"
diff -purN ../lilypond-1.7.6/input/regression/abe.ly ./input/regression/abe.ly
--- ../lilypond-1.7.6/input/regression/abe.ly	2002-08-12 01:30:07.000000000 +0200
+++ ./input/regression/abe.ly	2002-11-13 02:12:33.000000000 +0100
@@ -1,7 +1,7 @@
 \header {
 texidoc="Automatic beamer behaves nicely."
 }
-\version "1.5.68"
+\version "1.7.6"
 
 \include "paper16.ly"
 \paper  { linewidth = 390.000000 \pt } 
@@ -19,3 +19,4 @@ texidoc="Automatic beamer behaves nicely
     }
   }
 }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/accidental-cautionary.ly ./input/regression/accidental-cautionary.ly
--- ../lilypond-1.7.6/input/regression/accidental-cautionary.ly	2002-10-09 17:14:32.000000000 +0200
+++ ./input/regression/accidental-cautionary.ly	2002-11-13 02:12:33.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.6"
 \header {
 
 texidoc = "Cautionary accidentals are indicated using either
@@ -15,3 +15,4 @@ smaller accidentals (default) or parenth
     \property Staff.Accidental \override #'style = #'parentheses
     cis''?4
     }}
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/accidental-double.ly ./input/regression/accidental-double.ly
--- ../lilypond-1.7.6/input/regression/accidental-double.ly	2002-08-12 01:30:07.000000000 +0200
+++ ./input/regression/accidental-double.ly	2002-11-13 02:12:33.000000000 +0100
@@ -1,11 +1,11 @@
-\version "1.5.68"
+\version "1.7.6"
 \header {
 	texidoc = "If two forced accidentals happen at the same time, only one
 	sharp sign is printed."
 }
 
 
-\score { \notes \transpose c''
+\score { \notes \transpose c c'
    \context Staff <
      \key g \major
      \context Voice=va { \stemUp c' fis! }
@@ -14,3 +14,4 @@
 }
 
 
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/accidental-ledger.ly ./input/regression/accidental-ledger.ly
--- ../lilypond-1.7.6/input/regression/accidental-ledger.ly	2002-08-12 01:30:07.000000000 +0200
+++ ./input/regression/accidental-ledger.ly	2002-11-13 02:12:33.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.6"
 
 \header {
     texidoc = "Ledger lines are shortened when there are accidentals"
@@ -10,3 +10,4 @@
 }
 	 \paper { linewidth = -1. }
 }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/accidental.ly ./input/regression/accidental.ly
--- ../lilypond-1.7.6/input/regression/accidental.ly	2002-07-17 01:57:06.000000000 +0200
+++ ./input/regression/accidental.ly	2002-11-13 02:12:33.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.6"
 
 \header{
 texidoc="
@@ -14,3 +14,4 @@ foo = \notes\relative c''   {   \key as 
    \context NoteNames \foo
   >
 }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/accidental-octave.ly ./input/regression/accidental-octave.ly
--- ../lilypond-1.7.6/input/regression/accidental-octave.ly	2002-10-21 00:44:15.000000000 +0200
+++ ./input/regression/accidental-octave.ly	2002-11-13 02:12:33.000000000 +0100
@@ -1,5 +1,5 @@
 
-\version "1.7.3"
+\version "1.7.6"
 
 \header {
 texidoc="
@@ -40,7 +40,7 @@ FIXME: Shorten and docu
 
 \include "paper16.ly"
 
-mel = \notes \transpose c'' {
+mel = \notes \transpose c c' {
   \time 4/4 \key d \major
   gis4 g' g gis' | gis2 g' | g1 | gis | g | gis' | g |
   fis4 f' f fis' | fis2 f' | f1 | fis | f | fis' | f |
@@ -81,3 +81,4 @@ mus = \notes {
     indent=0.0
   }
 }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/accidental-placement.ly ./input/regression/accidental-placement.ly
--- ../lilypond-1.7.6/input/regression/accidental-placement.ly	2002-08-12 01:30:07.000000000 +0200
+++ ./input/regression/accidental-placement.ly	2002-11-13 02:12:33.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.6"
 \header {
     texidoc ="Accidentals are placed as closely as possible.
 Accidentals in corresponding octaves are aligned.
@@ -10,19 +10,20 @@ flats in a sixth shoudl be staggered.  "
 \score { \notes \context Voice \relative c' {
     cis4
     c4
- \transpose c'' {    
-  <bis4 es gis>
-  <es! as!>
-  <gis! cis!>
-  <g! des'>
-  <ges! es'!>
+ \transpose c c' {    
+  <<bis es gis>>4
+  <<es! as!>>
+  <<gis! cis!>>
+  <<g! des'>>
+  <<ges! es'!>>
 }    
-    <cis4 d es fis gis ases bes ces d dis >
-    <bes'! fis!>     
-    <bes! cis!>
-    <c! es ges beses>
-    <bes! c d f >    
-    <bes,! c d f >
+    <<cis d es fis gis ases bes ces d dis >>4
+    <<bes'! fis!>>     
+    <<bes! cis!>>
+    <<c! es ges beses>>
+    <<bes! c d f >>    
+    <<bes,! c d f >>
 }
 \paper { linewidth = -1. }
      }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/accidental-single-double.ly ./input/regression/accidental-single-double.ly
--- ../lilypond-1.7.6/input/regression/accidental-single-double.ly	2002-07-17 01:57:06.000000000 +0200
+++ ./input/regression/accidental-single-double.ly	2002-11-13 02:12:33.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.6"
 \header{
 texidoc="
 A sharp sign after a double sharp sign, as well as a flat sign
@@ -28,3 +28,4 @@ gis ges gis g |
 	}
 	>
 }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/accidentals.ly ./input/regression/accidentals.ly
--- ../lilypond-1.7.6/input/regression/accidentals.ly	2002-10-21 00:44:15.000000000 +0200
+++ ./input/regression/accidentals.ly	2002-11-13 02:12:33.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.7.3"
+\version "1.7.6"
 
 \header{
 texidoc="
@@ -42,7 +42,7 @@ mel = \notes { \key d \major \time 4/4
 
 \score { \notes
  <
-  \context Staff \transpose c''' {
+  \context Staff \transpose c c'' {
    \mel
 %   \property Score.oneMeasureLazy = ##t
    \property Score.autoAccidentals = #'(Staff (same-octave . 0))
@@ -69,3 +69,4 @@ mel = \notes { \key d \major \time 4/4
  }
 }
 
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/accidental-unbroken-tie-spacing.ly ./input/regression/accidental-unbroken-tie-spacing.ly
--- ../lilypond-1.7.6/input/regression/accidental-unbroken-tie-spacing.ly	2002-07-23 20:38:44.000000000 +0200
+++ ./input/regression/accidental-unbroken-tie-spacing.ly	2002-11-13 02:12:33.000000000 +0100
@@ -3,15 +3,15 @@ texidoc = "Tied accidentaled notes (whic
 the spacing when unbroken."
 }
 
-\version "1.5.68"
+\version "1.7.6"
 \include "deutsch.ly"
 
 rechts = \notes \relative c' {
   \clef treble
   \time 3/4
   \context Voice {
-    c8 h2  <g8 h des f> ~ |
-    <g8 h des f>
+    c8 h2  <<g h des f>>8 ~ |
+    <<g h des f>>8
   }
 }
 
@@ -26,3 +26,4 @@ Rechts = \context Staff \notes {
     linewidth = -3.3 \cm
   }
 }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/accidental-voice.ly ./input/regression/accidental-voice.ly
--- ../lilypond-1.7.6/input/regression/accidental-voice.ly	2002-10-21 00:44:15.000000000 +0200
+++ ./input/regression/accidental-voice.ly	2002-11-13 02:12:33.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.7.3"
+\version "1.7.6"
 
 \header{
 texidoc="
@@ -37,11 +37,11 @@ The last f gets cautionary natural becau
 
     music))
 
-voicea = \notes \transpose c'' {
+voicea = \notes \transpose c c' {
     \stemUp
     fis2 a2 f4 fis a2
 }
-voiceb = \notes \transpose c'' {
+voiceb = \notes \transpose c c' {
     \stemDown
     c2 fis2  f4 c   f2
 }
@@ -58,3 +58,4 @@ voiceb = \notes \transpose c'' {
 	\context NoteNames=namesb \apply #no-octaves \voiceb
     >
 }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/arpeggio-collision.ly ./input/regression/arpeggio-collision.ly
--- ../lilypond-1.7.6/input/regression/arpeggio-collision.ly	2002-07-17 01:57:06.000000000 +0200
+++ ./input/regression/arpeggio-collision.ly	2002-11-13 02:12:33.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.6"
 
 \header  {
 texidoc = "arpeggio stays clear of accidentals and flipped note heads.
@@ -33,10 +33,10 @@ hairyChord = \context Staff \notes\relat
 
 
 \score{
-    \notes \transpose c'' {
-        \context Voice < fis''-\arpeggio g  d a >
-        \context Voice < fis,-\arpeggio g  d a >
-        \context Voice < fis''-\arpeggio g  d a >
+    \notes \transpose c c' {
+	<< fis'' g  d a >>-\arpeggio
+	<< fis, g  d a >>-\arpeggio
+	<< fis'' g  d a >>-\arpeggio
         \hairyChord
 	}
     \paper {
@@ -47,3 +47,5 @@ hairyChord = \context Staff \notes\relat
 	}
 	}
 }
+
+%% new-chords-done %%
diff -purN ../lilypond-1.7.6/input/regression/arpeggio.ly ./input/regression/arpeggio.ly
--- ../lilypond-1.7.6/input/regression/arpeggio.ly	2002-07-17 01:57:06.000000000 +0200
+++ ./input/regression/arpeggio.ly	2002-11-13 02:12:33.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.6"
 \header{
 texidoc="
 Arpeggios are supported, both cross-staff and broken single staff.
@@ -10,19 +10,19 @@ Arpeggios are supported, both cross-staf
 \score{
     \context PianoStaff < 
 	 \context Staff=one \notes\relative c''{
-	    \context Voice < fis,-\arpeggio  d a >
+	    \context Voice << fis,  d a >>-\arpeggio
 	    \property Staff.Arpeggio \override #'arpeggio-direction = #1 
-	    \context Voice < fis,-\arpeggio  d a >	    
+	    \context Voice << fis,  d a >>-\arpeggio	    
 	     %%\property PianoStaff.SpanArpeggio \override #'connect = ##t
 	     \property PianoStaff.connectArpeggios = ##t
-	     <fis,\arpeggio a c>
+	     <<fis, a c>>-\arpeggio
 	  }
 	 \context Staff=two \notes\relative c{
 	     \clef bass
-	    \context Voice < g b d-\arpeggio   >
+	    \context Voice << g b d   >>-\arpeggio
 	    \property Staff.Arpeggio \override #'arpeggio-direction = #-1 	    
-	    \context Voice < g b d-\arpeggio   >	    
-	     <g\arpeggio b d>
+	    \context Voice << g b d   >>-\arpeggio	    
+	     <<g b d>>-\arpeggio
 	 }
     >
 }
diff -purN ../lilypond-1.7.6/input/regression/auto-beam-bar.ly ./input/regression/auto-beam-bar.ly
--- ../lilypond-1.7.6/input/regression/auto-beam-bar.ly	2002-07-17 01:57:06.000000000 +0200
+++ ./input/regression/auto-beam-bar.ly	2002-11-13 02:12:33.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.6"
 
 \header{
 texidoc="
@@ -20,3 +20,4 @@ a16 g a bes c d % ees8 d c
    linewidth=-1.
 }
 }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/auto-beam-triplet.ly ./input/regression/auto-beam-triplet.ly
--- ../lilypond-1.7.6/input/regression/auto-beam-triplet.ly	2002-10-07 01:33:11.000000000 +0200
+++ ./input/regression/auto-beam-triplet.ly	2002-11-13 02:12:33.000000000 +0100
@@ -3,7 +3,7 @@
 texidoc = "Automatic beaming is also done on tuplets."
 }
 
-\version "1.5.68"
+\version "1.7.6"
 
 \score{
 	\notes\relative c''{
@@ -12,3 +12,4 @@ texidoc = "Automatic beaming is also don
 	}
 	\paper{	}
 }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/auto-beam-tuplets.ly ./input/regression/auto-beam-tuplets.ly
--- ../lilypond-1.7.6/input/regression/auto-beam-tuplets.ly	2002-10-21 00:44:15.000000000 +0200
+++ ./input/regression/auto-beam-tuplets.ly	2002-11-13 02:12:33.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.7.3"
+\version "1.7.6"
 
 \header {
 texidoc = "Tuplet-spanner should not put (visible) brackets on
@@ -12,3 +12,4 @@ beams even if they're auto generated."
 	[f8 f f ][f8 f f ] f f f f f f 
  }
 }}
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/auto-change.ly ./input/regression/auto-change.ly
--- ../lilypond-1.7.6/input/regression/auto-change.ly	2002-07-17 01:57:06.000000000 +0200
+++ ./input/regression/auto-change.ly	2002-11-13 02:12:33.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.6"
 
 \header {
 
@@ -22,3 +22,4 @@ note. When central C is reached, we don'
 	>
 	
 }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/bar-number.ly ./input/regression/bar-number.ly
--- ../lilypond-1.7.6/input/regression/bar-number.ly	2002-07-17 01:57:06.000000000 +0200
+++ ./input/regression/bar-number.ly	2002-11-14 11:28:36.000000000 +0100
@@ -23,3 +23,4 @@ start counting after the anacrusis."
     }
   }
 }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/bar-scripts.ly ./input/regression/bar-scripts.ly
--- ../lilypond-1.7.6/input/regression/bar-scripts.ly	2002-10-11 11:35:01.000000000 +0200
+++ ./input/regression/bar-scripts.ly	2002-11-14 11:28:36.000000000 +0100
@@ -53,3 +53,4 @@ stscore =  \score { \onestaff \paper {
 \score{\notes c''}
 \score {\scscore}
 
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/beam-auto-knee.ly ./input/regression/beam-auto-knee.ly
--- ../lilypond-1.7.6/input/regression/beam-auto-knee.ly	2002-08-12 12:21:34.000000000 +0200
+++ ./input/regression/beam-auto-knee.ly	2002-11-14 11:28:36.000000000 +0100
@@ -15,3 +15,4 @@ threshold.
     linewidth = 40*\staffspace
   }
 }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/beam-center-slope.ly ./input/regression/beam-center-slope.ly
--- ../lilypond-1.7.6/input/regression/beam-center-slope.ly	2002-08-14 13:09:09.000000000 +0200
+++ ./input/regression/beam-center-slope.ly	2002-11-14 11:28:36.000000000 +0100
@@ -36,3 +36,4 @@
 	linewidth = 0.0
     }
 }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/beam-concave.ly ./input/regression/beam-concave.ly
--- ../lilypond-1.7.6/input/regression/beam-concave.ly	2002-08-12 12:21:34.000000000 +0200
+++ ./input/regression/beam-concave.ly	2002-11-14 11:28:36.000000000 +0100
@@ -81,3 +81,4 @@ beams this way."
 %% Local variables:
 %% LilyPond-indent-level:2
 %% End:
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/beam-cross-staff-auto-knee.ly ./input/regression/beam-cross-staff-auto-knee.ly
--- ../lilypond-1.7.6/input/regression/beam-cross-staff-auto-knee.ly	2002-08-12 12:21:34.000000000 +0200
+++ ./input/regression/beam-cross-staff-auto-knee.ly	2002-11-14 11:28:36.000000000 +0100
@@ -23,3 +23,4 @@ with explicit staff switches)."
     linewidth = -1.0
   }
 }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/beam-cross-staff.ly ./input/regression/beam-cross-staff.ly
--- ../lilypond-1.7.6/input/regression/beam-cross-staff.ly	2002-08-12 12:21:34.000000000 +0200
+++ ./input/regression/beam-cross-staff.ly	2002-11-14 11:28:36.000000000 +0100
@@ -31,3 +31,4 @@ behave well, wherever the switching poin
 }
 
 
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/beam-cross-staff-slope.ly ./input/regression/beam-cross-staff-slope.ly
--- ../lilypond-1.7.6/input/regression/beam-cross-staff-slope.ly	2002-08-12 12:21:34.000000000 +0200
+++ ./input/regression/beam-cross-staff-slope.ly	2002-11-14 11:28:36.000000000 +0100
@@ -11,7 +11,7 @@ don't cause extreme slopes"
         {
 	    \stemDown
             f16( \> d \! b \translator Staff = down \stemUp
-            \clef treble g ~ < g8 )e>
+            \clef treble g ~ << g e>>8-)
 	    
 	    [e \translator Staff = up
 	    \stemDown
@@ -31,3 +31,4 @@ don't cause extreme slopes"
     \paper { linewidth = -1. }
 }
 
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/beam-default-lengths.ly ./input/regression/beam-default-lengths.ly
--- ../lilypond-1.7.6/input/regression/beam-default-lengths.ly	2002-08-12 17:14:17.000000000 +0200
+++ ./input/regression/beam-default-lengths.ly	2002-11-14 11:28:36.000000000 +0100
@@ -14,4 +14,4 @@
         f4 [f8 f] [f16 f] [f32 f] [f64 f] [f128 f] 
     }
     \paper{ linewidth = -1.0 }
-}          
\ No newline at end of file
+}          %% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/beamed-chord.ly ./input/regression/beamed-chord.ly
--- ../lilypond-1.7.6/input/regression/beamed-chord.ly	2002-08-12 12:21:34.000000000 +0200
+++ ./input/regression/beamed-chord.ly	2002-11-14 11:28:36.000000000 +0100
@@ -12,6 +12,7 @@ texidoc = "Hairy case for beam, chord, a
     %\stemUp
     \clef alto
     \time 3/4
-    r8 <d ( bes > ) bes' d <e-> g, c, c,> r |
+    r8 <<d  bes >>-( ) bes' d <<e g, c, c,>>-> r |
   }
 }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/beam-extreme.ly ./input/regression/beam-extreme.ly
--- ../lilypond-1.7.6/input/regression/beam-extreme.ly	2002-08-12 12:21:34.000000000 +0200
+++ ./input/regression/beam-extreme.ly	2002-11-14 11:28:36.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.5"
 \header{
 texidoc="
 Beams should behave reasonably well, even under extreme circumstances.
@@ -21,7 +21,7 @@ extreme = \notes\relative c'' {
   a'16 cis a, g''' % Used to give a nice beam directed upwards.
   \stemBoth
 
-  \transpose c' {
+  \transpose c c {
 	  \stemDown [e'8 e e']
       }
 }
@@ -45,3 +45,4 @@ extreme = \notes\relative c'' {
     linewidth = -1
   }
 }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/beam-french.ly ./input/regression/beam-french.ly
--- ../lilypond-1.7.6/input/regression/beam-french.ly	2002-08-12 12:21:34.000000000 +0200
+++ ./input/regression/beam-french.ly	2002-11-14 11:28:36.000000000 +0100
@@ -13,3 +13,4 @@
 	[c8 c16 e16 g8]
 
     }}
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/beam-funky-beamlet.ly ./input/regression/beam-funky-beamlet.ly
--- ../lilypond-1.7.6/input/regression/beam-funky-beamlet.ly	2002-08-12 12:21:34.000000000 +0200
+++ ./input/regression/beam-funky-beamlet.ly	2002-11-14 11:28:36.000000000 +0100
@@ -18,3 +18,4 @@ should be pointing to the note head.
   \paper { linewidth = -1 }
 }
 	  
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/beam-funky.ly ./input/regression/beam-funky.ly
--- ../lilypond-1.7.6/input/regression/beam-funky.ly	2002-08-12 12:21:34.000000000 +0200
+++ ./input/regression/beam-funky.ly	2002-11-14 11:28:36.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.5"
 \header {
     texidoc = "Knee beaming. (funky)"
 }
@@ -17,7 +17,7 @@
 	     [c,,,16 c c c
 	      b'''   b b b]
 
-	     \transpose a, { \relative b'' { [g,16  g'''16  
+	     \transpose c' a, { \relative b'' { [g,16  g'''16  
 	     g,,,16  g'''16 
 	     g,,,16  g'''16 	     	     
 	     g,,,16  g'''16
@@ -30,3 +30,4 @@
 \paper { linewidth = -1. } 
 
      }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/beaming.ly ./input/regression/beaming.ly
--- ../lilypond-1.7.6/input/regression/beaming.ly	2002-08-12 12:21:34.000000000 +0200
+++ ./input/regression/beaming.ly	2002-11-14 11:28:36.000000000 +0100
@@ -28,3 +28,4 @@ hidden just as with breakable bar lines.
 	
 		}}
 
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/beaming-ternary-metrum.ly ./input/regression/beaming-ternary-metrum.ly
--- ../lilypond-1.7.6/input/regression/beaming-ternary-metrum.ly	2002-08-12 12:21:34.000000000 +0200
+++ ./input/regression/beaming-ternary-metrum.ly	2002-11-14 11:28:36.000000000 +0100
@@ -10,3 +10,4 @@ texidoc = "automatic beaming also works 
 }
 \paper { linewidth = -1. }
 }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/beam-length.ly ./input/regression/beam-length.ly
--- ../lilypond-1.7.6/input/regression/beam-length.ly	2002-08-12 12:21:34.000000000 +0200
+++ ./input/regression/beam-length.ly	2002-11-14 11:28:36.000000000 +0100
@@ -12,3 +12,4 @@ beams should look the same
 			c c
   }
 }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/beam-manual.ly ./input/regression/beam-manual.ly
--- ../lilypond-1.7.6/input/regression/beam-manual.ly	2002-08-12 12:21:34.000000000 +0200
+++ ./input/regression/beam-manual.ly	2002-11-14 11:28:36.000000000 +0100
@@ -21,3 +21,4 @@
     linewidth = -1
   }
 }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/beam-multiple-cross-staff.ly ./input/regression/beam-multiple-cross-staff.ly
--- ../lilypond-1.7.6/input/regression/beam-multiple-cross-staff.ly	2002-08-12 12:21:34.000000000 +0200
+++ ./input/regression/beam-multiple-cross-staff.ly	2002-11-14 11:28:36.000000000 +0100
@@ -27,3 +27,4 @@ to the last beam.
 	     >
 
 }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/beam-over-barline.ly ./input/regression/beam-over-barline.ly
--- ../lilypond-1.7.6/input/regression/beam-over-barline.ly	2002-08-12 12:21:34.000000000 +0200
+++ ./input/regression/beam-over-barline.ly	2002-11-14 11:28:36.000000000 +0100
@@ -5,3 +5,4 @@ texidoc = "explicit beams may cross barl
 \score {
 \notes \context Voice { c2. [c8 c8 c8 c8] }
 }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/beam-position.ly ./input/regression/beam-position.ly
--- ../lilypond-1.7.6/input/regression/beam-position.ly	2002-08-12 12:21:34.000000000 +0200
+++ ./input/regression/beam-position.ly	2002-11-14 11:28:36.000000000 +0100
@@ -26,3 +26,4 @@ Override with @code{noStemExtend}.
   }  
   \midi { }
 }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/beam-postfix-notation.ly ./input/regression/beam-postfix-notation.ly
--- ../lilypond-1.7.6/input/regression/beam-postfix-notation.ly	2002-11-02 15:15:18.000000000 +0100
+++ ./input/regression/beam-postfix-notation.ly	2002-11-14 11:28:36.000000000 +0100
@@ -12,3 +12,4 @@ texidoc = "Beams and ties may be entered
        c8-[-~ c-]
    }
 }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/beam-quarter.ly ./input/regression/beam-quarter.ly
--- ../lilypond-1.7.6/input/regression/beam-quarter.ly	2002-08-12 12:21:34.000000000 +0200
+++ ./input/regression/beam-quarter.ly	2002-11-14 11:28:36.000000000 +0100
@@ -9,3 +9,4 @@
 }
 \paper { linewidth = -1.0 } 
 }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/beam-shortened-lengths.ly ./input/regression/beam-shortened-lengths.ly
--- ../lilypond-1.7.6/input/regression/beam-shortened-lengths.ly	2002-09-20 11:21:06.000000000 +0200
+++ ./input/regression/beam-shortened-lengths.ly	2002-11-14 11:28:36.000000000 +0100
@@ -15,3 +15,4 @@
     }
     \paper{ linewidth = -1.0 }
 }          
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/beams.ly ./input/regression/beams.ly
--- ../lilypond-1.7.6/input/regression/beams.ly	2002-08-12 12:21:34.000000000 +0200
+++ ./input/regression/beams.ly	2002-11-14 11:28:36.000000000 +0100
@@ -11,3 +11,4 @@
 	[c8 c16 e16 g8]
 
     }}
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/between-systems.ly ./input/regression/between-systems.ly
--- ../lilypond-1.7.6/input/regression/between-systems.ly	2002-07-17 01:57:06.000000000 +0200
+++ ./input/regression/between-systems.ly	2002-11-14 11:28:36.000000000 +0100
@@ -19,3 +19,4 @@ The same mechanism can be  used  to forc
 c1 }
 
 }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/break.ly ./input/regression/break.ly
--- ../lilypond-1.7.6/input/regression/break.ly	2002-10-21 00:44:15.000000000 +0200
+++ ./input/regression/break.ly	2002-11-14 11:28:36.000000000 +0100
@@ -17,3 +17,4 @@ Breaks can be encouraged and discouraged
 	    indent = 0.0
 	    linewidth = 4.0\cm}
 }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/chord-changes.ly ./input/regression/chord-changes.ly
--- ../lilypond-1.7.6/input/regression/chord-changes.ly	2002-07-17 01:57:06.000000000 +0200
+++ ./input/regression/chord-changes.ly	2002-11-14 11:28:36.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.5"
 
 \header{
 texidoc="property chordChanges: only display chord names when
@@ -19,9 +19,10 @@ settings = {
 \score {
   \notes <
     \context ChordNames < \scheme \settings >
-    \context Staff \transpose c'' \scheme
+    \context Staff \transpose c c' \scheme
   >
   \paper{
     linewidth = 40 * \staffspace
   }
 }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/chord-names.ly ./input/regression/chord-names.ly
--- ../lilypond-1.7.6/input/regression/chord-names.ly	2002-07-17 01:57:06.000000000 +0200
+++ ./input/regression/chord-names.ly	2002-11-14 11:28:36.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.5"
 \header{
 texidoc="
 Chord names are generated from a list pitches, and are customisable
@@ -7,7 +7,7 @@ by default.
 "
 }
 
-chord =  \notes\transpose c''\chords{
+chord =  \notes\transpose c c'\chords{
    c1
    c:m
    c:m5-
@@ -36,3 +36,4 @@ chord =  \notes\transpose c''\chords{
     }
 }
 
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/chord-scripts.ly ./input/regression/chord-scripts.ly
--- ../lilypond-1.7.6/input/regression/chord-scripts.ly	2002-11-02 03:14:32.000000000 +0100
+++ ./input/regression/chord-scripts.ly	2002-11-14 11:28:36.000000000 +0100
@@ -18,3 +18,5 @@ texidoc = "Scripts can also be attached 
     }
 
 }
+%% new-chords-done %%
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/chord-tremolo.ly ./input/regression/chord-tremolo.ly
--- ../lilypond-1.7.6/input/regression/chord-tremolo.ly	2002-07-17 01:57:06.000000000 +0200
+++ ./input/regression/chord-tremolo.ly	2002-11-14 11:28:36.000000000 +0100
@@ -33,3 +33,4 @@ stems.
   }  
   \midi { }
 }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/cluster.ly ./input/regression/cluster.ly
--- ../lilypond-1.7.6/input/regression/cluster.ly	1970-01-01 01:00:00.000000000 +0100
+++ ./input/regression/cluster.ly	2002-11-14 11:28:36.000000000 +0100
@@ -0,0 +1,48 @@
+\version "1.7.4"
+\header {
+    texidoc = "Clusters are a device to denote that a complete range of
+notes is to be played."
+}
+
+voiceI = % same as voiceII, but with ordinary notes
+	\context Voice = voiceI {
+	    \notes \relative c' {
+		\stemUp
+		c4 f4
+		a4 <<e d'>>4 | \break
+		<< g a >>8 << e a >>8 a4 c1 << d b >>4 e4 |
+		c4 a4 f4 g4 a4
+	    }
+	}
+
+voiceII = % same as voiceI, but with cluster notation
+	\context Voice = voiceII {
+	    \notes \relative c' {
+		\property Thread.NoteHead \set #'transparent = ##t
+		\property Voice.Stem \set #'transparent = ##t
+		\property Voice.Beam \set #'transparent = ##t
+		\property Staff.Accidental \set #'transparent = ##t
+		\property Voice.Cluster \set #'padding = #0.25
+		\property Voice.Cluster \set #'shape = #'ramp
+		c4 f4
+		\startCluster
+		a4 <<e d'>>4 | \break
+		%%% do not try something like: < { g8 e8 } a4 >
+		%%% instead, do the following: << g a >>8 << e a >>8
+		<< g a >>8 << e a >>8 a4 c1 << d b >>4 e4 |
+		c4 \stopCluster a4 f4 g4 a4
+	    }
+	}
+
+\score {
+	\context PianoStaff {
+	<
+		\voiceI
+		\voiceII
+	>
+	}
+	\paper{
+		linewidth = 15.0 \cm
+	}
+}
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/collision-2.ly ./input/regression/collision-2.ly
--- ../lilypond-1.7.6/input/regression/collision-2.ly	2002-08-12 01:30:07.000000000 +0200
+++ ./input/regression/collision-2.ly	2002-11-14 11:28:36.000000000 +0100
@@ -10,3 +10,4 @@
   >
 }
 
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/collision-dots.ly ./input/regression/collision-dots.ly
--- ../lilypond-1.7.6/input/regression/collision-dots.ly	2002-07-17 01:57:06.000000000 +0200
+++ ./input/regression/collision-dots.ly	2002-11-14 11:28:36.000000000 +0100
@@ -21,3 +21,4 @@
 }
 
 
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/collision-heads.ly ./input/regression/collision-heads.ly
--- ../lilypond-1.7.6/input/regression/collision-heads.ly	2002-10-21 00:44:15.000000000 +0200
+++ ./input/regression/collision-heads.ly	2002-11-14 11:28:36.000000000 +0100
@@ -28,3 +28,4 @@ if the black note heads are from 8th or 
 }
     >
 	 }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/collision-mesh.ly ./input/regression/collision-mesh.ly
--- ../lilypond-1.7.6/input/regression/collision-mesh.ly	2002-08-12 01:30:07.000000000 +0200
+++ ./input/regression/collision-mesh.ly	2002-11-14 11:28:37.000000000 +0100
@@ -1,17 +1,17 @@
-\version "1.5.68"
+\version "1.7.5"
 \header {
 texidoc = "Oppositely stemmed chords,  meshing into each other,
 are resolved."
 }
 
 \score {
-  \context Staff \notes \transpose c'' {
+  \context Staff \notes \transpose c c' {
      \time 3/4
      % Here's what I was trying to do:
      < \context Voice  = VI {\stemDown
-       <g4 b g'>
-       <g4. b g'>       
-       <g4 b d'>
+       <<g b g'>>4
+       <<g b g'>>4.       
+       <<g b d'>>4
        d'4
        d'4.       
        }
@@ -19,9 +19,9 @@ are resolved."
        \context Voice=VII {\stemUp
          d'4
          d'4.	 
-	 <a4 c'>
-	 <g4 b g'>
-	 <g4. b g'>	 	 
+	 <<a c'>>4
+	 <<g b g'>>4
+	 <<g b g'>>4.	 	 
 	   } >
 
   }
@@ -31,3 +31,4 @@ are resolved."
 
 
 
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/collisions.ly ./input/regression/collisions.ly
--- ../lilypond-1.7.6/input/regression/collisions.ly	2002-07-17 01:57:06.000000000 +0200
+++ ./input/regression/collisions.ly	2002-11-14 11:28:37.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.5"
 \header{
 texidoc="
 Normal collisions. We have support for polyphony, where the
@@ -23,8 +23,8 @@ twovoicechords = \context Staff \notes <
 		\stemUp e4 d c b a g f
 	}
 	\context Voice = ii \relative c' {
-		\stemDown <a4 c> <a4 c> <a4 c> <a4 c> <a c>
-		<a c> <a c>  
+		\stemDown <<a c>>4 <<a c>>4 <<a c>>4 <<a c>>4 <<a c>>
+		<<a c>> <<a c>>  
 	}
 >
 
@@ -65,7 +65,7 @@ hairyChord =  \context Staff \notes\rela
 
 
 \score{
-	\notes \transpose c'' {
+	\notes \transpose c c' {
 	   \twovoice
 	   \twovoicechords
 	
@@ -75,3 +75,4 @@ hairyChord =  \context Staff \notes\rela
 	
 %	\midi { \tempo 4:80 }
 }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/completion-heads.ly ./input/regression/completion-heads.ly
--- ../lilypond-1.7.6/input/regression/completion-heads.ly	2002-07-17 01:57:06.000000000 +0200
+++ ./input/regression/completion-heads.ly	2002-11-14 11:28:37.000000000 +0100
@@ -21,4 +21,4 @@ notes that cross bar lines are split int
       \consists "Completion_heads_engraver"
     }
   }
-}
\ No newline at end of file
+}%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/completion-heads-polyphony.ly ./input/regression/completion-heads-polyphony.ly
--- ../lilypond-1.7.6/input/regression/completion-heads-polyphony.ly	2002-09-15 23:35:05.000000000 +0200
+++ ./input/regression/completion-heads-polyphony.ly	2002-11-14 11:28:37.000000000 +0100
@@ -21,3 +21,4 @@ Completion heads are not fooled by polyp
 		}
 	}
 }
+%% new-chords-done %%
\ No newline at end of file
diff -purN ../lilypond-1.7.6/input/regression/finger-chords.ly ./input/regression/finger-chords.ly
--- ../lilypond-1.7.6/input/regression/finger-chords.ly	2002-10-28 01:25:44.000000000 +0100
+++ ./input/regression/finger-chords.ly	2002-11-14 11:28:37.000000000 +0100
@@ -24,3 +24,5 @@ easier to process."
 }
 
 }
+
+%% new-chords-done %%
diff -purN ../lilypond-1.7.6/input/regression/hara-kiri-pianostaff.ly ./input/regression/hara-kiri-pianostaff.ly
--- ../lilypond-1.7.6/input/regression/hara-kiri-pianostaff.ly	2002-08-12 01:30:07.000000000 +0200
+++ ./input/regression/hara-kiri-pianostaff.ly	2002-11-06 13:33:58.000000000 +0100
@@ -1,10 +1,10 @@
-\version "1.5.68"
+\version "1.7.5"
 \header {
 texidoc = "Hara kiri should not upset fixed distance alignment like in pianostaff. In this example the middle staff is harakiried."
 }
 
 	
-\score { \notes \transpose c'''
+\score { \notes \transpose c c''
  \context PianoStaff <
    \context Staff = up {  c c c c \break }
    \context Staff = mid {  s1 \break }
diff -purN ../lilypond-1.7.6/input/regression/measure-grouping.ly ./input/regression/measure-grouping.ly
--- ../lilypond-1.7.6/input/regression/measure-grouping.ly	1970-01-01 01:00:00.000000000 +0100
+++ ./input/regression/measure-grouping.ly	2002-11-13 01:40:18.000000000 +0100
@@ -0,0 +1,32 @@
+\header
+{
+
+    texidoc = "The Measure_grouping_engraver adds triangles and
+brackets above beats when you set beatGrouping.  This shows a fragment
+of Steve Martland's Dance Works. "
+
+}
+
+\version "1.7.6"
+
+
+%% TODO: should have 2/4 + 5/8 time sig style.
+\score { \notes
+\context Staff
+	 \relative c' {
+	     #(set-time-signature 2 4) 
+	     c8 a'4 a8-~
+	     #(set-time-signature 5 8 '(3 2)) 
+	     a8 bes4 r8 bes8->
+	     \time 2/4
+	     c,8 g'4 g8-~
+	     #(set-time-signature 5 8 '(3 2)) 
+	     g8 a4 g a->
+	 }
+	 \paper  {
+	     linewidth = -1.0 
+	     \translator { \StaffContext
+			   \consists "Measure_grouping_engraver"
+			   }
+	     }
+	 }
diff -purN ../lilypond-1.7.6/input/regression/mensural.ly ./input/regression/mensural.ly
--- ../lilypond-1.7.6/input/regression/mensural.ly	2002-07-17 01:57:06.000000000 +0200
+++ ./input/regression/mensural.ly	2002-11-06 13:33:58.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.5"
 \header {
     
 texidoc = "There is limited support for mensural notation: note head
@@ -11,6 +11,6 @@ both for up and down stems."
 \score {\notes { \context Voice { 
     \property Voice.NoteHead \set #'font-family = #'ancient
     \property Voice.NoteHead \override #'style = #'mensural
-\transpose d''' {  c4 c2 c8  c16 c16  c1 c\breve c\longa }
-\transpose c'' { c4 c2 c8  c16 c16  c1 c\breve c\longa }
+\transpose c d'' {  c4 c2 c8  c16 c16  c1 c\breve c\longa }
+\transpose c c' { c4 c2 c8  c16 c16  c1 c\breve c\longa }
 }}}
diff -purN ../lilypond-1.7.6/input/regression/rest-collision.ly ./input/regression/rest-collision.ly
--- ../lilypond-1.7.6/input/regression/rest-collision.ly	2002-07-17 01:57:06.000000000 +0200
+++ ./input/regression/rest-collision.ly	2002-11-06 13:33:59.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.5"
 \header{
 texidoc="
 Rests should not collide with beams, stems and noteheads.  Rests may
@@ -41,7 +41,7 @@ restsII =  \context Staff \notes {
 	\context Staff < {\stemUp r} { \stemDown r} >
 	\context Staff < {\stemUp r} r { \stemDown r} >
 	\stemUp
-	\transpose c'' { [c''8 r8 c''8 c''8]
+	\transpose c c' { [c''8 r8 c''8 c''8]
 	[c8 r8 c8 c8]
 	[c8 r8 r8 c'''8]	
 	\stemDown
diff -purN ../lilypond-1.7.6/input/regression/tie-chord.ly ./input/regression/tie-chord.ly
--- ../lilypond-1.7.6/input/regression/tie-chord.ly	2002-07-17 01:57:06.000000000 +0200
+++ ./input/regression/tie-chord.ly	2002-11-06 13:33:59.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.5"
 \header{
 texidoc="
 When tieing chords, the outer slurs point outwards, the inner slurs
@@ -13,7 +13,7 @@ t =  \notes \relative c' {   <c e g> ~ <
 	\score { 
 \notes \context Voice {
    \t
-   \transpose g' \t
+   \transpose c g \t
 
    \property Voice.TieColumn \override #'direction = #-1
    \t
diff -purN ../lilypond-1.7.6/input/rhythm.ly ./input/rhythm.ly
--- ../lilypond-1.7.6/input/rhythm.ly	2002-07-17 01:57:04.000000000 +0200
+++ ./input/rhythm.ly	2002-11-06 13:33:38.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.5"
 \header{
 filename = 	 "rhythm.ly"
 enteredby = 	 "HWN"
@@ -10,7 +10,7 @@ TestedFeatures = 	 "multiple meters, bea
 
 
 
-ritme =  \notes\transpose c'' {
+ritme =  \notes\transpose c c' {
 	\time  4/4
 	\partial 8
 	c8					|
diff -purN ../lilypond-1.7.6/input/star-spangled-banner.ly ./input/star-spangled-banner.ly
--- ../lilypond-1.7.6/input/star-spangled-banner.ly	2002-07-17 01:57:04.000000000 +0200
+++ ./input/star-spangled-banner.ly	2002-11-06 13:33:38.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.5"
 %{
 Converted from star.mup with the aid of mup2ly.py
 http://www.arkkra.com/doc/star.html
@@ -122,12 +122,12 @@ text =  \lyrics {  
 			\global
 			\clef treble
 			\property Staff.automaticMelismata = ##t
-			\context Voice = one \transpose c'' {
+			\context Voice = one \transpose c c' {
 				\voiceOne
 				\staffBVoiceB
 				\bar "|."
 			} 
-			\context Voice = two \transpose c'' {
+			\context Voice = two \transpose c c' {
 				\voiceTwo
 				\staffBVoiceC
 			}
diff -purN ../lilypond-1.7.6/input/test/american-chords.ly ./input/test/american-chords.ly
--- ../lilypond-1.7.6/input/test/american-chords.ly	2002-10-09 17:14:32.000000000 +0200
+++ ./input/test/american-chords.ly	2002-11-06 13:33:59.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.5"
 \header {
     texidoc = "Chord names in american styles, according to one of our users."
 }
@@ -41,7 +41,7 @@ scheme = \chords {
 \score {
   \notes <
     \context ChordNames \scheme
-    \context Staff \transpose c'' \scheme
+    \context Staff \transpose c c' \scheme
   >
   \paper {
     \translator { 
diff -purN ../lilypond-1.7.6/input/test/ancient-font.ly ./input/test/ancient-font.ly
--- ../lilypond-1.7.6/input/test/ancient-font.ly	2002-09-20 11:21:07.000000000 +0200
+++ ./input/test/ancient-font.ly	2002-11-12 11:47:57.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.5"
 \header {
     title	= "ancient font test"
     date	= "2002"
@@ -16,7 +16,7 @@ upperStaff =  \context GregorianStaff = 
     \context Staff \outputproperty #(make-type-checker 'staff-symbol-interface)
       #'line-count = #4
 
-    \notes \transpose c' {
+    \notes \transpose c c {
 	\property Staff.KeySignature \override #'style = #'vaticana
 	\property Staff.Accidental \override #'style = #'vaticana
 	\property Voice.NoteHead \override #'style = #'vaticana_punctum
@@ -120,7 +120,7 @@ lowerStaff =  \context MensuralStaff = l
     \context Staff \outputproperty #(make-type-checker 'staff-symbol-interface)
       #'line-count = #5
 
-    \notes \transpose c' {
+    \notes \transpose c c {
 	\property Voice.autoBeaming = ##f
 	\property Voice.NoteHead \override #'style = #'neo_mensural
 	\property Voice.Rest \override #'style = #'neo_mensural
@@ -158,7 +158,7 @@ lowerStaff =  \context MensuralStaff = l
 	\clef "mensural_g"
 	r4 r8 r16 r16
 	\property Voice.NoteHead \override #'style = #'mensural
-	\property Voice.Stem \override #'style = #'mensural
+	\property Voice.Stem \override #'flag-style = #'mensural
 	\property Voice.Stem \override #'thickness = #1.0
 	\property Voice.Rest \override #'style = #'mensural
 	\clef "petrucci_f"
@@ -173,12 +173,12 @@ lowerStaff =  \context MensuralStaff = l
 
 	r\breve 
 	\clef "mensural_f"
-	% FIXME: must set Voice.Stem style to #'neo_mensural to avoid
+	% FIXME: must set Voice.Stem flag-style to #'neo_mensural to avoid
 	% segmentation fault on r8/r16/r32.  (Strange: what has
-	% Voice.Stem style to do with mensural rests?)
-	\property Voice.Stem \override #'style = #'neo_mensural
+	% Voice.Stem flag-style to do with mensural rests?)
+	\property Voice.Stem \override #'flag-style = #'neo_mensural
 	r2 r4 r8 r16 r16
-	\property Voice.Stem \override #'style = #'mensural
+	\property Voice.Stem \override #'flag-style = #'mensural
 	\property Staff.forceClef = ##t
 	\clef "mensural_f"
 	e\breve f g a1
@@ -233,7 +233,7 @@ lowerStaff =  \context MensuralStaff = l
 	    \remove Ligature_bracket_engraver
 	    \consists Mensural_ligature_engraver
 	    NoteHead \set #'style = #'mensural
-%	    Stem \set #'style = #'mensural %%%%%%%% FIXME: this core dumps
+%	    Stem \set #'flag-style = #'mensural %%%%%%%% FIXME: this core dumps
 	    Stem \set #'thickness = #1.0
 	    Rest \set #'style = #'mensural
 	    autoBeaming = ##f
diff -purN ../lilypond-1.7.6/input/test/banter-chords.ly ./input/test/banter-chords.ly
--- ../lilypond-1.7.6/input/test/banter-chords.ly	2002-07-17 01:57:07.000000000 +0200
+++ ./input/test/banter-chords.ly	2002-11-06 13:33:59.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.5"
 
 
 \header{
@@ -47,7 +47,7 @@ TestedFeatures = 	 "Banter named chords"
 
 % }
 
-chord =  \notes\transpose c''\chords{
+chord =  \notes\transpose c' c''\chords{
 	% dim modifier means: lower all implicit additions
 	c:dim9
 	c:dim
diff -purN ../lilypond-1.7.6/input/test/beam-chord.ly ./input/test/beam-chord.ly
--- ../lilypond-1.7.6/input/test/beam-chord.ly	2002-08-12 01:30:07.000000000 +0200
+++ ./input/test/beam-chord.ly	2002-11-06 13:33:59.000000000 +0100
@@ -1,10 +1,10 @@
-\version "1.5.68"
+\version "1.7.5"
 
 \header {
 texidoc = "Hmm. what's this supposed to test?"
 }
 \score{
-	\notes\transpose c'{
+	\notes	\transpose c' c'{
 \property Voice.Beam \set #'position-callbacks =
  #`(,Beam::least_squares
 			       ,Beam::check_concave
diff -purN ../lilypond-1.7.6/input/test/beams.ly ./input/test/beams.ly
--- ../lilypond-1.7.6/input/test/beams.ly	2002-08-18 03:11:16.000000000 +0200
+++ ./input/test/beams.ly	2002-11-06 13:33:59.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.5"
 \header{
 filename = 	 "beams.ly"
 composer = 	 "heu"
@@ -12,7 +12,7 @@ TestedFeatures = 	 "beams and beamflags"
 \score{
 	<
 		\context GrandStaff < 
-\context Staff = SA		\notes\transpose c' { 
+\context Staff = SA		\notes\transpose c c { 
 
 			\time 8/4
 			\stemUp [c8 c'' a' f']
@@ -29,7 +29,7 @@ TestedFeatures = 	 "beams and beamflags"
 			\stemUp [g128 g g g]
 			r32
 
-						\transpose c{
+						\transpose c' c{
 			\stemBoth
 			[c'8 c'] [b b] [a a] [g g] [f f] [e e]
 			[c'16 c'] [b b] [a a] [g g]  [f f] [e e]
@@ -39,7 +39,7 @@ TestedFeatures = 	 "beams and beamflags"
 	>
 	<	
 \context Staff = SB		\notes { 
-\transpose c' {
+\transpose c c {
 			\time 8/4
 			\stemDown [a'8 a, c e]
 			\stemDown [a'16 a, c e]
@@ -48,7 +48,7 @@ TestedFeatures = 	 "beams and beamflags"
 			\stemDown [a'128 a, c e]
 			r32}
 
-			\transpose c{
+			\transpose c' c{
 			\stemDown [d''8 d'' d'' d'']
 			\stemDown [d''16 d'' d'' d'']
 			\stemDown [d''32 d'' d'' d'']
@@ -56,7 +56,7 @@ TestedFeatures = 	 "beams and beamflags"
 			\stemDown [d''128 d'' d'' d'']
 			r32}
 
-			\transpose c''{
+			\transpose c c'{
 			\stemBoth
 			[a8 a] [b b] [c' c'] [d' d'] [e' e'] [f' f']
 			[a16 a] [b b] [c' c'] [d' d']  [e' e'] [f' f']
diff -purN ../lilypond-1.7.6/input/test/broken.ly ./input/test/broken.ly
--- ../lilypond-1.7.6/input/test/broken.ly	2002-07-17 01:57:07.000000000 +0200
+++ ./input/test/broken.ly	2002-11-06 13:33:59.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.5"
 \header{
 enteredby = 	 "jcn"
 copyright = 	 "PD"
@@ -16,7 +16,7 @@ shortlong =  \notes{
 	c c c )c |
 }
 
-broken =  \notes\transpose c''{
+broken =  \notes\transpose c c'{
 
       c c c c()
       c c c c(
diff -purN ../lilypond-1.7.6/input/test/cautionaries.ly ./input/test/cautionaries.ly
--- ../lilypond-1.7.6/input/test/cautionaries.ly	2002-08-18 03:11:16.000000000 +0200
+++ ./input/test/cautionaries.ly	2002-11-06 13:33:59.000000000 +0100
@@ -1,8 +1,8 @@
-\version "1.5.68"
+\version "1.7.5"
 
 %% FIXME
 
-\score { \notes \context Staff \transpose c''' {
+\score { \notes \context Staff \transpose c c'' {
   \key d \major
 %  \property Staff.autoReminders = #'cautionary
   \property Staff.Accidental \override #'font-relative-size = #0
diff -purN ../lilypond-1.7.6/input/test/chord-banter.ly ./input/test/chord-banter.ly
--- ../lilypond-1.7.6/input/test/chord-banter.ly	2002-07-17 01:57:07.000000000 +0200
+++ ./input/test/chord-banter.ly	2002-11-06 13:33:59.000000000 +0100
@@ -1,11 +1,11 @@
-\version "1.5.68"
+\version "1.7.5"
 \header{
 filename = 	"chord-table.ly"
 copyright =  	"public domain"
 enteredby =  	"jcn"
 }
 
-tab =  \notes\transpose c'''\chords{
+tab =  \notes\transpose c c''\chords{
 	c1 c:m c:4 c:m4 c:5+ \break
 	c:5- c:dim c:5-.5+ c:6 c:m6\break
 	c:4.6 c:7 c:m7 c:4.7 c:m4.7\break
@@ -18,31 +18,31 @@ tab =  \notes\transpose c'''\chords{
 \score{
 %	\context StaffGroup <
         <
-		\context Staff=c \notes\transpose c\tab
-		\context ChordNames=c \notes\transpose c\tab
+		\context Staff=c \notes\transpose c' c\tab
+		\context ChordNames=c \notes\transpose c' c\tab
 %{		
-		\context Staff=cis \notes\transpose cis\tab
-		\context ChordNames=cis \notes\transpose cis\tab
-		\context Staff=des \notes\transpose des\tab
-		\context ChordNames=des \notes\transpose des\tab
-		\context Staff=d \notes\transpose d\tab
-		\context ChordNames=d \notes\transpose d\tab
-		\context Staff=es \notes\transpose es\tab
-		\context ChordNames=es \notes\transpose es\tab
-		\context Staff=e \notes\transpose e\tab
-		\context ChordNames=e \notes\transpose e\tab
-		\context Staff=fis \notes\transpose fis\tab
-		\context ChordNames=fis \notes\transpose fis\tab
-		\context Staff=g \notes\transpose g\tab
-		\context ChordNames=g \notes\transpose g\tab
-		\context Staff=as \notes\transpose as\tab
-		\context ChordNames=as \notes\transpose as\tab
-		\context Staff=a \notes\transpose a\tab
-		\context ChordNames=a \notes\transpose a\tab
-		\context Staff=bes \notes\transpose bes,\tab
-		\context ChordNames=bes \notes\transpose bes,\tab
-		\context Staff=b \notes\transpose b,\tab
-		\context ChordNames=b \notes\transpose b,\tab
+		\context Staff=cis \notes\transpose c' cis\tab
+		\context ChordNames=cis \notes\transpose c' cis\tab
+		\context Staff=des \notes\transpose c' des\tab
+		\context ChordNames=des \notes\transpose c' des\tab
+		\context Staff=d \notes\transpose c' d\tab
+		\context ChordNames=d \notes\transpose c' d\tab
+		\context Staff=es \notes\transpose c' es\tab
+		\context ChordNames=es \notes\transpose c' es\tab
+		\context Staff=e \notes\transpose c' e\tab
+		\context ChordNames=e \notes\transpose c' e\tab
+		\context Staff=fis \notes\transpose c' fis\tab
+		\context ChordNames=fis \notes\transpose c' fis\tab
+		\context Staff=g \notes\transpose c' g\tab
+		\context ChordNames=g \notes\transpose c' g\tab
+		\context Staff=as \notes\transpose c' as\tab
+		\context ChordNames=as \notes\transpose c' as\tab
+		\context Staff=a \notes\transpose c' a\tab
+		\context ChordNames=a \notes\transpose c' a\tab
+		\context Staff=bes \notes\transpose c' bes,\tab
+		\context ChordNames=bes \notes\transpose c' bes,\tab
+		\context Staff=b \notes\transpose c' b,\tab
+		\context ChordNames=b \notes\transpose c' b,\tab
 %}		
 	>
 	\paper{
diff -purN ../lilypond-1.7.6/input/test/chord-changes.ly ./input/test/chord-changes.ly
--- ../lilypond-1.7.6/input/test/chord-changes.ly	2002-07-17 01:57:07.000000000 +0200
+++ ./input/test/chord-changes.ly	2002-11-06 13:34:00.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.5"
 
 \header{
 texidoc="property chordChanges: only display chord names when
@@ -16,7 +16,7 @@ scheme = \chords {
 \score {
   \notes <
     \context ChordNames \scheme
-    \context Staff \transpose c'' \scheme
+    \context Staff \transpose c c' \scheme
   >
   \paper{
     linewidth = 40 * \staffspace
diff -purN ../lilypond-1.7.6/input/test/chord-inversion.ly ./input/test/chord-inversion.ly
--- ../lilypond-1.7.6/input/test/chord-inversion.ly	2002-07-17 01:57:07.000000000 +0200
+++ ./input/test/chord-inversion.ly	2002-11-06 13:34:00.000000000 +0100
@@ -1,11 +1,11 @@
-\version "1.5.68"
+\version "1.7.5"
 \header{
 enteredby = 	 "jcn"
 copyright = 	 "public domain"
 TestedFeatures = 	 "chord inversions"
 }
 
-inversions =  \notes\transpose c''\chords{
+inversions =  \notes\transpose c c'\chords{
 	% inversions
 	c1 c:sus c:6 c/e c/g
 	c/d % this triggers a warning: no 'd' in chord of c
diff -purN ../lilypond-1.7.6/input/test/chords.ly ./input/test/chords.ly
--- ../lilypond-1.7.6/input/test/chords.ly	2002-09-20 11:21:07.000000000 +0200
+++ ./input/test/chords.ly	2002-11-06 13:34:00.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.5"
 
 
 %{
@@ -18,7 +18,7 @@ Would this be acceptable/good enough/con
 %}
 
 % used to be quarter notes here. Why? --hwn 
-scales =  \notes \transpose c'' \chords{
+scales =  \notes \transpose c c' \chords{
 		%<c1 e g>
 		c1:m c:min c:dim c:aug c:sus c:maj
                 c1:6 c:7 c:9 c:11 c:13
diff -purN ../lilypond-1.7.6/input/test/chord-table.ly ./input/test/chord-table.ly
--- ../lilypond-1.7.6/input/test/chord-table.ly	2002-07-21 21:27:39.000000000 +0200
+++ ./input/test/chord-table.ly	2002-11-06 13:34:00.000000000 +0100
@@ -1,41 +1,41 @@
-\version "1.5.68"
+\version "1.7.5"
 \header{
 filename = 	"chord-table.ly"
 copyright =  	"public domain"
 enteredby =  	"jcn"
 }
 
-tab =  \notes\transpose c'''\chords{
+tab =  \notes\transpose c c''\chords{
 	c1 c:m c:4 c:m4 c:5+ c:5- c:dim c:5-.5+ c:6\break %c:m6\break
 }
 
 \score{
 	\context StaffGroup <
-		\context Staff=c \notes\transpose c\tab
-		\context ChordNames=c \notes\transpose c\tab
-		\context Staff=cis \notes\transpose cis\tab
-		\context ChordNames=cis \notes\transpose cis\tab
-		\context Staff=des \notes\transpose des\tab
-		\context ChordNames=des \notes\transpose des\tab
-		\context Staff=d \notes\transpose d\tab
-		\context ChordNames=d \notes\transpose d\tab
-		\context Staff=es \notes\transpose es\tab
-		\context ChordNames=es \notes\transpose es\tab
-		\context Staff=e \notes\transpose e\tab
-		\context ChordNames=e \notes\transpose e\tab
+		\context Staff=c \notes\transpose c' c\tab
+		\context ChordNames=c \notes\transpose c' c\tab
+		\context Staff=cis \notes\transpose c' cis\tab
+		\context ChordNames=cis \notes\transpose c' cis\tab
+		\context Staff=des \notes\transpose c' des\tab
+		\context ChordNames=des \notes\transpose c' des\tab
+		\context Staff=d \notes\transpose c' d\tab
+		\context ChordNames=d \notes\transpose c' d\tab
+		\context Staff=es \notes\transpose c' es\tab
+		\context ChordNames=es \notes\transpose c' es\tab
+		\context Staff=e \notes\transpose c' e\tab
+		\context ChordNames=e \notes\transpose c' e\tab
 %{ FIXME: remove some, gs barfs		
-		\context Staff=fis \notes\transpose fis\tab
-		\context ChordNames=fis \notes\transpose fis\tab
-		\context Staff=g \notes\transpose g\tab
-		\context ChordNames=g \notes\transpose g\tab
-		\context Staff=as \notes\transpose as\tab
-		\context ChordNames=as \notes\transpose as\tab
-		\context Staff=a \notes\transpose a\tab
-		\context ChordNames=a \notes\transpose a\tab
-		\context Staff=bes \notes\transpose bes,\tab
-		\context ChordNames=bes \notes\transpose bes,\tab
-		\context Staff=b \notes\transpose b,\tab
-		\context ChordNames=b \notes\transpose b,\tab
+		\context Staff=fis \notes\transpose c' fis\tab
+		\context ChordNames=fis \notes\transpose c' fis\tab
+		\context Staff=g \notes\transpose c' g\tab
+		\context ChordNames=g \notes\transpose c' g\tab
+		\context Staff=as \notes\transpose c' as\tab
+		\context ChordNames=as \notes\transpose c' as\tab
+		\context Staff=a \notes\transpose c' a\tab
+		\context ChordNames=a \notes\transpose c' a\tab
+		\context Staff=bes \notes\transpose c' bes,\tab
+		\context ChordNames=bes \notes\transpose c' bes,\tab
+		\context Staff=b \notes\transpose c' b,\tab
+		\context ChordNames=b \notes\transpose c' b,\tab
 %}		
 	>
 	\paper{
diff -purN ../lilypond-1.7.6/input/test/chord-taxonomy.ly ./input/test/chord-taxonomy.ly
--- ../lilypond-1.7.6/input/test/chord-taxonomy.ly	2002-08-12 01:30:07.000000000 +0200
+++ ./input/test/chord-taxonomy.ly	2002-11-06 13:34:00.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.5"
 \header {
   title="Chord Taxonomy of LilyPond -- jazz"
 }
@@ -20,6 +20,6 @@ scheme = \chords {
   <
     \property ChordNames.ChordName \set #'style = #'jazz
     \context ChordNames \scheme
-    \context Staff \notes \transpose c'' \scheme
+    \context Staff \notes \transpose c c' \scheme
   >
 }
diff -purN ../lilypond-1.7.6/input/test/ct-jazz.ly ./input/test/ct-jazz.ly
--- ../lilypond-1.7.6/input/test/ct-jazz.ly	2002-08-12 01:30:07.000000000 +0200
+++ ./input/test/ct-jazz.ly	2002-11-06 13:34:01.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.5"
 \header {
   title="Chord Taxomony of LilyPond -- jazz"
   subtitle="Amy's chord tests"
@@ -17,6 +17,6 @@ scheme = \chords {
   <
     \property ChordNames.ChordName \set #'style = #'jazz
     \context ChordNames \scheme
-    \context Staff \notes \transpose c'' \scheme
+    \context Staff \notes \transpose c c' \scheme
   >
 }
diff -purN ../lilypond-1.7.6/input/test/figured-bass.ly ./input/test/figured-bass.ly
--- ../lilypond-1.7.6/input/test/figured-bass.ly	2002-08-12 01:30:07.000000000 +0200
+++ ./input/test/figured-bass.ly	2002-11-06 13:34:01.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.5"
 \header {
 texidoc = "Test figured bass.
 
@@ -10,7 +10,7 @@ mode, which allows you to type numbers, 
 " }
 
 \score { \notes  <
-\context FiguredBass \transpose c'' {
+\context FiguredBass \transpose c c' {
    <e! g >
    <f8 ais >
    \figures {
diff -purN ../lilypond-1.7.6/input/test/improv.ly ./input/test/improv.ly
--- ../lilypond-1.7.6/input/test/improv.ly	2002-08-12 01:30:07.000000000 +0200
+++ ./input/test/improv.ly	2002-11-06 13:34:01.000000000 +0100
@@ -6,7 +6,7 @@ texidoc = "note heads for improvisation 
 %{ TODO: the construct with separet SquashVoice context is a little
  gory. FIXME.  %}
 
-\version "1.5.68"
+\version "1.7.5"
 
 improOn = \notes {\translator Voice = impro }
 improOff = \notes {\translator SquashVoice = melo }
@@ -18,7 +18,7 @@ global = \notes { s1*3 \bar "|." }
     \context ChordNames \chords {e8*7:m7 a2.:m7 bes4:m7 b1:m7 e8:m }
     \context Staff \notes <
       \context SquashVoice = impro { \global }
-      \context Voice = melo \transpose c'' {
+      \context Voice = melo \transpose c c' {
 	e8 e g a a16()bes()a8 g \improOn e8
 	~e2~e8 f4 fis8
 	~fis2 \improOff a16()bes a8 g e
diff -purN ../lilypond-1.7.6/input/test/jazz-chords.ly ./input/test/jazz-chords.ly
--- ../lilypond-1.7.6/input/test/jazz-chords.ly	2002-07-17 01:57:07.000000000 +0200
+++ ./input/test/jazz-chords.ly	2002-11-06 13:34:01.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.5"
 
 
 
@@ -56,7 +56,7 @@ scheme = \chords {
 \score {
   \notes <
     \context ChordNames \scheme
-    \context Staff \transpose c'' \scheme
+    \context Staff \transpose c c' \scheme
   >
   \paper {
     \translator { 
diff -purN ../lilypond-1.7.6/input/test/lyrics.ly ./input/test/lyrics.ly
--- ../lilypond-1.7.6/input/test/lyrics.ly	2002-07-17 01:57:07.000000000 +0200
+++ ./input/test/lyrics.ly	2002-11-06 13:34:01.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.5"
 
 
 somewhatLong =  \lyrics{
@@ -44,7 +44,7 @@ quiteLongLyricsStaff =  \context Lyrics 
 >
 
 melody =  \notes
-\transpose c'{
+\transpose c c{
 	c4 e4 g4 e4  c4 e4 g4 e4  c4 e4 g4 e4  c4 e4 g4 e4
 	c4 e4 g4 e4  c4 e4 g4 e4  c4 e4 g4 e4  c4 e4 g4 e4
 }
diff -purN ../lilypond-1.7.6/input/test/mensural-ligatures.ly ./input/test/mensural-ligatures.ly
--- ../lilypond-1.7.6/input/test/mensural-ligatures.ly	2002-09-20 11:21:07.000000000 +0200
+++ ./input/test/mensural-ligatures.ly	2002-11-06 13:34:01.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.5"
 \header {
     title	= "mensural ligature test"
     date	= "2002"
@@ -10,7 +10,7 @@
 % graphical width of the ligatures rather to the musical moment in time.
 % This is intended behaviour.
 
-voice = \notes \transpose c'' {
+voice = \notes \transpose c c' {
   \property Score.timing = ##f
   \property Score.defaultBarType = "empty"
   g\longa c\breve a\breve f\breve d'\longa^\fermata
diff -purN ../lilypond-1.7.6/input/test/music-box.ly ./input/test/music-box.ly
--- ../lilypond-1.7.6/input/test/music-box.ly	2002-10-21 00:44:15.000000000 +0200
+++ ./input/test/music-box.ly	2002-11-06 13:34:01.000000000 +0100
@@ -22,7 +22,7 @@ using Scheme functions to save typing wo
 }
 
 \include "deutsch.ly"
-\version "1.7.3"
+\version "1.7.5"
 
 #(define (transform music)
   (let* ((es (ly:get-mus-property music 'elements))
@@ -79,9 +79,9 @@ using Scheme functions to save typing wo
 
 
 
-\version "1.7.3"
+\version "1.7.5"
 
-pat = \notes \transpose c'' \repeat unfold 2 {
+pat = \notes \transpose c c' \repeat unfold 2 {
   < { \context Staff=up {r8 e16 f g e f g } }
     { \context Staff=down <
       \context Voice=vup  { \stemUp \tieUp r16 d8.~d4 }
@@ -98,7 +98,7 @@ endb = \notes {\stemUp \tieUp r16 c,8.~c
 endc = \notes {\stemDown \tieDown c,,2~c,, c,,~c,, c,,1_\fermata }
 
 \score {
-  \notes \transpose c'' \context PianoStaff <
+  \notes \transpose c c' \context PianoStaff <
     \context Staff=up   { \clef "G" s1*32 \enda }
     \context Staff=down { \clef "F" s1*32 < \context Voice=vup \endb
 			                     \context Voice=vdwn \endc
diff -purN ../lilypond-1.7.6/input/test/notemode-chords.ly ./input/test/notemode-chords.ly
--- ../lilypond-1.7.6/input/test/notemode-chords.ly	2002-07-17 01:57:07.000000000 +0200
+++ ./input/test/notemode-chords.ly	2002-11-06 13:34:01.000000000 +0100
@@ -1,8 +1,8 @@
-\version "1.5.68"
+\version "1.7.5"
 
 
 \score{
-	\notes \transpose c''{
+	\notes \transpose c c'{
 % 1.1.53: @x@ syntax dropped
 % if you want fingering, write chord explicitily eg < c1-1 e-2 g-3 >
 %		@c1@ @c-7@ @c-7^5@-1-3
diff -purN ../lilypond-1.7.6/input/test/octave-duplicate.ly ./input/test/octave-duplicate.ly
--- ../lilypond-1.7.6/input/test/octave-duplicate.ly	2002-08-12 01:30:07.000000000 +0200
+++ ./input/test/octave-duplicate.ly	2002-11-06 13:34:01.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.5"
 \header {
 texidoc="Octave duplicate parts of music"
 }
@@ -11,7 +11,7 @@ upperOne = \notes\relative c'' {
 }
 
 upperOctave = \notes <
-  \context Thread=upperOne { \transpose c \upperOne }
+  \context Thread=upperOne { \transpose c' c \upperOne }
   \context Thread=upperOne {
     \property Thread.devNullThread = #'allways s1*2
     \property Thread.devNullThread = #'() s1*2
@@ -31,7 +31,7 @@ firstEight = \notes { 
 }
 
 lowerOctave = \notes <
-  \context Thread=lowerOne { \transpose c  \lowerOne }
+  \context Thread=lowerOne { \transpose c' c  \lowerOne }
   \context Thread=lowerOne {
     \repeat "unfold" 4 { \firstEight }
   }
diff -purN ../lilypond-1.7.6/input/test/part-combine-score.ly ./input/test/part-combine-score.ly
--- ../lilypond-1.7.6/input/test/part-combine-score.ly	2002-10-21 00:44:15.000000000 +0200
+++ ./input/test/part-combine-score.ly	2002-11-06 13:34:01.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.7.3"
+\version "1.7.5"
 
 \header {
 texidoc="Template for part-combining orchestral scores"
@@ -106,9 +106,9 @@ violinoIIStaff =  \context Staff = twoVi
   \End
 >
 
-violaI = \notes\transpose c, \violinoI
+violaI = \notes\transpose c' c, \violinoI
 
-violaII = \notes\transpose c, \violinoII
+violaII = \notes\transpose c' c, \violinoII
 
 violeGroup =  \notes \context VoiceCombineStaff = oneViole <
   \property VoiceCombineStaff.midiInstrument = #"viola"
diff -purN ../lilypond-1.7.6/input/test/scheme-interactions.ly ./input/test/scheme-interactions.ly
--- ../lilypond-1.7.6/input/test/scheme-interactions.ly	2002-10-21 00:44:15.000000000 +0200
+++ ./input/test/scheme-interactions.ly	2002-11-06 13:34:01.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.7.3"
+\version "1.7.5"
 
 \header {
 
@@ -9,8 +9,8 @@ can use, define or change lilypond varia
 }
 
 
-foo = \notes \transpose c' { d''4-. }
-bra = \notes \transpose c' { e'4-. }
+foo = \notes \transpose c c { d''4-. }
+bra = \notes \transpose c c { e'4-. }
 
 \score { 
   \context Voice \notes\relative c' {
diff -purN ../lilypond-1.7.6/input/test/scripts.ly ./input/test/scripts.ly
--- ../lilypond-1.7.6/input/test/scripts.ly	2002-07-17 01:57:07.000000000 +0200
+++ ./input/test/scripts.ly	2002-11-06 13:34:01.000000000 +0100
@@ -1,9 +1,9 @@
-\version "1.5.68"
+\version "1.7.5"
 	
 
 
 
-blah =  	\notes{ \transpose c'' {
+blah =  	\notes{ \transpose c c' {
 
 	c,4 ->-.-\fermata-"text"
 	c ->-.-\fermata-"text"
diff -purN ../lilypond-1.7.6/input/test/sleur.ly ./input/test/sleur.ly
--- ../lilypond-1.7.6/input/test/sleur.ly	2002-08-18 03:11:16.000000000 +0200
+++ ./input/test/sleur.ly	2002-11-06 13:34:01.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.5"
 \header{
 enteredby = 	 "jcn"
 copyright = 	 "public domain"
@@ -16,11 +16,11 @@ shortlong =  \notes{
 	c c c )c |
 }
 
-dirs =  \notes\transpose c' {
+dirs =  \notes\transpose c c {
 
 	c'1() g' () c () g () c |
 }
-over =  \notes\transpose c'{
+over =  \notes\transpose c c{
 
 
 	e( g' g' )e
@@ -44,7 +44,7 @@ over =  \notes\transpose c'{
 	e( c'' f )e
 }
 
-under =  \notes\transpose c'{
+under =  \notes\transpose c c{
 	\stemDown 
 	f'( \stemBoth d d \stemDown )f'
 	f'( \stemBoth c c \stemDown )f'
@@ -68,7 +68,7 @@ under =  \notes\transpose c'{
 	f'( e, f )f'
 }
 
-eccentric =  \notes\transpose c'{
+eccentric =  \notes\transpose c c{
 	\stemUp
 	\times 4/7 { f( a' f f f f )f } |
 	\times 4/7 { f( f f f f a' )f } |
@@ -77,7 +77,7 @@ eccentric =  \notes\transpose c'{
 	\times 4/7 { e'( e' e' e' e' c )e' } |
 }
 
-tiltup =  \notes\transpose c'{
+tiltup =  \notes\transpose c c{
 	e( c'' c'' )e'
 	\stemUp
 	e( c'' c'' )e'
@@ -91,7 +91,7 @@ tiltup =  \notes\transpose c'{
 	f'( a, a, )f''
 }
 
-tiltdown =  \notes\transpose c'{
+tiltdown =  \notes\transpose c c{
 	e'( c'' c'' )e
 	\stemUp
 	e'( c'' c'' )e
@@ -105,7 +105,7 @@ tiltdown =  \notes\transpose c'{
 	f''( a, a, )f'
 }
 
-broken =  \notes\transpose c''{
+broken =  \notes\transpose c c'{
       c c c c()
       c c c c(
       c )c c c(
@@ -118,7 +118,7 @@ broken =  \notes\transpose c''{
       f,( c c )f,
 }
 
-blend = 	\notes\transpose c'{
+blend = 	\notes\transpose c c{
 	e( c'' c'' )e
 	\stemUp
 	f'( c'' c'' )f'
@@ -139,7 +139,7 @@ blend = 	\notes\transpose c'{
 }
 
 
-bug =  \notes\transpose c'{
+bug =  \notes\transpose c c{
 
 	a()g( f )e
 	b'()a'( g' )f'
@@ -148,7 +148,7 @@ bug =  \notes\transpose c'{
 	c' () b () c' c'
 }
 
-clipping =  \notes\transpose c'{
+clipping =  \notes\transpose c c{
 	\stemBoth
 	c( c''' c''')c
 	c( c''' c )c''
diff -purN ../lilypond-1.7.6/input/test/smart-transpose.ly ./input/test/smart-transpose.ly
--- ../lilypond-1.7.6/input/test/smart-transpose.ly	2002-10-21 00:44:15.000000000 +0200
+++ ./input/test/smart-transpose.ly	2002-11-06 13:34:01.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.7.3"
+\version "1.7.5"
 
 \header {
 texidoc="
@@ -65,8 +65,8 @@ music = \notes \relative c' { c4 d  e f 
 
 \score {
   \notes \context Staff {
-    \transpose ais' \music
-    \apply #simplify \transpose ais' \music
+    \transpose c ais \music
+    \apply #simplify \transpose c ais \music
   }
   \paper { linewidth = -1. }
 }
diff -purN ../lilypond-1.7.6/input/test/stem.ly ./input/test/stem.ly
--- ../lilypond-1.7.6/input/test/stem.ly	2002-08-13 18:14:29.000000000 +0200
+++ ./input/test/stem.ly	2002-11-06 13:34:01.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.5"
 \header{
   title= "Stems and Beams"
   subtitle =  "proofsheet" 
@@ -14,18 +14,18 @@ of beams"
 beamintervals = \notes{
   \time 7/4
   \stemUp
-  \transpose c''{
+  \transpose c c'{
     [ c8 d ] [ c e ] [ c f ] [ c g ] [ c a ] [ c b ] [ c c' ] |
     [ c b, ] [ c a, ] [ c g, ] [ c f, ] [ c e, ] [ c d, ] [ c c, ] |
   }
-  \transpose c'''{
+  \transpose c c''{
     [ c b, ] [ c a, ] [ c g, ] [ c f, ] [ c e, ] [ c d, ] [ c c, ] |
     \stemDown
   }
-  \transpose c''''{
+  \transpose c c'''{
     [ c b, ] [ c a, ] [ c g, ] [ c f, ] [ c e, ] [ c d, ] [ c c, ] |
   }
-  \transpose c'''{
+  \transpose c c''{
     [ c b, ] [ c a, ] [ c g, ] [ c f, ] [ c e, ] [ c d, ] [ c c, ] |
     [ c d ] [ c e ] [ c f ] [ c g ] [ c a ] [ c b ] [ c c' ] |
   }
@@ -50,12 +50,12 @@ beamintervals = \notes{
       d c b a g f e d c b a g f e d c b a g
     }      
     \beamintervals
-    \transpose d' \beamintervals
-    \transpose e' \beamintervals
-    \transpose f' \beamintervals
-    \transpose g' \beamintervals
-    \transpose a' \beamintervals
-    \transpose b' \beamintervals
+    \transpose c d \beamintervals
+    \transpose c e \beamintervals
+    \transpose c f \beamintervals
+    \transpose c g \beamintervals
+    \transpose c a \beamintervals
+    \transpose c b \beamintervals
   }
   \paper{
     indent = 0.0\mm
diff -purN ../lilypond-1.7.6/input/test/transposition.ly ./input/test/transposition.ly
--- ../lilypond-1.7.6/input/test/transposition.ly	2002-07-17 01:57:08.000000000 +0200
+++ ./input/test/transposition.ly	2002-11-06 13:34:01.000000000 +0100
@@ -1,15 +1,15 @@
-\version "1.5.68"
+\version "1.7.5"
 %{
 Hi all,
 
 I have extend Mats' patches to allow accidental transposition:
         \keysignature bes es fis
-		= \transpose d =>
+		= \transpose c' d =>
         \keysignature gis
 
 As you can see in output =  the example file "test.ly" there are a few problems left:
 - key undo (already in the Todo)
-- "wrong" transposition: e.g. \transpose d of fis-major = gis-major (better as-major?).
+- "wrong" transposition: e.g. \transpose c' d of fis-major = gis-major (better as-major?).
 	The solution gis=as etc. would concern both note and key transposistion
 
 Eric
@@ -42,7 +42,7 @@ vOne =  \notes \relative c''{
         c4 c |
 }
 
-vTwo =  \notes \transpose d' { \vOne }
+vTwo =  \notes \transpose c d { \vOne }
 
 vThree =  \notes \relative c''{
         \clef"violin"
@@ -58,7 +58,7 @@ vThree =  \notes \relative c''{
         cis4 ais4 |
 }
 
-vFour =  \notes \transpose d' \vThree
+vFour =  \notes \transpose c d \vThree
 
 \score {
   \context StaffGroup <
diff -purN ../lilypond-1.7.6/input/tutorial/brahms-original.ly ./input/tutorial/brahms-original.ly
--- ../lilypond-1.7.6/input/tutorial/brahms-original.ly	2002-08-12 01:30:07.000000000 +0200
+++ ./input/tutorial/brahms-original.ly	2002-11-06 13:34:02.000000000 +0100
@@ -4,14 +4,14 @@
     \context Staff = up
     \relative c'' <
         {   \key d\major 
-            fis4-3_\p ( ~
-            fis16 )a-5 } \\
+            fis4-3_\p-(-~
+            fis16 a-)-5 } \\
         {
-            fis16( \> d \! b \translator Staff = down
-            \clef treble g ~ < g8 )e> } \\
+            fis16-(-\> d b-\! \translator Staff = down
+            \clef treble g-~ <<g e>>8-) } \\
         { s16
           d'
-          ~ < d4 b4  > }
+          ~ <<d b>>4 }
     >
     \context Staff = down {
         \key d \major
diff -purN ../lilypond-1.7.6/input/tutorial/brahms-tweaked.ly ./input/tutorial/brahms-tweaked.ly
--- ../lilypond-1.7.6/input/tutorial/brahms-tweaked.ly	2002-09-20 11:21:07.000000000 +0200
+++ ./input/tutorial/brahms-tweaked.ly	2002-11-06 13:34:02.000000000 +0100
@@ -7,22 +7,23 @@
             \property Voice.Slur \set #'attachment = #'(stem . stem)
 
             \property Voice.Fingering \set #'extra-offset = #'(-0.3 . -1.8) 
-            fis4-3_\p ( ~
+           fis4-3_\p-(-~
+   
 
             \property Voice.Fingering \revert #'extra-offset
-            fis16 )a^" "^#'(finger "5") } \\
+            fis16 a-)^" "^#'(finger "5") } \\
         {
             \dynamicUp
             \property Voice.DynamicLineSpanner \override #'padding = #5.0
             \tieUp
-            fis16( \> d \! b \translator Staff = down
+            fis16-(-\> d b-\! \translator Staff = down
 	    \stemUp
-	    \clef treble g ~ < g8 )e> } \\
+	    \clef treble g-~ <<g e>>8-) } \\
         { s16
 	  \property Voice.Stem \set #'transparent = ##t
           d'
           \property Voice.Stem \revert #'transparent
-          ~ < d4 b4  > }
+          ~ <<d b>>4 }
     >
     \context Staff = down {
         \key d \major
diff -purN ../lilypond-1.7.6/input/tutorial/flowing.ly ./input/tutorial/flowing.ly
--- ../lilypond-1.7.6/input/tutorial/flowing.ly	2002-07-17 01:57:08.000000000 +0200
+++ ./input/tutorial/flowing.ly	2002-11-06 13:34:02.000000000 +0100
@@ -10,8 +10,8 @@
 melody = \notes \relative c' {
         \partial 8
         g8 |
-        c4 c8 d [es () d] c4 | f4 f8 g [es() d] c g |
-        c4 c8 d [es () d] c4 | d4 es8 d c4.
+        c4 c8 d es-[ ( d-]-) c4 | f4 f8 g es-(-[ d-)-] c g |
+        c4 c8 d es-[ ( d-]-) c4 | d4 es8 d c4.
         \bar "|."
 }
 
diff -purN ../lilypond-1.7.6/input/tutorial/galuppi.ly ./input/tutorial/galuppi.ly
--- ../lilypond-1.7.6/input/tutorial/galuppi.ly	2002-08-12 01:30:07.000000000 +0200
+++ ./input/tutorial/galuppi.ly	2002-11-06 13:34:02.000000000 +0100
@@ -3,8 +3,8 @@
 
 soprano = \notes \relative c''  {
 	fis8 g  g8.-\trill fis32 g a8 d, r a
-	b4 ~ \times 2/3 { [b16 cis d] } \times 2/3 { [e fis g] }
-	a,4 ~ \times 2/3 { [a16 b cis] } \times 2/3 { [d e fis] }
+	b4-~ \times 2/3 { b16-[ cis d-] } \times 2/3 { e-[ fis g-] }
+	a,4-~ \times 2/3 { a16-[ b cis-] } \times 2/3 { d-[ e fis-] }
 	a8 g16. fis32 g8.-\trill fis16 fis4
 }
 
@@ -16,8 +16,8 @@ bass = \notes \relative c {
 tenor = \notes \relative c' {
 	\stemUp\slurUp\tieUp
 	r8
-	d4 cis8 r d16. cis32 d4 | r8 e16. dis32 e4 ~ e8 d16. cis32 d4 ~ |
-	[d8 d8] [cis cis] d4
+	d4 cis8 r d16. cis32 d4 | r8 e16. dis32 e4 -~ e8 d16. cis32 d4 -~ |
+	d8-[ d8-] cis-[ cis-] d4
 }
 
 
diff -purN ../lilypond-1.7.6/input/tutorial/minuet.ly ./input/tutorial/minuet.ly
--- ../lilypond-1.7.6/input/tutorial/minuet.ly	2002-08-12 01:30:07.000000000 +0200
+++ ./input/tutorial/minuet.ly	2002-11-06 13:34:02.000000000 +0100
@@ -12,8 +12,8 @@
 	\repeat "volta" 2 \sequential {
 	    d4 g,8 a b c d4 g, g |
 	    e'4 c8 d e fis g4 g, g |
-	    c4 d8( )c b a( )b4 c8 b a g |
-	    a4 [b8 a] [g fis] g2.  |
+	    c4 d8-( c-) b a( b4-) c8 b a g |
+	    a4 b8-[ a-] g-[ fis-] g2.  |
 	}
 
         b'4 g8 a b g
diff -purN ../lilypond-1.7.6/input/tutorial/os-music.ly ./input/tutorial/os-music.ly
--- ../lilypond-1.7.6/input/tutorial/os-music.ly	2002-08-12 01:30:07.000000000 +0200
+++ ./input/tutorial/os-music.ly	2002-11-06 13:34:02.000000000 +0100
@@ -18,7 +18,7 @@ flautoI = \notes\relative c'' {
   bes as bes as bes as bes as
 }
 flautoII = \notes\relative c'' {
-  as8 bes as bes R1 d4 ~ d
+  as8 bes as bes R1 d4-~ d
 }
 tromboI = \notes\relative c'' {
   c4. c8 c8 c4. es4 r as, r
diff -purN ../lilypond-1.7.6/input/tutorial/sammartini.ly ./input/tutorial/sammartini.ly
--- ../lilypond-1.7.6/input/tutorial/sammartini.ly	2002-08-12 01:30:07.000000000 +0200
+++ ./input/tutorial/sammartini.ly	2002-11-06 13:34:02.000000000 +0100
@@ -1,9 +1,9 @@
-\version "1.5.68"
+\version "1.7.5"
 
 \include "paper16.ly"
  
 viola = \notes \relative c'  \context Voice = viola {
-    <c4-\arpeggio g' c>
+    <<c g' c>>4-\arpeggio
     \voiceTwo
     g'8. b,16
     s1 s2. r4
@@ -12,22 +12,22 @@ viola = \notes \relative c'  \context Vo
 
 oboes = \notes \relative c'' \context Voice = oboes {
     \voiceOne
-    s4  g8. b,16 c8 r <e'8. g> <f16 a>
-    \grace <e8( g> <d4 )f> <c2 e>
-    \times 2/3 { <d8  f> <e g> <f a> }
+    s4  g8. b,16 c8 r <<e' g>>8. <<f a>>16
+    \grace <<e g>>8-( <<d f>>4-) <<c e>>2
+    \times 2/3 { <<d  f>>8 <<e g>> <<f a>> }
     <
         { \times 2/3 { a8 g c }  c2 }
 	\\
         { f,8 e e2 }  
     >
 
-    \grace <c,8( e> <)b8. d8.-\trill> <c16 e> | 
-    [<d ( f> < )f8. a>] <)b,8 d> r [<d16( f> <f8. )a>] <b,8 d> r  |
-    [<c16( e>  < )e8. g>] <c8 e,>
+    \grace <<c, e>>8-( <<b d>>8.-)-\trill <<c e>>16 | 
+    [<<d  f>>-( <<f a>>8.-)] <<b, d>>8 r [<<d f>>16-( <<f a>>8.-)] <<b, d>>8 r  |
+    [<<c e>>16-(  <<e g>>8.-)] <<c e,>>8
 }
 
 hoomPah = \repeat unfold 8 \notes
-    \transpose c' {
+    \transpose c c {
 	\translator Staff = down
 	\stemUp
 	c8
@@ -42,9 +42,9 @@ bassvoices = \notes \relative c' {
     \stemBoth 
     
     [c8 c'8] r4
-    <g d'> r4
-    < { r2 <e4 c'> <c8 g'> } \\
-      { g2 ~ | g4 c8 } >
+    <<g d'>> r4
+    < { r2 <<e c'>>4  <<c g'>>8 } \\
+      { g2-~ | g4 c8 } >
 }
 
 \score {
@@ -62,3 +62,5 @@ bassvoices = \notes \relative c' {
         indent = 0.0
         linewidth = 15.0 \cm }
 }
+%% new-chords-done %%
+
diff -purN ../lilypond-1.7.6/input/tutorial/solar.ly ./input/tutorial/solar.ly
--- ../lilypond-1.7.6/input/tutorial/solar.ly	2002-08-12 01:30:07.000000000 +0200
+++ ./input/tutorial/solar.ly	2002-11-06 13:34:02.000000000 +0100
@@ -6,10 +6,9 @@
     \clef treble
     \key d \minor
     r4 r8 d''8 cis''4 e''4
-    d''8 a'4. ~ a'4. b'8
-    cis''4 cis''8 cis''8 bis'4 d''8 cis'' ~
+    d''8 a'4.-~ a'4. b'8
+    cis''4 cis''8 cis''8 bis'4 d''8 cis''-~
     cis''2 r2
-
   }
   \paper { }
 }
diff -purN ../lilypond-1.7.6/input/twinkle-pop.ly ./input/twinkle-pop.ly
--- ../lilypond-1.7.6/input/twinkle-pop.ly	2002-07-17 01:57:04.000000000 +0200
+++ ./input/twinkle-pop.ly	2002-11-06 13:33:38.000000000 +0100
@@ -1,4 +1,4 @@
-\version "1.5.68"
+\version "1.7.5"
 \header{
 filename = 	 "twinkle-pop.ly"
 xtitle = 	 "Ah, vous dirais-je, maman "
@@ -59,8 +59,8 @@ text =  \lyrics{ 
 
 \score {
         <  
-	   \chords \context ChordNames \transpose d'\acc
-	   \notes \context Staff=melody \transpose d'\melodie
+	   \chords \context ChordNames \transpose c d\acc
+	   \notes \context Staff=melody \transpose c d\melodie
            \lyrics \context Lyrics \text
         >
 	\header{
diff -purN ../lilypond-1.7.6/lily/auto-beam-engraver.cc ./lily/auto-beam-engraver.cc
--- ../lilypond-1.7.6/lily/auto-beam-engraver.cc	2002-09-30 11:23:42.000000000 +0200
+++ ./lily/auto-beam-engraver.cc	2002-11-06 13:34:02.000000000 +0100
@@ -490,12 +490,12 @@ Auto_beam_engraver::process_acknowledged
 }
 
 ENTER_DESCRIPTION (Auto_beam_engraver,
-/* descr */       "Generate beams based on measure characteristics and observed
-Stems.  Uses beatLength, measureLength and measurePosition to decide
-when to start and stop a beam.  Overriding beaming is done through
-@ref{Stem_engraver} properties stemLeftBeamCount and
-stemRightBeamCount.
-",
+/* descr */       "Generate beams based on measure characteristics and observed "
+"Stems.  Uses beatLength, measureLength and measurePosition to decide "
+"when to start and stop a beam.  Overriding beaming is done through "
+"@ref{Stem_engraver} properties stemLeftBeamCount and "
+"stemRightBeamCount. "
+,
 /* creats*/       "Beam",
 /* accepts */     "",
 /* acks  */      "stem-interface rest-interface beam-interface bar-line-interface",
diff -purN ../lilypond-1.7.6/lily/axis-group-engraver.cc ./lily/axis-group-engraver.cc
--- ../lilypond-1.7.6/lily/axis-group-engraver.cc	2002-09-28 17:55:35.000000000 +0200
+++ ./lily/axis-group-engraver.cc	2002-11-06 13:34:02.000000000 +0100
@@ -164,9 +164,8 @@ Hara_kiri_engraver::acknowledge_grob (Gr
 Hara_kiri_engraver::Hara_kiri_engraver(){}
 
 ENTER_DESCRIPTION(Hara_kiri_engraver,
-/* descr */       "Like Axis_group_engraver, but make a hara kiri spanner, and add
-interesting items (ie. note heads, lyric syllables and normal rests)
-",
+/* descr */       "Like Axis_group_engraver, but make a hara kiri spanner, and add "
+"interesting items (ie. note heads, lyric syllables and normal rests) ",
 /* creats*/       "HaraKiriVerticalGroup",
 /* accepts */     "",
 /* acks  */      "grob-interface",
diff -purN ../lilypond-1.7.6/lily/bar-engraver.cc ./lily/bar-engraver.cc
--- ../lilypond-1.7.6/lily/bar-engraver.cc	2002-09-30 11:23:42.000000000 +0200
+++ ./lily/bar-engraver.cc	2002-11-06 13:34:02.000000000 +0100
@@ -109,8 +109,8 @@ Bar_engraver::stop_translation_timestep 
 
 
 ENTER_DESCRIPTION(Bar_engraver,
-/* descr */       "Create barlines. This engraver is controlled through the
-@code{whichBar} property. If it has no bar line to create, it will forbid a linebreak at this point",
+/* descr */       "Create barlines. This engraver is controlled through the "
+"@code{whichBar} property. If it has no bar line to create, it will forbid a linebreak at this point",
 /* creats*/       "BarLine",
 /* accepts */     "",
 /* acks  */      "",
diff -purN ../lilypond-1.7.6/lily/cluster.cc ./lily/cluster.cc
--- ../lilypond-1.7.6/lily/cluster.cc	1970-01-01 01:00:00.000000000 +0100
+++ ./lily/cluster.cc	2002-11-14 11:28:38.000000000 +0100
@@ -0,0 +1,197 @@
+/*
+  cluster.cc -- implement Cluster
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 2002 Juergen Reuter <reuter@ipd.uka.de>
+*/
+
+#include <stdio.h>
+#include "cluster.hh"
+#include "grob.hh"
+#include "spanner.hh"
+#include "item.hh"
+#include "pitch.hh"
+#include "staff-symbol-referencer.hh"
+#include "lookup.hh"
+#include "box.hh"
+#include "interval.hh"
+#include "paper-def.hh"
+#include "paper-column.hh"
+
+/*
+ * TODO: Add support for cubic spline segments.
+ */
+Molecule
+brew_cluster_piece (Grob *me, Array<Offset> bottom_points, Array<Offset> top_points)
+{
+#if 0
+  Real blotdiameter = me->get_paper ()->get_var ("blotdiameter");
+#else
+  Real blotdiameter = Staff_symbol_referencer::staff_space (me)/2;
+#endif
+
+  Real padding;
+  SCM padding_scm = me->get_grob_property ("padding");
+  if (gh_number_p (padding_scm))
+    padding = gh_scm2double (padding_scm);
+  else
+    padding = 0.0;
+  Offset vpadding = Offset (0, padding);
+  Offset hpadding = Offset (0.5 * blotdiameter, 0);
+  Offset hvpadding = 0.5 * hpadding + vpadding;
+
+  SCM shape_scm = me->get_grob_property ("shape");
+  String shape;
+  if (gh_symbol_p (shape_scm))
+    {
+      shape = ly_symbol2string (shape_scm);
+    }
+  else
+    {
+      shape = "leftsided-stairs";
+    }
+
+
+  Molecule out = Molecule ();
+  Array<Offset> points;
+  points.clear ();
+  int size = bottom_points.size ();
+  if (String::compare (shape, "leftsided-stairs") == 0)
+    {
+      for (int i = 0; i < size - 1; i++)
+	{
+	  Box box;
+	  box.add_point (bottom_points[i] - hvpadding);
+	  box.add_point (Offset(top_points[i + 1][X_AXIS],
+				top_points[i][Y_AXIS]) + hvpadding);
+	  out.add_molecule (Lookup::roundfilledbox (box, blotdiameter));
+	}
+    }
+  else if (String::compare (shape, "rightsided-stairs") == 0)
+    {
+      for (int i = 0; i < size - 1; i++)
+	{
+	  Box box;
+	  box.add_point (Offset(bottom_points[i][X_AXIS],
+				bottom_points[i + 1][Y_AXIS]) - hvpadding);
+	  box.add_point (top_points[i + 1] + hvpadding);
+	  out.add_molecule (Lookup::roundfilledbox (box, blotdiameter));
+	}
+    }
+  else if (String::compare (shape, "centered-stairs") == 0)
+    {
+      Real left_xmid = bottom_points[0][X_AXIS];
+      for (int i = 0; i < size - 1; i++)
+	{
+	  Real right_xmid =
+	    0.5 * (bottom_points[i][X_AXIS] + bottom_points[i + 1][X_AXIS]);
+	  Box box;
+	  box.add_point (Offset (left_xmid, bottom_points[i][Y_AXIS]) -
+			 hvpadding);
+	  box.add_point (Offset (right_xmid, top_points[i][Y_AXIS]) +
+			 hvpadding);
+	  out.add_molecule (Lookup::roundfilledbox (box, blotdiameter));
+	  left_xmid = right_xmid;
+	}
+      Real right_xmid = bottom_points[size - 1][X_AXIS];
+      Box box;
+      box.add_point (Offset (left_xmid, bottom_points[size - 1][Y_AXIS]) -
+		     hvpadding);
+      box.add_point (Offset (right_xmid, top_points[size - 1][Y_AXIS]) +
+		     hvpadding);
+      out.add_molecule (Lookup::roundfilledbox (box, blotdiameter));
+    }
+  else if (String::compare (shape, "ramp") == 0)
+    {
+      points.push (bottom_points[0] - vpadding + hpadding);
+      for (int i = 1; i < size - 1; i++)
+	{
+	  points.push (bottom_points[i] - vpadding);
+	}
+      points.push (bottom_points[size - 1] - vpadding - hpadding);
+      points.push (top_points[size - 1] + vpadding - hpadding);
+      for (int i = size - 2; i > 0; i--)
+	{
+	  points.push (top_points[i] + vpadding);
+	}
+      points.push (top_points[0] + vpadding + hpadding);
+      out.add_molecule (Lookup::round_filled_polygon (points, blotdiameter));
+    }
+  else
+    {
+      me->warning (_f ("unknown cluster shape `%s'", shape.to_str0 ()));
+    }
+  return out;
+}
+
+MAKE_SCHEME_CALLBACK (Cluster,brew_molecule,1);
+SCM
+Cluster::brew_molecule (SCM smob)
+{
+  Grob *me = unsmob_grob (smob);
+
+  Spanner *spanner = dynamic_cast<Spanner*> (me);
+  if (!spanner) {
+    me->programming_error ("Cluster::brew_molecule(): not a spanner");
+    return SCM_EOL;
+  }
+
+  Item *left_bound = spanner->get_bound (LEFT);
+  Item *right_bound = spanner->get_bound (RIGHT);
+  bool right_broken = right_bound->break_status_dir () != CENTER;
+
+  Grob *common = left_bound->common_refpoint (right_bound, X_AXIS);
+
+  Grob *column = 0;
+  Array<Offset> bottom_points;
+  Array<Offset> top_points;
+  bottom_points.clear ();
+  top_points.clear ();
+  SCM column_scm = SCM_EOL;
+  for (SCM columns_scm = me->get_grob_property ("segments");
+       columns_scm != SCM_EOL;
+       columns_scm = ly_cdr (columns_scm)) {
+    column_scm = ly_car (columns_scm);
+    SCM col_scm = ly_car (column_scm);
+    if (gh_number_p (col_scm))
+      // broken spanner: this column not in this piece
+      if (!column)
+	continue; // still have to expect columns
+      else
+	break; // ok, we have seen all columns
+    column = unsmob_grob (col_scm);
+    column_scm = ly_cdr (column_scm);
+    Real y = 0.5 * gh_scm2double (ly_car (column_scm));
+    column_scm = ly_cdr (column_scm);
+    Pitch *pitch_min = unsmob_pitch (ly_car (column_scm));
+    column_scm = ly_cdr (column_scm);
+    Pitch *pitch_max = unsmob_pitch (ly_car (column_scm));
+    Real height = 0.5 * (pitch_max->steps () - pitch_min->steps ());
+    Real x = column->relative_coordinate (common, X_AXIS);
+    if (right_broken)
+      x -= left_bound->relative_coordinate (common, X_AXIS);
+    bottom_points.push (Offset (x, y));
+    top_points.push (Offset (x, y + height));
+  }
+  if (right_broken)
+    {
+      Real y = 0.5 * gh_scm2double (ly_car (column_scm));
+      column_scm = ly_cdr (column_scm);
+      Pitch *pitch_min = unsmob_pitch (ly_car (column_scm));
+      column_scm = ly_cdr (column_scm);
+      Pitch *pitch_max = unsmob_pitch (ly_car (column_scm));
+      Real height = 0.5 * (pitch_max->steps () - pitch_min->steps ());
+      Real x =
+	right_bound->relative_coordinate (common, X_AXIS) -
+	left_bound->relative_coordinate (common, X_AXIS);
+      bottom_points.push (Offset (x, y));
+      top_points.push (Offset (x, y + height));
+    }
+  Molecule out = brew_cluster_piece (me, bottom_points, top_points);
+  return out.smobbed_copy ();
+}
+
+ADD_INTERFACE (Cluster,"cluster-interface",
+  "A graphically drawn musical cluster.",
+  "shape padding segments");
diff -purN ../lilypond-1.7.6/lily/cluster-engraver.cc ./lily/cluster-engraver.cc
--- ../lilypond-1.7.6/lily/cluster-engraver.cc	1970-01-01 01:00:00.000000000 +0100
+++ ./lily/cluster-engraver.cc	2002-11-13 01:53:03.000000000 +0100
@@ -0,0 +1,188 @@
+/*
+  cluster-engraver.cc -- implement Cluster_engraver
+
+  (c) 2002 Juergen Reuter <reuter@ipd.uka.de>
+*/
+
+#include "engraver.hh"
+#include "item.hh"
+#include "spanner.hh"
+#include "note-head.hh"
+#include "warn.hh"
+
+class Cluster_engraver : public Engraver
+{
+
+protected:
+TRANSLATOR_DECLARATIONS(Cluster_engraver);
+  virtual void start_translation_timestep ();
+  virtual bool try_music (Music *);
+  virtual void process_music ();  
+  virtual void acknowledge_grob (Grob_info);
+  virtual void stop_translation_timestep ();
+
+private:
+  Drul_array<Music*> reqs_drul_;
+  Pitch pitch_min, pitch_max;
+  Spanner *cluster;
+  SCM columns_scm;
+};
+
+void reset_min_max (Pitch *pitch_min, Pitch *pitch_max)
+{
+  /*
+   * (pitch_min > pitch_max) means that pitches are not yet
+   * initialized
+   */
+  *pitch_min = Pitch (0, 0, +1);
+  *pitch_max = Pitch (0, 0, -1);
+}
+
+Cluster_engraver::Cluster_engraver ()
+{
+  cluster = 0;
+  columns_scm = SCM_EOL;
+  reqs_drul_[LEFT] = reqs_drul_[RIGHT] = 0;
+}
+
+bool
+Cluster_engraver::try_music (Music *m)
+{
+  if (m->is_mus_type ("abort-event"))
+    {
+      reqs_drul_[START] = 0;
+      reqs_drul_[STOP] = 0;
+      if (cluster)
+	{
+	  cluster->suicide ();
+	  cluster = 0;
+	  columns_scm = SCM_EOL;
+	}
+    }
+  else if (m->is_mus_type ("cluster-event"))
+    {
+      Direction d = to_dir (m->get_mus_property ("span-direction"));
+      reqs_drul_[d] = m;
+      return true;
+    }
+  return false;
+}
+
+void
+Cluster_engraver::process_music ()
+{
+  if (reqs_drul_[STOP])
+    {
+      if (!cluster)
+	{
+	  reqs_drul_[STOP]->origin ()->warning ("can't find start of cluster");
+	}
+      else
+	{
+	  Grob *bound = unsmob_grob (get_property ("currentMusicalColumn"));
+	  cluster->set_bound (RIGHT, bound);
+	  cluster->set_grob_property ("segments", columns_scm);
+	  typeset_grob (cluster);
+	  cluster = 0;
+	  columns_scm = SCM_EOL;
+	}
+      reqs_drul_[STOP] = 0;
+    }
+  if (reqs_drul_[START])
+    {
+      if (cluster)
+	{
+	  reqs_drul_[START]->origin ()->warning ("may not nest clusters");
+	}
+      else
+	{
+	  SCM basicProperties = get_property ("Cluster");
+	  cluster = new Spanner (basicProperties);
+	  columns_scm = SCM_EOL;
+	  Grob *bound = unsmob_grob (get_property ("currentMusicalColumn"));
+	  cluster->set_bound (LEFT, bound);
+	  announce_grob (cluster, bound->self_scm ());
+	}
+      reqs_drul_[START] = 0;
+    }
+}
+
+void
+Cluster_engraver::start_translation_timestep ()
+{
+  reset_min_max (&pitch_min, &pitch_max);
+}
+
+void
+Cluster_engraver::stop_translation_timestep ()
+{
+  if (cluster)
+    {
+      SCM column_scm = get_property ("currentMusicalColumn");
+      if (column_scm == SCM_EOL)
+	{
+	  programming_error("failed retrieving current column");
+	  return;
+	}
+
+      if (Pitch::compare (pitch_min, pitch_max) <= 0)
+	{
+	  int staff_position = pitch_min.steps ();
+	  SCM c0 = get_property ("centralCPosition");
+	  if (gh_number_p (c0))
+	    staff_position += gh_scm2int (c0);
+	  SCM segment = scm_list_n (column_scm,
+				    gh_int2scm (staff_position),
+				    pitch_min.smobbed_copy (),
+				    pitch_max.smobbed_copy (),
+				    SCM_UNDEFINED);
+	  segment = scm_list_n (segment, SCM_UNDEFINED);
+	  columns_scm = (columns_scm != SCM_EOL) ?
+	    gh_append2 (columns_scm, segment) : segment;
+	}
+      else
+	{
+	  /* This timestep is caused by a different voice of the same
+	     staff and hence should be ignored. */
+	}
+    }
+}
+
+void
+Cluster_engraver::acknowledge_grob (Grob_info info)
+{
+  Item *item = dynamic_cast <Item *>(info.grob_);
+  if (item)
+    {
+      if (Note_head::has_interface (info.grob_))
+	{
+	  Music *nr = info.music_cause ();
+	  if (nr && nr->is_mus_type ("note-event"))
+	    {
+	      Pitch pitch = *unsmob_pitch (nr->get_mus_property ("pitch"));
+	      if (Pitch::compare (pitch_min, pitch_max) > 0) // already init'd?
+		{
+		  // not yet init'd; use current pitch to init min/max
+		  pitch_min = pitch;
+		  pitch_max = pitch;
+		}
+	      else if (Pitch::compare (pitch, pitch_max) > 0) // new max?
+		{
+		  pitch_max = pitch;
+		}
+	      else if (Pitch::compare (pitch, pitch_min) < 0) // new min?
+		{
+		  pitch_min = pitch;
+		}
+	    }
+	}
+    }
+}
+
+ENTER_DESCRIPTION(Cluster_engraver,
+/* descr */	"engraves a cluster",
+/* creats*/	"Cluster",
+/* accepts */	"cluster-event",
+/* acks  */	"note-head-interface",
+/* reads */	"",
+/* write */	"");
diff -purN ../lilypond-1.7.6/lily/forbid-break-engraver.cc ./lily/forbid-break-engraver.cc
--- ../lilypond-1.7.6/lily/forbid-break-engraver.cc	2002-09-28 17:55:36.000000000 +0200
+++ ./lily/forbid-break-engraver.cc	2002-11-06 13:34:03.000000000 +0100
@@ -13,8 +13,7 @@ public:
 Forbid_line_break_engraver::Forbid_line_break_engraver(){}
 
 ENTER_DESCRIPTION(Forbid_line_break_engraver,
-/* descr */       "Forbid line breaks when note heads are still playing
-at some point.",
+/* descr */       "Forbid line breaks when note heads are still playing at some point.",
 /* creats*/       "",
 /* accepts */     "",
 /* acks  */      "",
diff -purN ../lilypond-1.7.6/lily/grob.cc ./lily/grob.cc
--- ../lilypond-1.7.6/lily/grob.cc	2002-10-21 00:44:15.000000000 +0200
+++ ./lily/grob.cc	2002-11-14 11:28:38.000000000 +0100
@@ -257,7 +257,6 @@ Grob::get_uncached_molecule ()const
   SCM  mol = SCM_EOL;
   if (gh_procedure_p (proc)) 
     mol = gh_apply (proc, scm_list_n (this->self_scm (), SCM_UNDEFINED));
-
   
   Molecule *m = unsmob_molecule (mol);
   
diff -purN ../lilypond-1.7.6/lily/include/cluster.hh ./lily/include/cluster.hh
--- ../lilypond-1.7.6/lily/include/cluster.hh	1970-01-01 01:00:00.000000000 +0100
+++ ./lily/include/cluster.hh	2002-11-12 21:47:41.000000000 +0100
@@ -0,0 +1,25 @@
+/*
+  cluster.hh
+
+  source file of the GNU LilyPond music typesetter
+
+ (C) 2002 Juergen Reuter <reuter@ipd.uka.de>
+*/
+
+#ifndef CLUSTER_HH
+#define CLUSTER_HH
+
+#include "lily-guile.hh"
+#include "molecule.hh"
+
+class Cluster
+{
+public:
+  DECLARE_SCHEME_CALLBACK (brew_molecule, (SCM ));
+  //  DECLARE_SCHEME_CALLBACK (after_line_breaking, (SCM));
+  static bool has_interface (Grob *);
+  // DECLARE_SCHEME_CALLBACK (set_spacing_rods, (SCM ));
+};
+
+#endif // CLUSTER_HH
+
diff -purN ../lilypond-1.7.6/lily/include/lily-proto.hh ./lily/include/lily-proto.hh
--- ../lilypond-1.7.6/lily/include/lily-proto.hh	2002-09-30 11:23:43.000000000 +0200
+++ ./lily/include/lily-proto.hh	2002-11-13 01:40:21.000000000 +0100
@@ -41,6 +41,7 @@ class Break_algorithm;
 class Change_iterator;
 class Change_translator;
 class Chord_tremolo_iterator;
+class Cluster_engraver;
 class Column_x_positions;
 class Context_specced_music;
 class Engraver;
diff -purN ../lilypond-1.7.6/lily/include/lookup.hh ./lily/include/lookup.hh
--- ../lilypond-1.7.6/lily/include/lookup.hh	2002-05-19 01:45:17.000000000 +0200
+++ ./lily/include/lookup.hh	2002-11-13 01:40:21.000000000 +0100
@@ -18,8 +18,10 @@
 
 struct Lookup
 {
+  static Molecule dot (Offset p, Real radius);
   static Molecule bracket (Axis a, Interval iv, Real thick, Real protude);
   static Molecule accordion (SCM arg, Real interline_f, Font_metric*fm);
+  static Molecule round_filled_polygon (Array<Offset> points, Real blotdiameter);
   static Molecule frame (Box b, Real thick);
   static Molecule slur (Bezier controls, Real cthick, Real thick);
   static Molecule bezier_sandwich (Bezier top_curve, Bezier bottom_curve);
@@ -31,6 +33,7 @@ struct Lookup
   static Molecule roundfilledbox (Box b, Real blotdiameter);
   static Molecule repeat_slash (Real w, Real slope, Real th);
   static Molecule line (Real th, Offset from, Offset to);
+  static Molecule triangle (Interval, Real, Real);
 };
 
 #endif // LOOKUP_HH
diff -purN ../lilypond-1.7.6/lily/include/measure-grouping-spanner.hh ./lily/include/measure-grouping-spanner.hh
--- ../lilypond-1.7.6/lily/include/measure-grouping-spanner.hh	1970-01-01 01:00:00.000000000 +0100
+++ ./lily/include/measure-grouping-spanner.hh	2002-11-08 02:39:37.000000000 +0100
@@ -0,0 +1,25 @@
+/*   
+measure-grouping-spanner.hh -- declare 
+
+source file of the GNU LilyPond music typesetter
+
+(c) 2002 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ */
+
+#ifndef MEASURE_GROUPING_SPANNER_HH
+#define MEASURE_GROUPING_SPANNER_HH
+
+#include "grob.hh"
+
+class Measure_grouping
+{
+public:
+  DECLARE_SCHEME_CALLBACK (brew_molecule, (SCM ));
+ 
+  static bool has_interface (Grob*);
+};
+
+
+#endif /* MEASURE_GROUPING_SPANNER_HH */
+
diff -purN ../lilypond-1.7.6/lily/include/pitch.hh ./lily/include/pitch.hh
--- ../lilypond-1.7.6/lily/include/pitch.hh	2002-07-26 12:27:01.000000000 +0200
+++ ./lily/include/pitch.hh	2002-11-06 13:34:07.000000000 +0100
@@ -62,15 +62,12 @@ public:
   /// return pitch from central c (in halfnotes)
   int semitone_pitch () const; 
   String string () const;
-  
-
 
   SCM smobbed_copy () const;
   DECLARE_SCHEME_CALLBACK (less_p, (SCM a, SCM b));
   DECLARE_SIMPLE_SMOBS (Pitch,);
-
-
 };
+
 SCM ly_pitch_transpose (SCM p, SCM delta);
 DECLARE_UNSMOB(Pitch,pitch);
 
@@ -79,6 +76,7 @@ INSTANTIATE_COMPARE (Pitch, Pitch::compa
 
 int compare (Array<Pitch>*, Array<Pitch>*);
 extern SCM pitch_less_proc;
+Pitch interval (Pitch const & from , Pitch const & to );
 
 #endif /* MUSICAL_PITCH_HH */
 
diff -purN ../lilypond-1.7.6/lily/include/side-position-interface.hh ./lily/include/side-position-interface.hh
--- ../lilypond-1.7.6/lily/include/side-position-interface.hh	2002-10-21 00:44:16.000000000 +0200
+++ ./lily/include/side-position-interface.hh	2002-11-13 01:40:21.000000000 +0100
@@ -25,7 +25,9 @@ public:
   DECLARE_SCHEME_CALLBACK (aligned_on_support_refpoints, (SCM element, SCM axis));
   
   DECLARE_SCHEME_CALLBACK (aligned_side, (SCM element, SCM axis));  
-  
+
+  DECLARE_SCHEME_CALLBACK (out_of_staff, (SCM element, SCM axis));  
+
   DECLARE_SCHEME_CALLBACK (quantised_position, (SCM element, SCM axis));
 
   static SCM general_side_position (Grob*, Axis, bool);
diff -purN ../lilypond-1.7.6/lily/instrument-name-engraver.cc ./lily/instrument-name-engraver.cc
--- ../lilypond-1.7.6/lily/instrument-name-engraver.cc	2002-09-28 17:55:36.000000000 +0200
+++ ./lily/instrument-name-engraver.cc	2002-11-06 13:34:03.000000000 +0100
@@ -122,10 +122,9 @@ Instrument_name_engraver::acknowledge_gr
 
 
 ENTER_DESCRIPTION(Instrument_name_engraver,
-/* descr */       " Prints the name of the instrument (specified by
-@code{Staff.instrument} and @code{Staff.instr})
-at the left of the
-staff.",
+/* descr */       " Prints the name of the instrument (specified by "
+" @code{Staff.instrument} and @code{Staff.instr}) "
+"at the left of the staff. ",
 /* creats*/       "InstrumentName",
 /* accepts */     "",
 /* acks  */      "bar-line-interface axis-group-interface",
diff -purN ../lilypond-1.7.6/lily/ligature-bracket-engraver.cc ./lily/ligature-bracket-engraver.cc
--- ../lilypond-1.7.6/lily/ligature-bracket-engraver.cc	2002-09-30 11:23:42.000000000 +0200
+++ ./lily/ligature-bracket-engraver.cc	2002-11-13 01:40:19.000000000 +0100
@@ -8,6 +8,7 @@
  */
 #include "ligature-engraver.hh"
 #include "spanner.hh"
+#include "warn.hh"
 
 class Ligature_bracket_engraver : public Ligature_engraver
 {
@@ -35,7 +36,7 @@ Ligature_bracket_engraver::create_ligatu
 ENTER_DESCRIPTION(Ligature_bracket_engraver,
 /* descr */       "Handles Ligature_events by engraving Ligature brackets.",
 /* creats*/       "LigatureBracket",
-/* accepts */     "",
+/* accepts */     "ligature-event abort-event",
 /* acks  */      "ligature-head-interface rest-interface",
 /* reads */       "",
 /* write */       "");
diff -purN ../lilypond-1.7.6/lily/ligature-engraver.cc ./lily/ligature-engraver.cc
--- ../lilypond-1.7.6/lily/ligature-engraver.cc	2002-09-30 11:23:42.000000000 +0200
+++ ./lily/ligature-engraver.cc	2002-11-13 01:40:19.000000000 +0100
@@ -171,7 +171,7 @@ Ligature_engraver::acknowledge_grob (Gro
       if (Ligature_head::has_interface (info.grob_))
 	{
 	  info.grob_->set_grob_property ("ligature-primitive-callback",
-					   brew_ligature_primitive_proc);
+					 brew_ligature_primitive_proc);
 	}
       else if (Rest::has_interface (info.grob_))
 	{
diff -purN ../lilypond-1.7.6/lily/line-spanner.cc ./lily/line-spanner.cc
--- ../lilypond-1.7.6/lily/line-spanner.cc	2002-10-21 00:44:15.000000000 +0200
+++ ./lily/line-spanner.cc	2002-11-13 01:40:19.000000000 +0100
@@ -294,8 +294,10 @@ Line_spanner::brew_molecule (SCM smob) 
 
 
 ADD_INTERFACE (Line_spanner, "line-spanner-interface",
-  "Generic line drawn between two objects, eg. for use with glissandi.
-gap is measured in staff-spaces.   ",
+  "Generic line drawn between two objects, eg. for use with glissandi.\n"
+"gap is measured in staff-spaces.\n"
+"The property 'type is one of: line, dashed-line, trill, dotted-line or zigzag.\n"
+"\n",
   "gap dash-period dash-length zigzag-width zigzag-length thickness type");
 
 
diff -purN ../lilypond-1.7.6/lily/lookup.cc ./lily/lookup.cc
--- ../lilypond-1.7.6/lily/lookup.cc	2002-10-21 00:44:15.000000000 +0200
+++ ./lily/lookup.cc	2002-11-13 01:40:19.000000000 +0100
@@ -23,6 +23,21 @@
 #include "molecule.hh"
 #include "lookup.hh"
 #include "font-metric.hh"
+#include "interval.hh"
+
+Molecule
+Lookup::dot (Offset p, Real radius)
+{
+  SCM at = (scm_list_n (ly_symbol2scm ("dot"),
+			gh_double2scm (p[X_AXIS]),
+			gh_double2scm (p[Y_AXIS]),
+			gh_double2scm (radius),
+			SCM_UNDEFINED));
+  Box box;
+  box.add_point (p - Offset (radius, radius));
+  box.add_point (p + Offset (radius, radius));
+  return Molecule (box, at);
+}
 
 Molecule 
 Lookup::beam (Real slope, Real width, Real thick) 
@@ -158,18 +173,149 @@ Lookup::roundfilledbox (Box b, Real blot
   return Molecule (b,at);
 }
 
+/*
+ * Create Molecule that represents a filled polygon with round edges.
+ *
+ * LIMITATIONS:
+ *
+ * (a) Only outer (convex) edges are rounded.
+ *
+ * (b) This algorithm works as expected only for polygons whose edges
+ * do not intersect.  For example, the polygon ((0, 0), (q, 0), (0,
+ * q), (q, q)) has an intersection at point (q/2, q/2) and therefore
+ * will give a strange result.  Even non-adjacent edges that just
+ * touch each other will in general not work as expected for non-null
+ * blotdiameter.
+ *
+ * (c) Given a polygon ((x0, y0), (x1, y1), ... , (x(n-1), y(n-1))),
+ * if there is a natural number k such that blotdiameter is greater
+ * than the maximum of { | (x(k mod n), y(k mod n)) - (x((k+1) mod n),
+ * y((k+1) mod n)) |, | (x(k mod n), y(k mod n)) - (x((k+2) mod n),
+ * y((k+2) mod n)) |, | (x((k+1) mod n), y((k+1) mod n)) - (x((k+2)
+ * mod n), y((k+2) mod n)) | }, then the outline of the rounded
+ * polygon will exceed the outline of the core polygon.  In other
+ * words: Do not draw rounded polygons that have a leg smaller or
+ * thinner than blotdiameter (or set blotdiameter to a sufficiently
+ * small value -- maybe even 0.0)!
+ *
+ * NOTE: Limitations (b) and (c) arise from the fact that round edges
+ * are made by moulding sharp edges to round ones rather than adding
+ * to a core filled polygon.  For details of these two different
+ * approaches, see the thread upon the ledger lines patch that started
+ * on March 25, 2002 on the devel mailing list.  The below version of
+ * round_filled_polygon() sticks to the moulding model, which the
+ * majority of the list participants finally voted for.  This,
+ * however, results in the above limitations and a much increased
+ * complexity of the algorithm, since it has to compute a shrinked
+ * polygon -- which is not trivial define precisely and unambigously.
+ * With the other approach, one simply could move a circle of size
+ * blotdiameter along all edges of the polygon (which is what the
+ * postscript routine in the backend effectively does, but on the
+ * shrinked polygon). --jr
+ */
+Molecule
+Lookup::round_filled_polygon (Array<Offset> points, Real blotdiameter)
+{
+  /* TODO: Maybe print a warning if one of the above limitations
+     applies to the given polygon.  However, this is quite complicated
+     to check. */
+
+  /* remove consecutive duplicate points */
+  const Real epsilon = 0.01;
+  for (int i = 0; i < points.size ();)
+    {
+      int next_i = (i + 1) % points.size ();
+      Real d = (points[i] - points[next_i]).length ();
+      if (d < epsilon)
+	points.del (next_i);
+      else
+	i++;
+    }
+
+  /* special cases: degenerated polygons */
+  if (points.size () == 0)
+    return Molecule ();
+  if (points.size () == 1)
+    return dot (points[0], 0.5 * blotdiameter);
+  if (points.size () == 2)
+    return line (blotdiameter, points[0], points[1]);
+
+  /* shrink polygon in size by 0.5 * blotdiameter */
+  Array<Offset> shrinked_points;
+  shrinked_points.set_size (points.size ());
+  bool ccw = 1; // true, if three adjacent points are counterclockwise ordered
+  for (int i = 0; i < points.size (); i++)
+    {
+      int i0 = i;
+      int i1 = (i + 1) % points.size ();
+      int i2 = (i + 2) % points.size ();
+      Offset p0 = points[i0];
+      Offset p1 = points[i1];
+      Offset p2 = points[i2];
+      Offset p10 = p0 - p1;
+      Offset p12 = p2 - p1;
+      if (p10.length () != 0.0)
+	{ // recompute ccw
+	  Real phi = p10.arg ();
+	  // rotate (p2 - p0) by (-phi)
+	  Offset q = complex_multiply (p2 - p0, complex_exp (Offset (1.0, -phi)));
+
+	  if (q[Y_AXIS] > 0)
+	    ccw = 1;
+	  else if (q[Y_AXIS] < 0)
+	    ccw = 0;
+	  else {} // keep ccw unchanged
+	}
+      else {} // keep ccw unchanged
+      Offset p10n = (1.0 / p10.length ()) * p10; // normalize length to 1.0
+      Offset p12n = (1.0 / p12.length ()) * p12;
+      Offset p13n = 0.5 * (p10n + p12n);
+      Offset p14n = 0.5 * (p10n - p12n);
+      Offset p13;
+      Real d = p13n.length () * p14n.length (); // distance p3n to line(p1..p0)
+      if (d < epsilon)
+	// special case: p0, p1, p2 are on a single line => build
+	// vector orthogonal to (p2-p0) of length 0.5 blotdiameter
+	{
+	  p13[X_AXIS] = p10[Y_AXIS];
+	  p13[Y_AXIS] = -p10[X_AXIS];
+	  p13 = (0.5 * blotdiameter / p13.length ()) * p13;
+	}
+      else
+	p13 = (0.5 * blotdiameter / d) * p13n;
+      shrinked_points[i1] = p1 + ((ccw) ? p13 : -p13);
+    }
+
+  /* build scm expression and bounding box */
+  SCM shrinked_points_scm = SCM_EOL;
+  Box box;
+  for (int i = 0; i < shrinked_points.size (); i++)
+    {
+      SCM x = gh_double2scm (shrinked_points[i][X_AXIS]);
+      SCM y = gh_double2scm (shrinked_points[i][Y_AXIS]);
+      shrinked_points_scm = gh_cons (x, gh_cons (y, shrinked_points_scm));
+      box.add_point (points[i]);
+    }
+  SCM polygon_scm = scm_list_n (ly_symbol2scm ("polygon"),
+				ly_quote_scm (ly_quote_scm (shrinked_points_scm)),
+				gh_double2scm (blotdiameter),
+				SCM_UNDEFINED);
+
+  Molecule polygon = Molecule (box, polygon_scm);
+  shrinked_points.clear ();
+  return polygon;
+}
+
 Molecule
 Lookup::frame (Box b, Real thick)
 {
   Molecule m;
   Direction d = LEFT;
-  Axis a = X_AXIS;
-  while (a < NO_AXES)
+  for (Axis a = X_AXIS; a < NO_AXES; a = Axis (a + 1))
     {
+      Axis o = Axis ((a+1)%NO_AXES);
       do
 	{
-	  Axis o = Axis ((a+1)%NO_AXES);
-
 	  Box edges;
 	  edges[a] = b[a][d] + 0.5 * thick * Interval (-1, 1);
 	  edges[o][DOWN] = b[o][DOWN] - thick/2;
@@ -551,15 +697,31 @@ Lookup::bracket (Axis a, Interval iv, Re
   return m;
 }
 
+Molecule
+Lookup::triangle (Interval iv, Real thick, Real protude)
+{
+  Box b ;
+  b[X_AXIS] = iv;
+  b[Y_AXIS] = Interval (0 <? protude , 0 >? protude);
+
+  SCM s = scm_list_n (ly_symbol2scm ("symmetric-x-triangle"),
+		      gh_double2scm (thick),
+		      gh_double2scm (iv.length()), 
+		      gh_double2scm (protude), SCM_UNDEFINED);
+
+  return Molecule (b, s);
+}
+
+
 /*
   TODO: use rounded boxes.
  */
 LY_DEFINE(ly_bracket ,"ly:bracket",
 	  4, 0, 0,
 	  (SCM a, SCM iv, SCM t, SCM p),
-	  "Make a bracket in direction @var{a}. The extent of the bracket is
-given by @var{iv}. The wings protude by an amount of @var{p}, which
-may be negative. The thickness is given by @var{t}.")
+	  "Make a bracket in direction @var{a}. The extent of the bracket is " 
+	  "given by @var{iv}. The wings protude by an amount of @var{p}, which "
+	  "may be negative. The thickness is given by @var{t}.")
 {
   SCM_ASSERT_TYPE(ly_axis_p (a), a, SCM_ARG1, __FUNCTION__, "axis") ;
   SCM_ASSERT_TYPE(ly_number_pair_p (iv), iv, SCM_ARG2, __FUNCTION__, "number pair") ;
diff -purN ../lilypond-1.7.6/lily/lyric-phrasing-engraver.cc ./lily/lyric-phrasing-engraver.cc
--- ../lilypond-1.7.6/lily/lyric-phrasing-engraver.cc	2002-09-30 11:23:42.000000000 +0200
+++ ./lily/lyric-phrasing-engraver.cc	2002-11-06 13:34:04.000000000 +0100
@@ -354,12 +354,11 @@ Lyric_phrasing_engraver::stop_translatio
 
 
 ENTER_DESCRIPTION(Lyric_phrasing_engraver,
-		  /* descr */       "
-This engraver combines note heads and lyrics for alignment.
-
-This engraver is switched on by default. Turn it off for faster
-processing of orchestral scores.
-",
+		  /* descr */       
+"This engraver combines note heads and lyrics for alignment. "
+"\n\n"
+"This engraver is switched on by default. Turn it off for faster " 
+"processing of orchestral scores. ",
 		  /* creats*/       "",
 		  /* accepts */     "",
 /* acks  */      "lyric-syllable-interface note-head-interface lyric-extender-interface",
diff -purN ../lilypond-1.7.6/lily/main.cc ./lily/main.cc
--- ../lilypond-1.7.6/lily/main.cc	2002-10-21 00:44:15.000000000 +0200
+++ ./lily/main.cc	2002-11-12 11:48:00.000000000 +0100
@@ -231,23 +231,14 @@ setup_paths ()
     prefix_directory[1] = lilypond_prefix;
 
 #if HAVE_GETTEXT
-  setlocale (LC_ALL, ""); /* enable locales */
-  setlocale (LC_NUMERIC, "C"); /* musn't have comma's in TeX output... */
+  /* Enable locales */
+  setlocale (LC_ALL, "");
+  /* Mustn't have commas in TeX output... */
+  setlocale (LC_NUMERIC, "C");
   String lily_locale_dir;
   String name (PACKAGE);
   name.to_lower ();
-
-  /*
-    urg; what *do* we want with $LILYPONDPREFIX, DIR_DATADIR and $prefix/share
-    handy for multiple source-dir runs, though...
-   */
-  if (!String (prefix_directory[0]).empty_b ())
-    {
-      lily_locale_dir = String (prefix_directory[0]) + "/share/locale";
-      bindtextdomain (name.to_str0 (), lily_locale_dir.to_str0 ());
-    }
-  else
-    bindtextdomain (name.to_str0 (), LOCALEDIR);
+  bindtextdomain (name.to_str0 (), LOCALEDIR);
   textdomain (name.to_str0 ());
 #endif
 
diff -purN ../lilypond-1.7.6/lily/measure-grouping-engraver.cc ./lily/measure-grouping-engraver.cc
--- ../lilypond-1.7.6/lily/measure-grouping-engraver.cc	1970-01-01 01:00:00.000000000 +0100
+++ ./lily/measure-grouping-engraver.cc	2002-11-13 01:40:20.000000000 +0100
@@ -0,0 +1,118 @@
+/*   
+  measure-grouping-engraver.cc --  implement Measure_grouping_engraver
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 2002 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ */
+
+#include "score-engraver.hh"
+#include "spanner.hh"
+#include "warn.hh"
+#include "side-position-interface.hh"
+
+class Measure_grouping_engraver : public Engraver
+{
+public:
+  TRANSLATOR_DECLARATIONS(Measure_grouping_engraver);
+
+protected:
+  Spanner * grouping_;
+  Rational stop_grouping_mom_;
+
+  virtual void process_music ();
+  virtual void finalize ();
+  virtual void acknowledge_grob (Grob_info);
+};
+
+void
+Measure_grouping_engraver::finalize()
+{
+  if (grouping_)
+    {
+      grouping_->set_bound (RIGHT, unsmob_grob (get_property ("currentCommandColumn")));
+      typeset_grob (grouping_);
+      grouping_->suicide ();
+      grouping_= 0;
+    }
+}
+
+
+void
+Measure_grouping_engraver::acknowledge_grob (Grob_info gi)
+{
+  if (grouping_)
+    {
+      Side_position_interface::add_support (grouping_, gi.grob_);
+    }
+}
+
+void
+Measure_grouping_engraver::process_music ()
+{
+  Moment now = now_mom();
+  if (grouping_ && now.main_part_ >= stop_grouping_mom_ && !now.grace_part_)
+    {
+      grouping_->set_bound (RIGHT,
+			    unsmob_grob (get_property ("currentMusicalColumn")));
+      typeset_grob (grouping_);
+      grouping_ = 0;
+    }
+  
+  if (now.grace_part_)
+    return; 
+  
+  SCM grouping = get_property ("beatGrouping");
+  if (gh_pair_p (grouping))
+    {
+      Moment *measpos = unsmob_moment (get_property ("measurePosition"));
+      Rational mp = measpos->main_part_;
+      
+      Moment * beatlen = unsmob_moment (get_property ("beatLength"));
+      Rational bl = beatlen->main_part_;
+	
+      Rational where (0);
+      for (SCM s = grouping; gh_pair_p (s);
+	   where += Rational (gh_scm2int (gh_car (s))) * bl,
+	   s = gh_cdr (s)
+	   )
+	{
+	  int grouplen = gh_scm2int (gh_car(s));
+	  if (where == mp)
+	    {
+	      if (grouping_)
+		{
+		  programming_error ("Huh, last grouping not finished yet.");
+		  continue;
+		}
+	      
+	      grouping_ = new Spanner (get_property ("MeasureGrouping"));
+	      grouping_->set_bound (LEFT, unsmob_grob (get_property ("currentMusicalColumn")));
+	      announce_grob (grouping_, SCM_EOL);
+
+
+	      stop_grouping_mom_ = now.main_part_ + Rational(grouplen - 1) * bl ;
+	      top_engraver ()->add_moment_to_process (Moment (stop_grouping_mom_));
+
+	      if (grouplen == 3)
+		grouping_->set_grob_property ("type", ly_symbol2scm ("triangle"));
+	      else
+		grouping_->set_grob_property ("type", ly_symbol2scm ("bracket"));
+	      
+	      break ; 
+	    }
+	}
+    }
+}
+Measure_grouping_engraver::Measure_grouping_engraver()
+{
+  grouping_ = 0;
+}
+
+ENTER_DESCRIPTION(Measure_grouping_engraver,
+/* descr */       "Creates Measure_grouping objects using beatGrouping property",
+/* creats*/       "MeasureGrouping",
+/* accepts */     "",
+/* acks  */      "note-column-interface",
+/* reads */       "beatGrouping beatLength measurePosition currentMusicalColumn",
+/* write */       "");
diff -purN ../lilypond-1.7.6/lily/measure-grouping-spanner.cc ./lily/measure-grouping-spanner.cc
--- ../lilypond-1.7.6/lily/measure-grouping-spanner.cc	1970-01-01 01:00:00.000000000 +0100
+++ ./lily/measure-grouping-spanner.cc	2002-11-13 01:40:20.000000000 +0100
@@ -0,0 +1,60 @@
+/*   
+measure-grouping-spanner.cc --  implement Measure_grouping
+
+source file of the GNU LilyPond music typesetter
+
+(c) 2002 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ */
+#include "paper-def.hh"
+#include "spanner.hh"
+#include "measure-grouping-spanner.hh"
+#include "lookup.hh" 
+#include "item.hh"
+
+MAKE_SCHEME_CALLBACK (Measure_grouping, brew_molecule, 1);
+SCM 
+Measure_grouping::brew_molecule (SCM grob)
+{
+  Spanner * me = dynamic_cast<Spanner*> (unsmob_grob (grob));
+
+  /*
+    TODO: robustify.
+   */
+  SCM which = me->get_grob_property ("type");
+  SCM thick = me->get_grob_property ("thickness");
+  SCM height = me->get_grob_property ("height");
+
+  Real t = me->get_paper ()->get_var ("linethickness") *   gh_scm2double (thick); 
+  Grob *common = me->get_bound(LEFT)->common_refpoint (me->get_bound (RIGHT),
+						       X_AXIS);
+
+  Interval rext = me->get_bound (RIGHT)->extent (common, X_AXIS);
+  
+  
+  Real w =(rext.empty_b()
+	   ? me->get_bound (RIGHT)->relative_coordinate (common, X_AXIS)
+	   : rext[RIGHT])
+    - me->get_bound (LEFT)->relative_coordinate (common, X_AXIS);
+
+  Interval iv (0,w);
+
+  Molecule m; 
+  if (which == ly_symbol2scm ("bracket"))
+    {
+      m = Lookup::bracket (X_AXIS, iv, t,-gh_scm2double (height));
+    }
+  else if (which == ly_symbol2scm ("triangle"))
+    {
+      m = Lookup::triangle (iv, t, gh_scm2double (height));
+    }
+
+  m.align_to (Y_AXIS, DOWN);
+  return m.smobbed_copy();
+}
+
+ADD_INTERFACE (Measure_grouping,"measure-grouping-interface",
+	       "indicate groups of beats. Valid choices for 'type are 'bracket and 'triangle.",
+	       "thickness type height");
+
+  
diff -purN ../lilypond-1.7.6/lily/mensural-ligature-engraver.cc ./lily/mensural-ligature-engraver.cc
--- ../lilypond-1.7.6/lily/mensural-ligature-engraver.cc	2002-09-30 11:23:42.000000000 +0200
+++ ./lily/mensural-ligature-engraver.cc	2002-11-13 01:40:20.000000000 +0100
@@ -567,7 +567,7 @@ Mensural_ligature_engraver::acknowledge_
 ENTER_DESCRIPTION (Mensural_ligature_engraver,
 /* descr */       "Handles Mensural_ligature_events by glueing special ligature heads together.",
 /* creats*/       "MensuralLigature",
-/* accepts */     "",
+/* accepts */     "ligature-event abort-event",
 /* acks  */      "ligature-head-interface note-head-interface rest-interface",
 /* reads */       "",
 /* write */       "");
diff -purN ../lilypond-1.7.6/lily/moment.cc ./lily/moment.cc
--- ../lilypond-1.7.6/lily/moment.cc	2002-10-21 00:44:15.000000000 +0200
+++ ./lily/moment.cc	2002-11-13 01:40:20.000000000 +0100
@@ -48,29 +48,61 @@ Moment::print_smob (SCM s, SCM port, scm
   TODO: add optional factor argument.
  */
 LY_DEFINE (make_moment,"ly:make-moment", 2,0,0, (SCM n, SCM d),
-	   "create the rational number with main timing @var{n}/@var{d}. 
+	   "create the rational number with main timing @var{n}/@var{d}. \n"
+"\n"
+"\n"
+"Moment is a point in musical time. It is consists of a pair of\n"
+"rationals (@var{m},@var{g}), where @var{m} is the timing for the  main\n"
+"notes, and @var{g} the timing for  grace notes. In absence of grace\n"
+"notes, @var{g} is zero.\n"
+)
+{
+  SCM_ASSERT_TYPE(SCM_INUMP (n), n, SCM_ARG1, __FUNCTION__, "integer");
+  SCM_ASSERT_TYPE(SCM_INUMP (d), d, SCM_ARG2, __FUNCTION__, "integer");
 
+  return Moment (Rational (gh_scm2int (n), gh_scm2int (d))).smobbed_copy();
+}
 
-Moment is a point in musical time. It is consists of a pair of
-rationals (@var{m},@var{g}), where @var{m} is the timing for the  main
-notes, and @var{g} the timing for  grace notes. In absence of grace
-notes, @var{g} is zero.
-")
+LY_DEFINE (add_moment,"ly:add-moment", 2,0,0, (SCM a, SCM b),
+	   "Add two moments."
+)
 {
-  Moment m (Rational (1,1));
+  Moment * ma = unsmob_moment (a);
+  Moment * mb = unsmob_moment (b);
+  SCM_ASSERT_TYPE (ma, a, SCM_ARG1, __FUNCTION__, "moment");
+  SCM_ASSERT_TYPE (mb, b, SCM_ARG2, __FUNCTION__, "moment");
 
-  if (SCM_INUMP (n) && SCM_INUMP (d))
-    {
-      m =  Moment (Rational (gh_scm2int (n), gh_scm2int (d)));
-    }
-  else
-    {
-      ::error ("make-moment takes two integer arguments. Using 1/1");
-    }
+  return (*ma + *mb).smobbed_copy();
+}
 
-  return m.smobbed_copy ();
+
+LY_DEFINE (mul_moment,"ly:mul-moment", 2,0,0, (SCM a, SCM b),
+	   "Multiply two moments."
+)
+{
+  Moment * ma = unsmob_moment (a);
+  Moment * mb = unsmob_moment (b);
+  SCM_ASSERT_TYPE (ma, a, SCM_ARG1, __FUNCTION__, "moment");
+  SCM_ASSERT_TYPE (mb, b, SCM_ARG2, __FUNCTION__, "moment");
+
+  return (*ma *  *mb).smobbed_copy();
+}
+
+
+
+LY_DEFINE (div_moment,"ly:div-moment", 2,0,0, (SCM a, SCM b),
+	   "Divide two moments."
+)
+{
+  Moment * ma = unsmob_moment (a);
+  Moment * mb = unsmob_moment (b);
+  SCM_ASSERT_TYPE (ma, a, SCM_ARG1, __FUNCTION__, "moment");
+  SCM_ASSERT_TYPE (mb, b, SCM_ARG2, __FUNCTION__, "moment");
+
+  return (*ma /  *mb).smobbed_copy();
 }
 
+
 SCM
 Moment::equal_p (SCM a, SCM b)
 {
diff -purN ../lilypond-1.7.6/lily/note-head-line-engraver.cc ./lily/note-head-line-engraver.cc
--- ../lilypond-1.7.6/lily/note-head-line-engraver.cc	2002-10-06 15:31:18.000000000 +0200
+++ ./lily/note-head-line-engraver.cc	2002-11-06 13:34:04.000000000 +0100
@@ -148,8 +148,8 @@ Note_head_line_engraver::stop_translatio
 
 
 ENTER_DESCRIPTION(Note_head_line_engraver,
-/* descr */       "Engrave a line between two note heads, for example a glissando.  If
-followVoice is set, staff switches also generate a line.",
+/* descr */       "Engrave a line between two note heads, for example a glissando.  If "
+" followVoice is set, staff switches also generate a line.",
 /* creats*/       "Glissando VoiceFollower",
 /* accepts */     "glissando-event",
 /* acks  */       "rhythmic-head-interface",
diff -purN ../lilypond-1.7.6/lily/note-heads-engraver.cc ./lily/note-heads-engraver.cc
--- ../lilypond-1.7.6/lily/note-heads-engraver.cc	2002-09-30 11:23:42.000000000 +0200
+++ ./lily/note-heads-engraver.cc	2002-11-13 01:40:20.000000000 +0100
@@ -64,8 +64,8 @@ Note_heads_engraver::try_music (Music *m
 	Urg ; this is not protocol. We should accept and return
 	true, or ignore.
       */
-      in_ligature = (m->get_mus_property("span-direction")
-		     == gh_int2scm (START));
+      in_ligature = (to_dir (m->get_mus_property("span-direction")) == START);
+      return false;
     }
   
   return false;
diff -purN ../lilypond-1.7.6/lily/output-property-engraver.cc ./lily/output-property-engraver.cc
--- ../lilypond-1.7.6/lily/output-property-engraver.cc	2002-09-28 17:55:36.000000000 +0200
+++ ./lily/output-property-engraver.cc	2002-11-06 13:34:04.000000000 +0100
@@ -80,8 +80,8 @@ Output_property_engraver::Output_propert
 }
 
 ENTER_DESCRIPTION(Output_property_engraver,
-/* descr */       "Interpret Music of Output_property type, and apply a function
-to any Graphic objects that satisfies the predicate.",
+/* descr */       "Interpret Music of Output_property type, and apply a function "
+" to any Graphic objects that satisfies the predicate.",
 /* creats*/       "",
 /* accepts */     "layout-instruction",
 /* acks  */       "grob-interface",
diff -purN ../lilypond-1.7.6/lily/parser.yy ./lily/parser.yy
--- ../lilypond-1.7.6/lily/parser.yy	2002-11-04 13:13:33.000000000 +0100
+++ ./lily/parser.yy	2002-11-13 01:40:20.000000000 +0100
@@ -293,7 +293,7 @@ yylex (YYSTYPE *s,  void * v)
 	
 %type <scm>  pre_events post_events
 %type <music> gen_text_def
-%type <scm>   steno_pitch pitch absolute_pitch
+%type <scm>   steno_pitch pitch absolute_pitch pitch_also_in_chords
 %type <scm>   explicit_pitch steno_tonic_pitch
 
 %type <scm>	chord_additions chord_subtractions chord_notes chord_step
@@ -912,25 +912,16 @@ Composite_music:
 	| Repeated_music		{ $$ = $1; }
 	| Simultaneous_music		{ $$ = $1; }
 	| Sequential_music		{ $$ = $1; }
-	| TRANSPOSE pitch Music {
+	| TRANSPOSE pitch_also_in_chords pitch_also_in_chords Music {
 		$$ = MY_MAKE_MUSIC("TransposedMusic");
-		Music *p = $3;
-		Pitch pit = *unsmob_pitch ($2);
+		Music *p = $4;
+		Pitch from = *unsmob_pitch ($2);
+		Pitch to = *unsmob_pitch ($3);
 
-		p->transpose (pit);
+		p->transpose (interval (from, to));
 		$$->set_mus_property ("element", p->self_scm ());
 		scm_gc_unprotect_object (p->self_scm ());
 	}
-	| TRANSPOSE steno_tonic_pitch Music {
-		$$ = MY_MAKE_MUSIC("TransposedMusic");
-		Music *p = $3;
-		Pitch pit = *unsmob_pitch ($2);
-
-		p->transpose (pit);
-		$$->set_mus_property ("element", p->self_scm ());
-		scm_gc_unprotect_object (p->self_scm ());
-	
-	}
 	| APPLY embedded_scm Music  {
 		SCM ret = gh_call1 ($2, $3->self_scm ());
 		Music *m = unsmob_music (ret);
@@ -1230,7 +1221,7 @@ command_element:
 
 		$$ = MY_MAKE_MUSIC("EventChord");
 		$$->set_mus_property ("elements", scm_cons (l->self_scm (), SCM_EOL));
-  	  scm_gc_unprotect_object (l->self_scm());
+		scm_gc_unprotect_object (l->self_scm());
 		$$->set_spot (THIS->here_input ());
 	}
 	| E_RIGHTSQUARE {
@@ -1241,8 +1232,7 @@ command_element:
 		$$ = MY_MAKE_MUSIC("EventChord");
 		$$->set_mus_property ("elements", scm_cons (l->self_scm (), SCM_EOL));
 		$$->set_spot (THIS->here_input ());
-	  scm_gc_unprotect_object (l->self_scm());
-
+		scm_gc_unprotect_object (l->self_scm());
 	}
 	| E_BACKSLASH {
 		$$ = MY_MAKE_MUSIC("VoiceSeparator");
@@ -1286,34 +1276,13 @@ command_element:
 		$$ = unsmob_music (result);
 	}
 	| TIME_T fraction  {
-		Music * p1 = set_property_music (ly_symbol2scm ( "timeSignatureFraction"), $2);
-
-		int l = gh_scm2int (ly_car ($2));
-		int o = gh_scm2int (ly_cdr ($2));
-
-		Moment one_beat = Moment (1)/Moment (o);
-		Moment len = Moment (l) * one_beat;
-
-
-		Music *p2 = set_property_music (ly_symbol2scm ("measureLength"), len.smobbed_copy ());
-		Music *p3 = set_property_music (ly_symbol2scm ("beatLength"), one_beat.smobbed_copy ());
-
-		SCM list = scm_list_n (p1->self_scm (), p2->self_scm (), p3->self_scm(), SCM_UNDEFINED);
-		Music *seq = MY_MAKE_MUSIC("SequentialMusic");
-		seq->set_mus_property ("elements", list);
-		
-
-		Music * sp = MY_MAKE_MUSIC("ContextSpeccedMusic");
-		sp->set_mus_property ("element", seq->self_scm ());
-
-		scm_gc_unprotect_object (p3->self_scm ());
-		scm_gc_unprotect_object (p2->self_scm ());
-		scm_gc_unprotect_object (p1->self_scm ());
-		scm_gc_unprotect_object (seq->self_scm ());
-
-		$$ = sp;
+		static SCM proc;
+		if (!proc)
+			proc = scm_c_eval_string ("make-time-signature-set");
 
-		sp-> set_mus_property ("context-type", scm_makfrom0str ( "Timing"));
+		SCM result = scm_apply_2   (proc, gh_car ($2), gh_cdr ($2), SCM_EOL);
+		scm_gc_protect_object (result);
+		$$ = unsmob_music (result);
 	}
 	;
 
@@ -1530,6 +1499,11 @@ pitch:
 	}
 	;
 
+pitch_also_in_chords:
+	pitch
+	| steno_tonic_pitch
+	;
+
 explicit_pitch:
 	PITCH embedded_scm {
 		$$ = $2;
@@ -1643,7 +1617,6 @@ gen_text_def:
 	}
 	| DIGIT {
 		Music * t = MY_MAKE_MUSIC("FingerEvent");
-		SCM finger = ly_symbol2scm ("finger");
 		t->set_mus_property ("digit",  gh_int2scm ($1));
 		t->set_spot (THIS->here_input ());
 		$$ = t;
diff -purN ../lilypond-1.7.6/lily/pitch.cc ./lily/pitch.cc
--- ../lilypond-1.7.6/lily/pitch.cc	2002-10-21 00:44:15.000000000 +0200
+++ ./lily/pitch.cc	2002-11-06 13:34:05.000000000 +0100
@@ -128,18 +128,27 @@ Pitch::normalise ()
 void
 Pitch::transpose (Pitch delta)
 {
-  int old_semi = semitone_pitch ();
-  int delta_semi = delta.semitone_pitch ();
+  int new_semi = semitone_pitch ()  +delta.semitone_pitch();
   octave_ += delta.octave_;
   notename_ += delta.notename_;
-
-  int new_semi = semitone_pitch ();
-  int delta_acc = new_semi - old_semi - delta_semi;
-  alteration_ -= delta_acc;
+  alteration_ += new_semi - semitone_pitch();
 
   normalise ();
 }
 
+Pitch
+interval (Pitch const & from , Pitch const & to )
+{
+  int sound = to.semitone_pitch()  - from.semitone_pitch ();
+  Pitch pt ;
+  pt.octave_ = to.octave_ - from.octave_;
+  pt.notename_ = to.notename_ - from.notename_;
+  pt.alteration_ = to.alteration_ - from.alteration_;
+  pt.alteration_ += sound - pt.semitone_pitch();
+
+  return pt;
+}
+
 
 /* FIXME
    Merge with *pitch->text* funcs in chord-name.scm
@@ -223,9 +232,8 @@ Pitch::down_to (int notename)
 LY_DEFINE(ly_pitch_transpose,
 	  "ly:transpose-pitch", 2, 0, 0,
 	  (SCM p, SCM delta),
-	  "Transpose @var{p} by the amount @var{delta}, where @var{delta} is the
-pitch that central C is transposed to.
-")
+	  "Transpose @var{p} by the amount @var{delta}, where @var{delta} is the "
+" pitch that central C is transposed to.")
 {
   Pitch* t = unsmob_pitch (p);
   Pitch *d = unsmob_pitch (delta);
@@ -293,13 +301,10 @@ Pitch::less_p (SCM p1, SCM p2)
 
 LY_DEFINE(make_pitch, "ly:make-pitch", 3, 0, 0, 
 	  (SCM o, SCM n, SCM a),
-	  "
-@var{octave} is specified by an integer, zero for the octave containing
-middle C.  @var{note} is a number from 0 to 6, with 0 corresponding to C
-and 6 corresponding to B.  The shift is zero for a natural, negative for
-flats, or positive for sharps.
-
-")
+	  "@var{octave} is specified by an integer, zero for the octave containing "
+	  "middle C.  @var{note} is a number from 0 to 6, with 0 corresponding to C "
+	  "and 6 corresponding to B.  The shift is zero for a natural, negative for "
+	  "flats, or positive for sharps. ")
 {
   SCM_ASSERT_TYPE(gh_number_p (o), o, SCM_ARG1, __FUNCTION__, "number");
   SCM_ASSERT_TYPE(gh_number_p (n), n, SCM_ARG2, __FUNCTION__, "number");
diff -purN ../lilypond-1.7.6/lily/pitch-squash-engraver.cc ./lily/pitch-squash-engraver.cc
--- ../lilypond-1.7.6/lily/pitch-squash-engraver.cc	2002-09-28 17:55:36.000000000 +0200
+++ ./lily/pitch-squash-engraver.cc	2002-11-06 13:34:05.000000000 +0100
@@ -35,10 +35,10 @@ Pitch_squash_engraver::Pitch_squash_engr
 }
 
 ENTER_DESCRIPTION(Pitch_squash_engraver,
-/* descr */       "Treat all pitches as middle C.  Note that the notes move, but
-the locations of accidentals stay the same. 
-Set the position field of all note heads to zero. This useful for
-making a single line staff that demonstrates the rhythm of a melody.",
+/* descr */       "Treat all pitches as middle C.  Note that the notes move, but "
+"the locations of accidentals stay the same. "
+"Set the position field of all note heads to zero. This useful for "
+"making a single line staff that demonstrates the rhythm of a melody.",
 /* creats*/       "",
 /* accepts */     "",
 /* acks  */      "note-head-interface",
diff -purN ../lilypond-1.7.6/lily/repeat-acknowledge-engraver.cc ./lily/repeat-acknowledge-engraver.cc
--- ../lilypond-1.7.6/lily/repeat-acknowledge-engraver.cc	2002-09-28 17:55:36.000000000 +0200
+++ ./lily/repeat-acknowledge-engraver.cc	2002-11-06 13:34:05.000000000 +0100
@@ -111,8 +111,8 @@ Repeat_acknowledge_engraver::process_mus
 }
 
 ENTER_DESCRIPTION(Repeat_acknowledge_engraver,
-/* descr */       "Acknowledge repeated music, and convert the contents of
-repeatCommands ainto an appropriate setting for whichBar",
+/* descr */       "Acknowledge repeated music, and convert the contents of "
+"repeatCommands ainto an appropriate setting for whichBar.",
 /* creats*/       "",
 /* accepts */     "",
 /* acks  */      "",
diff -purN ../lilypond-1.7.6/lily/rest-collision.cc ./lily/rest-collision.cc
--- ../lilypond-1.7.6/lily/rest-collision.cc	2002-10-28 01:26:27.000000000 +0100
+++ ./lily/rest-collision.cc	2002-11-12 11:48:00.000000000 +0100
@@ -140,7 +140,12 @@ Rest_collision::do_shift (Grob *me)
 	      Grob* r = unsmob_grob (rests[i-1]->get_grob_property ("rest"));
 #if 1
 	      if (r)
-		r->suicide ();
+		{
+		  Grob * d = unsmob_grob (r->get_grob_property ("dot"));
+		  if (d)
+		    d->suicide();
+		  r->suicide ();
+		}
 	      rests[i-1]->suicide ();
 #else
 	      if (r)
diff -purN ../lilypond-1.7.6/lily/score-engraver.cc ./lily/score-engraver.cc
--- ../lilypond-1.7.6/lily/score-engraver.cc	2002-09-28 17:55:36.000000000 +0200
+++ ./lily/score-engraver.cc	2002-11-06 13:34:05.000000000 +0100
@@ -334,19 +334,16 @@ Score_engraver::acknowledge_grob (Grob_i
 
 
 ENTER_DESCRIPTION(Score_engraver,
-/* descr */       "Top level engraver. Takes care of generating columns and the complete  system (ie. System)
-
-
-This engraver decides whether a column is breakable. The default is
-that a column is always breakable. However, when every Bar_engraver
-that does not have a barline at a certain point will call
-Score_engraver::forbid_breaks to stop linebreaks.  In practice, this
-means that you can make a breakpoint by creating a barline (assuming
-that there are no beams or notes that prevent a breakpoint.)
-
-
-",
-/* creats*/       "System PaperColumn NonMusicalPaperColumn",
+/* descr */       "Top level engraver. Takes care of generating columns and the complete  system (ie. System) "
+"\n\n "
+"This engraver decides whether a column is breakable. The default is "
+"that a column is always breakable. However, when every Bar_engraver "
+"that does not have a barline at a certain point will call "
+"Score_engraver::forbid_breaks to stop linebreaks.  In practice, this "
+"means that you can make a breakpoint by creating a barline (assuming "
+"that there are no beams or notes that prevent a breakpoint.) "
+,
+/* creats*/       "System PaperColumn NonMusicalPaperColumn", 
 /* accepts */     "break-event",
 /* acks  */       "note-spacing-interface staff-spacing-interface",
 /* reads */       "currentMusicalColumn currentCommandColumn",
diff -purN ../lilypond-1.7.6/lily/side-position-interface.cc ./lily/side-position-interface.cc
--- ../lilypond-1.7.6/lily/side-position-interface.cc	2002-10-28 01:26:27.000000000 +0100
+++ ./lily/side-position-interface.cc	2002-11-13 01:40:21.000000000 +0100
@@ -211,6 +211,37 @@ Side_position_interface::aligned_side (S
   return gh_double2scm (o);
 }
 
+/*
+  Maintain a minimum distance to the staff. This is similar to side
+  position with padding, but it will put adjoining objects on a row if
+  stuff sticks out of the staff a little.
+ */
+MAKE_SCHEME_CALLBACK (Side_position_interface,out_of_staff,2);
+SCM
+Side_position_interface::out_of_staff (SCM element_smob, SCM axis)
+{
+  Grob *me = unsmob_grob (element_smob);
+  Axis a = (Axis) gh_scm2int (axis);
+
+  Grob * st = Staff_symbol_referencer::get_staff_symbol (me);
+
+  if (!st)
+    return gh_int2scm (0);
+
+  Real padding=0.0;
+  SCM spad = me->get_grob_property ("staff-padding");
+
+  if (gh_number_p (spad))
+    padding = gh_scm2double (spad);
+  
+  Grob *common = me->common_refpoint (st, Y_AXIS);
+  Direction d = Side_position_interface::get_direction (me);
+  Interval staff_size = st->extent (common, Y_AXIS);
+  Interval me_ext = me->extent (common, a);
+  Real diff =  d*staff_size[d] + padding - d*me_ext[-d];
+  return gh_double2scm (diff >? 0);
+}
+
 void
 Side_position_interface::add_staff_support (Grob*me)
 {
@@ -275,4 +306,4 @@ ADD_INTERFACE (Side_position_interface,"
 "support).  In this case, the direction signifies where to put the  "
 "victim object relative to the support (left or right, up or down?) "
 ,
-  "side-support-elements direction-source direction side-relative-direction minimum-space padding");
+  "staff-padding side-support-elements direction-source direction side-relative-direction minimum-space padding");
diff -purN ../lilypond-1.7.6/lily/text-item.cc ./lily/text-item.cc
--- ../lilypond-1.7.6/lily/text-item.cc	2002-10-21 00:44:15.000000000 +0200
+++ ./lily/text-item.cc	2002-11-06 13:34:06.000000000 +0100
@@ -239,4 +239,4 @@ Text_item::brew_molecule (SCM smob)
 
 ADD_INTERFACE (Text_item,"text-interface",
   "A scheme markup text",
-  "text align baseline-skip lookup raise kern word-space magnify");
+  "text axis baseline-skip extent lookup raise kern word-space");
diff -purN ../lilypond-1.7.6/lilypond-mode.el ./lilypond-mode.el
--- ../lilypond-1.7.6/lilypond-mode.el	2002-11-04 11:53:02.000000000 +0100
+++ ./lilypond-mode.el	2002-11-12 11:47:54.000000000 +0100
@@ -9,6 +9,9 @@
 ;;;    * Add PS-compilation, PS-viewing and MIDI-play (29th Aug 2001)
 ;;;    * Keyboard shortcuts (12th Sep 2001)
 ;;;    * Inserting tags, inspired on sgml-mode (11th Oct 2001)
+;;;
+;;; Changed 2002 Carlos Betancourt <carlos.betancourt@chello.be>
+;;;    * Added spanish-note-replacements
 
 ;;; Inspired on auctex
 
@@ -25,7 +28,7 @@
 (require 'easymenu)
 (require 'compile)
 
-(defconst LilyPond-version "1.5.58"
+(defconst LilyPond-version "1.7.6"
   "`LilyPond-mode' version number.")
 
 (defconst LilyPond-help-address "bug-lilypond@gnu.org"
@@ -540,6 +543,15 @@ command."
 	'(("eeses" "eses") ("ees" "es") ("aeses" "asas") ("aes" "as") ("b" "h")
 	  ("beses" "heses") ("bes" "b") ("bis" "his") ("bisis" "hisis")))
 			      ; add more translations of the note names
+  (setq spanish-note-replacements
+	'(("c" "do") ("d" "re") ("e" "mi") ("f" "fa") ("g" "sol") ("a" "la") ("b" "si")
+      ("cis" "dos") ("cisis" "doss") ("ces" "dob") ("ceses" "dobb")
+      ("dis" "res") ("disis" "ress") ("des" "reb") ("deses" "rebb")
+      ("eis" "mis") ("eisis" "miss") ("ees" "mib") ("eeses" "mibb")
+      ("fis" "fas") ("fisis" "fass") ("fes" "fab") ("feses" "fabb")
+      ("gis" "sols") ("gisis" "solss") ("ges" "solb") ("geses" "solbb")
+      ("ais" "las") ("aisis" "lass") ("aes" "lab") ("aeses" "labb")
+      ("bis" "sis") ("bisis" "siss") ("bes" "sib") ("beses" "sibb")))
   (setq other-keys "()<>~}")
   (setq accid 0) (setq octav 0) (setq durat "") (setq dots 0)
 
@@ -604,10 +616,13 @@ command."
 			     (message "Selected Finnish/Deutsch notes") 
 			     (sit-for 0 750 1))) ; n
 			      ; add more translations of the note names
+     ((string= x "p") (progn (setq note-replacements spanish-note-replacements)
+			     (message "Selected Spanish notes") 
+			     (sit-for 0 750 1))) ; p
      ((string= x "h") 
       (progn (message "Insert notes with fewer key strokes. For example \"i,5.f\" produces \"fis,32. \".") (sit-for 5 0 1) 
 	     (message "Add also \"a ~ a\"-ties, \"a ( ) b\"-slurs and \"< a b >\"-chords.") (sit-for 5 0 1) 
-	     (message "Note names are in Du(t)ch by default. Hit 'n' for Fin(n)ish/Deutsch note names.") (sit-for 5 0 1) 
+	     (message "Note names are in Du(t)ch by default. Hit 'n' for Fin(n)ish/Deutsch note names. Hit 'p' for S(p)anish note names") (sit-for 5 0 1) 
 	     (message "Backspace deletes last note, return starts a new indented line and Esc quits.") (sit-for 5 0 1) 
 	     (message "Insert note triplets \"\\times 2/3 { a b } \" by typing \"/23ab}\".") (sit-for 5 0 1) 
 	     (message "Remember to add all other details as well.") (sit-for 5 0 1)))
diff -purN ../lilypond-1.7.6/ly/engraver-init.ly ./ly/engraver-init.ly
--- ../lilypond-1.7.6/ly/engraver-init.ly	2002-11-04 11:53:21.000000000 +0100
+++ ./ly/engraver-init.ly	2002-11-13 01:40:22.000000000 +0100
@@ -160,6 +160,7 @@ VoiceContext = \translator {
 	\consists "Script_column_engraver"
 	\consists "Rhythmic_column_engraver"
 	\consists "Phrasing_slur_engraver"
+	\consists "Cluster_engraver"
 	\consists "Slur_engraver"
 	\consists "Tie_engraver"
 	\consists "New_tie_engraver"
diff -purN ../lilypond-1.7.6/ly/paper13-init.ly ./ly/paper13-init.ly
--- ../lilypond-1.7.6/ly/paper13-init.ly	2002-10-13 00:50:05.000000000 +0200
+++ ./ly/paper13-init.ly	2002-11-06 13:34:07.000000000 +0100
@@ -5,7 +5,6 @@
 
 paperThirteen = \paper {
 	staffheight = 13.0\pt
-
 	#(define fonts (make-font-list 'paper13))
 	
 	\include "params-init.ly"
diff -purN ../lilypond-1.7.6/ly/paper16-init.ly ./ly/paper16-init.ly
--- ../lilypond-1.7.6/ly/paper16-init.ly	2002-10-13 00:50:05.000000000 +0200
+++ ./ly/paper16-init.ly	2002-11-06 13:34:08.000000000 +0100
@@ -1,12 +1,13 @@
 % paper16-init.ly
 
+
 \version "1.5.68"
 
 paperSixteen = \paper {
 	staffheight = 16.0\pt
-	\stylesheet #(make-font-list 'paper16)
+	#(define fonts (make-font-list 'paper16))
 
 	\include "params-init.ly"
 }
 
-\paper {\paperSixteen }
+\paper { \paperSixteen }
diff -purN ../lilypond-1.7.6/ly/paper19-init.ly ./ly/paper19-init.ly
--- ../lilypond-1.7.6/ly/paper19-init.ly	1970-01-01 01:00:00.000000000 +0100
+++ ./ly/paper19-init.ly	2002-11-06 12:44:01.000000000 +0100
@@ -0,0 +1,14 @@
+% paper19-init.ly
+
+
+\version "1.5.68"
+
+paperNineteen = \paper {
+	staffheight = 19.0\pt
+	#(define fonts (make-font-list 'paper19))
+
+	\include "params-init.ly"
+}
+
+\paper { \paperNineteen }
+
diff -purN ../lilypond-1.7.6/ly/paper19.ly ./ly/paper19.ly
--- ../lilypond-1.7.6/ly/paper19.ly	2002-10-13 00:50:05.000000000 +0200
+++ ./ly/paper19.ly	2002-11-06 13:34:08.000000000 +0100
@@ -1,14 +1,3 @@
-% paper20-init.ly
-
-
 \version "1.5.68"
 
-paperNineteen = \paper {
-	staffheight = 19.0\pt
-	#(define fonts (make-font-list 'paper19))
-
-	\include "params-init.ly"
-}
-
-\paper { \paperNineteen }
-
+\include "paper19-init.ly"
diff -purN ../lilypond-1.7.6/ly/spanners-init.ly ./ly/spanners-init.ly
--- ../lilypond-1.7.6/ly/spanners-init.ly	2002-11-04 11:53:22.000000000 +0100
+++ ./ly/spanners-init.ly	2002-11-13 01:40:22.000000000 +0100
@@ -1,6 +1,7 @@
 \version "1.7.3"
 
-
+startCluster = #(make-span-event 'ClusterEvent START)
+stopCluster = #(make-span-event 'ClusterEvent STOP)
 
 groupOpen = #(make-span-event 'NoteGroupingEvent START)
 groupClose = #(make-span-event 'NoteGroupingEvent STOP)
diff -purN ../lilypond-1.7.6/make/mutopia-rules.make ./make/mutopia-rules.make
--- ../lilypond-1.7.6/make/mutopia-rules.make	2002-09-20 11:21:08.000000000 +0200
+++ ./make/mutopia-rules.make	2002-11-14 15:01:23.000000000 +0100
@@ -2,8 +2,8 @@
 
 $(outdir)/%.png: $(outdir)/%.ps
 	gs -sDEVICE=pnggray -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile="$(name-stem)-page%d.png" -r90 -dNOPAUSE $< -c quit
-
 	-mv $(name-stem)-page*.png $(outdir)/
+	rm -f $@
 	ln -s $(name-stem)-page1.png $@
 
 $(outdir)/%.ly.txt: %.ly
diff -purN ../lilypond-1.7.6/mf/parmesan-heads.mf ./mf/parmesan-heads.mf
--- ../lilypond-1.7.6/mf/parmesan-heads.mf	2002-09-20 11:21:08.000000000 +0200
+++ ./mf/parmesan-heads.mf	2002-11-13 01:40:22.000000000 +0100
@@ -309,7 +309,7 @@ def punctum_char (expr verbose_name, int
 		2beta# = ht# * b_h;
 		a# = beta# * a_b;
 		wd# = 2a# / a_w;
-		set_char_box(0.50wd#, 0.10wd#, 0.5ht#, 0);
+		set_char_box(0.00wd#, 0.40wd#, 0.5ht#, 0);
 		black_notehead_width# := wd#;
 
 		% direction
diff -purN ../lilypond-1.7.6/ps/music-drawing-routines.ps ./ps/music-drawing-routines.ps
--- ../lilypond-1.7.6/ps/music-drawing-routines.ps	2002-10-21 00:44:16.000000000 +0200
+++ ./ps/music-drawing-routines.ps	2002-11-13 01:40:24.000000000 +0100
@@ -4,9 +4,6 @@
 
 /blot-diameter { lilypondpaperblotdiameter } bind def
 
-% fucking redhat xdvi patch.
-/skeel { scale } bind def
-
 /set_tex_dimen {
 	cvr def     
 } bind def
@@ -50,6 +47,18 @@
 	} ifelse
 } bind def
 
+
+/draw_symmetric_x_triangle % h w th
+{
+    setlinewidth
+    0 0 moveto
+    dup 0 lineto
+    2 div 
+    exch lineto
+    0 0 lineto
+    stroke
+} bind def
+
 /draw_round_box % breapth width depth height blot
 {
 	/blot exch def
@@ -109,6 +118,26 @@
 	} ifelse
 } bind def 
 
+/draw_polygon % x(n) y(n) x(n-1) y(n-1) ... x(1) y(1) n blot
+{
+	/blot exch def
+
+	0 setlinecap
+	blot setlinewidth
+	1 setlinejoin
+
+	/points exch def
+	2 copy
+	moveto
+	1 1 points {pop lineto} for
+	currentdict /testing known {
+		%% outline only, for testing:
+		stroke
+	}{
+		closepath gsave stroke grestore fill
+	} ifelse
+} bind def
+
 /draw_repeat_slash % width slope thick
 {
 	1 setlinecap
diff -purN ../lilypond-1.7.6/python/gettext.py ./python/gettext.py
--- ../lilypond-1.7.6/python/gettext.py	1970-01-01 01:00:00.000000000 +0100
+++ ./python/gettext.py	2002-10-30 14:32:27.000000000 +0100
@@ -0,0 +1,329 @@
+"""This module allows python programs to use GNU gettext message catalogs.
+
+Author: James Henstridge <james@daa.com.au>
+(This is loosely based on gettext.pl in the GNU gettext distribution)
+
+The best way to use it is like so:
+    import gettext
+    gettext.bindtextdomain(PACKAGE, LOCALEDIR)
+    gettext.textdomain(PACKAGE)
+    _ = gettext.gettext
+    print _('Hello World')
+
+where PACKAGE is the domain for this package, and LOCALEDIR is usually
+'$prefix/share/locale' where $prefix is the install prefix.
+
+If you have more than one catalog to use, you can directly create catalog
+objects.  These objects are created as so:
+    import gettext
+    cat = gettext.Catalog(PACKAGE, localedir=LOCALEDIR)
+    _ = cat.gettext
+    print _('Hello World')
+
+The catalog object can also be accessed as a dictionary (ie cat['hello']).
+
+There are also some experimental features.  You can add to the catalog, just
+as you would with a normal dictionary.  When you are finished, you can call
+its save method, which will create a new .mo file containing all the
+translations:
+    import gettext
+    cat = Catalog()
+    cat['Hello'] = 'konichiwa'
+    cat.save('./tmp.mo')
+
+Once you have written an internationalized program, you can create a .po file
+for it with "xgettext --keyword=_ fillename ...".  Then do the translation and
+compile it into a .mo file, ready for use with this module.  Note that you
+will have to use C style strings (ie. use double quotes) for proper string
+extraction.
+"""
+import os, string
+
+prefix = '/usr/local'
+localedir = prefix + '/share/locale'
+
+def _expandLang(str):
+	langs = [str]
+	# remove charset ...
+	if '.' in str:
+		langs.append(string.split(str, '.')[0])
+	# also add 2 character language code ...
+	if len(str) > 2:
+		langs.append(str[:2])
+	return langs
+
+lang = []
+for env in 'LANGUAGE', 'LC_ALL', 'LC_MESSAGES', 'LANG':
+	if os.environ.has_key(env):
+		lang = string.split(os.environ[env], ':')
+		lang = map(_expandLang, lang)
+		lang = reduce(lambda a, b: a + b, lang)
+		break
+if 'C' not in lang:
+	lang.append('C')
+
+# remove duplicates
+i = 0
+while i < len(lang):
+	j = i + 1
+	while j < len(lang):
+		if lang[i] == lang[j]:
+			del lang[j]
+		else:
+			j = j + 1
+	i = i + 1
+del i, j
+
+if os.environ.has_key('PY_XGETTEXT'):
+	xgettext = os.environ['PY_XGETTEXT']
+else:
+	xgettext = None
+
+del os, string
+
+error = 'gettext.error'
+
+def _lsbStrToInt(str):
+	return ord(str[0]) + \
+	       (ord(str[1]) << 8) + \
+	       (ord(str[2]) << 16) + \
+	       (ord(str[3]) << 24)
+def _msbStrToInt(str):
+	return (ord(str[0]) << 24) + \
+	       (ord(str[1]) << 16) + \
+	       (ord(str[2]) << 8) + \
+	       ord(str[3])
+def _intToLsbStr(int):
+	return chr(int         & 0xff) + \
+	       chr((int >> 8)  & 0xff) + \
+	       chr((int >> 16) & 0xff) + \
+	       chr((int >> 24) & 0xff)
+
+def _getpos(levels = 0):
+	"""Returns the position in the code where the function was called.
+	The function uses some knowledge about python stack frames."""
+	import sys
+	# get access to the stack frame by generating an exception.
+	try:
+		raise RuntimeError
+	except RuntimeError:
+		frame = sys.exc_traceback.tb_frame
+	frame = frame.f_back # caller's frame
+	while levels > 0:
+		frame = frame.f_back
+		levels = levels - 1
+	return (frame.f_globals['__name__'],
+		frame.f_code.co_name,
+		frame.f_lineno)
+
+class Catalog:
+	def __init__(self, domain=None, localedir=localedir):
+		self.domain = domain
+		self.localedir = localedir
+		self.cat = {}
+		if not domain: return
+		for self.lang in lang:
+			if self.lang == 'C':
+				return
+			catalog = "%s//%s/LC_MESSAGES/%s.mo" % (
+				localedir, self.lang, domain)
+			try:
+				f = open(catalog, "rb")
+				buffer = f.read()
+				del f
+				break
+			except IOError:
+				pass
+		else:
+			return # assume C locale
+
+		strToInt = _lsbStrToInt
+		if strToInt(buffer[:4]) != 0x950412de:
+			# catalog is encoded with MSB offsets.
+			strToInt = _msbStrToInt
+			if strToInt(buffer[:4]) != 0x950412de:
+				# magic number doesn't match
+				raise error, 'Bad magic number in %s' % (catalog,)
+
+		self.revision = strToInt(buffer[4:8])
+		nstrings = strToInt(buffer[8:12])
+		origTabOffset  = strToInt(buffer[12:16])
+		transTabOffset = strToInt(buffer[16:20])
+		for i in range(nstrings):
+			origLength = strToInt(buffer[origTabOffset:
+						     origTabOffset+4])
+			origOffset = strToInt(buffer[origTabOffset+4:
+						     origTabOffset+8])
+			origTabOffset = origTabOffset + 8
+			origStr = buffer[origOffset:origOffset+origLength]
+		
+			transLength = strToInt(buffer[transTabOffset:
+						      transTabOffset+4])
+			transOffset = strToInt(buffer[transTabOffset+4:
+						      transTabOffset+8])
+			transTabOffset = transTabOffset + 8
+			transStr = buffer[transOffset:transOffset+transLength]
+			
+			self.cat[origStr] = transStr
+
+	def gettext(self, string):
+		"""Get the translation of a given string"""
+		if self.cat.has_key(string):
+			return self.cat[string]
+		else:
+			return string
+	# allow catalog access as cat(str) and cat[str] and cat.gettext(str)
+	__getitem__ = gettext
+	__call__ = gettext
+
+	# this is experimental code for producing mo files from Catalog objects
+	def __setitem__(self, string, trans):
+		"""Set the translation of a given string"""
+		self.cat[string] = trans
+	def save(self, file):
+		"""Create a .mo file from a Catalog object"""
+		try:
+			f = open(file, "wb")
+		except IOError:
+			raise error, "can't open " + file + " for writing"
+		f.write(_intToLsbStr(0x950412de))    # magic number
+		f.write(_intToLsbStr(0))             # revision
+		f.write(_intToLsbStr(len(self.cat))) # nstrings
+
+		oIndex = []; oData = ''
+		tIndex = []; tData = ''
+		for orig, trans in self.cat.items():
+			oIndex.append((len(orig), len(oData)))
+			oData = oData + orig + '\0'
+			tIndex.append((len(trans), len(tData)))
+			tData = tData + trans + '\0'
+		oIndexOfs = 20
+		tIndexOfs = oIndexOfs + 8 * len(oIndex)
+		oDataOfs = tIndexOfs + 8 * len(tIndex)
+		tDataOfs = oDataOfs + len(oData)
+		f.write(_intToLsbStr(oIndexOfs))
+		f.write(_intToLsbStr(tIndexOfs))
+		for length, offset in oIndex:
+			f.write(_intToLsbStr(length))
+			f.write(_intToLsbStr(offset + oDataOfs))
+		for length, offset in tIndex:
+			f.write(_intToLsbStr(length))
+			f.write(_intToLsbStr(offset + tDataOfs))
+		f.write(oData)
+		f.write(tData)
+
+_cat = None
+_cats = {}
+
+if xgettext:
+	class Catalog:
+		def __init__(self, domain, localedir):
+			self.domain = domain
+			self.localedir = localedir
+			self._strings = {}
+		def gettext(self, string):
+			# there is always one level of redirection for calls
+			# to this function
+			pos = _getpos(2) # get this function's caller
+			if self._strings.has_key(string):
+				if pos not in self._strings[string]:
+					self._strings[string].append(pos)
+			else:
+				self._strings[string] = [pos]
+			return string
+		__getitem__ = gettext
+		__call__ = gettext
+		def __setitem__(self, item, data):
+			pass
+		def save(self, file):
+			pass
+		def output(self, fp):
+			import string
+			fp.write('# POT file for domain %s\n' % (self.domain,))
+			for str in self._strings.keys():
+				pos = map(lambda x: "%s(%s):%d" % x,
+					  self._strings[str])
+				pos.sort()
+				length = 80
+				for p in pos:
+					if length + len(p) > 74:
+						fp.write('\n#:')
+						length = 2
+					fp.write(' ')
+					fp.write(p)
+					length = length + 1 + len(p)
+				fp.write('\n')
+				if '\n' in str:
+					fp.write('msgid ""\n')
+					lines = string.split(str, '\n')
+					lines = map(lambda x:
+						    '"%s\\n"\n' % (x,),
+						    lines[:-1]) + \
+						    ['"%s"\n' % (lines[-1],)]
+					fp.writelines(lines)
+				else:
+					fp.write('msgid "%s"\n' % (str,))
+				fp.write('msgstr ""\n')
+				
+	import sys
+	if hasattr(sys, 'exitfunc'):
+		_exitchain = sys.exitfunc
+	else:
+		_exitchain = None
+	def exitfunc(dir=xgettext, _exitchain=_exitchain):
+		# actually output all the .pot files.
+		import os
+		for file in _cats.keys():
+			fp = open(os.path.join(dir, file + '.pot'), 'w')
+			cat = _cats[file]
+			cat.output(fp)
+			fp.close()
+		if _exitchain: _exitchain()
+	sys.exitfunc = exitfunc
+	del sys, exitfunc, _exitchain, xgettext
+
+def bindtextdomain(domain, localedir=localedir):
+	global _cat
+	if not _cats.has_key(domain):
+		_cats[domain] = Catalog(domain, localedir)
+	if not _cat: _cat = _cats[domain]
+
+def textdomain(domain):
+	global _cat
+	if not _cats.has_key(domain):
+		_cats[domain] = Catalog(domain)
+	_cat = _cats[domain]
+
+def gettext(string):
+	if _cat == None: raise error, "No catalog loaded"
+	return _cat.gettext(string)
+
+_ = gettext
+
+def dgettext(domain, string):
+	if domain is None:
+		return gettext(string)
+	if not _cats.has_key(domain):
+		raise error, "Domain '" + domain + "' not loaded"
+	return _cats[domain].gettext(string)
+
+def test():
+	import sys
+	global localedir
+	if len(sys.argv) not in (2, 3):
+		print "Usage: %s DOMAIN [LOCALEDIR]" % (sys.argv[0],)
+		sys.exit(1)
+	domain = sys.argv[1]
+	if len(sys.argv) == 3:
+		bindtextdomain(domain, sys.argv[2])
+	textdomain(domain)
+	info = gettext('')  # this is where special info is often stored
+	if info:
+		print "Info for domain %s, lang %s." % (domain, _cat.lang)
+		print info
+	else:
+		print "No info given in mo file."
+
+if __name__ == '__main__':
+	test()
+
diff -purN ../lilypond-1.7.6/python/lilylib.py ./python/lilylib.py
--- ../lilypond-1.7.6/python/lilylib.py	1970-01-01 01:00:00.000000000 +0100
+++ ./python/lilylib.py	2002-11-12 11:48:03.000000000 +0100
@@ -0,0 +1,433 @@
+################################################################
+# lilylib.py -- options and stuff
+# 
+# source file of the GNU LilyPond music typesetter
+#
+# (c) 1998--2002  Han-Wen Nienhuys <hanwen@cs.uu.nl>
+#                 Jan Nieuwenhuizen <janneke@gnu.org>
+
+###  subst:\(^\|[^._a-z]\)\(abspath\|identify\|warranty\|progress\|warning\|error\|exit\|getopt_args\|option_help_str\|options_help_str\|help\|setup_temp\|read_pipe\|system\|cleanup_temp\|strip_extension\|cp_to_dir\|mkdir_p\|init\) *(
+###  replace:\1ly.\2 (
+
+### subst: \(help_summary\|keep_temp_dir_p\|option_definitions\|original_dir\|program_name\|pseudo_filter_p\|temp_dir\|verbose_p\)
+
+import __main__
+import shutil
+import string
+import sys
+import tempfile
+
+################################################################
+# Users of python modules should include this snippet
+# and customize variables below.
+
+# We'll suffer this path init stuff as long as we don't install our
+# python packages in <prefix>/lib/pythonx.y (and don't kludge around
+# it as we do with teTeX on Red Hat Linux: set some environment var
+# (PYTHONPATH) in profile)
+
+# If set, LILYPONDPREFIX must take prevalence
+# if datadir is not set, we're doing a build and LILYPONDPREFIX
+import getopt, os, sys
+datadir = '@local_lilypond_datadir@'
+if not os.path.isdir (datadir):
+	datadir = '@lilypond_datadir@'
+if os.environ.has_key ('LILYPONDPREFIX') :
+	datadir = os.environ['LILYPONDPREFIX']
+	while datadir[-1] == os.sep:
+		datadir= datadir[:-1]
+
+sys.path.insert (0, os.path.join (datadir, 'python'))
+
+# Customize these
+if __name__ == '__main__':
+	import lilylib as ly
+	global _;_=ly._
+	global re;re = ly.re
+
+	# lilylib globals
+	program_name = 'unset'
+	pseudo_filter_p = 0
+	original_dir = os.getcwd ()
+	temp_dir = os.path.join (original_dir,  '%s.dir' % program_name)
+	keep_temp_dir_p = 0
+	verbose_p = 0
+
+	help_summary = _ ("lilylib module")
+
+	option_definitions = [
+		('', 'h', 'help', _ ("this help")),
+		]
+
+	from lilylib import *
+################################################################
+
+# Handle bug in Python 1.6-2.1
+#
+# there are recursion limits for some patterns in Python 1.6 til 2.1. 
+# fix this by importing pre instead. Fix by Mats.
+
+if float (sys.version[0:3]) <= 2.1:
+	try:
+		import pre
+		re = pre
+		del pre
+	except ImportError:
+		import re
+else:
+	import re
+	
+# Attempt to fix problems with limited stack size set by Python!
+# Sets unlimited stack size. Note that the resource module only
+# is available on UNIX.
+try:
+       import resource
+       resource.setrlimit (resource.RLIMIT_STACK, (-1, -1))
+except:
+       pass
+
+localedir = '@localedir@'
+try:
+	import gettext
+	gettext.bindtextdomain ('lilypond', localedir)
+	gettext.textdomain ('lilypond')
+	_ = gettext.gettext
+except:
+	def _ (s):
+		return s
+underscore = _
+
+program_version = '@TOPLEVEL_VERSION@'
+if program_version == '@' + 'TOPLEVEL_VERSION' + '@':
+	program_version = '1.7.5'
+
+def identify (port):
+	port.write ('%s (GNU LilyPond) %s\n' % (__main__.program_name, program_version))
+
+def warranty ():
+	identify (sys.stdout)
+	sys.stdout.write ('\n')
+	sys.stdout.write (_ ('Copyright (c) %s by' % ' 1998--2002'))
+	sys.stdout.write ('\n')
+	map (lambda x: sys.stdout.write ('  %s\n' % x), __main__.copyright)
+	sys.stdout.write ('\n')
+	sys.stdout.write (_ ("Distributed under terms of the GNU General Public License."))
+	sys.stdout.write ('\n')
+	sys.stdout.write (_ ("It comes with NO WARRANTY."))
+	sys.stdout.write ('\n')
+
+def progress (s):
+	sys.stderr.write (s)
+
+def warning (s):
+	sys.stderr.write (__main__.program_name + ":" + _ ("warning: ") + s + '\n')
+
+def error (s):
+	sys.stderr.write (__main__.program_name + ":" + _ ("error: ") + s + '\n')
+	
+def exit (i):
+	if __main__.verbose_p:
+		raise _ ('Exiting (%d)...') % i
+	else:
+		sys.exit (1)
+		
+def getopt_args (opts):
+	'''Construct arguments (LONG, SHORT) for getopt from  list of options.'''
+	short = ''
+	long = []
+	for o in opts:
+		if o[1]:
+			short = short + o[1]
+			if o[0]:
+				short = short + ':'
+		if o[2]:
+			l = o[2]
+			if o[0]:
+				l = l + '='
+			long.append (l)
+	return (short, long)
+
+def option_help_str (o):
+	'''Transform one option description (4-tuple ) into neatly formatted string'''
+	sh = '  '	
+	if o[1]:
+		sh = '-%s' % o[1]
+
+	sep = ' '
+	if o[1] and o[2]:
+		sep = ','
+		
+	long = ''
+	if o[2]:
+		long= '--%s' % o[2]
+
+	arg = ''
+	if o[0]:
+		if o[2]:
+			arg = '='
+		arg = arg + o[0]
+	return '  ' + sh + sep + long + arg
+
+
+def options_help_str (opts):
+	'''Convert a list of options into a neatly formatted string'''
+	w = 0
+	strs =[]
+	helps = []
+
+	for o in opts:
+		s = option_help_str (o)
+		strs.append ((s, o[3]))
+		if len (s) > w:
+			w = len (s)
+
+	str = ''
+	for s in strs:
+		str = str + '%s%s%s\n' % (s[0], ' ' * (w - len(s[0])  + 3), s[1])
+	return str
+
+def help ():
+	ls = [(_ ("Usage: %s [OPTION]... FILE") % __main__.program_name),
+	      ('\n\n'),
+	      (__main__.help_summary),
+	      ('\n\n'),
+	      (_ ("Options:")),
+	      ('\n'),
+	      (options_help_str (__main__.option_definitions)),
+	      ('\n\n'),
+	      (_ ("Report bugs to %s") % 'bug-lilypond@gnu.org'),
+	      ('\n')]
+	map (sys.stdout.write, ls)
+	
+def setup_temp ():
+	
+	''' Create a temporary directory, and return its name. '''
+	
+	if not __main__.keep_temp_dir_p:
+		__main__.temp_dir = tempfile.mktemp (__main__.program_name)
+	try:
+		os.mkdir (__main__.temp_dir, 0777)
+	except OSError:
+		pass
+
+	return __main__.temp_dir
+
+def command_name (cmd):
+	return re.match ('^[ \t]*([^ \t]*)', cmd).group (1)
+
+def error_log (name):
+	return os.path.join (__main__.temp_dir, '%s.errorlog' % name)
+
+def read_pipe (cmd, mode = 'r'):
+	redirect = ''
+	if __main__.verbose_p:
+		progress (_ ("Opening pipe `%s\'") % cmd)
+		redirect = ' 2>%s' % error_log (command_name (cmd))
+	pipe = os.popen (cmd + redirect, mode)
+	output = pipe.read ()
+	status = pipe.close ()
+	# successful pipe close returns 'None'
+	if not status:
+		status = 0
+	signal = 0x0f & status
+	exit_status = status >> 8
+
+	if status:
+		error (_ ("`%s\' failed (%d)") % (cmd, exit_status))
+		if not __main__.verbose_p:
+			error (_ ("The error log is as follows:"))
+			sys.stderr.write (open (error_log (command_name (cmd)).read ()))
+		exit (status)
+	if __main__.verbose_p:
+		progress ('\n')
+	return output
+
+def system (cmd, ignore_error = 0, progress_p = 0):
+	
+	'''System CMD.  If IGNORE_ERROR, do not complain when CMD
+returns non zero.  If PROGRESS_P, always show progress.
+
+RETURN VALUE
+
+Exit status of CMD '''
+
+	name = command_name (cmd)
+
+	if __main__.verbose_p:
+		progress_p = 1
+		progress (_ ("Invoking `%s\'") % cmd)
+	else:
+		progress ( _("Running %s...") % name)
+
+	redirect = ''
+	if not progress_p:
+		redirect = ' 1>/dev/null 2>' + error_log (name)
+	elif __main__.pseudo_filter_p:
+		redirect = ' 1>/dev/null'
+			
+	status = os.system (cmd + redirect)
+	signal = 0x0f & status
+	exit_status = status >> 8
+	
+	if status:
+		msg = _ ("`%s\' failed (%d)") % (name, exit_status)
+		if ignore_error:
+			if __main__.verbose_p:
+				warning (msg + ' ' + _ ("(ignored)"))
+		else:
+			error (msg)
+			if not progress_p:
+				error (_ ("The error log is as follows:"))
+				sys.stderr.write (open (error_log (name)).read ())
+			exit (status)
+
+	progress ('\n')
+	return status
+
+def cleanup_temp ():
+	if not __main__.keep_temp_dir_p:
+		if __main__.verbose_p:
+			progress (_ ("Cleaning %s...") % __main__.temp_dir)
+		shutil.rmtree (__main__.temp_dir)
+		if __main__.verbose_p:
+			progress ('\n')
+
+
+def strip_extension (f, ext):
+	(p, e) = os.path.splitext (f)
+	if e == ext:
+		e = ''
+	return p + e
+
+
+def cp_to_dir (pattern, dir):
+	"Copy files matching re PATTERN from cwd to DIR"
+	# Duh.  Python style portable: cp *.EXT OUTDIR
+	# system ('cp *.%s %s' % (ext, outdir), 1)
+	files = filter (lambda x, p=pattern: re.match (p, x), os.listdir ('.'))
+	map (lambda x, d=dir: shutil.copy2 (x, os.path.join (d, x)), files)
+
+
+# Python < 1.5.2 compatibility
+#
+# On most platforms, this is equivalent to
+#`normpath(join(os.getcwd()), PATH)'.  *Added in Python version 1.5.2*
+if os.path.__dict__.has_key ('abspath'):
+	abspath = os.path.abspath
+else:
+	def abspath (path):
+		return os.path.normpath (os.path.join (os.getcwd (), path))
+
+if os.__dict__.has_key ('makedirs'):
+	makedirs = os.makedirs
+else:
+	def makedirs (dir, mode=0777):
+		system ('mkdir -p %s' % dir)
+
+
+def mkdir_p (dir, mode=0777):
+	if not os.path.isdir (dir):
+		makedirs (dir, mode)
+
+
+environment = {}
+
+# tex needs lots of memory, more than it gets by default on Debian
+non_path_environment = {
+	'extra_mem_top' : '1000000',
+	'extra_mem_bottom' : '1000000',
+	'pool_size' : '250000',
+}
+
+def setup_environment ():
+	global environment
+
+	kpse = read_pipe ('kpsexpand \$TEXMF')
+	texmf = re.sub ('[ \t\n]+$','', kpse)
+	type1_paths = read_pipe ('kpsewhich -expand-path=\$T1FONTS')
+	
+	environment = {
+		# TODO: * prevent multiple addition.
+		#       * clean TEXINPUTS, MFINPUTS, TFMFONTS,
+		#         as these take prevalence over $TEXMF
+		#         and thus may break tex run?
+		'TEXMF' : "{%s,%s}" % (datadir, texmf) ,
+		'GS_FONTPATH' : type1_paths,
+		'GS_LIB' : datadir + '/ps',
+		}
+	
+	# $TEXMF is special, previous value is already taken care of
+	if os.environ.has_key ('TEXMF'):
+		del os.environ['TEXMF']
+ 
+	for key in environment.keys ():
+		val = environment[key]
+		if os.environ.has_key (key):
+			val = os.environ[key] + os.pathsep + val 
+		os.environ[key] = val
+
+	for key in non_path_environment.keys ():
+		val = non_path_environment[key]
+		os.environ[key] = val
+
+def print_environment ():
+	for (k,v) in os.environ.items ():
+		sys.stderr.write ("%s=\"%s\"\n" % (k, v)) 
+
+def get_bbox (filename):
+	####system ('gs -sDEVICE=bbox -q  -sOutputFile=- -dNOPAUSE %s -c quit > %s.bbox 2>&1 ' % (filename, filename))
+	#### FIXME: 2>&1 ? --jcn
+	bbox = filename + '.bbox'
+	## -sOutputFile does not work with bbox?
+	##cmd = 'gs -sDEVICE=bbox -q -sOutputFile=%s -dNOPAUSE %s -c quit' % \
+	##      (bbox, filename)
+	cmd = 'gs -sDEVICE=bbox -q -dNOPAUSE %s -c quit 2>%s' % \
+	      (filename, bbox)
+	system (cmd)
+	box = open (bbox).read ()
+	m = re.match ('^%%BoundingBox: ([0-9]+) ([0-9]+) ([0-9]+) ([0-9]+)',
+		      box)
+	gr = []
+	if m:
+		gr = map (string.atoi, m.groups ())
+	
+	return gr
+
+def make_preview (name):
+	## ly2dvi/lilypond-book discrepancy
+	preview_ps = name + '.preview.ps'
+	if not os.path.isfile (preview_ps):
+		preview_ps = name + '.eps'
+	bbox = get_bbox (preview_ps)
+	print 'bbox:' + `bbox`
+	trans_ps = name + '.trans.ps'
+	png = name + '.png'
+	
+	margin = 0
+	fo = open (trans_ps, 'w')
+	fo.write ('%d %d translate\n' % (-bbox[0] + margin,
+					 -bbox[1] + margin))
+	fo.close ()
+	
+	x = (2* margin + bbox[2] - bbox[0]) \
+	    * __main__.preview_resolution / 72.0
+	y = (2* margin + bbox[3] - bbox[1]) \
+	    * __main__.preview_resolution / 72.0
+	if x == 0:
+		x = 1
+	if y == 0:
+		y = 1
+
+	cmd = r'''gs -g%dx%d -sDEVICE=pnggray  -dTextAlphaBits=4 -dGraphicsAlphaBits=4  -q -sOutputFile=%s -r%d -dNOPAUSE %s %s -c quit ''' % \
+	      (x, y, png, __main__.preview_resolution, trans_ps, preview_ps)
+	
+	system (cmd)
+
+	status = system (cmd)
+	signal = 0xf & status
+	exit_status = status >> 8
+	
+	if status:
+		os.unlink (png)
+		error (_ ("Removing output file"))
+		exit (1)
diff -purN ../lilypond-1.7.6/scm/ascii-script.scm ./scm/ascii-script.scm
--- ../lilypond-1.7.6/scm/ascii-script.scm	2002-10-21 00:44:16.000000000 +0200
+++ ./scm/ascii-script.scm	2002-11-13 01:40:24.000000000 +0100
@@ -85,6 +85,8 @@
     sheet))
 
 
+(define (dot x y radius) "") ;; TODO
+
 (define (beam width slope thick)
   (string-append
    (func "set-line-char" "#")
@@ -128,6 +130,8 @@
      (func "put" "/")
      )))
 
+(define (polygon points blotdiameter) "") ;; TODO
+
 (define (char i)
   (func "char" i))
 
diff -purN ../lilypond-1.7.6/scm/backend-documentation-lib.scm ./scm/backend-documentation-lib.scm
--- ../lilypond-1.7.6/scm/backend-documentation-lib.scm	2002-10-21 00:44:16.000000000 +0200
+++ ./scm/backend-documentation-lib.scm	2002-11-14 11:28:43.000000000 +0100
@@ -152,8 +152,7 @@ node."
 
 (define (check-dangling-properties prop)
   (if (not (object-property prop 'iface-marked))
-      (error  "\nDangling property: " prop))
-  )
+      (error  "\ngrob-property-description.scm: Can't find interface for property:" prop)))
 
 (map check-dangling-properties all-backend-properties)
 
diff -purN ../lilypond-1.7.6/scm/chord-name.scm ./scm/chord-name.scm
--- ../lilypond-1.7.6/scm/chord-name.scm	2002-10-28 01:26:30.000000000 +0100
+++ ./scm/chord-name.scm	2002-11-06 13:34:16.000000000 +0100
@@ -195,7 +195,7 @@
 
 ;; text: list of word
 ;; word: string + optional list of property
-;; property: align, kern, font (?), size
+;; property: axis, kern, font (?), size
 
 (define chord::minor-major-vec (list->vector '(0 -1 -1 0 -1 -1 0)))
 
diff -purN ../lilypond-1.7.6/scm/grob-description.scm ./scm/grob-description.scm
--- ../lilypond-1.7.6/scm/grob-description.scm	2002-10-28 01:26:30.000000000 +0100
+++ ./scm/grob-description.scm	2002-11-14 11:28:43.000000000 +0100
@@ -231,6 +231,16 @@
 	(meta . ((interfaces . (clef-interface staff-symbol-referencer-interface font-interface break-aligned-interface item-interface ))))
 	))
 
+    (Cluster
+     . (
+	(molecule-callback . ,Cluster::brew_molecule)
+	(spacing-procedure . ,Spanner::set_spacing_rods)		
+	(minimum-length . 0.0)
+	(padding . 0.25)
+	(shape . leftsided-stairs)
+	(meta . ((interfaces . (cluster-interface spanner-interface))))
+	))
+
     (ChordName
      . (
 	(molecule-callback . ,Chord_name::brew_molecule)
@@ -448,7 +458,7 @@
 	(Y-offset-callbacks  . (,Staff_symbol_referencer::callback))
 	(stem-attachment-function . ,note-head-style->attachment-coordinates)
 	(font-family . ancient)
-	(style . mensural)
+	(style . default)
 	(glyph-name-procedure . ,find-notehead-symbol)
 	(meta . ((interfaces . (ligature-head-interface rhythmic-head-interface
 							font-interface
@@ -530,7 +540,19 @@
 	(padding . 0.8)
 	(meta . ((interfaces . (text-interface side-position-interface font-interface mark-interface self-alignment-interface item-interface ))))
 	))
-
+    
+    (MeasureGrouping
+     . (
+	(Y-offset-callbacks . (,Side_position_interface::out_of_staff 
+			       ,Side_position_interface::aligned_side))
+	(molecule-callback . ,Measure_grouping::brew_molecule)
+	(padding . 2)
+	(direction . 1)
+	(thickness . 1)
+	(height . 2.0)
+	(staff-padding . 3)
+	(meta . ((interfaces . (spanner-interface side-position-interface measure-grouping-interface))))
+	))
     (MultiMeasureRest
      . (
 	(spacing-procedure . ,Multi_measure_rest::set_spacing_rods)
@@ -554,7 +576,7 @@
 	(direction . 1)
 	(padding . 2)
 	(font-family . number)
-	(meta . ((interfaces . (side-position-interface font-interface spanner-interface))))
+	(meta . ((interfaces . (side-position-interface self-alignment-interface font-interface spanner-interface))))
 	))
 
 
diff -purN ../lilypond-1.7.6/scm/grob-property-description.scm ./scm/grob-property-description.scm
--- ../lilypond-1.7.6/scm/grob-property-description.scm	2002-10-28 01:26:30.000000000 +0100
+++ ./scm/grob-property-description.scm	2002-11-14 11:28:43.000000000 +0100
@@ -65,7 +65,7 @@ the grob to the nearest open space.
 (grob-property-description 'adjust-if-on-staffline boolean? "If this grob is on a staff line, adjust its appearance, so that it better fits into the staff.  E.g., if set true on stem grobs, flares of mensural flags will always be aligned with the staff lines, regardless if the associated note head is printed on a staff line or inbetween.")
 (grob-property-description 'after-line-breaking-callback procedure? "Procedure taking a grob as argument.
 This procedure is called (using dependency resolution) after line breaking. Return value is ignored.")
-(grob-property-description 'align number? "the alignment of the text, 0 is horizontal, 1 is vertical.")
+(grob-property-description 'axis number? "the alignment of the text, 0 is horizontal, 1 is vertical.")
 (grob-property-description 'align-dir ly:dir? "Which side to align? -1: left side, 0: around center of width, 1: right side.")
 (grob-property-description 'alignment-done boolean? "boolean to administrate whether we've done the alignment already (to ensure that the process is done only once).")
 (grob-property-description 'all-elements grob-list? "list of all grobs in this line. Needed for protecting grobs from GC.")
@@ -178,6 +178,7 @@ mean centre distance weighted per note
 (grob-property-description 'expand-limit integer? "maximum number of measures expanded in church rests.")
 (grob-property-description 'extra-X-extent number-pair? "enlarge in X dimension by this much, measured in staff space.")
 (grob-property-description 'extra-Y-extent number-pair? "see @code{extra-Y-extent}.")
+(grob-property-description 'extent number-pair? "the extent of the text: (WIDTH . HEIGHT)")
 (grob-property-description 'X-extent number-pair? "Store extent. internal use only. ")
 (grob-property-description 'Y-extent number-pair? "Store extent. internal use only. ")
 (grob-property-description 'extra-offset number-pair? "pair of reals
@@ -294,7 +295,6 @@ work: @code{\override} is processed afte
 and will have no effect.
 ")
 (grob-property-description 'lookup symbol? "lookup method: 'value for plain text, 'name for character-name.")
-(grob-property-description 'magnify number? "the magnification factor.  FIXME: doesn't work for feta fonts.")
 (grob-property-description 'maximum-length number? "don't make Grob longer than this")
 (grob-property-description 'maximum-rest-count integer? "kill off rests so we don't more than this number left.")
 (grob-property-description 'measure-length ly:moment? "Length of a
@@ -384,6 +384,8 @@ reference point.
 
 TODO: revise typing.")
 (grob-property-description 'self-alignment-Y number? "like self-alignment-X but for Y axis.")
+(grob-property-description 'segments list? "DOCME.  ")
+(grob-property-description 'shape symbol? "shape of cluster segments.  Valid values include 'leftsided-stairs', 'rightsided-stairs', 'centered-stairs', and 'ramp'.")
 (grob-property-description 'shorten number? "the amount of space that a stem should be shortened (DOCME!)")
 (grob-property-description 'shorten-pair number-pair? "the length on each side to shorten a text-spanner, for example a pedal bracket")
 (grob-property-description 'common-shortest-duration ly:moment?
@@ -509,9 +511,6 @@ Like @code{bracket-visibility}, but for 
 (grob-property-description 'tie ly:grob? "") 
 (grob-property-description 'type symbol? " 
 
-one of: line, dashed-line, trill, dotted-line or zigzag.
-
-[FIXME: type is too generic for this doc, move doco to interface] 
 ")
 
 (grob-property-description 'break-visibility procedure? "a function that takes the break direction and returns a  cons of booleans containing (TRANSPARENT . EMPTY).
@@ -567,6 +566,13 @@ columns.
 (grob-property-description 'cause scheme? "Any kind of causation objects (i.e. music, or perhaps translator) that was the cause for this grob.  ")
 (grob-property-description 'font ly:font-metric? "Cached font metric object")
 (grob-property-description 'break-alignment-done boolean? "mark flag to signal we've done alignment already.")
+(grob-property-description
+ 'staff-padding number?
+ "Maintain this much space to the staff.  It's effect is similar to
+the padding mechanism, but this will keep objects above and below the
+staff in a row more often, when the heights of the notes vary.
+")
+
 (grob-property-description 'staff-symbol ly:grob? "the staff symbol grob that we're in.")
 (grob-property-description 'collision-done boolean? "")
 (grob-property-description 'rest ly:grob? "the staff symbol grob that we're in.")
diff -purN ../lilypond-1.7.6/scm/music-functions.scm ./scm/music-functions.scm
--- ../lilypond-1.7.6/scm/music-functions.scm	2002-10-21 00:44:17.000000000 +0200
+++ ./scm/music-functions.scm	2002-11-13 01:40:24.000000000 +0100
@@ -236,6 +236,44 @@ this is not an override 
       ))
     ))
 
+
+(define-public (make-property-set sym val)
+  (let*
+      (
+       (m (make-music-by-name 'PropertySet))
+       )
+    (ly:set-mus-property! m 'symbol sym)
+    (ly:set-mus-property! m 'value val)
+    m
+  ))
+
+(define-public (make-time-signature-set num den . rest)
+  " Set properties for time signature NUM/DEN.
+Rest can contain a list of beat groupings 
+
+"
+  
+  (let*
+      (
+       (set1 (make-property-set 'timeSignatureFraction (cons num den) ))
+       (beat (ly:make-moment 1 den))
+       (len  (ly:make-moment num den))
+       (set2 (make-property-set 'beatLength beat))
+       (set3 (make-property-set 'measureLength len))
+       (set4 (make-property-set 'beatGrouping (if (pair? rest)
+						  (car rest)
+						  '())))
+       (basic  (list set1 set2 set3 set4))
+       
+       )
+
+    (context-spec-music
+     (make-sequential-music basic) "Timing")))
+
+(define-public (set-time-signature num den . rest)
+  (ly:export (apply make-time-signature-set `(,num ,den . ,rest)))
+  )
+
 (define-public (make-penalty-music pen)
  (let
      ((m (make-music-by-name 'BreakEvent)))
@@ -368,6 +406,7 @@ this is not an override 
     (not (eq? #f (memq symbol (ly:get-grob-property elt 'interfaces))))))
 
 
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; warn for bare chords at start.
 
diff -purN ../lilypond-1.7.6/scm/music-types.scm ./scm/music-types.scm
--- ../lilypond-1.7.6/scm/music-types.scm	2002-11-04 13:00:08.000000000 +0100
+++ ./scm/music-types.scm	2002-11-13 01:40:24.000000000 +0100
@@ -95,6 +95,13 @@ c8-[ c c-] c8")
 	(internal-class-name . "Event")
 	(types . (general-music event busy-playing-event))
 	)) 
+    (ClusterEvent
+     . (
+	(description .  "Begins or ends a cluster.")
+
+	(internal-class-name . "Event")
+	(types . (general-music cluster-event event))
+	)) 
     (ContextSpeccedMusic
      . (
 	(description .  "")
@@ -167,6 +174,14 @@ c8-[ c c-] c8")
 	(internal-class-name . "Key_change_req")
 	(types . (general-music key-change-event event))
 	)) 
+    (LigatureEvent
+     . (
+	(description .  "")
+
+	(internal-class-name . "Event")
+	(span-type . ligature)
+	(types . (general-music span-event ligature-event event))
+	))
     (LyricCombineMusic
      . (
 	(description .  "")
@@ -184,14 +199,6 @@ c8-[ c c-] c8")
 	(internal-class-name . "Event")
 	(types . (general-music rhythmic-event lyric-event event))
 	))
-    (LigatureEvent
-     . (
-	(description .  "")
-
-	(internal-class-name . "Event")
-	(span-type . ligature)
-	(types . (general-music event span-event ligature-event))
-	))
     (MarkEvent
      . (
 	(description .  "")
diff -purN ../lilypond-1.7.6/scm/pdf.scm ./scm/pdf.scm
--- ../lilypond-1.7.6/scm/pdf.scm	2002-10-21 00:44:17.000000000 +0200
+++ ./scm/pdf.scm	2002-11-13 01:40:24.000000000 +0100
@@ -230,6 +230,8 @@
 
 (define (text s) "")
 
+(define (polygon points blotdiameter) "") ;; TODO
+
 (define (draw-line thick fx fy tx ty)
   (string-append (setlineparams)
 		 (setlinewidth thick)
diff -purN ../lilypond-1.7.6/scm/ps.scm ./scm/ps.scm
--- ../lilypond-1.7.6/scm/ps.scm	2002-10-21 00:44:17.000000000 +0200
+++ ./scm/ps.scm	2002-11-13 01:40:24.000000000 +0100
@@ -75,13 +75,21 @@
     (list arch_angle arch_width arch_height height arch_thick thick))
    " draw_bracket"))
 
+(define (symmetric-x-triangle thick w h)
+  (string-append
+   (numbers->string (list h w thick))
+   " draw_symmetric_x_triangle"))
+
+
 (define (char i)
   (string-append 
    "(\\" (inexact->string i 8) ") show " ))
 
+
 (define (comment s)
   (string-append "% " s "\n"))
 
+
 (define (dashed-line thick on off dx dy)
   (string-append 
    (ly:number->string dx)
@@ -182,6 +190,14 @@
    (ly:number->string y2)
    " lineto stroke"))
 
+(define (polygon points blotdiameter)
+  (string-append
+   " "
+   (numbers->string points)
+   (ly:number->string (/ (length points) 2))
+   (ly:number->string blotdiameter)
+   " draw_polygon"))
+
 (define (end-output)
   "\nend-lilypond-output\n")
 
diff -purN ../lilypond-1.7.6/scm/sketch.scm ./scm/sketch.scm
--- ../lilypond-1.7.6/scm/sketch.scm	2002-10-21 00:44:17.000000000 +0200
+++ ./scm/sketch.scm	2002-11-13 01:40:24.000000000 +0100
@@ -184,6 +184,8 @@
 (define (roundfilledbox x y dx dy w h b)
   (sketch-filled-rectangle w 0 0 h x y))
 
+(define (polygon points blotdiameter) "") ;; TODO
+
 (define (select-font name-mag-pair)
   ;; name-mag-pair: (quote ("feta20" . 0.569055118110236))"feta20"(quote ("feta20" . 0.569055118110236))
   (let ((f (assoc (caadr name-mag-pair) font-alist)))
diff -purN ../lilypond-1.7.6/scm/tex.scm ./scm/tex.scm
--- ../lilypond-1.7.6/scm/tex.scm	2002-10-28 01:26:30.000000000 +0100
+++ ./scm/tex.scm	2002-11-13 01:40:24.000000000 +0100
@@ -81,6 +81,9 @@
     
     ))
 
+(define (dot x y radius)
+  (embedded-ps (list 'dot x y radius)))
+
 (define (beam width slope thick)
   (embedded-ps (list 'beam  width slope thick)))
 
@@ -99,6 +102,9 @@
 (define (zigzag-line centre? zzw zzh thick dx dy)
   (embedded-ps (list 'zigzag-line centre? zzw zzh thick dx dy)))
 
+(define (symmetric-x-triangle t w h)
+  (embedded-ps (list 'symmetric-x-triangle t w h)))
+
 (define (font-load-command name-mag command)
   (string-append
    "\\font\\" command "="
@@ -257,6 +263,9 @@
 (define (tuplet ht gapx dx dy thick dir)
   (embedded-ps (list 'tuplet  ht gapx dx dy thick dir)))
 
+(define (polygon points blotdiameter)
+  (embedded-ps (list 'polygon points blotdiameter)))
+
 (define (draw-line thick fx fy tx ty)
   (embedded-ps (list 'draw-line thick fx fy tx ty)))
 
diff -purN ../lilypond-1.7.6/scm/translator-property-description.scm ./scm/translator-property-description.scm
--- ../lilypond-1.7.6/scm/translator-property-description.scm	2002-10-28 01:26:30.000000000 +0100
+++ ./scm/translator-property-description.scm	2002-11-12 11:48:03.000000000 +0100
@@ -132,6 +132,8 @@ using barchecks in polyphonic music.")
 (translator-property-description 'barNumberVisibility procedure? "Procedure that takes an int and returns whether the corresponding bar number should be printed")
 (translator-property-description 'beamMelismaBusy boolean? "Signal if a beam is set when automaticMelismata is set")
 (translator-property-description 'beatLength ly:moment? "The length of one beat in this time signature.")
+(translator-property-description 'beatGrouping list?
+				 "List of beatgroups. Eg. in 5/8 time #(list 2 3).")
 (translator-property-description 'breakAlignOrder list? "Defines the order in which
 prefatory matter (clefs, key signatures) appears, eg. this puts the
 key signatures after the bar lines:
diff -purN ../lilypond-1.7.6/scripts/convert-ly.py ./scripts/convert-ly.py
--- ../lilypond-1.7.6/scripts/convert-ly.py	2002-11-04 11:53:29.000000000 +0100
+++ ./scripts/convert-ly.py	2002-11-13 02:12:33.000000000 +0100
@@ -1078,7 +1078,19 @@ if 1:
 	def conv(str):
 		str = re.sub (r'<<', '< <', str)
 		str = re.sub (r'>>', '> >', str)
+		return str
+	
+	conversions.append (((1,7,4), conv, '<< >> -> < <  > >'))
 
+if 1:
+	def conv(str):
+		str = re.sub (r"\\transpose", r"\\transpose c'", str)
+		str = re.sub (r"\\transpose c' *([a-z]+)'", r"\\transpose c \1", str)
+		return str
+	conversions.append (((1,7,5), conv, '\transpose TO -> \transpose FROM  TO'))
+
+if 1:
+	def conv(str):
 		kws =   ['arpeggio',
 			 'sustainDown',
 			 'sustainUp',
@@ -1094,11 +1106,10 @@ if 1:
 			 ]
 
 		origstr = string.join (kws, '|')
-		str = re.sub (r'([^-])\\(%s)\b' % origstr, r'\1-\\\2', str)
+		str = re.sub (r'([^_^-])\\(%s)\b' % origstr, r'\1-\\\2', str)
 		return str
+	conversions.append (((1,7,6), conv, 'note\\script -> note-\script'))
 	
-	conversions.append (((1,7,4), conv, '<< >> -> < <  > >'))
-
 
 ################################
 #	END OF CONVERSIONS	
diff -purN ../lilypond-1.7.6/scripts/lilypond-book.py ./scripts/lilypond-book.py
--- ../lilypond-1.7.6/scripts/lilypond-book.py	2002-11-04 11:53:29.000000000 +0100
+++ ./scripts/lilypond-book.py	2002-11-06 13:34:16.000000000 +0100
@@ -171,6 +171,9 @@ class LatexPaper:
 		re_dim = re.compile (r"\\(\w+)\s+(\d+\.\d+)")
 
 		cmd = "latex '\\nonstopmode \input %s'" % fname
+	        # Ugh.  (La)TeX writes progress and error messages on stdout
+		# Redirect to stderr
+		cmd += ' 1>/dev/stderr'
 		status = ly.system (cmd, ignore_error = 1)
 		signal = 0xf & status
 		exit_status = status >> 8
@@ -1112,7 +1115,7 @@ def compile_all_files (chunks):
 		texfiles = string.join (tex)
 		cmd = string.join ((lilypond_cmd, lilyopts, g_extra_opts,
 				    texfiles))
-		ly.system (cmd)
+		ly.system (cmd, ignore_error = 0, progress_p = 1)
 
 		#
 		# Ugh, fixing up dependencies for .tex generation
@@ -1132,7 +1135,11 @@ def compile_all_files (chunks):
 				f.close ()
 
 	def to_eps (file):
-		ly.system (r"latex '\nonstopmode \input %s'" % file)
+		cmd = r"latex '\nonstopmode \input %s'" % file
+	        # Ugh.  (La)TeX writes progress and error messages on stdout
+		# Redirect to stderr
+		cmd += ' 1>/dev/stderr'
+		ly.system (cmd)
 		ly.system ("dvips -E -o %s.eps %s" % (file, file))
 	map (to_eps, eps)
 
diff -purN ../lilypond-1.7.6/scripts/ly2dvi.py ./scripts/ly2dvi.py
--- ../lilypond-1.7.6/scripts/ly2dvi.py	2002-11-04 11:53:29.000000000 +0100
+++ ./scripts/ly2dvi.py	2002-11-06 13:34:16.000000000 +0100
@@ -32,11 +32,13 @@ TODO:
       default: create dvi only
       na: create tex, latex and dvi
       -P: create dvi and ps
+      -p: create pdf
       na: * create ps only
 
      etc.
 
-     for foo.ly, rename ly2dvi.dir to out-ly2dvi, foo.ly2dvi, foo.dir ?
+  * for foo.ly, rename ly2dvi.dir to out-ly2dvi, foo.ly2dvi, foo.dir ?
+     
      
   * move versatile taglines, 
   
@@ -45,7 +47,8 @@ TODO:
         endfooter=\tagline  -> 'lily was here <version>'
      }
 
-     lilytagline (->lily was here), usertagline, copyright etc.
+     lilytagline (->lily was here), usertagline, copyright, lily-version
+     etc.
 
   * head/header tagline/endfooter
 
@@ -53,7 +56,18 @@ TODO:
     from lilypond .tex *and* header output.
 
   * multiple \score blocks?
+
+  * Introduce verbosity levels
   
+     0  = QUIET: mute all command output, no ly2dvi progress
+     1  = BRIEF: mute all command output, only ly2dvi progress
+     2a = NORMAL: show only LilyPond command output, show ly2dvi progress
+     2b = NORMAL: show command output, show ly2dvi progress
+     3  = VERBOSE: show command output, run lilypond --verbose
+     4  = DEBUGGING: show all command output, run lilypond --verbose, print
+                   environment and all kinds of client side debugging stuff
+
+     Currently, we only have 1 and 4, but we kludge to have 2a and 4.
 '''
 
 import operator
@@ -232,13 +246,7 @@ def run_lilypond (files, dep_prefix):
 		ly.print_environment ()
 
 	cmd = string.join ((lilypond_cmd,opts, fs))
-	
-	# We unset verbose, because we always want to see lily's
-	# progess on stderr
-	save_verbose = verbose_p
-	status = ly.system (cmd, ignore_error = 1)
-	verbose_p = save_verbose
-
+	status = ly.system (cmd, ignore_error = 1, progress_p = 1)
 	signal = 0x0f & status
 	exit_status = status >> 8
 
@@ -461,6 +469,9 @@ None
 	f.close ()
 
 	cmd = latex_cmd + ' \\\\nonstopmode \\\\input %s' % latex_fn
+	# Ugh.  (La)TeX writes progress and error messages on stdout
+	# Redirect to stderr
+	cmd += ' 1>/dev/stderr'
 	status = ly.system (cmd, ignore_error = 1)
 	signal = 0xf & status
 	exit_status = status >> 8
diff -purN ../lilypond-1.7.6/scripts/midi2ly.py ./scripts/midi2ly.py
--- ../lilypond-1.7.6/scripts/midi2ly.py	2002-11-04 11:53:29.000000000 +0100
+++ ./scripts/midi2ly.py	2002-11-12 11:48:03.000000000 +0100
@@ -4,8 +4,8 @@
 # 
 # source file of the GNU LilyPond music typesetter
 #
-# convert MIDI to LilyPond source
-#
+# (c) 1998--2002  Han-Wen Nienhuys <hanwen@cs.uu.nl>
+#                 Jan Nieuwenhuizen <janneke@gnu.org>
 
 
 '''
@@ -430,6 +430,7 @@ class Note:
 		return (o, n, a)
 		
 	def dump (self):
+		global reference_note
 		s = chr ((self.notename + 2)  % 7 + ord ('a'))
 		s = s + self.alteration_names[self.alteration + 2]
 		if absolute_p:
@@ -450,10 +451,10 @@ class Note:
 			s = s + "," * -commas
 
 		if explicit_durations_p \
-		   or Duration.compare (self.duration, reference_note.duration):
+		   or Duration.compare (self.duration,
+					reference_note.duration):
 			s = s + self.duration.dump ()
 
-		global reference_note
 		reference_note = self
 		
 		# TODO: move space
@@ -1051,13 +1052,10 @@ for opt in options:	
 
 
 	elif o == '--absolute-pitches' or o == '-a':
-		global absolute_p
 		absolute_p = 1
 	elif o == '--duration-quant' or o == '-d':
-		global duration_quant
 		duration_quant = string.atoi (a)
 	elif o == '--explicit-durations' or o == '-e':
-		global explicit_durations_p
 		explicit_durations_p = 1
 	elif o == '--key' or o == '-k':
 		(alterations, minor) = map (string.atoi, string.split (a + ':0', ':'))[0:2]
@@ -1067,7 +1065,6 @@ for opt in options:	
  			sharps = alterations
  		else:
  			flats = - alterations
-		global key
 		key = Key (sharps, flats, minor)
 	elif o == '--start-quant' or o == '-s':
 		start_quant = string.atoi (a)
diff -purN ../lilypond-1.7.6/scripts/mup2ly.py ./scripts/mup2ly.py
--- ../lilypond-1.7.6/scripts/mup2ly.py	2002-07-24 15:35:05.000000000 +0200
+++ ./scripts/mup2ly.py	2002-11-12 11:48:03.000000000 +0100
@@ -55,9 +55,10 @@ errorport = sys.stderr
 keep_temp_dir_p = 0
 verbose_p = 0
 
+localedir = '@localedir@'
 try:
 	import gettext
-	gettext.bindtextdomain ('lilypond', '@localedir@')
+	gettext.bindtextdomain ('lilypond', localedir)
 	gettext.textdomain ('lilypond')
 	_ = gettext.gettext
 except:
diff -purN ../lilypond-1.7.6/scripts/update-lily.py ./scripts/update-lily.py
--- ../lilypond-1.7.6/scripts/update-lily.py	2002-09-24 15:54:36.000000000 +0200
+++ ./scripts/update-lily.py	2002-11-12 11:48:03.000000000 +0100
@@ -54,10 +54,10 @@ release_dir = build_root + '/releases'
 patch_dir = build_root + '/patches'
 symlink_name = ''
 
-
+localedir = '@localedir@'
 try:
 	import gettext
-	gettext.bindtextdomain ('lilypond', '@localedir@')
+	gettext.bindtextdomain ('lilypond', localedir)
 	gettext.textdomain ('lilypond')
 	_ = gettext.gettext
 except:
diff -purN ../lilypond-1.7.6/stepmake/aclocal.m4 ./stepmake/aclocal.m4
--- ../lilypond-1.7.6/stepmake/aclocal.m4	2002-10-28 01:26:31.000000000 +0100
+++ ./stepmake/aclocal.m4	2002-11-12 11:48:03.000000000 +0100
@@ -247,10 +247,10 @@ AC_DEFUN(STEPMAKE_DATADIR, [
     local_package_datadir=$package_datadir/$FULL_VERSION
     build_package_datadir=$builddir/share/$package
     
-    DATADIR=$(echo ${datadir} | sed "s!\\\${prefix}!$presome!")
-    PACKAGE_DATADIR=$(echo ${package_datadir} | sed "s!\\\${prefix}!$presome!")
-    LOCAL_PACKAGE_DATADIR=$(echo ${local_package_datadir} | sed "s!\\\${prefix}!$presome!")
-    BUILD_PACKAGE_DATADIR=$(echo ${build_package_datadir} | sed "s!\\\${prefix}!$presome!")
+    DATADIR=`echo ${datadir} | sed "s!\\\${prefix}!$presome!"`
+    PACKAGE_DATADIR=`echo ${package_datadir} | sed "s!\\\${prefix}!$presome!"`
+    LOCAL_PACKAGE_DATADIR=`echo ${local_package_datadir} | sed "s!\\\${prefix}!$presome!"`
+    BUILD_PACKAGE_DATADIR=`echo ${build_package_datadir} | sed "s!\\\${prefix}!$presome!"`
     
     AC_SUBST(datadir)
     AC_SUBST(package_datadir)
@@ -341,7 +341,7 @@ AC_DEFUN(STEPMAKE_GETTEXT, [
     if test "$prefix" = "NONE"; then
 	    presome=${ac_default_prefix}
     fi
-    LOCALEDIR=$(echo ${localedir} | sed "s!\\\${prefix}!$presome!")
+    LOCALEDIR=`echo ${localedir} | sed "s!\\\${prefix}!$presome!"`
     
     AC_SUBST(localedir)
     AC_DEFINE_UNQUOTED(LOCALEDIR, "${LOCALEDIR}")
@@ -562,16 +562,18 @@ AC_DEFUN(STEPMAKE_INIT, [
 
     STEPMAKE_PROGS(TAR, tar, REQUIRED)
 
-    if test "x`uname`" = "xHP-UX"; then
-	AC_PATH_PROG(BASH, bash, /bin/sh)
+    if test "$(echo 2)" != "2" ||
+	test "x`uname`" = "xHP-UX"; then
+	AC_PATH_PROG(KSH, ksh, /bin/ksh)
+	AC_PATH_PROG(BASH, bash, $KSH)
 	STEPMAKE_WARN(avoiding buggy /bin/sh)
-	AC_PATH_PROG(SHELL, bash, /bin/ksh)
+	AC_PATH_PROG(SHELL, bash, $KSH)
     else
-	AC_PATH_PROG(BASH, bash, /bin/sh)
 	SHELL=/bin/sh
-	AC_SUBST(SHELL)
+	AC_PATH_PROG(BASH, bash, $SHELL)
     fi
-
+    AC_SUBST(SHELL)
+    
     STEPMAKE_PATH_PROG(PYTHON, python, REQUIRED)
 
     if expr "$MAKE" : '.*\(echo\)' >/dev/null; then
@@ -690,7 +692,7 @@ AC_DEFUN(STEPMAKE_LIBTOOL, [
     REVISION=$PATCH_LEVEL
     # CURRENT=$MINOR_VERSION
     CURRENT=`expr $MINOR_VERSION + 1`
-    # AGE=$(expr $MAJOR_VERSION + 1)
+    # AGE=`expr $MAJOR_VERSION + 1`
     AGE=$MAJOR_VERSION
     AC_SUBST(CURRENT)
     AC_SUBST(REVISION)
diff -purN ../lilypond-1.7.6/stepmake/stepmake/python-module-vars.make ./stepmake/stepmake/python-module-vars.make
--- ../lilypond-1.7.6/stepmake/stepmake/python-module-vars.make	2002-11-04 11:53:32.000000000 +0100
+++ ./stepmake/stepmake/python-module-vars.make	2002-11-06 13:34:20.000000000 +0100
@@ -7,4 +7,5 @@ else
 SHARED_MODULE_SUFFIX = .so
 endif
 OUT_SO_MODULES = $(addprefix $(outdir)/, $(C_FILES:.c=$(SHARED_MODULE_SUFFIX)))
+EXTRA_DIST_FILES += $(PY_MODULES_IN)
 
diff -purN ../lilypond-1.7.6/tex/lily-ps-defs.tex ./tex/lily-ps-defs.tex
--- ../lilypond-1.7.6/tex/lily-ps-defs.tex	2002-10-28 01:26:31.000000000 +0100
+++ ./tex/lily-ps-defs.tex	2002-11-12 11:48:04.000000000 +0100
@@ -6,30 +6,46 @@
 % Header info (macros/defs, etc) should go into a \special{! ... };
 % note the ! sign.  See dvips.info for details.
 %
-% Escape the colon with \string to avoid problems with French while using
-% the Babel package.
+% We protect punctuation characters with \string to avoid problems with
+% language specific shorthands (e.g. `:' for French, `"' for German, etc.).
 
 \gdef\lilypondsetdimen#1{
-  \expandafter\special{
-    ! /#1 (\csname #1\endcsname) set_tex_dimen
+  \expandafter\gdef\csname #1ps\endcsname{}
+  \special{
+    \string!
+    /#1 (\csname #1\endcsname) set_tex_dimen
   }
 }
 
 \gdef\lilypondspace{ }
 
 \gdef\lilypondpostscript{
-  % This sets CTM so that you get to the currentpoint
-  % by executing a 0 0 moveto
+  % A document processed with lilypond-book can contain music fragments in
+  % different sizes.  To reduce overhead, we define `lyscaleXXX' PS macros
+  % only once.
+  \lilypondifundefined{lyscale\lilypondpaperoutputscale}
+    {
+      \expandafter\gdef\csname lyscale\lilypondpaperoutputscale\endcsname{}
+      % This sets CTM so that you get to the currentpoint
+      % by executing a 0 0 moveto
+      \special{
+        \string!
+        /lyscale\lilypondpaperoutputscale
+          {\lilypondpaperoutputscale\lilypondspace\scaletounit %
+           dup scale} def
+      }
+    }
+    {}
+                      
   \def\embeddedps##1{
     \special{
-      ps\string: @beginspecial @setspecial %
-                 \lilypondpaperoutputscale\lilypondspace\scaletounit %
-                 \lilypondpaperoutputscale\lilypondspace\scaletounit %
-                 % FUCKING REDHAT XDVI -- ARG!
-                 skeel ##1 @endspecial
-    }
+      \string"
+      lyscale\lilypondpaperoutputscale\lilypondspace ##1}
   }
-  \lilypondsetdimen{lilypondpaperblotdiameter}
+
+  \lilypondifundefined{lilypondpaperblotdiameterps}
+    {\lilypondsetdimen{lilypondpaperblotdiameter}}
+    {}
 }
 
 \gdef\lilypondexperimentalfeatures{}
diff -purN ../lilypond-1.7.6/tex/music-drawing-routines.ps ./tex/music-drawing-routines.ps
--- ../lilypond-1.7.6/tex/music-drawing-routines.ps	2002-10-28 01:40:04.000000000 +0100
+++ ./tex/music-drawing-routines.ps	2002-11-14 12:10:37.000000000 +0100
@@ -4,9 +4,6 @@
 
 /blot-diameter { lilypondpaperblotdiameter } bind def
 
-% fucking redhat xdvi patch.
-/skeel { scale } bind def
-
 /set_tex_dimen {
 	cvr def     
 } bind def
@@ -50,6 +47,18 @@
 	} ifelse
 } bind def
 
+
+/draw_symmetric_x_triangle % h w th
+{
+    setlinewidth
+    0 0 moveto
+    dup 0 lineto
+    2 div 
+    exch lineto
+    0 0 lineto
+    stroke
+} bind def
+
 /draw_round_box % breapth width depth height blot
 {
 	/blot exch def
@@ -109,6 +118,26 @@
 	} ifelse
 } bind def 
 
+/draw_polygon % x(n) y(n) x(n-1) y(n-1) ... x(1) y(1) n blot
+{
+	/blot exch def
+
+	0 setlinecap
+	blot setlinewidth
+	1 setlinejoin
+
+	/points exch def
+	2 copy
+	moveto
+	1 1 points {pop lineto} for
+	currentdict /testing known {
+		%% outline only, for testing:
+		stroke
+	}{
+		closepath gsave stroke grestore fill
+	} ifelse
+} bind def
+
 /draw_repeat_slash % width slope thick
 {
 	1 setlinecap
diff -purN ../lilypond-1.7.6/THANKS ./THANKS
--- ../lilypond-1.7.6/THANKS	2002-10-11 11:20:34.000000000 +0200
+++ ./THANKS	2002-11-12 11:47:54.000000000 +0100
@@ -17,3 +17,4 @@ Karl-Johan Karlsson 
 Karl Berry
 Werner Lemberg
 Thomas Rijniers
+Klaus Zimmermann
diff -purN ../lilypond-1.7.6/VERSION ./VERSION
--- ../lilypond-1.7.6/VERSION	2002-11-04 11:53:01.000000000 +0100
+++ ./VERSION	2002-11-14 11:29:43.000000000 +0100
@@ -1,7 +1,7 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=7
-PATCH_LEVEL=6
+PATCH_LEVEL=7
 MY_PATCH_LEVEL=
 
 # Use the above to send patches: MY_PATCH_LEVEL is always empty for a
diff -purN ../lilypond-1.7.6/vimrc ./vimrc
--- ../lilypond-1.7.6/vimrc	2002-11-04 11:53:02.000000000 +0100
+++ ./vimrc	2002-11-14 11:28:33.000000000 +0100
@@ -1,34 +1,45 @@
-:version 4.0
+:version 6.1
 set autoindent
 set shiftwidth=2
 "
 " some handy key mappings
 "
-" F4  save & make and play midi
+" <F4>  save & make and play midi
 map <F4> :w<Return>:se makeprg=ly2dvi\ -m\ %<<Return>:make<Return>:!timidity %<.midi<Return>
 "
-" F5  save & make dvi, midi, ps
+" <F5>  save & make dvi, midi, ps
 map <F5> :w<Return>:se makeprg=ly2dvi\ -P\ %<<Return>:make<Return>
 "
-" F6  view ps
+" <F6>  view ps
 map <F6> :!gv -watch %<.ps &<Return>
 "
-" F7  prev error
+" <S-F6>  view dvi
+map <S-F6> :!xdvi %<.dvi &<Return>
+"
+" <F7>  prev error
 map <F7> :cp<Return>
 "
-" F8  next error
+" <F8>  next error
 map <F8> :cn<Return>
 "
-" F9  make
+" <F9>  make
 map <F9> :w<Return>:se makeprg=make\ -k<Return>:make<Return>
 "
-" F10 run buffer through lily
+" <F10> run buffer through lily
 map <F10> :w<Return>:se makeprg=lilypond\ %:t<Return>:make<Return>
 "
-" shift F10: run buffer through lily -M
+" <S-F10> run buffer through lily -M
 map <S-F10> :w<Return>:se makeprg=lilypond\ -M\ %:t<Return>:make<Return>
 "
+" <F12> comment region
+map <F12> :g!/%.*/normal 0i%<Return>
+"
+" <S-F12> remove comments in region
+map <S-F12> :g/%.*/normal 0x<Return>
 "
+" Completions in Insert/Replace-mode with <Ctrl-N>
+set dictionary-=~/.vim/lilypond.words dictionary+=~/.vim/lilypond.words
+set complete-=k complete+=k
 " errorformat for lily (with columns) and gcc
 " (how to see multiple-line error messages?)
 "
