]> git.donarmstrong.com Git - lilypond.git/commitdiff
release: 1.2.5 release/1.2.5
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Thu, 2 Sep 1999 00:17:49 +0000 (02:17 +0200)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Thu, 2 Sep 1999 00:17:49 +0000 (02:17 +0200)
84 files changed:
AUTHORS.txt
CHANGES
Documentation/COPERTINA.yo
Documentation/FLAPTEKST.yo
Documentation/metadoc/GNUmakefile
Documentation/scherm.in [deleted file]
Documentation/schermo.in [deleted file]
Documentation/tex/GNUmakefile
Documentation/tex/glossary.yo [deleted file]
Documentation/tex/html-disclaimer.yo-urg [deleted file]
Documentation/tex/lilypond-regtest.doc [deleted file]
Documentation/tex/mudela-book-doc.doc
Documentation/tex/reference-manual.tely [new file with mode: 0644]
Documentation/tex/reference-manual.yo [deleted file]
Documentation/tex/regression-test.tely [new file with mode: 0644]
Documentation/tex/tutorial.tely [new file with mode: 0644]
Documentation/tex/tutorial.yo [deleted file]
Documentation/topdocs/AUTHORS.texi [new file with mode: 0644]
Documentation/topdocs/AUTHORS.yo [deleted file]
Documentation/topdocs/GNUmakefile
Documentation/topdocs/INSTALL.texi [new file with mode: 0644]
Documentation/topdocs/INSTALL.yo [deleted file]
Documentation/topdocs/PATCHES.texi [new file with mode: 0644]
Documentation/topdocs/PATCHES.yo [deleted file]
Documentation/topdocs/README.texi [new file with mode: 0644]
Documentation/topdocs/README.yo [deleted file]
Documentation/topdocs/index.tely [new file with mode: 0644]
Documentation/topdocs/index.yo [deleted file]
Documentation/topdocs/scherm.in [deleted file]
Documentation/topdocs/schermo.in [deleted file]
Documentation/topdocs/topweb.yo [deleted file]
INSTALL.txt
NEWS
README.txt
TODO
VERSION
aclocal.m4
buildscripts/mutopia-index.py
config.make.in
configure
flower/directed-graph.cc [deleted file]
flower/include/directed-graph.hh [deleted file]
input/bugs/addlyrmus.fly [new file with mode: 0644]
input/bugs/addlyrmus.ly [deleted file]
input/bugs/core.ly [deleted file]
input/bugs/dots.fly
input/bugs/hinterfleisch-gone.ly
input/bugs/l.ly [new file with mode: 0644]
input/bugs/swits.ly [deleted file]
input/bugs/utremi_old.ly [new file with mode: 0644]
input/test/repeat-semifold.ly
lily/crescendo.cc
lily/include/score-element.hh
lily/include/spanner.hh
lily/multi-measure-rest.cc
lily/note-heads-engraver.cc
lily/paper-stream.cc
lily/repeated-music.cc
lily/rest-engraver.cc
lily/slur.cc
lily/spacing-spanner.cc
lily/spanner.cc
lily/staff-side.cc
lily/tie.cc
lily/volta-spanner.cc
make/mudela-rules.make
make/mudela-targets.make
make/mudela-vars.make
make/out/lilypond.lsm
make/out/lilypond.spec
ps/lily.ps
scm/lily.scm
scripts/mudela-book.py
stepmake/aclocal.m4
stepmake/bin/add-html-footer.py
stepmake/bin/ls-latex.py
stepmake/bin/package-diff.py
stepmake/bin/packagepython.py
stepmake/bin/table-to-html.py
stepmake/bin/texi2man.sh [deleted file]
stepmake/stepmake/texinfo-rules.make
stepmake/stepmake/texinfo-targets.make [new file with mode: 0644]
stepmake/stepmake/texinfo-vars.make [new file with mode: 0644]
tex/lily-ps-defs.tex

index 824ab30814e0b50c7b3ae99c4a8bd1afe7130949..ed7b21bbf74660b9c2d2255f742043bbcbe2c571 100644 (file)
@@ -1,73 +1,64 @@
 
-          AUTHORS - who did what on GNU LilyPond?
 
-Contents
+AUTHORS - who did what on GNU LilyPond?
+***************************************
 
-This file lists authors of GNU LilyPond, and what they
-wrote.  This list is alphabetically ordered.
+   This file lists authors of GNU LilyPond, and what they wrote.  This
+list is alphabetically ordered.
 
-o    Tom Cato Amundsen <tomcato@xoommail.com>, cembalo-par-
-     tita in mudela, accordion symbols, some mudela-book.py
+   * Tom Cato Amundsen <tomcato@xoommail.com>,     cembalo-partita in
+     mudela, accordion symbols, some mudela-book.py
 
-o    Mats Bengtsson <matsb@s3.kth.se>,
-     http://www.s3.kth.se/~matsb/ lots of testing, fixes,
-     general comments and contributions.
+   * Mats Bengtsson <matsb@s3.kth.se>,
+     `http://www.s3.kth.se/~matsb/'     lots of testing, fixes, general
+     comments and contributions.
 
-o    Eric Bullinger <eric@aut.ee.ethz.ch>, accidental trans-
-     position.
+   * Eric Bullinger <eric@aut.ee.ethz.ch>,     accidental transposition.
 
-o    Jan Arne Fagertun <Jan.A.Fagertun@energy.sintef.no>,
-     TeX titling and lytodvi.sh
+   * Jan Arne Fagertun <Jan.A.Fagertun@energy.sintef.no>,     TeX
+     titling and lytodvi.sh
 
-o    Anthony Fok <foka@debian.org>, debian package: debian/*
+   * Anthony Fok <foka@debian.org>,     debian package: debian/*
 
-o    Bjoern Jacke <bjoern.jacke@gmx.de> german glossary
-     stuff.
+   * Bjoern Jacke <bjoern.jacke@gmx.de>     german glossary stuff.
 
-o    Neil Jerram <nj104@cus.cam.ac.uk>.  parts of Documenta-
-     tion/Vocab*
+   * Neil Jerram <nj104@cus.cam.ac.uk>.      parts of
+     Documentation/Vocab*
 
-o    Donald Ervin Knuth,  http://www-cs-staff.stan-
-     ford.edu/~knuth/ mf/ital-*.mf (these were taken from
-     the CM fonts)
+   * Donald Ervin Knuth,  `http://www-cs-staff.stanford.edu/~knuth/'
+     mf/ital-*.mf (these were taken from the CM fonts)
 
-o    Michael Krause <m.krause@tu-harburg.de>, breathing
-     signs
+   * Michael Krause <m.krause@tu-harburg.de>,     breathing signs
 
-o    Werner Lemberg <xlwy01@uxp1.hrz.uni-dortmund.de>, misc
+   * Werner Lemberg <xlwy01@uxp1.hrz.uni-dortmund.de>,     misc
      bugfixes, some Beam and Stem code.
 
-o    David R. Linn <drl@vuse.vanderbilt.edu>, Mailing list
+   * David R. Linn <drl@vuse.vanderbilt.edu>,     Mailing list
      maintenance.
 
-o    Adrian Mariano <> Reference manual, tutorial fixes,
-     glossary.
+   * Adrian Mariano <>     Reference manual, tutorial fixes, glossary.
 
-o    Han-Wen Nienhuys <hanwen@cs.uu.nl>,
-     http://www.cs.uu.nl/~hanwen/ Main author (initials:
-     HWN).
+   * Han-Wen Nienhuys <hanwen@cs.uu.nl>,
+     `http://www.cs.uu.nl/~hanwen/'     Main author (initials: HWN).
 
-o    Jan Nieuwenhuizen <janneke@gnu.org>,
-     http://www.xs4all.nl/~jantien/ Main author (initials:
-     JCN).
+   * Jan Nieuwenhuizen <janneke@gnu.org>,
+     `http://www.xs4all.nl/~jantien/'     Main author (initials: JCN).
 
-o    Alexandre Oliva <oliva@dcc.unicamp.br>, http://sun-
-     site.unicamp.br/~oliva/ testing
+   * Alexandre Oliva <oliva@dcc.unicamp.br>,
+     `http://sunsite.unicamp.br/~oliva/'     testing
 
-o    Franc,ois Pinard <pinard@iro.umontreal.ca>, parts of
-     Documentation/Vocab*, started internationalization
+   * Franc <pinard@iro.umontreal.ca>ois Pinard,     parts of
+     Documentation/Vocab*, started internationalization stuff
 
-     stuff
+   * Glen Prideaux <glenprideaux@iname.com>,     minor bug fix to
+     script used to generate doc++ documentation
 
-o    Glen Prideaux <glenprideaux@iname.com>, minor bug fix
-     to script used to generate doc++ documentation
+   * Jeffrey B. Reed <daboys@austin.rr.com>,     Windows-NT support.
 
-o    Jeffrey B. Reed <daboys@austin.rr.com>, Windows-NT sup-
-     port.
+   * Shay Rojanski     Some mudela source.
 
-o    Shay Rojanski Some mudela source.
+   * Laura Conrad (lconrad@world.std.com)     fixes to abc2ly
 
-o    Laura Conrad (lconrad@world.std.com) fixes to abc2ly
+   Your name could be here! If you want to fix something, do it, and
+send us a patch!
 
-Your name could be here! If you want to fix something, do
-it, and send us a patch!
diff --git a/CHANGES b/CHANGES
index 8fa3170237c8d612fdd784105290b2aba3a14a64..2f0e5efd8d4db9e078230183364b66151bfffffe 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,12 @@
+pl 4.hwn1
+       - bf: repeats.
+       - bf: mmrests
+       - bf: simpler guile detection.
+       - use texinfo for reference manual.
+       - inline lily.ps from lilypond.
+       - texi for doco: converted directory Documentation/tex/
+
+
 pl 3.hwn1
        - mudela-book tweaks for surviving texinfo
        - include feta  command seqs. in .tex 
@@ -12,8 +21,6 @@ extent () is given relative to this.
        - bf: Rhythmic_head::do_substitute_element_pointer ()
        - Direct access to dim_cache_ replaced by methods in
 Graphical_element.
-3.mk1
-       - left endings of various spanners adjusted
 
 **********
 
index dd4c568b46e5f6f8f551c61c59ff25913663ffe9..af415d654b28ab272f11e4a514434cab34df28de 100644 (file)
@@ -5,5 +5,4 @@ nsect(LilyPond 
 
 includefile(COPERTINA.in)
 nl()
-pic(schermo)
 
index b144222cebd273a539d9672221d94dc69110108b..ced2a0271eaa5b2ed931e1d26afbb76ec19157e0 100644 (file)
@@ -1,9 +1,5 @@
-COMMENT(silly...DEFINEMACRO(pic)(1)(url(ARG1)(ARG1.png)))
-DEFINEMACRO(pic)(1)(verbinclude(ARG1.in))
-
 nsect(LilyPond -- De Muziek Zetter van het GNU Project)
 
 includefile(FLAPTEKST.in)
 nl()
-pic(scherm)
 
index ebce9188b1add1fe3358096df69fa9ed26e363f2..2df6d428285f6761fec27027967fc3663cb0c561 100644 (file)
@@ -6,19 +6,17 @@ DATA_FILES = $(wildcard *.data)
 datafiles = $(addprefix $(outdir)/,$(DATA_FILES:.data=.html))
 TEX_FILES = $(wildcard *.tex)
 DOC_FILES = $(wildcard *.doc)
-TELY_FILES = $(wildcard *.tely)
-DVI_FILES = $(addprefix $(outdir)/,$(DOC_FILES:.doc=.dvi) $(YO_FILES:.yo=.dvi) $(TELY_FILES:.tely=.dvi))
+
+DVI_FILES = $(addprefix $(outdir)/,$(DOC_FILES:.doc=.dvi)  $(TELY_FILES:.tely=.dvi))
 OUT_BIB_FILES = $(addprefix $(outdir)/, $(BIB_FILES))
 
-# just include me
-YO_URG_FILES = $(wildcard *.yo-urg)
 
 OUTTEX_FILES = $(addprefix $(outdir)/, $(TEX_FILES))
 OUTDOC_FILES = $(addprefix $(outdir)/, $(DOC_FILES))
 EL_FILES = $(wildcard *.el)
 BIB_FILES= $(wildcard *.bib)
-EXTRA_DIST_FILES= $(BIB_FILES) $(DOC_FILES) $(DATA_FILES) $(EL_FILES) $(YO_URG_FILES) $(TEX_FILES) $(TELY_FILES) $(wildcard *.sty) 
-HTML_FILES = $(addprefix $(outdir)/, $(YO_FILES:.yo=.html) $(TELY_FILES:.tely=.html))
+EXTRA_DIST_FILES= $(BIB_FILES) $(DOC_FILES) $(DATA_FILES) $(EL_FILES)  $(TEX_FILES) $(wildcard *.sty) 
+HTML_FILES = $(addprefix $(outdir)/,  $(TELY_FILES:.tely=.html))
 PS_FILES = $(DVI_FILES:.dvi=.ps)
 
 STEPMAKE_TEMPLATES=tex documentation
@@ -53,9 +51,9 @@ $(outdir)/%.tex: %.data $(depth)/VERSION
 
 
 
-local-WWW: $(HTML_FILES) $(OUTTEX_FILES:.doc=.ps.gz) $(OUTYO_FILES:.yo=.latex) $(OUTYO_FILES:.yo=.ps.gz) $(addprefix $(outdir)/, $(BIB_FILES:.bib=.html)) $(datafiles) ps
+local-WWW-donotdoit: $(HTML_FILES) $(OUTTEX_FILES:.doc=.ps.gz)  $(addprefix $(outdir)/, $(BIB_FILES:.bib=.html)) $(datafiles) ps
        $(PYTHON) $(step-bindir)/ls-latex.py --package=$(topdir) --title 'LaTeX documents about design and implementation of LilyPond' \
-         $(TELY_FILES) $(YO_FILES) $(OUTYO_FILES:.yo=.latex) $(BIB_FILES) $(DOC_FILES) $(TEX_FILES)\
+         $(TELY_FILES)  $(BIB_FILES) $(DOC_FILES) $(TEX_FILES)\
          | sed "s!$(outdir)/!!g" > $(outdir)/index.html
          $(PYTHON) $(step-bindir)/add-html-footer.py --package=$(topdir) $(outdir)/index.html
 
diff --git a/Documentation/scherm.in b/Documentation/scherm.in
deleted file mode 100644 (file)
index 005b645..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-18:46:03 mub ~/lelie$ lilypond twinkle
-GNU LilyPond 0.1.78/FlowerLib 1.1.44.
-Ontleden...[/home/fred/usr/src/lilypond/init/init.ly[/home/fred/usr/src/lilypond/init/declarations.ly[/home/fred/usr/src/lilypond/init/dynamic.ly][/home/fred/usr/src/lilypond/init/nederlands.ly][/home/fred/usr/src/lilypond/init/script.ly][/home/fred/usr/src/lilypond/init/paper20.ly[/home/fred/usr/src/lilypond/init/table20.ly][/home/fred/usr/src/lilypond/init/table13.ly][/home/fred/usr/src/lilypond/init/table16.ly][/home/fred/usr/src/lilypond/init/params.ly[/home/fred/usr/src/lilypond/init/a4.ly][/home/fred/usr/src/lilypond/init/paper.ly][/home/fred/usr/src/lilypond/init/engraver.ly]]][/home/fred/usr/src/lilypond/init/midi.ly[/home/fred/usr/src/lilypond/init/performer.ly]][/home/fred/usr/src/lilypond/init/property.ly]][/home/fred/usr/src/lilypond/input/twinkle.ly]]
-Vertolken van muziek...[8][16][24][25]
-duur: 1.34 seconden
-Voorbewerken van elementen... [/home/fred/usr/src/lilypond/mf/out/feta20.afm]
-Berekenen van kolomposities... [3][6][9][12][15][18][21][24][25]
-geschat: 231 regels (van gemiddeld 21.4 kolommen)
-exact berekend: 66 regels (van gemiddeld 25.5 kolommen)
-duur: 6.11 seconden
-Nabewerken van elementen... 
-TeX uitvoer naar twinkle.tex...
-
-Vertolken van muziek...
-duur: 0.22 seconden
-MIDI uitvoer naar twinkle.midi...
diff --git a/Documentation/schermo.in b/Documentation/schermo.in
deleted file mode 100644 (file)
index b4fb407..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-18:37:15 mub ~/lelie$ lilypond twinkle
-GNU LilyPond 0.1.78/FlowerLib 1.1.44.
-Analizzare...[/home/fred/usr/src/lilypond/init/init.ly[/home/fred/usr/src/lilypond/init/declarations.ly[/home/fred/usr/src/lilypond/init/dynamic.ly][/home/fred/usr/src/lilypond/init/nederlands.ly][/home/fred/usr/src/lilypond/init/script.ly][/home/fred/usr/src/lilypond/init/paper20.ly[/home/fred/usr/src/lilypond/init/table20.ly][/home/fred/usr/src/lilypond/init/table13.ly][/home/fred/usr/src/lilypond/init/table16.ly][/home/fred/usr/src/lilypond/init/params.ly[/home/fred/usr/src/lilypond/init/a4.ly][/home/fred/usr/src/lilypond/init/paper.ly][/home/fred/usr/src/lilypond/init/engraver.ly]]][/home/fred/usr/src/lilypond/init/midi.ly[/home/fred/usr/src/lilypond/init/performer.ly]][/home/fred/usr/src/lilypond/init/property.ly]][/home/fred/usr/src/lilypond/input/twinkle.ly]]
-Interpretare musica...[8][16][24][25]
-durata: 1.36 secondi
-Preprocessare elementi... [/home/fred/usr/src/lilypond/mf/out/feta20.afm]
-Calcolare posizioni di colonne... [3][6][9][12][15][18][21][24][25]
-approssimato: 231 linee (con una media di 21 colonne):
-calcolato esattamente: 66 linee (con una media di 25 colonne)
-durata: 6.14 secondi
-Postprocessare elementi... 
-Prodotto di TeX verso twinkle.tex...
-
-Interpretare musica...
-durata: 0.21 secondi
-Prodotto di MIDI verso twinkle.midi...
index 6fd3cf7762bbc1aaf2a449a8d095b76b0aa1b749..fd0723e714acc873b62874a54d5e760d84215a99 100644 (file)
@@ -6,20 +6,20 @@ DATA_FILES = $(wildcard *.data)
 datafiles = $(addprefix $(outdir)/,$(DATA_FILES:.data=.html))
 TEX_FILES = $(wildcard *.tex)
 DOC_FILES = $(wildcard *.doc)
-TELY_FILES = $(wildcard *.tely)
-DVI_FILES = $(addprefix $(outdir)/,$(DOC_FILES:.doc=.dvi) $(YO_FILES:.yo=.dvi) $(TELY_FILES:.tely=.dvi))
 
-# just include me
-YO_URG_FILES = $(wildcard *.yo-urg)
+DVI_FILES = $(addprefix $(outdir)/,$(DOC_FILES:.doc=.dvi)  $(TELY_FILES:.tely=.dvi))
+
+
 
-OUTTEX_FILES = $(addprefix $(outdir)/, $(TEX_FILES))
 OUTDOC_FILES = $(addprefix $(outdir)/, $(DOC_FILES))
+OUTTEX_FILES = $(addprefix $(outdir)/, $(TEX_FILES))
+
+EXTRA_DIST_FILES= $(DOC_FILES) $(DATA_FILES) $(EL_FILES) $(TEX_FILES) testje.fly
+HTML_FILES = $(addprefix $(outdir)/, $(TELY_FILES:.tely=.html))
 
-EXTRA_DIST_FILES= $(DOC_FILES) $(DATA_FILES) $(EL_FILES) $(YO_URG_FILES) $(TEX_FILES) $(TELY_FILES) testje.fly
-HTML_FILES = $(addprefix $(outdir)/, $(YO_FILES:.yo=.html) $(TELY_FILES:.tely=.html))
 PS_FILES = $(DVI_FILES:.dvi=.ps)
 
-STEPMAKE_TEMPLATES=tex documentation
+STEPMAKE_TEMPLATES=tex texinfo documentation
 LOCALSTEPMAKE_TEMPLATES=lilypond mudela
 
 include $(depth)/make/stepmake.make 
@@ -42,31 +42,24 @@ OUTGENHTMLS = $(addprefix $(outdir)/, $(GENHTMLS:%=%.html))
 #urg should generalise and move Lilypond -> StepMake
 # URG.  Lilypond specific. Move out. 
 $(outdir)/%.html: %.data $(depth)/VERSION
-       $(PYTHON) $(step-bindir)/table-to-html.py --columns=7 --linesep='\r' --package=$(topdir) -o $@ $<
+       $(PYTHON) $(step-bindir)/table-to-html.py --columns=7 --linesep='\r' -o $@ $<
        $(PYTHON) $(step-bindir)/add-html-footer.py --package=$(topdir) $@
 
-$(outdir)/%.tex: %.data $(depth)/VERSION
-       $(PYTHON) $(step-bindir)/table-to-html.py --columns=7 --linesep='\r' --package=$(topdir) -o $@ --latex $<
+$(outdir)/%.latex: %.data $(depth)/VERSION
+       $(PYTHON) $(step-bindir)/table-to-html.py --columns=7 --linesep='\r'  -o $@ --format=latex $<
+
 
 
-$(outdir)/glossary.dvi: $(outdir)/glossary-table.tex
-$(outdir)/glossary.html: $(outdir)/glossary-table.html
 
 
-local-WWW: $(HTML_FILES) $(OUTDOC_FILES:.doc=.ps.gz) $(OUTTEX_FILES:.tex=.ps.gz) $(OUTYO_FILES:.yo=.latex) $(OUTYO_FILES:.yo=.ps.gz)  $(datafiles)
+local-WWW: $(HTML_FILES) $(OUTDOC_FILES:.doc=.ps.gz) $(OUTTEX_FILES:.tex=.ps.gz)   $(datafiles)
        $(PYTHON) $(step-bindir)/ls-latex.py --package=$(topdir) --title 'LaTeX documents about LilyPond' \
-         $(YO_FILES) $(OUTYO_FILES:.yo=.latex) $(BIB_FILES) $(DOC_FILES) $(TEX_FILES)\
+          $(DOC_FILES) $(TEX_FILES)\
          | sed "s!$(outdir)/!!g" > $(outdir)/index.html
          $(PYTHON) $(step-bindir)/add-html-footer.py --package=$(topdir) $(outdir)/index.html
 
 $(outdir)/%.bib: %.bib
        ln -f $< $@
 
-# Yeah right: 
-# make -k out/mudela.dvi => cp -f out/vocabulary.tex out/mudela.dvi
-
-#out/%: $(outdir)/%
-#      cp -f $< $@
-
 localclean:
        rm -f fonts.aux fonts.log feta*.tfm feta*.*pk
diff --git a/Documentation/tex/glossary.yo b/Documentation/tex/glossary.yo
deleted file mode 100644 (file)
index eb929dd..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-
-COMMENT(-*-text-*-)
-
-DEFINEMACRO(var)(1)(whenlatex(latexcommand({\normalfont\scshape )ARG1+latexcommand(}))\
-    whenhtml(sc(ARG1)))
-
-
-
-COMMENT( This document contains Mudela fragments.  You need at least
-Yodl-1.30.18 to convert this to tex or html.
-
-TODO
-
-in stead <-> instead
-)
-
-htmlbodyopt(bgcolor)(white)
-htmlcommand(<font color=black>)
-
-latexlayoutcmds(
-\setlength{\topmargin}{-0.25in}
-\setlength{\textheight}{9in}
-\setlength{\textwidth}{5.875in} 
-\setlength{\oddsidemargin}{0.25in}   
-\setlength{\evensidemargin}{0.25in}
-)
-
-
-whenlatex(notableofcontents())
-whentexinfo(notableofcontents())
-
-article(Glossary of notation terms)
-      (Han-Wen Nienhuys and Jan Nieuwenhuizen)
-      ()
-
-COMMENT(
-
-* The [ ] look weird
-
-* paragraphs have too much space.
-
-)
-
-
-latexcommand(\def\interexample{})
-latexcommand(\def\preexample{\par})
-latexcommand(\def\postexample{\par\medskip})
-latexcommand(\def\file#1{{code(#1)}})
-COMMENT(
-latexcommand(\def\texttt#1{\tt #1})
-latexcommand(\def\textbf#1{\bf #1})
-)
-
-This glossary is far from complete.  Additions are welcome.
-
-whenlatex(latexcommand(
-    {\parindent -1pc
-    \parskip 0pc\parsep 0pc
-    %  COMMENT( from the texbook)
-    \def\length#1{\count0=0 \getlength#1\end}
-    \def\getlength#1{\ifx#1\end \let\next=\relax
-      \else\advance\count0 by1 \let\next=\getlength\fi \next}
-      \def\inlanguage#1#2{{\length{#2}%
-        \ifnum\count0=0
-        \else
-        \emph{#1}: #2.
-        \fi}}
-    \small
-
-    % COMMENT(\def\tableentry#1#2#3#4#5#6#7{\par\textbf{#1}: #7)
-    \def\tableentry#1#2#3#4#5#6#7{\par{\bf #1}: #7
-      \inlanguage{Fran\c cais}{#2}
-       \inlanguage{British}{#4}  \inlanguage{Deutsch}{#3}
-       \inlanguage{Nederlands}{#5}\inlanguage{Italiano}{#6}}
-      \input glossary-table
-    }
-
-    \bibliography{engraving}    
-    \bibliographystyle{plain}
-))
-
-whenhtml(
-    includeverbatim(DOEXPAND(outdir)/glossary-table.html)
-)
-
diff --git a/Documentation/tex/html-disclaimer.yo-urg b/Documentation/tex/html-disclaimer.yo-urg
deleted file mode 100644 (file)
index 061f9d4..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-COMMENT(
-I cannot be named .yo, because i'm not a complete document, yodl2x will break.
-)
-
-whenhtml(
-
-nsubsect(Disclaimer)
-
-This document is written in url(Yodl)(ftp://ftp.lilypond.org/pub/yodl)
-and should foremost produce nice LaTeX() output.  In other formats,
-such as html, some things will look a bit different, while other
-things will be simply left out.  Therefore, the authoritive version of
-this document is the PostScript version, produced via LaTeX().  As you
-know, url(no gifs due to patent
-problems)(http://www.gnu.org/philosophy/gif.html), but the PNG images
-should be viewable with any current browser .  )
diff --git a/Documentation/tex/lilypond-regtest.doc b/Documentation/tex/lilypond-regtest.doc
deleted file mode 100644 (file)
index 79ad4b8..0000000
+++ /dev/null
@@ -1,294 +0,0 @@
-% -*-LaTeX-*-  vim:tw=72
-\documentclass{article}
-
-\title{LilyPond feature test}
-\author{Han-Wen Nienhuys}
-\begin{document}
-\maketitle
-
-This document tries give an brief overview of LilyPond features.  When
-the text correspond with the shown notation, we consider LilyPond
-Officially BugFree (tm).  This document is intended for finding bugs,
-and documenting bugfixes.
-
-\section{Notes and rests} 
-
-Rests.  Note that the dot of 8th, 16th and 32nd rests rest should be
-next to the top of the rest.  All rests except the whole rest are
-centered on the middle staff line.  
-
-\mudelafile{rest.fly}
-
-Note head shapes are settable.  The stem endings should be adjusted
-per note head.  If you want different note head styles on one stem,
-you must create a special context called Thread.
-
-\mudelafile{noteheadstyle.ly}
-
-Noteheads can have dots, and ---although this is bad style in duple
-meters--- rests can too.  Augmentation dots should never be printed on
-a staff line, but rather be shifted vertically. They should go up, but
-in case of multiple parts, the down stems have down shifted dots.
-(Wanske p. 186) In case of chords, all dots should be in a column.
-The dots go along as rests are shifted to avoid collisions.
-
-\mudelafile{dots.fly}
-
-Multiple measure rests do not collide with barlines and clefs.  They
-are not expanded when you set \verb+Score.SkipBars+.  Although the
-multi-measure-rest is a Spanner, minimum distances are set to keep it
-colliding from barlines. 
-
-\mudelafile{multi-measure-rest.ly}
-
-\section{Stems}
-
-Stem tremolos (official naming?) or rolls are tremolo signs that look
-like beam segments crossing stems.  If the stem is in a beam, the
-tremolo must be parallel to the beam.  If the stem is invisible
-(eg. on a whole note), the tremolo must be centered on the note.
-
-\mudelafile{stem-tremolo.ly}
-
-Chord tremolos look like beams, but are a kind of repeat symbol.
-To avoid confusion, chord tremolo beams do not reach the stems, but 
-leave a gap.  Chord tremolo beams on half notes are not ambiguous,
-as half notes cannot appear in a regular beam, and should reach the 
-stems.
-  
-\mudelafile{chord-tremolo.sly}
-
-Beams, stems and noteheads often have communication troubles, since
-the two systems for y dimensions (1 unit = staffspace, 1 unit = 1
-point) are mixed.
-
-Stems, beams, ties and slurs should behave similarly, when placed
-on the middle staff line. Of course stem-direction is down for high
-notes, and up for low notes.
-
-\mudelafile{stem-direction.sly}
-
-Similarly, if \verb+stem_default_neutral_direction+ is set to \verb+-1+.
-
-\mudelafile{stem-direction-down.ly}
-
-\section{Scripts}
-
-The staccato dot (and all scripts with follow-into-staff set), must
-not be on staff lines.
-
-\mudelafile{staccato-pos.sly}
-
-\section{Grace notes}
-
-Grace notes are typeset as an encapsulated piece of music. You can
-have beams, notes, chords, stems etc. within a \verb|\grace| section.
-Slurs that start within a grace section, but aren't ended are attached
-to the next normal note.  Grace notes have zero duration.  If there
-are tuplets, the grace notes won't be under the brace.  Grace notes
-can have accidentals, but they are (currently) spaced at a fixed
-distance.  Grace notes (of course) come before the accidentals of the
-main note.  Grace notes can also be positioned after the main note.
-
-\mudelafile{grace.ly}
-
-
-\section{Beams, slurs and other spanners}
-
-Beaming is generated automatically. Beams may cross bar lines. In that
-case, line breaks are forbidden.  Yet clef and key signatures are
-hidden just as with breakable bar lines.
-
-\mudelafile{beaming.ly}
-
-Beams should behave reasonably well, even under extreme circumstances.
-Stems may be short, but noteheads should never touch the beam.
-
-\mudelafile{beam-extreme.ly}
-
-Beams should always reach the middle staff line, the second beam
-counting from the note head side, should never be lower than the
-second staff line.  This does not hold for grace note beams.
-
-\mudelafile{beam-position.sly}
-
-Slurs should look nice and symmetric.  The curvature may increase
-only to avoid noteheads, and as little as possible.
-
-\mudelafile{slur-symmetry.ly}
-\mudelafile{slur-symmetry-1.ly}
-
-Ties are strictly horizontal.  They are placed in between note heads.
-The horizontal middle should not overlap with a staffline.
-
-\mudelafile{tie.ly}
-
-Beams can be typeset over fixed distance aligned staffs, beam
-beautification doesn't really work, but knees do. Beams should be
-behave well, wherever the switching point is.
-
-\mudelafile{beam-interstaff.ly}
-
-The same goes for slurs. They behave decently when broken across
-linebreak.
-
-\mudelafile{slur-interstaff.ly}
-
-Tuplets are indicated by a bracket with a number.  There should be no
-bracket if there is one beam that matches  the length of the tuplet.
-The bracket does not interfere with the stafflines, and the number is
-centered in the gap in the bracket.
-
-\mudelafile{tup.ly}
-
-\section{Repeats}
-
-LilyPond has three modes for repeats: folded, unfolded and
-semi-unfolded.  Unfolded repeats are fully written out. Semi unfolded
-repeats have the body written and all alternatives sequentially.
-Folded repeats have the body written and all alternatives
-simultaneously.  If the number of alternatives is larger than the
-repeat count, the excess alternatives are ignored.  If the number of
-alternatives is smaller, the first alternative is multiplied to get to
-the number of repeats.
-
-Unfolded behavior:
-
-\mudelafile{repeat-unfold.ly}
-
-Semi (un)folded behavior.  Voltas can start on non-barline moments.
-If they don't barlines should still be shown.
-
-\mudelafile{repeat-semifold.ly}
-
-Folded.  This doesn't make sense without alternatives, but it works.
-
-\mudelafile{repeat-fold.ly}
-
-\section{Lyrics}
-
-Lyrics can be set to a melody automatically.  Excess lyrics will be
-dumped.  Lyrics will not be set over rests.  You can have melismata
-either by setting a property melismaBusy, or by setting
-automaticMelismas (which will set melismas during slurs and ties).  If
-you want a different order than first Music, then Lyrics, you must
-precook a chord of staffs/lyrics and label those.  Of course
-\verb+\rhythm+ ignores any other rhythms in the piece.  Hyphens and
-extenders do not assume anything about lyric lengths, so they continue
-to work.
-
-\mudelafile{lyric-combine.ly}
-
-\section{Multiple notes}
-
-Rests should not collide with beams, stems and noteheads.  Rests may
-be under beams.  Rests should be move by integral number of spaces
-inside the staff, and by half spaces outside.  Notice that the half
-and whole rests just outside the staff get ledger lines in different
-cases.
-
-\mudelafile{rest-collision.ly}
-
-Normal collisions. We have support for polyphony, where the
-middle voices are horizontally shifted.
-
-\mudelafile{collisions.ly}
-
-The number of stafflines of a staff can be set with the property
-numberOfStaffLines.  Ledger lines both on note heads and rests are
-adjusted.  Barlines also are adjusted.
-
-
-\mudelafile{number-staff-lines.fly}
-
-\section{Spacing}
-
-In a limited number of cases, LilyPond corrects for optical spacing
-effects.  In this example, space for opposite pointed stems is adjusted
-
-\mudelafile{stem-spacing.sly}
-
-If there are accidentals in the music, we add space, but the space
-between note and accidentals is less than between the notes with the
-same value.  Clef changes also get extra space, but not as much as
-barlines.
-
-
-Even if a line is very tightly spaced, there will still be room
-between prefatory matter and the following notes.  The space after the
-prefatory is very rigid.  In contrast, the space before the barline
-must stretch like the space within the measure.
-
-Tight:
-
-\mudelafile{spacing-tight.ly}
-
-Natural:
-
-\mudelafile{spacing-natural.ly}
-
-Loose:
-
-\mudelafile{spacing-loose.ly}
-
-
-\section{Global stuff}
-
-Markings that are attached to (invisible) barlines are 
-delicate: the are attached to the rest of the score without the score
-knowing it.  Consequently, they fall over  often.
-
-\mudelafile{bar-scripts.ly}
-
-Staff margins are also markings attached to barlines.  They should be
-left of the staff, and be centered vertically wrt the staff.  They may
-be on normal staffs, but also on compound staffs, like the PianoStaff
-
-\mudelafile{staff-margin.ly}
-
-Breathing signs, also used for phrasing, do normally not influence
-global spacing -- only if space gets tight, notes are shifted to make
-room for the breathing sign. Breathing signs break beams running
-through their voice. In the following example, the notes in the first
-two measures all have the same distance from each other:
-
-\mudelafile{breathing-sign.ly}
-
-Fonts are  available in a default set of sizes: 11, 13, 16, 20, 23 and
-26pt staffheight.  Sizes of the text fonts and symbol fonts are made
-to match the staff dimensions.    
-
-\mudelafile[nofly]{size11.ly}
-
-\mudelafile[nofly]{size13.ly}
-
-\mudelafile[nofly]{size16.ly}
-
-\mudelafile[nofly]{size20.ly}
-
-\mudelafile[nofly]{size23.ly}
-
-\mudelafile[nofly]{size26.ly}
-
-
-\section{Clefs and Time Signatures}
-
-The transparent clef should not occupy any space and with style
-\texttt{fullSizeChanges}, the changing clef should be typeset in full
-size. For octaviated clefs, the ``8'' should appear closely above or
-below the clef respectively.  The ``8'' is processed in a convoluted
-way, so this is fragile as well.
-
-\mudelafile{clefs.ly}
-
-\def\bla#1{%the input file is too long and does not test for specific bugs
-By default, time signatures are written with two numbers. With style
-``C'', 4/4 and 2/2 are written with their corresponding symbols and
-with style ``old'', 2/2, 3/2, 2/4, 3/4, 4/4, 6/4, 9/4, 4/8, 6/8 and
-9/8 are typeset with symbols, all other signatures retain the default
-layout. The style ``1'', gives single number signatures for all
-signatures. 
-%
-\mu delafile{time.fly}
-}
-\end{document}
index 46c2423c9bd2400d87ced16ef1a2df6273deba13..e4afd2e915d5f9c9aeaa7092eb5989ab73d2f875 100644 (file)
@@ -16,6 +16,8 @@
 
 \section{Introduction}
 
+[TODO: THIS MANUAL IS OUTDATED. FIXME.]
+
 Mudela-book is a script that process your \LaTeX~file and with great
 help from GNU LilyPond it translates blocks of mudela code it finds
 inside \verb|mudela| environments to tex or eps graphics. It then
diff --git a/Documentation/tex/reference-manual.tely b/Documentation/tex/reference-manual.tely
new file mode 100644 (file)
index 0000000..f8a4f3b
--- /dev/null
@@ -0,0 +1,4221 @@
+\input texinfo @c -*-texinfo-*-
+@setfilename reference-manual.info
+@settitle LilyPond 1-2-0 Reference Manual
+
+@ifinfo
+
+This is the reference documentation to LilyPond.  It is not a tutorial.
+It was written by Han-Wen Nienhuys, Adrian Mariano and Jan Nieuwenhuizen
+
+
+Copyright 1999 by its authors.
+@end ifinfo
+
+@titlepage
+@sp 10
+@comment The title is printed in a large font.
+@center @titlefont{LilyPond Reference manual}
+@vskip 20pt
+@center @titlefont{Han-Wen Nienhuys, Adrian Mariano, Jan Nieuwenhuizen}
+
+@vskip 0pt plus 1filll
+Copyright @copyright{} 1999 by its authors
+@end titlepage
+
+
+@node Top, , Running LilyPond, (dir)
+@top
+@menu
+* LilyPond 1-2-0 Reference Manual::LilyPond 1-2-0 Reference Manual
+@end menu
+
+
+@node LilyPond 1-2-0 Reference Manual, Overview, , Top
+@menu
+* Overview::                      Overview
+* Top level::                     Top level
+* notenames::                     notenames
+* Lexical conventions::           Lexical conventions
+* notelang::                      notelang
+* modes::                         modes
+* Types::                         Types
+* Music expressions::             Music expressions
+* Atomic music expressions::      Atomic music expressions
+* atomicmusic::                   atomicmusic
+* notedesc::                      notedesc
+* barlines::                      barlines
+* manualbeam::                    manualbeam
+* tremolo::                       tremolo
+* Compound music expressions::    Compound music expressions
+* compoundmusic::                 compoundmusic
+* relative::                      relative
+* sec-repeats::                   sec-repeats
+* transpose::                     transpose
+* Ambiguities::                   Ambiguities
+* Notation conversion specifics:: Notation conversion specifics
+* autobeam::                      autobeam
+* lyricprint::                    lyricprint
+* Notation Contexts::             Notation Contexts
+* contextselection::              contextselection
+* Notation output definitions::   Notation output definitions
+* output::                        output
+* paper::                         paper
+* papervars::                     papervars
+* contextdefs::                   contextdefs
+* engravers::                     engravers
+* Sound output::                  Sound output
+* midilist::                      midilist
+* Pre-defined Identifiers::       Pre-defined Identifiers
+* ident::                         ident
+* Running LilyPond::              Running LilyPond
+@end menu
+@chapter LilyPond 1.2.0 Reference Manual
+
+
+@node Overview, Top level, LilyPond 1-2-0 Reference Manual, LilyPond 1-2-0 Reference Manual
+@section Overview
+
+This document@footnote{This document has been revised for
+LilyPond 1.2.} describes the the GNU LilyPond input format, which is
+a language for defining music.  We call this language @emph{Music
+Definition Language} or @emph{Mudela}, for short.@footnote{If anybody
+comes up with a better name, we'd gladly take this.  Gourlay already
+uses a ``Musical Description Language,'' ISO standard 10743 defines a
+``Standard Music Description Language.''  We're not being original
+here.}
+
+@emph{Mudela} is a language that allows you to
+
+@itemize @bullet
+  @item  create musical expressions by combining pitches, durations 
+  @item  output those musical expressions to various formats
+  @item  give those musical expressions and output definitions names, so
+       you can enter them in manageable chunks.
+@end itemize
+
+@emph{Mudela} aims to define a piece of music completely, both from
+typesetting and from a performance point of view.
+
+
+
+@node Top level, notenames, Overview, LilyPond 1-2-0 Reference Manual
+@section Top level
+
+@cindex top level
+
+This section describes what you may enter at top level.
+
+
+
+@cindex score definition
+
+The output is generated combining a music expression with an output
+definition.  A score block has the following syntax:
+
+@quotation
+
+  @code{\score @{}   @code{@}}
+@end quotation
+
+ are zero or more output definitions.  If no output
+definition is supplied, the default @code{\paper} block will be added.
+
+
+
+@cindex header
+
+@cindex header@@@code{\header}
+
+The syntax is
+
+@quotation
+
+  @code{\header} @code{@{}  = ;
+                         = ; ... @code{@}}
+@end quotation
+
+A header describes the file's contents.  It can also appear in a
+@code{\score} block.  Tools like @code{ly2dvi}
+@cindex ly2dvi@@@code{ly2dvi}
+ can use this
+information for generating titles.  Key values that are used by
+@code{ly2dvi} are: title, subtitle, composer, opus, poet, instrument,
+metre, arranger, piece and tagline.
+
+It is customary to put the @code{\header} at the top of the file.
+
+
+@node notenames, Lexical conventions, Top level, LilyPond 1-2-0 Reference Manual
+
+Note name tables can be specified using
+
+@quotation
+
+  @code{\notenames}
+@cindex notenames@@@code{\notenames}
+
+    @code{@{}  @code{@}}
+@end quotation
+
+ is a list of definitions of the form
+
+@quotation
+
+   = 
+@end quotation
+
+Chord modifiers can be set analogously, with
+@code{\chordmodifiers}
+@cindex chordmodifiers@@@code{\chordmodifiers}
+.
+
+
+
+A @code{\paper} block at top level sets the default paper block.  A
+@code{\midi} block at top level works similarly.
+
+
+
+LilyPond contains a Scheme interpreter (the GUILE library) for
+internal use.  The following commands access the interpreter
+directly.
+
+@quotation
+
+  @code{\scm}
+@cindex scm@@@code{\scm}
+  @code{;}
+@end quotation
+
+Evaluates the specified Scheme code.  The result is discarded.
+
+@quotation
+
+  @code{\scmfile}
+@cindex scmfile@@@code{\scmfile}
+  @code{;}
+@end quotation
+
+Reads Scheme code from the specified file.  The result is discarded.
+
+
+
+Identifier assignments may appear at top level.  Semicolons are
+forbidden after top level assignments.
+
+
+
+@node Lexical conventions, notelang, notenames, LilyPond 1-2-0 Reference Manual
+@section Lexical conventions
+
+@cindex lexical conventions
+
+
+
+@cindex comment
+
+@cindex %@@@code{%}
+
+
+A one line comment is introduced by a `@code{%}' character. 
+Block comments are started by `@code{%@{}' and ended by `@code{%@}}'. 
+They cannot be nested.
+
+
+
+@cindex keyword
+
+Keywords start with a backslash, followed by a number of lower case
+alphabetic characters.  These are all the keywords.
+
+@quotation
+
+  @code{\accepts}
+  @code{\addlyrics}
+  @code{\alternative}
+  @code{\bar}
+  @code{\breathe}
+  @code{\cadenza}
+  @code{\chordmodifiers}
+  @code{\chords}
+  @code{\clef}
+  @code{\cm}
+  @code{\consists}
+  @code{\consistsend}
+  @code{\context}
+  @code{\duration}
+  @code{\font}
+  @code{\grace}
+  @code{\header}
+  @code{\in}
+  @code{\key}
+  @code{\keysignature}
+  @code{\lyrics}
+  @code{\mark}
+  @code{\midi}
+  @code{\mm}
+  @code{\musicalpitch}
+  @code{\name}
+  @code{\notenames}
+  @code{\notes}
+  @code{\paper}
+  @code{\partial}
+  @code{\penalty}
+  @code{\property}
+  @code{\pt}
+  @code{\relative}
+  @code{\remove}
+  @code{\repeat}
+  @code{\repetitions}
+  @code{\scm}
+  @code{\scmfile}
+  @code{\score}
+  @code{\script}
+  @code{\sequential}
+  @code{\shape}
+  @code{\simultaneous}
+  @code{\skip}
+  @code{\spanrequest}
+  @code{\tempo}
+  @code{\textscript}
+  @code{\time}
+  @code{\times}
+  @code{\translator}
+  @code{\transpose}
+  @code{\type}
+@end quotation
+
+
+
+
+@cindex integer
+
+Formed from an optional minus sign followed by digits.  Arithmetic
+operations cannot be done with integers, and integers cannot be mixed
+with reals.
+
+
+
+@cindex real
+
+Formed from an optional minus sign and a sequence of digits followed
+by a @emph{required} decimal point and an optional exponent such as
+@code{-1.2e3}.  Reals can be built up using the usual operations:
+`@code{+}
+@cindex +@@@code{+}
+', `@code{-}
+@cindex -@@@code{-}
+', `@code{*}
+@cindex *@@@code{*}
+', and
+`@code{/}
+@cindex /@@@code{/}
+', with parentheses for grouping.
+
+A real constant can be followed by one of the dimension
+keywords:
+@cindex dimensions
+ @code{\mm}
+@cindex mm@@@code{\mm}
+,
+@code{\pt}
+@cindex pt@@@code{\pt}
+, @code{\in}
+@cindex in@@@code{\in}
+, or
+@code{\cm}
+@cindex cm@@@code{\cm}
+, for millimeters, points, inches and
+centimeters, respectively.  This converts the number to a real that
+is the internal representation of dimensions.
+
+
+
+@cindex string
+
+Begins and ends with the `@code{"}' character.  To include a `@code{"}'
+character in a string write `@code{\"}'.  Various other backslash
+sequences have special interpretations as in the C language.  A
+string that contains no spaces can be written without the quotes. 
+See section @xref{modes} for details on unquoted strings; their
+interpretation varies depending on the situation.  Strings can be
+concatenated with the `@code{+}' operator.
+
+
+
+The tokenizer accepts the following commands.  They can appear
+anywhere.
+
+@quotation
+
+  @code{\maininput}
+@cindex maininput@@@code{\maininput}
+
+@end quotation
+
+This command is used in init files to signal that the user file must
+be read. This command cannot be used in a user file.
+
+@quotation
+
+  @code{\include}
+@cindex include@@@code{\include}
+@end quotation
+
+Include .  The argument  may be a quoted string (an
+unquoted string will not work here!) or a string identifier.  The full
+filename including the @file{.ly} extension must be given,
+
+@quotation
+
+  @code{\version}
+@cindex version@@@code{\version}
+  @code{;}
+@end quotation
+
+Specify the version of LilyPond that a file was written for.  The
+argument is a version string in quotes, for example @code{"1.2.0"}. 
+This is used to detect invalid input, and to aid
+@code{convert-mudela}, a tool that automatically upgrades input files.
+
+
+
+@cindex other languages
+
+@node notelang, modes, Lexical conventions, LilyPond 1-2-0 Reference Manual
+
+Note name definitions have been provided in various languages. 
+Simply include the language specific init file.  For example:
+`@code{\include "english.ly"}'.  The available language files and the
+names they define are:
+
+@quotation
+
+@example 
+                        Note Names               sharp       flat
+
+nederlands.ly  c   d   e   f   g   a   bes b   -is         -es
+english.ly     c   d   e   f   g   a   bf  b   -s/-sharp   -f/-flat
+deutsch.ly     c   d   e   f   g   a   b   h   -is         -es
+norsk.ly       c   d   e   f   g   a   b   h   -iss/-is    -ess/-es
+svenska.ly     c   d   e   f   g   a   b   h   -iss        -ess
+italiano.ly    do  re  mi  fa  sol la  sid si  -d          -b
+catalan.ly     do  re  mi  fa  sol la  sid si  -d/-s       -b 
+@end example 
+
+@end quotation
+
+Pitch names can be redefined using the
+@code{\notenames}
+@cindex notenames@@@code{\notenames}
+ command, see
+subsection @xref{notenames}.
+
+
+
+@cindex lexical modes
+
+@cindex modes
+
+@node modes, Types, notelang, LilyPond 1-2-0 Reference Manual
+
+To simplify entering notes, lyrics, and chords, @emph{Mudela} has three
+special input modes on top of the default mode.  In each mode, words
+are identified on the input.  If @code{"word"} is encountered, it is
+treated as a string.  If @code{\word} is encountered, it is treated as
+a keyword or as an identifier.  The behavior of the modes differs in
+two ways: Different modes treat unquoted words differently, and
+different modes have different rules for deciding what is a word.
+
+@table @samp
+  @item Normal mode.
+@cindex mode!normal
+    At the start of parsing, @emph{Mudela} is in Normal mode.  In Normal
+    mode, a word is an alphabetic character followed by alphanumeric
+    characters.  If @code{word} is encountered on the input it is
+    treated as a string.
+
+  @item Note mode.
+@cindex mode!note
+
+    Note mode is introduced by the keyword
+    @code{\notes}
+@cindex notes@@@code{\notes}
+.  In Note mode, words can only
+    contain alphabetic characters.  If @code{word} is encountered,
+    LilyPond first checks for a notename of @code{word}.  If no
+    notename is found, then @code{word} is treated as a string.
+
+    Since combinations of numbers and dots are used for indicating
+    durations, it is not possible to enter real numbers in this mode.
+
+  @item Chord mode.
+@cindex mode!chord
+
+    Chord mode is introduced by the keyword
+    @code{\chords}
+@cindex chords@@@code{\chords}
+.  It is similar to Note mode, but
+    words are also looked up in a chord modifier table (containing
+    @code{maj}, @code{dim}, etc).
+
+    Since combinations of numbers and dots are used for indicating
+    durations, you can not enter real numbers in this mode.  Dashes
+    and carets are used to indicate chord additions and subtractions,
+    so scripts can not be entered in Chord mode.
+
+  @item Lyrics mode. 
+@cindex mode!lyric
+
+    Lyrics mode is introduced by the keyword
+    @code{\lyrics}
+@cindex lyrics@@@code{\lyrics}
+.  This mode has rules that make it
+    easy to include punctuation and diacritical marks in words.  A
+    word in Lyrics mode begins with: an alphabetic character,
+    `@code{_}', `@code{?}', `@code{!}', `@code{:}', `@code{'}', the
+    control characters @code{^A} through @code{^F}, @code{^Q} through
+    @code{^W}, @code{^Y}, @code{^^}, any 8-bit character with ASCII code
+    over 127, or a two-character combination of a backslash followed
+    by one of `@code{`}', `@code{'}', `@code{"}', or
+    `@code{^}'.@footnote{The purpose of Lyrics mode is that you can
+    enter lyrics in TeX format or a standard encoding without
+    needing quotes.  The precise definition of this mode indeed is
+    ludicrous.  This will remain so until the authors of LilyPond
+    acquire a deeper understanding of character encoding, or someone
+    else steps up to fix this.}
+
+    Subsequent characters of a word can be any character that is not
+    a digit and not white space.  One important consequence of this
+    is that a word can end with `@code{@}}', which may be confusing if
+    you thought the closing brace was going to terminate Lyrics
+    mode.@footnote{LilyPond will issue a warning, though.}  Any
+    `@code{_}' characters which appear in an unquoted word are
+    converted to spaces.  This provides a mechanism for introducing
+    spaces into words without using quotes.  Quoted words can also be
+    used in Lyrics mode to specify words that cannot be written with
+    the above rules.  Here are some examples.  Not all of these words
+    are printable by TeX.
+
+
+    @quotation
+
+@example 
+Ah!             % a word
+2B_||_!2B       % not a word because it starts with a digit
+``Hello''       % not a word because it starts with `
+_ _ _ _         % 4 words, each one a space 
+@end example 
+
+    @end quotation
+
+    Since combinations of numbers and dots are used for indicating
+    durations, you can not enter real numbers in this mode.
+@end table
+
+It is possible to create words that break the rules by prefixing them
+with the dollar sign `@code{$}
+@cindex $@@@code{$}
+'.  Regardless of the context, a
+word beginning with `@code{$}' extends until the next white space
+character.  Such words can contain numbers (even in Note mode), or
+other forbidden characters.  The dollar sign can be used to create
+and access identifiers that could not otherwise be used.@footnote{Use
+of `@code{$}' hampers readability and portability to future LilyPond
+versions, thus the use of the dollar sign is discouraged.}
+
+
+
+@node Types, Music expressions, modes, LilyPond 1-2-0 Reference Manual
+@section Types
+
+@cindex types and identifiers
+
+@emph{Mudela} has a limited set of types:
+
+@itemize @bullet
+  @item  integers
+  @item  reals
+  @item  strings
+  @item  music expressions
+  @item  durations of notes and rests (specified with
+       @code{\notenames}
+@cindex notenames@@@code{\notenames}
+)
+  @item  note name tables
+  @item  context definitions, part of output definitions.  See
+       section @xref{contextdefs} for more information
+  @item  output definitions (like @code{\paper}
+@cindex paper@@@code{\paper}
+ blocks
+       and @code{\midi}
+@cindex midi@@@code{\midi}
+ blocks)
+  @item  score definitions (@code{\score}
+@cindex score@@@code{\score}
+ blocks)
+@end itemize
+
+Type is a syntactical property: @emph{Mudela} has no real type system,
+so there is no support for generic expressions, functions, or user
+defined types.  For the same reason, it is not possible to mix reals
+and integers in arithmetic expressions, and ``type
+errors''
+@cindex type error
+ (e.g., using a string identifier to
+initialize a @code{\paper}
+@cindex paper@@@code{\paper}
+ block) will yield a ``parse
+error''.
+
+Identifiers allow objects to be assigned to names.  To assign an
+identifier, you use `=' and to refer to an
+identifier, you preceed its name with a backslash:
+`@code{\}'.  Identifier assignments must appear at top level
+in the @emph{Mudela} file.  Semicolons are forbidden after assignments
+appearing at top level but they are obligatory after assignments
+appearing in the @code{\paper} block, see Section @xref{paper}.
+
+ is any of the types listed above.
+
+An identifier can be created with any string for its name, but you
+will only be able to refer to identifiers whose names begin with a
+letter, being entirely alphanumeric.  It is impossible to refer to an
+identifier whose name is the same as the name of a keyword.
+
+The right hand side of an identifier assignment is parsed completely
+before the assignment is done, so it is allowed to redefine an
+identifier in terms of its old value, e.g.
+
+@quotation
+
+  @code{foo = \foo * 2.0}
+@end quotation
+
+When an identifier is referenced, the information it points to is
+copied.  Therefore it only makes sense to put identifiers for
+translators, output definitions, and @code{\score}
+@cindex score@@@code{\score}
+
+blocks as the first item in a block.  For this reason, if you
+reference a @code{\foo} variable in a @code{\foo} block, it must be the
+first item in the list following @code{\foo}.@footnote{@code{\paper@{\one
+\two@}} does not make sense, because the information of @code{\two}
+would overwrite the information of @code{\one}, thereby making the
+reference to the first identifier useless.}
+
+
+
+@node Music expressions, Atomic music expressions, Types, LilyPond 1-2-0 Reference Manual
+@section Music expressions
+
+@cindex music expressions
+
+Music in @emph{Mudela} is entered as a music expression.  Notes, rests,
+lyric syllables are music expressions (the atomic
+expressions)
+@cindex atomic music expressions
+, and you can combine
+music expressions to form new ones.  This example forms a compound
+expressions out of the quarter @code{c} note and a @code{d}
+note:
+
+@quotation
+
+  @example 
+\sequential @{ c4 d4 @} 
+@end example 
+
+@end quotation
+
+The meaning of this compound expression is to play the `@code{c}'
+first, and then the `@code{d}' (as opposed to playing them
+simultaneously, for instance).
+
+Atomic music expression are discussed in
+subsection @xref{atomicmusic}.  Compound music expressions are
+discussed in subsection @xref{compoundmusic}.
+
+
+
+@node Atomic music expressions, atomicmusic, Music expressions, LilyPond 1-2-0 Reference Manual
+@section Atomic music expressions
+@node atomicmusic, notedesc, Atomic music expressions, LilyPond 1-2-0 Reference Manual
+
+
+
+@cindex pitch
+
+@cindex duration
+
+The syntax for pitch specification is
+
+@quotation
+
+  @code{\musicalpitch}
+@cindex musicalpitch@@@code{\musicalpitch}
+
+    @code{@{}    @code{@}}
+@end quotation
+
+ is specified by an integer, zero for the octave
+containing middle C.   is a number from 0 to 7, with 0
+corresponding to C and 7 corresponding to B.  The shift is zero for a
+natural, negative to add flats, or positive to add sharps.
+
+In Note and Chord mode, pitches may be designated by names.  See
+section @xref{notelang} for pitch names in different languages.
+
+The syntax for duration specification is
+
+@quotation
+
+  @code{\duration}
+@cindex duration@@@code{\duration}
+
+    @code{@{}   @code{@}}
+@end quotation
+
+ is the negative logarithm (base 2) of the duration:
+1 is a half note, 2 is a quarter note, 3 is an eighth
+note, etc.  The number of dots after the note is given by
+.
+
+In Note, Chord, and Lyrics mode, durations may be designated by
+numbers and dots.  See Section @xref{notelang} for details.
+
+
+@node notedesc, barlines, atomicmusic, LilyPond 1-2-0 Reference Manual
+
+@cindex note specification
+
+@cindex pitches
+
+@cindex entering notes
+
+A note specification has the form
+
+@quotation
+
+  [][@code{!}][@code{?}][]
+@end quotation
+
+The pitch of the note is specified by the note's name.
+
+
+The default names are the Dutch note names.  The notes are specified
+by the letters `@code{c}' through `@code{b}', where `@code{c}' is an
+octave below middle C and the letters span the octave above that C. 
+In Dutchcindex(notenames!Dutch), a sharp is formed by adding
+`@code{-is}' to the end of a pitch name.  A flat is formed by adding
+`@code{-es}'. Double sharps and double flats are obtained by adding
+`@code{-isis}' or `@code{-eses}'.  `@code{aes}' and `@code{ees}' are
+contracted to `@code{as}' and `@code{es}' in Dutch, but both forms will
+be accepted.
+
+LilyPond has predefined sets of notenames for various languages.  See
+section @xref{notelang} for details.
+
+
+The optional octave specification takes the form of a series of
+single quote (`@code{'}
+@cindex '@@@code{'}
+') characters or a series of comma
+(`@code{,}
+@cindex ,@@@code{,}
+') characters.  Each @code{'} raises the pitch by one
+octave; each @code{,} lowers the pitch by an octave.
+
+@mudela[fragment,verbatim,center]
+  c' d' e' f' g' a' b' c''
+@end mudela
+
+@mudela[fragment,verbatim,center]
+  cis' dis' eis' fis' gis' ais' bis'
+@end mudela
+
+@mudela[fragment,verbatim,center]
+  ces' des' es' fes' ges' as' bes'
+@end mudela
+
+@mudela[fragment,verbatim,center]
+  cisis' eisis' gisis' aisis' beses'
+@end mudela
+
+@mudela[fragment,verbatim,center]
+  ceses' eses' geses' ases' beses'
+@end mudela
+
+Whenever a C-sharp is desired,  you must specify a C-sharp.  LilyPond
+will determine what accidentals to typeset depending on the key and
+context.  A reminder accidental 
+@cindex reminder accidental
+ can be
+forced by adding an exclamation mark `@code{!}' after the pitch.  A
+cautionary accidental, 
+@cindex cautionary accidental
+ i.e., an
+accidental within parentheses can be obtained by adding the question
+mark `@code{?}
+@cindex ?@@@code{?}
+' after the pitch.
+
+@mudela[fragment,verbatim,center]
+  cis' d' e' cis'  c'? d' e' c'!
+@end mudela
+
+
+@cindex duration
+
+Durations are entered as their reciprocal values.  For notes longer
+than a whole note, use identifiers.
+
+@quotation
+
+@example 
+c'\longa c'\breve  
+c'1 c'2 c'4 c'8 c'16 c'32 c'64 c'64 
+@end example 
+
+@end quotation
+
+@quotation
+
+@mudela[]
+\score {
+  \notes \relative c'' {
+    a\longa a\breve  
+    a1 a2 a4 a8 a16 a32 a64 a64 
+  }
+  \paper {
+    loose_column_distance = 2.5 * \interline;
+    linewidth = -1.0;
+    \translator {
+      \type "Score_engraver";
+      \name "Score";
+      \consists "Note_heads_engraver";
+      \consists "Stem_engraver";
+      \consists "Rhythmic_column_engraver";
+    }
+  }
+}
+@end mudela
+@end quotation
+
+@quotation
+
+@example 
+r\longa r\breve  
+r1 r2 r4 r8 r16 r32 r64 r64 
+@end example 
+
+@end quotation
+
+@quotation
+
+@mudela[]
+\score {
+  \notes \relative c'' {
+    r\longa r\breve  
+    r1 r2 r4 r8 r16 r32 r64 r64 
+  }
+  \paper {
+    loose_column_distance = 2.5 * \interline;
+    linewidth = -1.0;
+    \translator {
+      \type "Score_engraver";
+      \name "Score";
+      \consists "Rest_engraver";
+      \consists "Stem_engraver";
+      \consists "Rhythmic_column_engraver";
+    }
+  }
+}
+@end mudela
+@end quotation
+
+If the duration is omitted then it is set equal to the previous
+duration.  If there is no previous duration, a quarter note is
+assumed.  The duration can be followed by a dot (`@code{.}
+@cindex .@@@code{.}
+')
+to obtain dotted note lengths.
+
+@mudela[fragment,verbatim,center]
+  a'4. b'4.
+@end mudela
+
+You can alter the length of duration by writing
+`@code{*}' after it.  This will not affect the
+appearance of note heads or rests.
+
+
+Rests are entered like notes, with note name `@code{r}
+@cindex r@@@code{r}
+',
+or `@code{R}
+@cindex R@@@code{R}
+'.  There is also a note name `@code{s}
+@cindex s@@@code{s}
+',
+which produces a space of the specified duration. 
+`@code{R}' is specifically meant for entering parts: the @code{R} rest
+can expand to fill a score with rests, or it can be printed as a
+single multimeasure rest.
+
+
+@cindex lyrics expressions
+
+Syllables are entered like notes, with pitches replaced by text.  For
+example, `@code{Twin-4 kle4 twin-4 kle4}' enters four syllables, each
+with quarter note duration.  Note that the hyphen has no special
+meaning for lyrics, and does not introduce special symbols.  See
+section @xref{modes} for a description of what is interpreted as
+lyrics.
+
+Spaces can be introduced into a lyric either by using quotes
+(`@code{"}') or by using an underscore without quotes: `@code{He_could4
+not4}'.  All unquoted underscores are converted to spaces.  Printing
+lyrics is discussed in section @xref{lyricprint}.
+
+
+
+@cindex properties
+
+@quotation
+
+  @code{\property}
+@cindex property@@@code{\property}
+
+    @code{.} @code{=} 
+@end quotation
+
+Sets the  property of the context  to
+the specified .  All three arguments are strings. 
+Depending on the context, it may be necessary to quote the strings or
+to leave space on both sides of the dot.
+
+
+
+@cindex translator switches
+
+@quotation
+
+  @code{\translator}
+@cindex translator@@@code{\translator}
+
+     = 
+@end quotation
+
+A music expression indicating that the context which is a direct
+child of the a context of type  should be shifted to
+a context of type  and the specified name.
+
+Usually this is used to switch staffs in Piano music, e.g.
+
+@quotation
+
+  @code{\translator Staff = top} 
+@end quotation
+
+
+
+@cindex commands
+
+Commands are music expressions that have no duration.   
+
+
+@quotation
+
+  @code{\key}
+@cindex key@@@code{\key}
+   @code{;}
+@end quotation
+
+Change the key signature.   should be
+@code{\major}
+@cindex major@@@code{\major}
+ or @code{\minor}
+@cindex minor@@@code{\minor}
+ to get
+-major or -minor, respectively.  The second
+argument is optional; the default is major keys.  The 
+argument can also be given as an integer, which tells the number of
+semitones that should be added to the pitch given in the subsequent
+@code{\key}
+@cindex key@@@code{\key}
+ commands to get the corresponding major key,
+e.g., @code{\minor}
+@cindex minor@@@code{\minor}
+ is defined as 3.  The standard
+mode names @code{\ionian}
+@cindex ionian@@@code{\ionian}
+,
+@code{\locrian}
+@cindex locrian@@@code{\locrian}
+, @code{\aeolian}
+@cindex aeolian@@@code{\aeolian}
+,
+@code{\mixolydian}
+@cindex mixolydian@@@code{\mixolydian}
+, @code{\lydian}
+@cindex lydian@@@code{\lydian}
+,
+@code{\phrygian}
+@cindex phrygian@@@code{\phrygian}
+, and @code{\dorian}
+@cindex dorian@@@code{\dorian}
+
+are also defined.
+
+@quotation
+
+  @code{\keysignature}
+@cindex keysignature@@@code{\keysignature}
+  @code{;}
+@end quotation
+
+Specify an arbitrary key signature.  The pitches from  will
+be printed in the key signature in the order that they appear on the
+list.
+
+        
+@quotation
+
+  @code{\mark}
+@cindex mark@@@code{\mark}
+  @code{;} @* 
+  @code{\mark}  @code{;}
+@end quotation
+
+Prints a mark over or under (depending on the
+@code{markDirection}
+@cindex markDirection@@@code{markDirection}
+ property) the staff.  You must add
+@code{Mark_engraver}
+@cindex Mark_engraver@@@code{Mark_engraver}
+ to either the Score or Staff context for
+this to work.
+
+@node barlines, manualbeam, notedesc, LilyPond 1-2-0 Reference Manual
+
+@quotation
+
+  @code{\bar}
+@cindex bar@@@code{\bar}
+  @code{;}
+@end quotation
+
+This is a request to print a special bar symbol. It replaces the 
+regular bar symbol with a special
+symbol.  The argument  is a string which specifies the
+kind of bar to print.  Options are @code{":|"}
+@cindex "|A@@@code{:|}
+,
+@code{"|:"}
+@cindex "|B@@@code{|:}
+, @code{":|:"}
+@cindex "|C@@@code{:|:}
+,
+@code{"||"}
+@cindex "|D@@@code{||}
+, @code{"|."}
+@cindex "|E@@@code{|.}
+,
+@code{".|"}
+@cindex "|F@@@code{.|}
+, and @code{".|."}
+@cindex "|G@@@code{.|.}
+. 
+These produce, respectively, a right repeat, a left repeat, a double
+repeat, a double bar, a start bar, an end bar, and a thick double
+bar.  If  is set to @code{"empty"} then nothing is
+printed, but a line break is allowed at that spot.
+
+You are encouraged to use @code{\repeat} for repetitions.
+See section @xref{sec-repeats}.
+
+
+@quotation
+
+  @code{\cadenza}
+@cindex cadenza@@@code{\cadenza}
+  @code{;}
+@end quotation
+
+Music expression that toggles the automatic generation of bar lines. 
+If  is 1, bar line generation is turned off.  If
+ is 0, a bar line is immediately printed and 
+automatic bar generation is turned on.
+
+@quotation
+
+  @code{\time}
+@cindex time@@@code{\time}
+ @code{/} @code{;}
+@end quotation
+
+Change the time signature.  The default time signature is 4/4. 
+The time signature is used to generate bar lines.
+
+@quotation
+
+  @code{\tempo}
+@cindex tempo@@@code{\tempo}
+  =  @code{;}
+@end quotation
+
+Used to specify the tempo.  For example, `@code{\tempo 4 = 76;}'
+requests output with 76 quarter notes per minute.
+
+@quotation
+
+  @code{\partial}
+@cindex partial@@@code{\partial}
+  @code{;}
+@end quotation
+
+@cindex anacrusis
+
+@cindex upstep
+
+This creates an incomplete measure (anacrusis, upbeat) at the start of 
+the music, e.g., `@code{\partial 8*2;}' creates a starting measure 
+lasting two eighth notes.
+
+@quotation
+
+  @code{|}
+@cindex |@@@code{|}
+
+@cindex bar check
+
+@end quotation
+
+@cindex shorten measures
+
+@cindex upstep
+
+`@code{|}' is a barcheck.  Whenever a barcheck is encountered during
+interpretation, a warning message is issued if it doesn't fall at a
+measure boundary.  This can help you finding errors in the input. 
+The beginning of the measure will be relocated, so this can also
+be used to shorten measures.
+
+
+@quotation
+
+  @code{\penalty}
+@cindex penalty@@@code{\penalty}
+  @code{;}
+@end quotation
+
+Discourage or encourage line breaks.  See identifiers
+@code{\break}
+@cindex break@@@code{\break}
+ and @code{\nobreak}
+@cindex nobreak@@@code{\nobreak}
+ in
+section @xref{ident}.
+
+@quotation
+
+  @code{\clef}
+@cindex clef@@@code{\clef}
+  @code{;}
+@end quotation
+
+Music expression that sets the current clef.  The argument is a
+string which specifies the name of the clef.  Several clef names are
+supported.  If `@code{_8}' or `@code{^8}' is added to the end of a clef
+name, then the clef lowered or raised an octave will be generated. 
+Here are the supported clef names with middle C shown in each
+clef:
+
+@quotation
+
+@mudela[]
+\score {
+  \notes {
+    \cadenza 1;
+    %\property Voice.textStyle = typewriter
+    \clef subbass;     c'4-"\kern -5mm subbass" 
+    \clef bass;        c'4^"\kern -2mm bass"
+    \clef baritone;    c'4_"\kern -5mm baritone"
+    \clef varbaritone; c'4^"\kern -6mm varbaritone"
+    \clef tenor;       c'4_"\kern -3mm tenor"
+    \clef "G_8";       c'4^"\kern -2mm G\\_8" 
+  }  
+  \paper {
+    linewidth = 4.5 \in;
+  }
+}
+@end mudela
+@end quotation
+
+@quotation
+
+@mudela[]
+\score {
+  \notes {
+    \cadenza 1;
+    \clef alto;         c'4_"\kern -2mm alto"
+    \clef mezzosoprano; c'4^"\kern -9mm mezzosoprano"
+    \clef soprano;      c'4_"\kern -6mm soprano"
+    \clef treble;       c'4^"\kern -4mm treble"
+    \clef french;       c'4_"\kern -4mm french"
+  }
+  \paper {
+    linewidth = 4.5 \in;
+  }
+}
+@end mudela
+@end quotation
+
+The three clef symbols can also be obtained using the names `@code{G}', 
+`@code{C}' or `@code{F}', optionally followed by an integer which 
+indicates at which note line the clef is located. An as example, the 
+@code{mezzosoprano} clef can also be given as `@code{C2}'.
+
+@quotation
+
+  @code{\skip}
+@cindex skip@@@code{\skip}
+  @code{;}
+@end quotation
+
+Skips the amount of time specified by .  If no other
+music is played, a gap will be left for the skipped time with no
+notes printed.  It works in Note Mode or Lyrics Mode.  In Note mode,
+this has the same effect as the space rest `@code{s}'.
+
+
+@cindex beams
+
+@node manualbeam, tremolo, barlines, LilyPond 1-2-0 Reference Manual
+
+A beam is specified by surrounding the beamed notes with brackets
+`@code{[}
+@cindex [@@@code{[}
+' and `@code{]}
+@cindex ]@@@code{]}
+'.  
+
+@mudela[fragment,verbatim,center]
+  [a'8 a'] [a'16 a' a' a']
+@end mudela
+
+Some more elaborate constructions:
+
+@mudela[fragment,verbatim,center]
+  [a'16 <a' c''> c'' <a' c''>]
+  \times 2/3 { [e'8 f' g'] }
+@end mudela
+
+Beaming can be generated automatically; see section @xref{autobeam}.
+
+To place tremolo marks 
+@cindex tremolo beams
+ between two notes, begin
+with `@code{[:}' and end with `@code{]}'.  Tremolo marks
+will appear instead of beams.  Putting more than two notes in such a
+construction will produce odd effects.  To create tremolo beams on a
+single note, simply attach `@code{:}' to the note itself
+(see also section @xref{tremolo}).
+  
+@mudela[fragment,verbatim,center]
+  [:16 e'1 g'] [:8 e'4 f']
+@end mudela
+  
+@mudela[fragment,verbatim,center]
+  c'4:32 [:16 c'8 d'8]
+@end mudela
+
+
+@cindex --@@@code{-}@code{-}
+
+@cindex __@@@code{__}
+
+@cindex extender
+
+@cindex hyphen
+
+The syntax for an extender mark is `@code{__}'.  This syntax can only
+be used within lyrics mode.  The syntax for a spanning hyphen (i.e.,
+a hyphen that will be printed between two lyric syllables) is
+`@code{-}@code{-}'.
+
+
+@cindex ties
+
+A tie connects two adjacent note heads of the same pitch.  When used
+with chords, it connects all of the note heads whose pitches match.
+Ties are indicated using the tilde symbol `@code{~}
+@cindex ~@@@code{~}
+'.
+If you try to tie together chords which have no common pitches, a
+warning message will appear and no ties will be created.
+
+@mudela[fragment,verbatim,center]
+  e' ~ e' <c' e' g'> ~ <c' e' g'>
+@end mudela
+
+
+
+[TODO: explain Requests]
+
+
+@cindex articulations
+
+@cindex scripts
+
+@cindex ornaments
+
+A variety of symbols can appear above and below notes to indicate
+different characteristics of the performance.  These symbols can be
+added to a note with `@code{-\}'.  Numerous symbols
+are defined in @file{script.ly} and @file{script.scm}.  Symbols can be
+forced to appear above or below the note by writing
+`@code{^\}' and `@code{_\}'
+respectively.  Here is a chart showing symbols above notes, with the
+name of the corresponding symbol appearing underneath.
+
+@mudela[]
+
+  \score {
+    < \notes {
+        c''-\accent      c''-\marcato      c''-\staccatissimo c''-\fermata 
+        c''-\stopped     c''-\staccato     c''-\tenuto        c''-\upbow
+        c''-\downbow     c''^\lheel        c''-\rheel         c''^\ltoe
+        c''-\rtoe        c''-\turn         c''-\open          c''-\flageolet
+        c''-\reverseturn c''-\trill        c''-\prall         c''-\mordent
+        c''-\prallprall  c''-\prallmordent c''-\upprall       c''-\downprall
+        c''-\thumb       c''-\segno        c''-\coda
+      }
+      \context Lyrics \lyrics {  
+        accent__      marcato__      staccatissimo__ fermata
+        stopped__     staccato__     tenuto__        upbow
+        downbow__     lheel__        rheel__         ltoe
+        rtoe__        turn__         open__          flageolet
+        reverseturn__ trill__        prall__         mordent
+        prallprall__  prallmordent__ uprall__        downprall
+        thumb__       segno__        coda
+      }
+    >
+    \paper {
+      linewidth = 5.875\in;          
+      indent    = 0.0;
+    }
+  }
+
+@end mudela
+
+In addition, it is possible to place arbitrary strings of text or
+TeX above or below notes by using a string instead of an
+identifier: `@code{c^"text"}'.  Fingerings 
+@cindex fingering
+ can be
+placed by simply using digits.  All of these note ornaments appear in
+the printed output but have no effect on the MIDI rendering of the
+music.
+
+To save typing, fingering instructions (digits 0 to 9 are
+supported) and single characters shorthands exist for a few
+common symbols
+
+@mudela[]
+
+  \score {
+    \notes {
+      \property Voice.textStyle = typewriter
+      c''4-._"c-."      s4
+      c''4--_"c-{}-"    s4
+      c''4-+_"c-+"      s4
+      c''4-|_"c-|"      s4
+      c''4->_"c->"      s4
+      c''4-^_"c-\\^{ }" s4
+      c''4-1_"c-1"      s4
+      c''4-2_"c-2"      s4
+      c''4-3_"c-3"      s4
+      c''4-4_"c-4"      s4
+    }
+    \paper {
+      linewidth = 5.875 \in;
+      indent    = 0.0;
+    }
+  }
+
+@end mudela
+
+Dynamic marks are specified by using an identifier after a note:
+`@code{c4-\ff}' (the dash is optional for dynamics: `@code{c4 \ff})'.  
+The available dynamic marks are:
+@code{\ppp}
+@cindex ppp@@@code{\ppp}
+,
+@code{\pp}
+@cindex pp@@@code{\pp}
+, @code{\p}
+@cindex p@@@code{\p}
+, @code{\mp}
+@cindex mp@@@code{\mp}
+,
+@code{\mf}
+@cindex mf@@@code{\mf}
+, @code{\f}
+@cindex f@@@code{\f}
+, @code{\ff}
+@cindex ff@@@code{\ff}
+,
+@code{\fff}
+@cindex fff@@@code{\fff}
+, @code{\fff}
+@cindex ffff@@@code{\ffff}
+,
+@code{\fp}
+@cindex fp@@@code{\fp}
+, @code{\sf}
+@cindex sf@@@code{\sf}
+,
+@code{\sff}
+@cindex sff@@@code{\sff}
+, @code{\sp}
+@cindex sp@@@code{\sp}
+,
+@code{\spp}
+@cindex spp@@@code{\spp}
+, @code{\sfz}
+@cindex sfz@@@code{\sfz}
+, and
+@code{\rfz}
+@cindex rfz@@@code{\rfz}
+.
+
+
+@quotation
+
+  @code{\textscript}
+@cindex textscript@@@code{\textscript}
+  
+@end quotation
+
+Defines a text to be printed over or under a note.   is a
+string that may be one of @code{roman}, @code{italic}, @code{typewriter}, 
+@code{bold}, @code{Large}, @code{large}, @code{dynamic} or @code{finger}.
+
+You can attach a general textscript request using this syntax:
+
+@quotation
+
+@example 
+c4-\textscript "6" "finger"
+c4-\textscript "foo" "normal" 
+@end example 
+
+@end quotation
+
+This is equivalent to `@code{c4-6 c4-"foo"}'.  
+
+
+@cindex scripts
+
+@quotation
+
+  @code{\script}
+@cindex script@@@code{\script}
+@end quotation
+
+Prints a symbol above or below a note.  The argument is a string
+which points into the script-alias table defined in @file{script.scm}.
+The scheme definitions specify whether the symbol follows notes into
+the staff, dependence of symbol placement on staff direction, and a
+priority for placing several symbols over one note.  Usually the
+@code{\script}
+@cindex script@@@code{\script}
+ keyword is not used directly.  Various
+helpful identifier definitions appear in @file{script.ly}.
+
+
+@cindex slur
+
+Slurs connects chords and try to avoid crossing stems.  A slur is
+started with `@code{(}' and stopped with `@code{)}'.  The
+starting `@code{(}' appears to the right of the first note in
+the slur.  The terminal `@code{)}' appears to the left of the
+first note in the slur.  This makes it possible to put a note in
+slurs from both sides:
+
+@mudela[fragment,verbatim,center]
+  f'()g'()a' [a'8 b'(] a'4 g'2 )f'4
+@end mudela
+
+
+@cindex crescendo
+
+A crescendo mark is started with @code{\cr}
+@cindex cr@@@code{\cr}
+ and terminated
+with @code{\rc}
+@cindex rc@@@code{\rc}
+.  A decrescendo mark is started with
+@code{\decr}
+@cindex decr@@@code{\decr}
+ and terminated with
+@code{\rced}
+@cindex rced@@@code{\rced}
+.  There are also shorthands for these
+marks.  A crescendo can be started with @code{\<}
+@cindex <@@@code{\<}
+ and a
+decrescendo can be started with @code{\>}
+@cindex >@@@code{\>}
+.  Either one can
+be terminated with @code{\!}
+@cindex "!@@@code{\"!}
+.  Note that @code{\!}
+must go before the last note of the dynamic mark whereas @code{\rc}
+and @code{\rced} go after the last note.  Because these marks are
+bound to notes, if you want to get several marks during one note, you
+must use spacer notes.
+
+@mudela[fragment,verbatim,center]
+  c'' \< \! c''   d'' \decr e'' \rced 
+  < f''1 { s4 \< \! s2 \> \! s4 } >
+@end mudela
+
+
+@quotation
+
+  @code{\spanrequest}
+@cindex spanrequest@@@code{\spanrequest}
+  
+@end quotation
+
+Define a spanning request. The  parameter is either -1
+(@code{\start}
+@cindex start@@@code{\start}
+) or 1 (@code{\stop}
+@cindex stop@@@code{\stop}
+) and
+ is a string that describes what should be started.
+Supported types are @code{crescendo}, @code{decrescendo},
+@code{beam}, @code{slur}.  This is an internal command.  Users should
+use the shorthands which are defined in the initialization file
+@file{spanners.ly}.
+
+You can attach a (general) span request to a note using
+
+@mudela[fragment,verbatim,center]
+  c'4-\spanrequest \start "slur"
+  c'4-\spanrequest \stop "slur"
+@end mudela
+
+The slur syntax with parentheses is a shorthand for this.
+
+
+
+@cindex tremolo marks
+
+@node tremolo, Compound music expressions, manualbeam, LilyPond 1-2-0 Reference Manual
+
+Tremolo marks can be printed on a single note by adding
+`@code{:}[]' after the note.  The length must be at
+least 8.  A  value of 8 gives one line across
+the note stem.  If the length is omitted, then the last value is
+used, or the value of the @code{abbrev}
+@cindex abbrev@@@code{abbrev}
+ property if there was
+no last value.
+
+@mudela[verbatim,fragment,center]
+  c'2:8 c':32
+@end mudela
+
+
+
+@node Compound music expressions, compoundmusic, tremolo, LilyPond 1-2-0 Reference Manual
+@section Compound music expressions
+
+@cindex compound music expressions
+
+@node compoundmusic, relative, Compound music expressions, LilyPond 1-2-0 Reference Manual
+
+Music expressions are compound data structures.  You can nest music
+expressions any way you like.  This simple example shows how three
+chords can be expressed in two different ways:
+
+@mudela[fragment,verbatim,center]
+  \notes \context Staff {
+    \cadenza 1;
+    <a c'> <b  d' > <c' e' >
+    <{a b  c'}{c' d' e'}>
+  }
+@end mudela
+
+
+
+@cindex context selection
+
+@quotation
+
+  @code{\context}
+@cindex context@@@code{\context}
+
+     [@code{=} ] 
+@end quotation
+
+Interpret  within a context of type . 
+If the context does not exist, it will be created.  The new context
+can optionally be given a name.  See
+section @xref{contextselection} and @xref{contextdefs} for more
+information on interpretation contexts.
+
+
+
+@cindex input modes
+
+@cindex mode switch
+
+Mode switching keywords form compound music expressions: @code{\notes}
+
+@cindex notes@@@code{\notes}
+ , @code{\chords} 
+@cindex chords@@@code{\chords}
+
+, and @code{\lyrics} 
+@cindex lyrics@@@code{\lyrics}
+ . 
+These expressions do not add anything to the meaning of their
+arguments.  They are just a way to indicate that the arguments should
+be parsed in indicated mode.  See section @xref{modes} for more
+information on modes.
+
+More information on context selection can be found in
+section @xref{contextselection}.
+
+
+
+@cindex sequential music
+
+
+
+@quotation
+
+  @code{\sequential}
+@cindex sequential@@@code{\sequential}
+
+    @code{@{}  @code{@}}
+@end quotation
+
+This means that list should be played or written in sequence, i.e.,
+the second after the first, the third after the second.  The duration
+of sequential music is the the sum of the durations of the elements. 
+There is a shorthand, which leaves out the keyword:
+
+@quotation
+
+  @code{@{}  @code{@}}
+@end quotation
+
+
+
+@cindex simultaneous music
+
+@cindex <@@@code{<}
+
+@cindex >@@@code{>}
+
+@quotation
+
+  @code{\simultaneous}
+@cindex simultaneous@@@code{\simultaneous}
+
+    @code{@{}  @code{@}}
+@end quotation
+
+It constructs a music expression where all of its arguments start at
+the same moment.  The duration is the maximum of the durations of the
+elements.  The following shorthand is a common idiom:
+
+@quotation
+
+  @code{<}  @code{>}
+@end quotation
+
+If you try to use a chord as the first thing in your score, you might
+get multiple staffs instead of a chord.
+
+@mudela[verbatim,center]
+  \score {
+    \notes <c''4 e''>
+    \paper {
+      linewidth = -1.;
+    }
+  }
+@end mudela
+
+This happens because the chord is interpreted by a score context.
+Each time a note is encountered a default Voice context (along with a
+Staff context) is created.  The solution is to explicitly instantiate
+a Voice context:
+
+@mudela[verbatim,center]
+  \score {
+    \notes\context Voice <c''4 e''>
+    \paper {
+      linewidth = -1.;
+    }
+  }
+@end mudela
+
+
+
+@cindex relative pitch specification
+
+@node relative, sec-repeats, compoundmusic, LilyPond 1-2-0 Reference Manual
+
+It is easy to get confused by octave changing marks and accidentally
+putting a pitch in the wrong octave.  A much better way of entering a
+note's octave is `the relative octave' mode.
+
+@quotation
+
+  @code{\relative}
+@cindex relative@@@code{\relative}
+  
+@end quotation
+
+The octave of notes that appear in  are calculated as
+follows: If no octave changing marks are used, the basic interval
+between this and the last note is always taken to be a fourth or
+less.@footnote{The interval is determined without regarding
+accidentals.  A @code{fisis} following a @code{ceses} will be put above
+the @code{ceses}.}  The octave changing marks `@code{'}' and `@code{,}'
+can then be added to raise or lower the pitch by an extra octave. 
+Upon entering relative mode, an absolute starting pitch must be
+specified that will act as the predecessor of the first note of
+.
+
+Entering scales is straightforward in relative mode.
+
+@mudela[fragment,verbatim,center]
+  \relative c' {
+    c d e f g a b c c,
+  }
+@end mudela
+
+And octave changing marks are used for intervals greater than a fourth.
+
+@mudela[fragment,verbatim,center]
+  \relative c'' {
+    c g c f, c' a, e'' }
+@end mudela
+
+If the preceding item is a chord, the first note of the chord is used
+to determine the first note of the next chord.  But other notes
+within the second chord are determined by looking at the immediately
+preceding note.
+
+@mudela[fragment,verbatim,center]
+  \relative c' {
+    c <c e g> 
+    <c' e g>
+    <c, e' g>
+  }
+@end mudela 
+
+The pitch after the @code{\relative} contains a notename.  To parse
+the pitch as a notename, you have to be in note mode, so there must
+be a surrounding @code{\notes}
+@cindex notes@@@code{\notes}
+ keyword (which is not
+shown here).
+
+The relative conversion will not affect @code{\transpose} or
+@code{\relative} sections in its argument.  If you want to use
+relative within transposed music, you must place an additional
+@code{\relative} inside the @code{\transpose}.
+
+It is strongly recommended to use relative pitch mode: less work,
+less error-prone, and more readable.
+
+
+
+Chord names are a way to generate simultaneous music expressions that
+correspond with traditional chord names.  It can only be used in
+Chord mode (see section @xref{modes}).
+
+@quotation
+
+  [][@code{-}][@code{^}][@code{/}].
+@end quotation
+
+ should be the tonic note of the chord, and 
+is the chord duration in the usual notation.  There are two kinds of
+modifiers.  One type is @emph{chord additions}, which are obtained by
+listing intervals separated by dots.  An interval is written by its
+number with an optional `@code{+}' or `@code{-}' to indicate raising or
+lowering by half a step.  Chord additions has two effects: It adds
+the specified interval and all lower odd numbered intervals to the
+chord, and it may lower or raise the specified interval.  Intervals
+must be separated by a dot (`@code{.}').
+
+@quotation
+
+@mudela[fragment,verbatim]
+\transpose c'' {
+  \chords {
+    c1  c-3-       c-7     c-8
+    c-9 c-9-.5+.7+ c-3-.5- c-4.6.8
+  }
+}
+
+@end mudela
+@end quotation
+
+The second type of modifier that may appear after the `@code{-}' is a
+named modifier.  Named modifiers are listed in the file
+@file{chord-modifiers.ly}.  The available modifiers are `@code{m}' and
+`@code{min}' which lower the 3rd half a step, `@code{aug}
+@cindex aug@@@code{aug}
+' which
+raises the 5th, `@code{dim}
+@cindex dim@@@code{dim}
+' which lowers the 5th,
+`@code{maj}
+@cindex maj@@@code{maj}
+' which adds a raised 7th, and `@code{sus}
+@cindex sus@@@code{sus}
+'
+which replaces the 5th with a 4th.
+
+@quotation
+
+@mudela[fragment,verbatim]
+\transpose c'' {
+  \chords {
+    c1-m c-min7 c-maj c-aug c-dim c-sus
+  }
+}
+
+@end mudela
+@end quotation
+
+Chord subtractions are used to eliminate notes from a chord.  The
+notes to be subtracted are listed after a `@code{^}' character,
+separated by dots.
+
+@mudela[fragment,verbatim,center]
+  \transpose c'' {
+    \chords {
+      c1^3 c-7^5.3 c-8^7
+    }
+  }
+@end mudela 
+
+Chord inversions can be specified by appending `@code{/}
+@cindex /@@@code{/}
+' and
+the name of a single note to a chord.  This has the effect of
+lowering the specified note by an octave so it becomes the lowest
+note in the chord.  If the specified note is not in the chord, a
+warning will be printed.
+
+@mudela[fragment,verbatim,center]
+  \transpose c''' {
+    \chords {
+      c1 c/e c/g c-7/e
+    }
+  }
+
+@end mudela 
+
+Throughout these examples, chords have been shifted around the staff
+using @code{\transpose}.
+
+You should not combine @code{\relative} with named chords. 
+
+
+
+@cindex tuplets
+
+Tuplets are made out of a music expression by multiplying their
+duration with a fraction.
+
+@quotation
+
+  @code{\times}
+@cindex times@@@code{\times}
+  
+@end quotation
+
+The duration of  will be multiplied by the fraction. 
+In print, the fraction's denominator will be printed over the notes,
+optionally with a bracket.  The most common tuplet is the triplet in
+which 3 notes have the length of 2, so the notes are 2/3 of
+their written length:
+
+@mudela[fragment,verbatim,center]
+  g'4 \times 2/3 {c'4 c' c'} d'4 d'4
+@end mudela
+
+
+
+@cindex grace notes
+
+@quotation
+
+  @code{\grace}
+@cindex grace@@@code{\grace}
+@end quotation
+
+A grace note expression has duration 0; the next real note is
+assumed to be the main note.
+
+You cannot have the grace note after the main note, in terms of
+duration, and main notes, but you can typeset the grace notes to the
+right of the main note using the property
+@code{graceAlignPosition}
+@cindex graceAlignPosition@@@code{graceAlignPosition}
+.
+
+When grace music is interpreted, a score-within-a-score is set up:
+ has its own time bookkeeping, and you could (for
+example) have a separate time signature within grace notes.  While in
+this score-within-a-score, you can create notes, beams, slurs, etc.
+Unbeamed eighth notes and shorter by default have a slash through the
+stem.  This behavior can be controlled with the
+@code{stemStyle}
+@cindex stemStyle@@@code{stemStyle}
+ property.
+
+@quotation
+
+@mudela[fragment,verbatim]
+\relative c'' {
+  \grace c8 c4 \grace { [c16 c16] } c4
+  \grace { \property Grace.stemStyle = "" c16 } c4
+}
+
+@end mudela
+@end quotation
+
+At present, nesting @code{\grace}
+@cindex grace@@@code{\grace}
+ notes, e.g.
+
+@quotation
+
+  @code{\grace @{ \grace c32 c16 @} c4}
+@end quotation
+
+may result in run-time errors of LilyPond.  Since the meaning of such
+a construct is unclear, we don't consider this a loss.  Similarly,
+juxtaposing two @code{\grace} sections is syntactically valid, but
+makes no sense and may cause runtime errors.
+
+Ending a staff or score with grace notes may also generate a run-time
+error, since there will be no main note to attach the grace notes to.
+
+
+
+@cindex repeats
+
+@node sec-repeats, transpose, relative, LilyPond 1-2-0 Reference Manual
+
+In order to specify repeats, use the @code{\repeat}
+@cindex repeat@@@code{\repeat}
+
+keyword.  Since repeats look and sound differently when played or
+printed, there are a few different variants of repeats.
+
+@table @samp
+  @item unfolded @* 
+    Repeated music is fully written (played) out.  Useful for MIDI
+    output.
+
+  @item volta @* 
+    This is the normal notation: Repeats are not written out, but
+    alternative endings (voltas) are printed, left to right.
+
+  @item folded @* 
+    Alternative endings are written stacked, which is useful for
+    lyrics.
+@end table  
+
+The syntax for repeats is
+
+@quotation
+
+  @code{\repeat}   
+@end quotation
+
+If you have alternative endings, you may add
+
+@quotation
+
+  @code{\alternative}
+@cindex alternative@@@code{\alternative}
+
+    @code{@{} 
+            
+             ... @code{@}}
+@end quotation
+
+where each  is a Music expression.
+
+Normal notation repeats are used like this:
+
+@quotation
+
+@mudela[fragment,verbatim]
+  c'1
+  \repeat volta 2 { c'4 d' e' f' }
+  \repeat volta 2 { f' e' d' c' }
+
+@end mudela
+@end quotation
+
+With alternative endings:
+
+@quotation
+
+@mudela[fragment,verbatim]
+  c'1
+  \repeat volta 2 {c'4 d' e' f'} 
+  \alternative { {d'2 d'} {f' f} }
+
+@end mudela
+@end quotation
+
+Folded repeats look like this:@footnote{Folded repeats offer little
+more over simultaneous music.  However, it is to be expected that
+more functionality -- especially for the MIDI backend -- will be
+implemented.}
+
+@quotation
+
+@mudela[fragment,verbatim]
+  c'1
+  \repeat fold 2 {c'4 d' e' f'} 
+  \alternative { {d'2 d'} {f' f} }
+
+@end mudela
+@end quotation
+
+@quotation
+
+@mudela[fragment,verbatim]
+\context Staff {
+  \relative c' {
+    \partial 4;
+    \repeat volta 2 { e | c2 d2 | e2 f2 | }
+    \alternative { { g4 g g } { a | a a a a | b1 } }
+  }
+}
+
+@end mudela
+@end quotation
+
+If you don't give enough alternatives for all of the repeats, then
+the first alternative is assumed to be repeated often enough to equal
+the specified number of repeats.
+
+@quotation
+
+@mudela[fragment,verbatim]
+\context Staff {
+  \relative c' {
+    \repeat volta 3 { \partial 4; e | c2 d2 | e2 f2 | }
+    \alternative { { g4 g g }
+                   {\partial 1; e4 e e } 
+                   {\partial 1; a a a a | b1 } }
+  }
+}
+
+@end mudela
+@end quotation
+
+It is possible to nest @code{\repeat}.  This is not entirely
+supported: the notes will come be in the right places, but the repeat
+bars will not.
+
+
+
+@cindex transposition of pitches
+
+@node transpose, Ambiguities, sec-repeats, LilyPond 1-2-0 Reference Manual
+
+A music expression can be transposed with
+@code{\transpose}
+@cindex transpose@@@code{\transpose}
+.  The syntax is
+
+@quotation
+
+  @code{\transpose}  
+@end quotation
+
+This means that middle C in  is transposed 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.
+
+@quotation
+
+@mudela[fragment,verbatim]
+\context Staff {
+  \clef "F";
+  { \key e; c d e f }
+  \clef "G";
+  \transpose des'' { \key e; c d e f }
+  \transpose cis'' { \key e; c d e f }
+}
+
+@end mudela
+@end quotation
+
+If you want to use both @code{\transpose} and @code{\relative}, then
+you must use @code{\transpose} first.  @code{\relative} will have no
+effect music that appears inside a @code{\transpose}.
+
+
+
+@cindex automatic lyric durations
+
+If you have lyrics that are set to a melody, you can import the
+rhythm of that melody into the lyrics using @code{\addlyrics}.
+
+@cindex addlyrics@@@code{\addlyrics}
+ The syntax for this is
+
+@quotation
+
+  @code{\addlyrics} 
+@end quotation
+
+This means that both  and  are
+interpreted, but that every non-command atomic music expression
+(``every syllable'') in  is interpreted using timing
+of .
+
+If the property @code{automaticMelismata}
+@cindex automaticMelismata@@@code{automaticMelismata}
+ is set in the
+context of , no lyrics will be put on slurred or tied
+notes.
+
+@quotation
+
+@mudela[verbatim,fragment]
+\addlyrics
+\transpose c'' {
+  \property Voice.automaticMelismata = "1"
+  c8 () cis d8. e16 f2
+}
+\context Lyrics \lyrics {
+ do4 re mi fa }
+
+@end mudela
+@end quotation
+
+You should use a single rhythm melody, and single rhythm lyrics (a
+constant duration is the obvious choice).  If you do not, you will get
+undesired effects when using multiple stanzas:
+
+@quotation
+
+@mudela[verbatim,fragment]
+\addlyrics
+\transpose c'' {
+  c8 () cis d8. e16 f2
+}
+\context Lyrics \lyrics
+< { do4 re mi fa }
+  { do8 re mi fa } >
+
+@end mudela
+@end quotation
+
+It is valid (but probably not very useful) to use notes instead of
+lyrics for .
+
+
+
+
+@node Ambiguities, Notation conversion specifics, transpose, LilyPond 1-2-0 Reference Manual
+@section Ambiguities
+
+@cindex ambiguities
+
+The grammar contains a number of ambiguities.@footnote{The authors
+hope to resolve them at a later time.}
+
+@itemize @bullet
+  @item  The assignment
+
+       @quotation
+
+         @example 
+foo = bar 
+@end example 
+
+       @end quotation
+
+       can be interpreted as making a string identifier @code{\foo}
+       containing @code{"bar"}, or a music identifier @code{\foo}
+       containing the syllable `bar'.
+
+  @item  The assignment
+
+       @quotation
+
+         @example 
+foo = -6 
+@end example 
+
+       @end quotation
+
+       can be interpreted as making an integer identifier
+       containing -6, or a Request identifier containing the
+       fingering `6' (with neutral direction).
+
+  @item  If you do a nested repeat like
+
+       @quotation
+
+@example 
+\repeat ...
+\repeat ...
+\alternative 
+@end example 
+
+       @end quotation
+
+       then it is ambiguous to which @code{\repeat} the
+       @code{\alternative} belongs.  This is the classic if-then-else
+       dilemma.  It may be solved by using braces.
+
+  @item  (an as yet unidentified ambiguity :-)
+@end itemize
+
+
+
+@node Notation conversion specifics, autobeam, Ambiguities, LilyPond 1-2-0 Reference Manual
+@section Notation conversion specifics
+
+
+
+@cindex automatic beam generation
+
+@node autobeam, lyricprint, Notation conversion specifics, LilyPond 1-2-0 Reference Manual
+
+By default, LilyPond will generate beams automatically.  This feature
+can be disabled by setting the @code{Voice.noAutoBeaming}
+@cindex Voice.noAutoBeaming@@@code{Voice.noAutoBeaming}
+
+property to 1.  It can be overridden for specific cases by
+specifying explicit beams as described in
+section @xref{manualbeam}.
+
+A large number of Voice properties are used to decide how to generate
+beams.  Their default values appear in @file{auto-beam-settings.ly}.
+In general, beams can begin anywhere, but their ending location is
+significant.  Beams can end on a beat, or at durations specified by
+the @code{Voice.beamAutoEnd}
+@cindex Voice.beamAutoEnd@@@code{Voice.beamAutoEnd}
+ property.  To end beams every
+quarter note, for example, you could set
+@code{Voice.beamAutoEnd}
+@cindex Voice.beamAutoEnd@@@code{Voice.beamAutoEnd}
+ equal to `@code{"1/4"}'.  To end beams
+at every three eighth notes you would set it to `@code{"3/8"}'.  The
+same syntax can be used to specify beam starting points using
+@code{Voice.beamAutoBegin}
+@cindex Voice.beamAutoBegin@@@code{Voice.beamAutoBegin}
+.
+
+To allow different settings for different time signatures, these
+property names can start with `@code{time}@code{_}' to
+restrict the definition to `@code{/}' time.  For example,
+to specify beams ending only for 6/8 time you would use the
+property @code{Voice.time6_8beamAutoEnd}.  To allow different endings
+for notes of different durations, the duration can be tacked onto the
+end of the property.  To specify beam endings for beams that contain
+32nd notes, you would use @code{Voice.beamAutoEnd_32}.
+
+
+
+@cindex chord names
+
+@cindex chords
+
+@cindex printing!chord names
+
+For displaying printed chord names, use the @code{ChordNames}
+@cindex ChordNames@@@code{ChordNames}
+
+and @code{ChordNameVoice}
+@cindex ChordNameVoice@@@code{ChordNameVoice}
+ contexts.  The chords may be entered
+either using the notation described above, or directly using
+simultaneous music.
+
+@quotation
+
+@mudela[fragment,verbatim]
+<
+  \context ChordNames {
+    \chords{a b c} \notes{<d f g>  <e g b>}
+  }
+  \context Staff \notes {
+    a b c' d' e'
+  }
+>
+
+@end mudela
+@end quotation
+
+LilyPond examines chords specified as lists of notes to determine a
+name to give the chord.  By default, LilyPond will not try to
+identify chord inversions:
+
+@mudela[fragment,verbatim,center]
+  <
+    \context ChordNameVoice \notes {
+      <e'1 g' c''>
+    }
+    \context Thread \notes {
+      <e'1 g' c''>
+    }
+  >
+@end mudela
+
+If you want inversions to be recognized, you must set the property
+@code{ChordNames.chordInversion}
+@cindex ChordNames.chordInversion@@@code{ChordNames.chordInversion}
+:
+
+@mudela[fragment,verbatim,center]
+  <
+    \property Score.chordInversion = 1
+    \context ChordNameVoice \notes {
+      <e'1 g' c''>
+    }
+    \context Thread \notes {
+      <e'1 g' c''>
+    }
+  >
+@end mudela
+
+
+
+@cindex lyrics
+
+@cindex printing!lyrics
+
+@node lyricprint, Notation Contexts, autobeam, LilyPond 1-2-0 Reference Manual
+
+Lyric syllables must be interpreted within a @code{Lyrics} context
+
+@cindex context!Lyrics
+ for printing them.
+
+Here is a full example: 
+
+@quotation
+
+@mudela[verbatim]
+\score {
+  <
+    \notes \transpose c'' {
+      c d e c | c d e c |
+      e f g2 | e4 f g2 \bar "|.";
+    }
+    \context Lyrics \lyrics { 
+      Va-4 der Ja- cob Va- der Ja- cob
+      Slaapt gij nog?2 Slaapt4 gij nog?2
+    }
+  >
+}
+
+@end mudela
+@end quotation
+
+You may want a continuous line after the syllables to show melismata. 
+To achieve this effect, add a `@code{__}' lyric as a separate word
+after the lyric to be extended.  This will create an extender, a line
+that extends over the entire duration of the lyric.  This line will
+run all the way to the start of the next lyric, so you may want to
+shorten it by using a blank lyric (using `@code{_}').
+
+@quotation
+
+@mudela[verbatim]
+\score {
+  <
+    \notes \relative c'' {
+      a4 () b () c () d | c () d () b () a | c () d () b () a
+    }
+    \context Lyrics \lyrics {
+      foo1 __ | bar2. __ _4 | baz1 __
+    }
+  >
+}
+
+@end mudela
+@end quotation
+
+     
+If you want to have hyphens centered between syllables (rather than
+attached to the end of the first syllable) you can use the special
+`@code{-}@code{-}' lyric as a separate word between syllables.  This
+will result in a hyphen which length varies depending on the space
+between syllables, and which will be centered between the syllables. 
+For example:
+
+@quotation
+
+@mudela[verbatim]
+\score {
+  <
+    \notes \transpose c'' {
+      c d e c | c d e c |
+      e f g2 | e4 f g2 \bar "|.";
+    }
+    \context Lyrics \lyrics {
+      Va4 -- der Ja -- cob | Va -- der Ja -- cob |
+      Slaapt gij nog?2 | Slaapt4 gij nog?2
+    }
+  >
+}
+
+@end mudela
+@end quotation
+
+
+
+@node Notation Contexts, contextselection, lyricprint, LilyPond 1-2-0 Reference Manual
+@section Notation Contexts
+
+@cindex notation contexts
+
+Notation contexts are objects that only exist during a run of
+LilyPond.  During the interpretation phase of LilyPond, the Music
+expression contained in a @code{\score} block is interpreted in time
+order.  This is the order in which humans read, play, and write
+music.
+
+A context is an object that holds the reading state of the
+expression; it contains information like
+
+@itemize @bullet
+  @item  What notes are playing at this point?
+  @item  What symbols will be printed at this point?
+  @item  In what style will they printed?
+  @item  What is the current key signature, time signature, point within
+       the measure, etc.?
+@end itemize
+
+Contexts are grouped hierarchically: A @code{Voice} context is
+contained in a @code{Staff} context (because a staff can contain
+multiple voices at any point), a @code{Staff} context is contained in
+a @code{Score}, @code{StaffGroup}, or @code{ChoirStaff} context (because
+these can all contain multiple staffs).
+
+Contexts associated with sheet music output are called @emph{notation
+contexts}, those for sound output are called playing contexts.
+
+Contexts are created either manually or automatically.  Initially,
+the top level music expression is interpreted by the top level
+context (the @code{Score} context).  When a atomic music expression
+(i.e. a note, a rest, @code{\bar}, or @code{\time} commands), a nested
+set of contexts is created that can process these atomic expressions,
+as in this example:
+
+@quotation
+
+  @example 
+\score @{ \notes < c4 > @} 
+@end example 
+
+@end quotation
+
+The sequential music, `@code{@{ c4 @}}' is interpreted by @code{Score}
+context. When the note `@code{c4}' itself is interpreted, a set of
+contexts is needed that will accept notes.  The default for this is a
+@code{Voice} context, contained in a @code{Staff} context.  Creation of
+these contexts results in the staff being printed.
+
+
+@node contextselection, Notation output definitions, Notation Contexts, LilyPond 1-2-0 Reference Manual
+
+@cindex context
+
+You can also create contexts manually, and you probably have to do so
+if you want to typeset complicated multiple part material.  If a
+`@code{\context}  ' expression is encountered
+during the interpretation phase, the  argument will be
+interpreted with a context of type .  If you specify a name,
+the specific context with that name is searched.
+
+If a context of the specified type and name can not be found, a new
+one is created.  For example,
+
+@quotation
+
+@mudela[verbatim]
+\score {
+  \notes \relative c'' {
+    c4 <d4 \context Staff = "another" e4> f
+  }
+}
+
+@end mudela
+@end quotation
+
+In this example, the @code{c} and @code{d} are printed on the
+default staff.  For the @code{e}, a context Staff called
+`@code{another}' is specified; since that does not exist, a new
+context is created.  Within @code{another}, a (default) Voice context
+is created for the @code{e4}.  When all music referring to a
+context is finished, the context is ended as well.  So after the
+third quarter, @code{another} is removed.
+
+Almost all music expressions inherit their interpretation context
+from their parent.  In other words, suppose that the syntax for a
+music expression is
+
+@quotation
+
+  @code{\keyword}   ...
+@end quotation
+
+When the interpretation of this music expression starts, the context
+for , , etc. is that of the total
+expression.
+
+Lastly, you may wonder, why this:
+
+@quotation
+
+@example 
+\score @{
+  \notes \relative c'' @{
+    c4 d4 e4
+  @}
+@} 
+@end example 
+
+@end quotation
+
+doesn't result in this:
+
+@mudela[]
+
+  \score {
+    \notes \relative c'' {
+      <c4> <d4> <e4>
+    }
+  }
+
+@end mudela
+
+For the @code{c4}, a default @code{Staff} (with a contained
+@code{Voice}) context is created.  After the @code{c4} ends, no
+music refers to this default staff, so it would be ended, with the
+result shown.  To prevent this inconvenient behavior, the context to
+which the sequential music refers is adjusted during the
+interpretation.  So after the @code{c4} ends, the context of the
+sequential music is also the default @code{Voice} context. 
+The @code{d4} gets interpreted in the same context
+as @code{c4}.
+
+
+
+These are the contexts supplied with the package.  They are defined
+in the initialization file @file{ly/engraver.ly}.
+
+@table @samp
+  @item @code{Grace}
+@cindex Grace@@@code{Grace}
+ @* 
+    The context for handling grace notes.  It is instantiated
+    automatically when you use @code{\grace}.  Basically, it is an
+    `embedded' miniature of the Score context.  Since this context
+    needs special interaction with the rest of LilyPond, you should
+    not explicitly instantiate it.
+
+  @item @code{LyricVoice}
+@cindex LyricVoice@@@code{LyricVoice}
+ @* 
+    Corresponds to a voice with lyrics.  Handles the printing of a
+    single line of lyrics.
+
+  @item @code{Thread}
+@cindex Thread@@@code{Thread}
+ @* 
+    Handles note heads, and is contained in the Voice context.  You
+    have to instantiate this explicitly if you want to adjust the
+    style of individual note heads.
+
+  @item @code{Voice}
+@cindex Voice@@@code{Voice}
+ @* 
+    Corresponds to a voice on a staff.  This context handles the
+    conversion of dynamic signs, stems, beams, super- and subscripts,
+    slurs, ties, and rests.
+
+    You have to instantiate this explicitly if you want to have
+    multiple voices on the same staff.
+
+  @item @code{ChordNamesVoice}
+@cindex ChordNamesVoice@@@code{ChordNamesVoice}
+ @* 
+    A voice with chord names.  Handles printing of a line of chord
+    names.
+
+  @item @code{ChordNames}
+@cindex ChordNames@@@code{ChordNames}
+ @* 
+    Typesets chord names.  Can contain @code{ChordNamesVoice}
+    contexts.
+
+  @item @code{Lyrics}
+@cindex Lyrics@@@code{Lyrics}
+ @* 
+    Typesets lyrics.  It can contain @code{LyricVoice} contexts.
+
+  @item @code{Staff}
+@cindex Staff@@@code{Staff}
+ @* 
+    Handles clefs, bar lines, keys, accidentals.  It can contain
+    @code{Voice} contexts.
+
+  @item @code{RhythmicStaff}
+@cindex RhythmicStaff@@@code{RhythmicStaff}
+ @* 
+    A context like @code{Staff} but for printing rhythms.  Pitches are
+    ignored; the notes are printed on one line.  It can contain
+    @code{Voice} contexts.
+
+  @item @code{GrandStaff}
+@cindex GrandStaff@@@code{GrandStaff}
+ @* 
+    Contains @code{Staff} or @code{RhythmicStaff} contexts.  It adds a
+    brace on the left side, grouping the staffs together.  The bar
+    lines of the contained staffs are connected vertically.  It can
+    contain @code{Staff} contexts.
+
+  @item @code{PianoStaff}
+@cindex PianoStaff@@@code{PianoStaff}
+ @* 
+    Just like @code{GrandStaff} but with @code{minVerticalAlign} set
+    equal to @code{maxVerticalAlign} so that interstaff beaming and
+    slurring can be used.
+
+  @item @code{StaffGroup}
+@cindex StaffGroup@@@code{StaffGroup}
+ @* 
+    Contains @code{Staff} or @code{RhythmicStaff} contexts.  Adds a
+    bracket on the left side, grouping the staffs together.  The bar
+    lines of the contained staffs are connected vertically.  It can
+    contain @code{Staff}, @code{RhythmicStaff}, @code{GrandStaff}, or
+    @code{Lyrics} contexts.
+
+  @item @code{ChoirStaff}
+@cindex ChoirStaff@@@code{ChoirStaff}
+ @* 
+    Identical to @code{StaffGroup} except that the contained staffs
+    are not connected vertically.
+
+  @item @code{Score}
+@cindex Score@@@code{Score}
+ @* 
+    This is the top level notation context.  No other context can
+    contain a @code{Score} context.  This context handles the
+    administration of time signatures.  It also makes sure that items
+    such as clefs, time signatures, and key-signatures are aligned
+    across staffs.  It can contain @code{Lyrics}, @code{Staff},
+    @code{RhythmicStaff}, @code{GrandStaff}, @code{StaffGroup}, and
+    @code{ChoirStaff} contexts.
+
+    You cannot explicitly instantiate a Score context (since it is
+    not contained in any other context).  It is instantiated
+    automatically when an output definition (a @code{\score} or
+    @code{\paper} block) is processed.
+@end table
+
+
+
+Properties that are set in one context are inherited by all of the
+contained contexts.  This means that a property valid for the
+@code{Voice} context can be set in the @code{Score} context (for
+example) and thus take effect in all @code{Voice} contexts.
+
+Properties can be preset within the @code{\translator} block
+corresponding to the appropriate context.  In this case, the syntax
+is
+
+@quotation
+
+   @code{=} 
+@end quotation
+
+This assignment happens before interpretation starts, so a
+@code{\property} expression will override any predefined settings.
+
+The @code{\property} expression will create any property you specify.
+There is no guarantee that a property will be used.  So if you spell
+a property name wrong, there will be no error message.
+
+The property settings are used during the interpretation phase.  They
+are read by the LilyPond modules where interpretation contexts are
+built of.  These modules are called @emph{translators}.  Translators for
+notation are called @emph{engravers}, and translators for sound are
+called @emph{performers}.
+
+The precise result of a property is determined by the implementation
+of the translator that reads them.  Therefore, the result of a
+property can vary, since it is implementation and configuration
+dependent.
+
+In order to fully find out what properties are used, you must
+currently search the source code for calls to @code{get_property}. 
+The rest of the section is devoted to an (incomplete) overview of
+available properties.
+
+
+@cindex properties!Lyrics
+
+@table @samp
+  @item @code{textStyle}
+@cindex textStyle@@@code{textStyle}
+ @* 
+    Set the font for lyrics.  The available font choices are
+    @code{roman}, @code{italic}, @code{bold}, @code{large}, @code{Large},
+    @code{typewriter}, and @code{finger}.  The @code{finger} font can
+    only display numbers.  Note also that you must be careful when
+    using @code{\property} in Lyrics mode, because of the way strings
+    are parsed.  Either put quotes around the arguments to
+    @code{\property} or be sure to leave a space on both sides of the
+    dot.
+@end table
+
+
+@cindex properties!Thread
+
+@table @samp
+  @item @code{noteheadStyle}
+@cindex noteheadStyle@@@code{noteheadStyle}
+ @* 
+    Selects type of note head.  Choices are @code{cross},
+    @code{diamond}, @code{harmonic}, @code{transparent}, and @code{""}. 
+    They are shown in that order below.
+
+    @mudela[center]
+
+      \score {
+        \notes { 
+          \property Staff.barNonAuto = 1
+          \property Voice.noteHeadStyle = cross 
+          a'
+          \property Voice.noteHeadStyle = diamond
+          a'
+          \property Voice.noteHeadStyle = harmonic
+          a'
+          \property Voice.noteHeadStyle = transparent
+          a' 
+          \property Voice.noteHeadStyle = ""
+          a'
+        }
+        \paper {
+          linewidth = -1.;
+        }
+      }
+    
+@end mudela
+@end table
+
+@subsubheading Grace properties
+
+@cindex properties!Grace
+
+@table @samp  
+  @item @code{stemStyle}
+@cindex stemStyle@@@code{stemStyle}
+ @* 
+    By default set to @code{"grace"} meaning that all unbeamed 
+    notes with flags are typeset with a slash through the flag. 
+    Setting to @code{""} gives standard flags.
+@end table
+
+
+@cindex properties!Voice
+
+@table @samp  
+  @item @code{abbrev}
+@cindex abbrev@@@code{abbrev}
+ @* 
+    Set length for tremolo to be used if no length is explicitly
+    specified. 
+
+  @item @code{articulationScriptPadding}
+@cindex articulationScriptPadding@@@code{articulationScriptPadding}
+
+    @* 
+    Determines the extra space added between articulation marks, such
+    as staccato, tenuto, trill, up/down bow or fermata, and the
+    closest staff line or note.
+
+  @item @code{articulationScriptVerticalDirection}
+    
+@cindex articulationScriptVerticalDirection@@@code{articulationScriptVerticalDirection}
+ @* 
+    Determines the location of articulation marks.  Set to @code{\up}
+    to print marks above the staff; set to @code{\down} to print marks
+    below the staff.  This property does not override explicit
+    directions marked with `@code{^}' or `@code{_}' in the mudela file.
+    
+  @item @code{noAutoBeaming}
+@cindex beamAuto@@@code{beamAuto}
+ @* 
+    If set to 1 then beams are not generated automatically.
+
+  @item @code{beamAutoEnd}
+@cindex beamAutoEnd@@@code{beamAutoEnd}
+ @* 
+    Specifies when automatically generated beams can end.  See
+    section @xref{autobeam}.
+
+  @item @code{beamAutoBegin}
+@cindex beamAutoBegin@@@code{beamAutoBegin}
+ @* 
+    Specifies when automatically generated beams can start.  See
+    section @xref{autobeam}.
+
+  @item @code{beamquantisation}
+@cindex beamquantisation@@@code{beamquantisation}
+ @* 
+    Set to @code{\none} for no quantization.  Set to @code{\normal} to
+    quantize position and slope.  Set to @code{\traditional} to avoid
+    wedges.  These three settings are available via
+    @code{\beamposfree}
+@cindex beamposfree@@@code{\beamposfree}
+,
+    @code{\beamposnormal}
+@cindex beamposnormal@@@code{\beamposnormal}
+, and
+    @code{\beampostraditional}
+@cindex beampostraditional@@@code{\beampostraditional}
+.
+
+  @item @code{beamslopedamping}
+@cindex beamslopedamping@@@code{beamslopedamping}
+ @* 
+    Set to @code{\none} for undamped beams.  Set to @code{\normal} for
+    damped beams.  Set to @code{\infinity} for beams with zero slope. 
+    The identifiers
+    @code{\beamslopeproportional}
+@cindex beamslopeproportional@@@code{\beamslopeproportional}
+,
+    @code{\beamslopedamped}
+@cindex beamslopedamped@@@code{\beamslopedamped}
+, and
+    @code{\beamslopezero}
+@cindex beamslopezero@@@code{\beamslopezero}
+ each set the
+    corresponding value.
+
+  @item @code{dynamicDirection}
+@cindex dynamicDirection@@@code{dynamicDirection}
+ @* 
+    Determines location of dynamic marks.  Set to @code{\up} to print
+    marks above the staff; set to @code{\down} to print marks below
+    the staff.
+
+  @item @code{dynamicStyle}
+@cindex dynamicStyle@@@code{dynamicStyle}
+ @* 
+    Set the text style for dynamics.  
+
+  @item @code{fontSize}
+@cindex fontSize@@@code{fontSize}
+ @* 
+    Can be used to select smaller font sizes for music.  The normal
+    font size is 0, and the two smaller sizes are -1
+    and -2.
+
+   @item @code{forceHorizontalShift}
+@cindex forceHorizontalShift@@@code{forceHorizontalShift}
+ @* 
+    Force horizontal shift for collision resolution.  It overrides
+    automatic collision resolution.  The value is the shift amount
+    expressed in @code{note_width}, as set in the paper section.
+    
+
+  @item @code{horizontalNoteShift}
+@cindex horizontalNoteShift@@@code{horizontalNoteShift}
+ @* 
+    Enable LilyPond to shift notes horizontally if they collide with
+    other notes.  This is useful when typesetting many voices on one
+    staff.  The identifier @code{\shift}
+@cindex shift@@@code{\shift}
+ is defined to
+    enable this.  Traditionally, the outer chords (the upmost and
+    downmost voices), should have no @code{horizontalNoteShift}.
+
+  @item @code{markScriptPadding}
+@cindex markScriptPadding@@@code{markScriptPadding}
+ @* 
+    Determines the extra space added between the mark and the closest
+    staff line or note.
+
+  @item @code{markDirection}
+@cindex markDirection@@@code{markDirection}
+ @* 
+    Determines if marks should be printed above or below the staff.
+    Set to @code{\up} to print marks above the staff; set to
+    @code{\down} to print marks below the staff.
+
+  @item @code{midiInstrument}
+@cindex midiInstrument@@@code{midiInstrument}
+ @* 
+    Sets the instrument for MIDI output.  If this property is not set
+    then LilyPond will use the @code{instrument} property.  This must
+    be set to one of the strings on the list of MIDI instruments that
+    appears in section @xref{midilist}.  If you use a string which
+    is not listed, LilyPond will silently substitute piano.
+
+  @item @code{oldTieBehavior}
+@cindex oldTieBehavior@@@code{oldTieBehavior}
+ @* 
+    Set to 1 in order to get old tie behavior where ties would
+    connect unequal pitches.  This property is deprecated, and its
+    use is not recommended.
+
+  @item @code{restStyle}
+@cindex restStyle@@@code{restStyle}
+ @* 
+    Change the layout of rests shorter than quarter notes. 
+    Currently, the standard layout @code{""} and mensural notation
+    @code{"mensural"} are available. Mensural rests of duration
+    32 or shorter are not available.
+    
+  @item @code{scriptHorizontal}
+@cindex scriptHorizontal@@@code{scriptHorizontal}
+ @* 
+    Put scripts left or right of note heads.  Support for this is
+    limited.  Accidentals will collide with scripts.
+    
+  @item @code{slurVerticalDirection}
+@cindex slurVerticalDirection@@@code{slurVerticalDirection}
+ @* 
+    Set to @code{\free} for free choice of slur direction, set to
+    @code{\up} to force slurs up, set to @code{\down} to force slurs
+    down.  The shorthands @code{\slurup}
+@cindex slurup@@@code{\slurup}
+,
+    @code{\slurdown}
+@cindex slurdown@@@code{\slurdown}
+, and
+    @code{\slurboth}
+@cindex slurboth@@@code{\slurboth}
+ are available.
+
+  @item @code{slurDash}
+@cindex slurDash@@@code{slurDash}
+ @* 
+    Set to 0 for normal slurs, 1 for dotted slurs, and a
+    larger value for dashed slurs.  Identifiers
+    @code{\slurnormal}
+@cindex slurnormal@@@code{\slurnormal}
+ and
+    @code{\slurdotted}
+@cindex slurdotted@@@code{\slurdotted}
+ are predefined to set the
+    first two settings.
+
+@item @code{stemLength}
+@cindex stemLength@@@code{stemLength}
+ @* 
+    Set length of stems.  Unit is `@code{interline}/2', so
+    @code{stemLength} defaults to 7.
+
+  @item @code{stemLeftBeamCount}
+@cindex stemLeftBeamCount@@@code{stemLeftBeamCount}
+ @* 
+    Specify the number of beams to draw on the left side of the next
+    note.  Overrides automatic beaming.  The value is only used once,
+    and then it is erased.
+
+  @item @code{stemRightBeamCount}
+@cindex stemRightBeamCount@@@code{stemRightBeamCount}
+ @* 
+    Specify the number of beams to draw on the right side of the next
+    note.  Overrides automatic beaming.  The value is only used once,
+    and then it is erased.
+  @item @code{tieVerticalDirection}
+@cindex tieVerticalDirection@@@code{tieVerticalDirection}
+ @* 
+    Set to @code{\free} for free choice of tie direction, set to
+    @code{\up} to force ties up, set to @code{\down} to force ties
+    down.
+
+  @item @code{transposing}
+@cindex transposing@@@code{transposing}
+ @* 
+    Transpose the MIDI output.  Set this property to the number of
+    half-steps to transpose by.
+
+  
+  @item @code{textEmptyDimension}
+@cindex textEmptyDimension@@@code{textEmptyDimension}
+ @* 
+    If set to 1 then text placed above or below the staff is
+    assumed to have zero width.
+  
+  @item @code{textStyle}
+@cindex textStyle@@@code{textStyle}
+ @* 
+    Set the text style for superscripts and subscripts.  See above
+    for list of text styles.
+
+  @item @code{textScriptPadding}
+@cindex textScriptPadding@@@code{textScriptPadding}
+ @* 
+    Determines the extra space added between superscripted resp.
+    subscripted text and the closest staff line or note.
+
+  @item @code{verticalDirection}
+@cindex verticalDirection@@@code{verticalDirection}
+ @* 
+    Determines the direction of stems, subscripts, beams, slurs, and
+    ties.  Set to @code{\down} to force them down, @code{\up} to force
+    them up, or @code{\free} to let LilyPond decide.  This can be used
+    to distinguish between voices on the same staff.  The
+    @code{\stemdown}
+@cindex stemdown@@@code{\stemdown}
+, @code{\stemup}
+@cindex stemup@@@code{\stemup}
+,
+    and @code{\stemboth}
+@cindex stemboth@@@code{\stemboth}
+ identifiers set this
+    property.
+    
+
+  @item @code{tupletDirection}
+@cindex tupletDirection@@@code{tupletDirection}
+ @* 
+    Determines the direction of triplets and other tuplets.  Set to
+    @code{\down} to force them below the staff, @code{\up} to force
+    them above, or @code{\free} to let LilyPond decide.
+
+  @item @code{tupletVisibility}
+@cindex tupletVisibility@@@code{tupletVisibility}
+ @* 
+    Determines whether tuplets of notes are labelled.  Setting
+    to 0 shows nothing; setting to 1 shows a number;
+    setting to 2 shows a number and a bracket if there is no
+    beam; setting to 3 shows a number, and if there is no beam
+    it adds a bracket; setting to 4 shows both a number and a
+    bracket unconditionally.
+
+@end table
+
+@subsubheading Staff properties
+
+@cindex properties!Staff
+
+@table @samp
+  @item @code{barNonAuto}
+@cindex barNonAuto@@@code{barNonAuto}
+ @* 
+    If set to 1 then bar lines will not be printed
+    automatically; they must be explicitly created with @code{\bar}
+    keywords.  Unlike with the @code{\cadenza} keyword, measures are
+    still counted.  Bar generation will resume according to that
+    count if this property is set to zero.
+
+  @item @code{barNumberDirection}
+@cindex barNumberDirection@@@code{barNumberDirection}
+ @* 
+    Set to @code{\up} or @code{\down} to put bar numbers above or below
+    the staff.
+
+  @item @code{barNumberHangOnClef}
+@cindex barNumberHangOnClef@@@code{barNumberHangOnClef}
+ @* 
+    Set to 1 to cause bar numbers to appear above or below the
+    clef instead of on the bar line.  This property is deprecated. 
+    Do not use.
+
+  @item @code{barNumberScriptPadding}
+@cindex barNumberScriptPadding@@@code{barNumberScriptPadding}
+ @* 
+    Sets extra space between the bar number and the bar it labels.
+
+  @item @code{barSize}
+@cindex barSize@@@code{barSize}
+ @* 
+    Specify the height of the bar lines if it should be different
+    than the staff height.
+
+  @item @code{barAtLineStart}
+@cindex barAtLineStart@@@code{barAtLineStart}
+ @* 
+    Set to 1 to produce a bar line after the clef at the start
+    of each line (but not at the beginning of the music).
+
+  @item @code{clefStyle}
+@cindex clefStyle@@@code{clefStyle}
+ @* 
+    Determines how clefs are typeset.  If set to @code{transparent},
+    the clefs are not printed at all, if set to
+    @code{fullSizeChanges}, clef changes in the middle of a line are
+    typeset with a full size clef.  By default, clef changes are
+    typeset in smaller size.
+
+  @item @code{createKeyOnClefChange}
+@cindex createKeyOnClefChange@@@code{createKeyOnClefChange}
+ @* 
+    Set to a nonempty string if you want key signatures to be printed
+    when the clef changes.  Set to the empty string if you do not
+    want key signatures printed.
+
+  @item @code{createInitdefaultClef}
+@cindex createInitdefaultClef@@@code{createInitdefaultClef}
+ @* 
+    Specify whether clefs are created on default?  (Doesn't seem to
+    do anything.)
+
+  @item @code{defaultClef}
+@cindex defaultClef@@@code{defaultClef}
+ @* 
+    Determines the default clef.  See @code{\clef} keyword.
+
+  @item @code{markHangOnClef}
+@cindex markHangOnClef@@@code{markHangOnClef}
+ @* 
+    Set to 1 to cause marks to appear by clefs instead of by bar
+    lines.  Deprecated, use is not recommended.
+
+  @item @code{marginDirection}
+@cindex marginDirection@@@code{marginDirection}
+ @* 
+    Set to @code{\left} or @code{\right} to specify location of
+    marginal scripts.
+
+  @item @code{marginScriptPadding}
+@cindex marginScriptPadding@@@code{marginScriptPadding}
+ @* 
+    Specify extra space for marginal scripts.
+
+  @item @code{forgetAccidentals}
+@cindex forgetAccidentals@@@code{forgetAccidentals}
+ @* 
+    Causes accidentals to be printed at every note instead of
+    remembered for the duration of a measure.
+
+  @item @code{noResetKey}
+@cindex noResetKey@@@code{noResetKey}
+ @* 
+    Do not reset the key at the start of a measure.  Accidentals will
+    be printed only once and are in effect until overridden, possibly
+    many measures later.
+
+  @item @code{staffLineLeading}
+@cindex staffLineLeading@@@code{staffLineLeading}
+ @* 
+    Specifies the distance (in points) between lines of the staff.
+
+  @item @code{numberOfStaffLines}
+@cindex numberOfStaffLines@@@code{numberOfStaffLines}
+ @* 
+    Specifies the number of staff lines.  The default is 5.
+
+  @item @code{postBreakPadding}
+@cindex postBreakPadding@@@code{postBreakPadding}
+ @* 
+    Extra space in points to be added after the clef, time signature
+    and key signature on the staff.  Deprecated, do not use.
+
+  @item @code{noVoltaBraces}
+@cindex noVoltaBraces@@@code{noVoltaBraces}
+ @* 
+    Set to true to suppress the printing of brackets over alternate
+    endings specified by the command @code{\alternative}.
+
+  @item @code{numberOfStaffLines}
+@cindex numberOfStaffLines@@@code{numberOfStaffLines}
+ @* 
+    Sets the number of lines that the staff has.
+  @item @code{barAlways}
+@cindex barAlways@@@code{barAlways}
+ @* 
+    If set to 1 a bar line is drawn after each note.
+
+  @item @code{defaultBarType}
+@cindex defaultBarType@@@code{defaultBarType}
+ @* 
+    Sets the default type of bar line. See Section @xref{barlines} 
+    for a list of available bar types.
+
+  @item @code{instrument}, @code{instr}
+    
+@cindex instrument@@@code{instrument}
+
+@cindex instr@@@code{instr}
+ @* 
+    If @code{Staff_margin_engraver}
+@cindex Staff_margin_engraver
+ is
+    added to the Staff translator, then the @code{instrument} property
+    is used to label the first line of the staff and the @code{instr}
+    property is used to label subsequent lines.  If the
+    @code{midiInstrument} property is not set, then @code{instrument}
+    is used to determine the instrument for MIDI output.
+
+  @item @code{keyOctaviation}
+@cindex keyOctaviation@@@code{keyOctaviation}
+ @* 
+    If set to 1, then keys are the same in all octaves.  If set
+    to 0 then the key signature for different octaves can be
+    different and is specified independently:
+
+    @quotation
+
+      @code{\keysignature bes fis'}
+    @end quotation
+
+    The default value is 1.  Can be set to zero with
+    @code{\specialkey} or reset to 1 with @code{\normalkey}.
+
+  @item @code{timeSignatureStyle}
+@cindex timeSignatureStyle@@@code{timeSignatureStyle}
+ @* 
+    Changes the default two-digit layout for time signatures.  The
+    following values are recognized:
+
+    @table @samp
+      @item @code{C}
+@cindex C@@@code{C}
+ @* 
+        4/4 and 2/2 are typeset as C and struck C, respectively.  All
+        other time signatures are written with two digits.
+
+      @item @code{old}
+@cindex old@@@code{old}
+ @* 
+        2/2, 3/2, 2/4, 3/4, 4/4, 6/4, 9/4, 4/8, 6/8 and 9/8 are
+        typeset with old-style mensuration marks.  All other time
+        signatures are written with two digits.
+
+      @item @code{1}
+@cindex 1@@@code{1}
+ @* 
+        All time signatures are typeset with a single
+        digit, e.g. 3/2 is written as 3.
+
+      @item 
+@cindex CM/N@@@code{CM/N}
+@code{C}@code{/}, 
+      
+@cindex oldM/N@@@code{oldM/N}
+@code{old}@code{/} or
+      @code{old6/8alt}
+@cindex old6/8alt@@@code{old6/8alt}
+ @* 
+        Tells LilyPond to use a specific symbol as time signature.
+    @end table
+
+    The different time signature characters are shown below with its
+    names:
+
+    @mudela[center]
+
+      \score {
+        \notes\relative c'' {
+          \property Voice.textStyle = typewriter
+          \property Staff.timeSignatureStyle = "C2/2"
+          \time 2/2; a2^"C2/2" a2 
+          \property Staff.timeSignatureStyle = "C4/4"
+          \time 2/2; a2^"C4/4" a2 
+          \property Staff.timeSignatureStyle = "old2/2"
+          \time 2/2; a2^"old2/2" a2 
+          \property Staff.timeSignatureStyle = "old3/2"
+          \time 2/2; a2^"old3/2" a2 
+          \property Staff.timeSignatureStyle = "old2/4"
+          \time 2/2; a2^"old2/4" a2 
+          \property Staff.timeSignatureStyle = "old4/4"
+          \time 2/2; a2^"old4/4" a2 
+          \property Staff.timeSignatureStyle = "old6/4"
+          \time 2/2; a2^"old6/4" a2 
+          \property Staff.timeSignatureStyle = "old9/4"
+          \time 2/2; a2^"old9/4" a2 
+          \property Staff.timeSignatureStyle = "old4/8"
+          \time 2/2; a2^"old4/8" a2 
+          \property Staff.timeSignatureStyle = "old6/8"
+          \time 2/2; a2^"old6/8" a2 
+          \property Staff.timeSignatureStyle = "old6/8alt"
+          \time 2/2; a2^"old6/8alt" a2 
+          \property Staff.timeSignatureStyle = "old9/8"
+          \time 2/2; a2^"old9/8" a2 
+        }
+        \paper {
+          linewidth = 4.5 \in;
+        }
+      }
+    
+@end mudela
+
+  @item @code{voltaSpannerDuration}
+@cindex voltaSpannerDuration@@@code{voltaSpannerDuration}
+ @* 
+    Set to an integer to control the size of the brackets printed by
+    @code{\alternative}.  The integer specifies the number of whole
+    notes duration to use for the brackets.  It is rounded to the
+    nearest measure.  This can be used to shrink the length of
+    brackets in the situation where one alternative is very large. 
+    It may have odd effects if the specified duration is longer than
+    the music given in an @code{\alternative}.
+@end table
+   
+
+@cindex properties!GrandStaff
+
+@table @samp 
+  @item @code{alignmentReference}
+@cindex alignmentReference@@@code{alignmentReference}
+ @* 
+    Set to @code{\center} for vertical alignment reference point to be
+    in the center of the vertical group.  Set to @code{\up} to put the
+    reference point at the top of the group.
+
+  @item @code{maxVerticalAlign}
+@cindex maxVerticalAlign@@@code{maxVerticalAlign}
+ @* 
+    Set the maximum vertical distance between staffs.
+
+  @item @code{minVerticalAlign}
+@cindex minVerticalAlign@@@code{minVerticalAlign}
+ @* 
+    Set the minimum vertical distance between staffs.  
+@end table
+
+
+@cindex properties!Score
+
+@table @samp
+  @item @code{skipBars}
+@cindex skipBars@@@code{skipBars}
+ @* 
+    Set to 1 to skip the empty bars that are produced by
+    multimeasure notes and rests.  These bars will not appear on the
+    printed output.  Set to zero (the default) to expand multimeasure
+    notes and rests into their full length, printing the appropriate
+    number of empty bars so that synchronization with other voices is
+    preserved.
+
+    @quotation
+
+@mudela[fragment,verbatim,center]
+r1 r1*3 R1*3\property Score.skipBars=1 r1*3 R1*3
+
+@end mudela
+    @end quotation
+
+@end table
+
+
+@cindex properties!ChordNamesVoice
+
+@table @samp
+  @item @code{chordInversion}
+@cindex chordInversion@@@code{chordInversion}
+ @* 
+    Determines whether LilyPond should look for chord inversions when
+    translating from notes to chord names.  Set to 1 to find
+    inversions.  The default is 0 which does not look for
+    inversions.
+@end table
+
+
+
+@node Notation output definitions, output, contextselection, LilyPond 1-2-0 Reference Manual
+@section Notation output definitions
+
+@cindex output
+
+@cindex notation output
+
+@cindex output definition
+
+@node output, paper, Notation output definitions, LilyPond 1-2-0 Reference Manual
+
+@node paper, papervars, output, LilyPond 1-2-0 Reference Manual
+
+The most important output definition is the @code{\paper} block, for
+music notation.  The syntax is
+
+@quotation
+
+  @code{\paper @{} []  @code{@}}
+@end quotation
+
+where each of the items is one of
+
+@itemize @bullet
+  @item  An assignment.  The assignment must be terminated by a
+       semicolon.  See section @xref{papervars} for information on
+       paper variables.
+
+  @item  A context definition.  See section @xref{contextdefs} for
+       more information on context definitions.
+
+  @item  A margin shape declaration.  The syntax is
+
+       @quotation
+
+         @code{\shape} @code{,} @code{,}
+                      @code{,}  ... @code{;}
+       @end quotation
+
+       
+@cindex shape@@@code{\shape}
+
+       Each pair of  and  values is a dimension
+       specifying how far to indent and how wide to make the line. 
+       The indentation and width of successive lines are specified by
+       the successive pairs of dimensions.  The last pair of
+       dimensions will define the characeristics of all lines beyond
+       those explicitly specified.
+
+  @item  A font declaration.  Its syntax is
+
+       @quotation
+
+          @code{=} @code{\font}
+@cindex font@@@code{\font}
+       @end quotation
+
+        is an integer describing the font to be used. 
+       0 is the default font.   is the basename of
+       a font (usually a member of the Feta family).
+@end itemize
+
+
+
+@cindex changing font size and paper size
+
+The Feta font provides musical symbols at six different sizes.  These
+fonts are 11 point, 13 point, 16 point, 20 point,
+23 point, and 26 point.  The point size of a font is the
+height of the five lines in a staff when displayed in the font.
+
+Definitions for these sizes are the files @file{paperSZ.ly}, where
+@code{SZ} is one of 11, 13, 16, 20, 23 and 26.  If you include
+any of these files, the identifiers @code{paper_eleven},
+@code{paper_thirteen}, @code{paper_sixteen}, @code{paper_twenty},
+@code{paper_twentythree}, and @code{paper_twentysix} are defined
+respectively.  The default @code{\paper} block is also set.
+
+To change the paper size, you must first set the
+@code{papersize}
+@cindex papersize@@@code{papersize}
+ variable at top level.  Set it to the strings
+@code{a4}, @code{letter}, or @code{legal}.  After this specification,
+you must set the font as described above.  If you want the default
+font, then use the 20 point font.  The new paper size will not
+take effect if the font is not loaded and selected afterwards.  Paper
+size selection works by loading a file named after the paper size you
+select.
+
+
+
+@cindex paper variables
+
+@node papervars, contextdefs, paper, LilyPond 1-2-0 Reference Manual
+
+There is a large number of paper variables that are used to control
+details of the layout.  These variables control the defaults for the
+entire score.  Usually, they do not have to be changed; they are by
+default set to values that depend on the font size in use.  The
+values are used by the graphic objects while formatting the score;
+they are therefore implementation dependent.  Most variables are
+accompanied by documentation in the initalization file
+@file{params.ly} or @file{paperSZ.ly}, where @code{SZ} is the staff
+height in points.
+
+Nevertheless, here are some variables you may want to use or change:
+
+@table @samp
+  @item @code{indent}
+@cindex indent@@@code{indent}
+ @* 
+    The indentation of the first line of music.
+
+  @item @code{interline}
+@cindex interline@@@code{interline}
+ @* 
+    The distance between two staff lines, calculated from the center
+    of the lines.  You should use either this or @code{rulethickness}
+    as a unit for distances you modify.
+  
+  @item @code{linewidth}
+@cindex linewidth@@@code{linewidth}
+ @* 
+    Sets the width of the lines.  If set to -1.0, a single
+    unjustified line is produced.
+
+  @item @code{output}
+@cindex output@@@code{output}
+ @* 
+    Specifies an alternate name for the the output @file{s}.
+    A @file{.tex}, @file{.midi} or @file{.ps} extension will be 
+    added to the string you specify.
+
+  @item @code{rulethickness}
+@cindex rulethickness@@@code{rulethickness}
+ @* 
+    Determines the thickness of staff and bar lines. 
+
+  @item @code{castingalgorithm}
+@cindex castingalgorithm@@@code{castingalgorithm}
+ @* 
+    The algorithm to use for breaking lines.  Choices are
+    @code{\Gourlay}
+@cindex Gourlay@@@code{\Gourlay}
+ for a TeX-like dynamic
+    programming algorithm, and @code{\Wordwrap}
+@cindex Wordwrap@@@code{\Wordwrap}
+ for
+    a simple algorithm.  Gourlay breaking looks much better, but
+    takes a lot more resources.  Wordwrap leaves loosely spaced lines
+    at the end.
+@end table
+
+
+@node contextdefs, engravers, papervars, LilyPond 1-2-0 Reference Manual
+
+@cindex context definition
+
+A notation contexts is defined by the following information
+
+@enumerate i
+  @item  A name.
+
+  @item  The LilyPond modules that do the actual conversion of music to
+       notation.  Each module is a so-called
+       @emph{engraver}
+@cindex engraver
+.
+
+  @item  How these modules should cooperate, i.e. which ``cooperation
+       module'' should be used.  This cooperation module is a special
+       type of engraver.
+
+  @item  What other contexts the context can contain,
+
+  @item  What properties are defined.
+@end enumerate
+
+A context definition has this syntax:
+
+@quotation
+
+  @code{\translator} @code{@{}
+                       
+                    @code{@}}
+@end quotation
+
+ can be an identifier or of the form
+
+@quotation
+
+  @code{\type}  @code{;}
+@end quotation
+
+ is one of
+
+@table @samp
+  @item @code{Engraver_group_engraver}
+@cindex Engraver_group_engraver@@@code{Engraver_group_engraver}
+ @* 
+    The standard cooperation engraver.
+
+  @item @code{Score_engraver}
+@cindex Score_engraver@@@code{Score_engraver}
+ @* 
+    This is cooperation module that should be in the top level context.
+
+  @item @code{Grace_engraver_group}
+@cindex Grace_engraver_group@@@code{Grace_engraver_group}
+ @* 
+    This is a special cooperation module (resembling
+    @code{Score_engraver}) that is used to created an embedded
+    `miniscore'.
+@end table 
+
+ is a list of items where each item is
+one of
+
+@itemize @bullet
+  @item  @code{\consists}  @code{;} @* 
+    Add  to the list of modules in this context. 
+    Section @xref{engravers} contains an overview of the engravers
+    available.  The order of engravers added with @code{\consists} is
+    significant.
+  
+  @item  @code{\consistsend}  @code{;} @* 
+    Analogous to @code{\consists}, but makes sure that
+     is always added to the end of the list of
+    engravers.
+
+    Some engraver types need to be at the end of the list; this
+    insures they are put there, and stay there, if a user adds or
+    removes engravers.  This command is usually not needed for
+    end-users.
+    
+  @item  @code{\accepts}  @code{;} @* 
+    Add  to the list of  context this context can
+    contain.  The first listed context the context to create by
+    default.
+  
+  @item  @code{\remove}  @code{;} @* 
+    Remove a previously added (with @code{\consists}) engraver.
+  
+  @item  @code{\name}  @code{;} @* 
+    This sets name of the context, e.g. @code{Staff}, @code{Voice}.  If
+    the name is not specified, the translator won't do anything.
+
+  @item   @code{=}  @code{;} @* 
+    A property assignment.  It is allowed to use reals for
+    .
+@end itemize
+
+In the @code{\paper} block, it is also possible to define translator
+identifiers.  Like other block identifiers, the identifier can only
+be used as the very first item of a translator.  In order to define
+such an identifier outside of @code{\score}, you must do
+
+@quotation
+
+@example 
+\paper @{
+  foo = \translator @{ ... @}
+@}
+\score @{
+  \notes @{
+    ...
+  @}
+  \paper @{
+    \translator @{ \foo ... @}
+  @}
+@} 
+@end example 
+
+@end quotation
+
+
+@cindex paper types, engravers, and pre-defined translators
+
+Some pre-defined identifiers can simplify modification of
+translators.  The pre-defined identifiers are:
+
+@table @samp
+  @item @code{StaffContext}
+@cindex StaffContext@@@code{StaffContext}
+ @* 
+    Default Staff context. 
+
+  @item @code{RhythmicStaffContext}
+@cindex RhythmicStaffContext@@@code{RhythmicStaffContext}
+ @* 
+    Default RhythmicStaff context. 
+
+  @item @code{VoiceContext}
+@cindex VoiceContext@@@code{VoiceContext}
+ @* 
+    Default Voice context.  
+
+  @item @code{ScoreContext}
+@cindex ScoreContext@@@code{ScoreContext}
+ @* 
+    Default Score context. 
+
+  @item @code{ScoreWithNumbers}
+@cindex ScoreWithNumbers@@@code{ScoreWithNumbers}
+ @* 
+    Score context with numbering at the Score level.
+
+  @item @code{BarNumberingStaffContext}
+@cindex BarNumberingStaffContext@@@code{BarNumberingStaffContext}
+ @* 
+    Staff context with numbering at the Staff level.
+
+  @item @code{HaraKiriStaffContext}
+@cindex HaraKiriStaffContext@@@code{HaraKiriStaffContext}
+ @* 
+    Staff context that does not print if it only contains rests. 
+    Useful for orchestral scores.@footnote{Harakiri, also called
+    Seppuku, is the ritual suicide of the Samourai.}
+
+  @item @code{OrchestralPartStaffContext}
+@cindex OrchestralPartStaffContext@@@code{OrchestralPartStaffContext}
+
+  @item @code{OrchestralScoreContext}
+@cindex OrchestralScoreContext@@@code{OrchestralScoreContext}
+
+@end table
+
+Using these pre-defined values, you can remove or add items to the
+translator:
+
+@quotation
+
+@example 
+\paper @{
+  \translator @{
+    \StaffContext
+    \remove Some_engraver;
+    \consists Different_engraver;
+  @}
+@} 
+@end example 
+
+@end quotation
+
+      
+
+@node engravers, Sound output, contextdefs, LilyPond 1-2-0 Reference Manual
+
+The engravers for paper output are:
+
+[incomplete, FIXME]
+
+@table @samp
+  @item @code{Bar_engraver}
+@cindex Bar_engraver@@@code{Bar_engraver}
+ @* 
+    Engraves bar lines.  Normally in @code{Staff} and
+    @code{RhythmicStaff}.
+
+  @item @code{Bar_number_engraver}
+@cindex Bar_number_engraver@@@code{Bar_number_engraver}
+ @* 
+    Engrave bar numbers.  These numbers appear at the start of each
+    line.  Not normally in any translator.  Can be added to
+    @code{Score} for score-wide numbering or to @code{Staff} for
+    numbering on each staff.
+
+  @item @code{Beam_engraver}
+@cindex Beam_engraver@@@code{Beam_engraver}
+ @* 
+    Handles beam requests by engraving beams.  Normally appears in
+    the @code{Voice} translator.  If omitted, then notes will be
+    printed with flags instead of beams.
+
+  @item @code{Beam_req_swallow_translator}
+    
+@cindex Beam_req_swallow_translator@@@code{Beam_req_swallow_translator}
+ @* 
+    Swallows beam requests.  In @code{LyricVoice}.  
+
+  @item @code{Chord_name_engraver}
+@cindex Chord_name_engraver@@@code{Chord_name_engraver}
+ @* 
+    Engraves chord names.  Normally in @code{ChordNameVoice} .
+
+  @item @code{Chord_tremolo_engraver}
+@cindex Chord_tremolo_engraver@@@code{Chord_tremolo_engraver}
+
+  @item @code{Clef_engraver}
+@cindex Clef_engraver@@@code{Clef_engraver}
+ @* 
+    Engraves the clef symbol.  Normally in @code{Staff}.
+
+  @item @code{Collision_engraver}
+@cindex Collision_engraver@@@code{Collision_engraver}
+
+  @item @code{Dot_column_engraver}
+@cindex Dot_column_engraver@@@code{Dot_column_engraver}
+ @* 
+    Engraves dots on dotted notes shifted to the right of the note. 
+    Normally in @code{Voice}.  If omitted, then dots appear on top of
+    the notes.
+
+  @item @code{Dynamic_engraver}
+@cindex Dynamic_engraver@@@code{Dynamic_engraver}
+ @* 
+    Engraves dynamics symbols.  Normally in @code{Voice}.
+
+  @item @code{Font_size_engraver}
+@cindex Font_size_engraver@@@code{Font_size_engraver}
+
+  @item @code{Key_engraver}
+@cindex Key_engraver@@@code{Key_engraver}
+ @* 
+    Engraves the key signature.  Normally in @code{Staff}.
+
+  @item @code{Local_key_engraver}
+@cindex Local_key_engraver@@@code{Local_key_engraver}
+
+  @item @code{Lyric_engraver}
+@cindex Lyric_engraver@@@code{Lyric_engraver}
+ @* 
+    Engraves lyrics.  Normally in @code{LyricVoice}.
+
+  @item @code{Multi_measure_rest_engraver}
+    
+@cindex Multi_measure_rest_engraver@@@code{Multi_measure_rest_engraver}
+ @* 
+    Engraves multi-measure rests that are produced with @code{R}. 
+    Normally in @code{Voice}.
+
+  @item @code{Piano_bar_engraver}
+@cindex Piano_bar_engraver@@@code{Piano_bar_engraver}
+
+  @item @code{Pitch_squash_engraver}
+@cindex Pitch_squash_engraver@@@code{Pitch_squash_engraver}
+ @* 
+    Treat all pitches as middle C.  Used in @code{RhythmicStaff}. 
+    Note that the notes move, but the locations of accidentals stay
+    the same.
+
+  @item @code{Priority_horizontal_align_engraver}
+    
+@cindex Priority_horizontal_align_engraver@@@code{Priority_horizontal_align_engraver}
+
+  @item @code{Repeat_engraver}
+@cindex Repeat_engraver@@@code{Repeat_engraver}
+ @* 
+    Handles repeats?  In @code{Staff} and @code{RhythmicStaff}.
+
+  @item @code{Rest_collision_engraver}
+@cindex Rest_collision_engraver@@@code{Rest_collision_engraver}
+ @* 
+    Handles collisions of rests.  In @code{Staff}.
+
+  @item @code{Rest_engraver}
+@cindex Rest_engraver@@@code{Rest_engraver}
+ @* 
+    Engraves rests.  Normally in @code{Voice}.
+
+  @item @code{Rhythmic_column_engraver}
+@cindex Rhythmic_column_engraver@@@code{Rhythmic_column_engraver}
+
+  @item @code{Score_priority_engraver}
+@cindex Score_priority_engraver@@@code{Score_priority_engraver}
+
+  @item @code{Script_engraver}
+@cindex Script_engraver@@@code{Script_engraver}
+ @* 
+    Handles note ornaments generated by @code{\script}.  Normally in
+    @code{Voice}.
+
+  @item @code{Separating_line_group_engraver}
+    
+@cindex Separating_line_group_engraver@@@code{Separating_line_group_engraver}
+
+  @item @code{Skip_req_swallow_translator}
+    
+@cindex Skip_req_swallow_translator@@@code{Skip_req_swallow_translator}
+
+  @item @code{Slur_engraver}
+@cindex Slur_engraver@@@code{Slur_engraver}
+ @* 
+    Engraves slurs.  Normally in @code{Voice}.
+
+  @item @code{Span_bar_engraver}
+@cindex Span_bar_engraver@@@code{Span_bar_engraver}
+ @* 
+    Engraves lines across multiple staffs.  Normally in
+    @code{Staffgroup} and @code{GrandStaff}.  Removing this from
+    @code{StaffGroup} gives the definition of @code{ChoirStaff}.
+
+  @item @code{Span_score_bar_engraver}
+@cindex Span_score_bar_engraver@@@code{Span_score_bar_engraver}
+
+  @item @code{Staff_group_bar_engraver}
+@cindex Staff_group_bar_engraver@@@code{Staff_group_bar_engraver}
+
+  @item @code{Staff_margin_engraver}
+@cindex Staff_margin_engraver@@@code{Staff_margin_engraver}
+ @* 
+    Prints the name of the instrument (specified by
+    @code{Staff.instrument} and @code{Staff.instr}) at the left of the
+    staff.
+
+  @item @code{Staff_sym_engraver}
+@cindex Staff_sym_engraver@@@code{Staff_sym_engraver}
+
+  @item @code{Stem_engraver}
+@cindex Stem_engraver@@@code{Stem_engraver}
+ @* 
+    Engraves stems.  Normally in @code{Voice}.
+
+  @item @code{Ties_engraver}
+@cindex Ties_engraver@@@code{Ties_engraver}
+ @* 
+    Engraves ties.  Normally in @code{Voice}.
+
+  @item @code{Time_signature_engraver}
+@cindex Time_signature_engraver@@@code{Time_signature_engraver}
+ @* 
+    Engraves the time signature.  Normally in @code{Staff} and
+    @code{RhythmicStaff}.
+
+  @item @code{Timing_engraver}
+@cindex Timing_engraver@@@code{Timing_engraver}
+ @* 
+    Responsible for synchronizing timing information from staffs. 
+    Normally in @code{Score}.  In order to create polyrhythmic music,
+    this engraver should be removed from @code{Score} and placed in
+    @code{Staff}.
+
+  @item @code{Tuplet_engraver}
+@cindex Tuplet_engraver@@@code{Tuplet_engraver}
+ @* 
+    Engraves tuplet brackets?  In @code{Staff}.
+
+  @item @code{Vertical_align_engraver}
+@cindex Vertical_align_engraver@@@code{Vertical_align_engraver}
+@end table
+
+
+
+@node Sound output, midilist, engravers, LilyPond 1-2-0 Reference Manual
+@section Sound output
+
+
+
+The MIDI block is analogous to the paper block, but it is simpler.
+The @code{\midi} block can contain:
+@cindex MIDI block
+
+@itemize @bullet
+  @item  a @code{\tempo} definition
+  @item  context definitions
+@end itemize
+
+Assignments in the @code{\midi} block are not allowed.
+
+
+
+@cindex context definition
+
+Context definitions follow precisely the same syntax as within the
+\paper block.  Translation modules for sound are called performers.
+The contexts for MIDI output are defined in @file{ly/performer.ly}.
+
+
+
+@cindex MIDI instrument names
+
+@node midilist, Pre-defined Identifiers, Sound output, LilyPond 1-2-0 Reference Manual
+
+The MIDI instrument name is set by the
+@code{Staff.midiInstrument}
+@cindex Staff.midiInstrument@@@code{Staff.midiInstrument}
+ property or, if that property is
+not set, the @code{Staff.instrument}
+@cindex Staff.instrument@@@code{Staff.instrument}
+ property.  The instrument
+name should be chosen from the following list.  If the selected
+string does not exactly match, then LilyPond uses the default piano.
+
+
+@quotation
+
+@example 
+"acoustic grand"            "contrabass"           "lead 7 (fifths)"
+"bright acoustic"           "tremolo strings"      "lead 8 (bass+lead)"
+"electric grand"            "pizzicato strings"    "pad 1 (new age)"
+"honky-tonk"                "orchestral strings"   "pad 2 (warm)"
+"electric piano 1"          "timpani"              "pad 3 (polysynth)"
+"electric piano 2"          "string ensemble 1"    "pad 4 (choir)"
+"harpsichord"               "string ensemble 2"    "pad 5 (bowed)"
+"clav"                      "synthstrings 1"       "pad 6 (metallic)"
+"celesta"                   "synthstrings 2"       "pad 7 (halo)"
+"glockenspiel"              "choir aahs"           "pad 8 (sweep)"
+"music box"                 "voice oohs"           "fx 1 (rain)"
+"vibraphone"                "synth voice"          "fx 2 (soundtrack)"
+"marimba"                   "orchestra hit"        "fx 3 (crystal)"
+"xylophone"                 "trumpet"              "fx 4 (atmosphere)"
+"tubular bells"             "trombone"             "fx 5 (brightness)"
+"dulcimer"                  "tuba"                 "fx 6 (goblins)"
+"drawbar organ"             "muted trumpet"        "fx 7 (echoes)"
+"percussive organ"          "french horn"          "fx 8 (sci-fi)"
+"rock organ"                "brass section"        "sitar"
+"church organ"              "synthbrass 1"         "banjo"
+"reed organ"                "synthbrass 2"         "shamisen"
+"accordion"                 "soprano sax"          "koto"
+"harmonica"                 "alto sax"             "kalimba"
+"concertina"                "tenor sax"            "bagpipe"
+"acoustic guitar (nylon)"   "baritone sax"         "fiddle"
+"acoustic guitar (steel)"   "oboe"                 "shanai"
+"electric guitar (jazz)"    "english horn"         "tinkle bell"
+"electric guitar (clean)"   "bassoon"              "agogo"
+"electric guitar (muted)"   "clarinet"             "steel drums"
+"overdriven guitar"         "piccolo"              "woodblock"
+"distorted guitar"          "flute"                "taiko drum"
+"guitar harmonics"          "recorder"             "melodic tom"
+"acoustic bass"             "pan flute"            "synth drum"
+"electric bass (finger)"    "blown bottle"         "reverse cymbal"
+"electric bass (pick)"      "skakuhachi"           "guitar fret noise"
+"fretless bass"             "whistle"              "breath noise"
+"slap bass 1"               "ocarina"              "seashore"
+"slap bass 2"               "lead 1 (square)"      "bird tweet"
+"synth bass 1"              "lead 2 (sawtooth)"    "telephone ring"
+"synth bass 2"              "lead 3 (calliope)"    "helicopter"
+"violin"                    "lead 4 (chiff)"       "applause"
+"viola"                     "lead 5 (charang)"     "gunshot"
+"cello"                     "lead 6 (voice)" 
+@end example 
+
+@end quotation
+
+
+@cindex MIDI types and performers
+
+The types available for  MIDI translators are:
+
+@table @samp
+  @item @code{Performer_group_performer}
+@cindex Performer_group_performer@@@code{Performer_group_performer}
+
+  @item @code{Score_performer}
+@cindex Score_performer@@@code{Score_performer}
+
+  @item @code{Staff_performer}
+@cindex Staff_performer@@@code{Staff_performer}
+
+@end table
+
+The performers for MIDI translators are:
+
+@table @samp
+  @item @code{Key_performer}
+@cindex Key_performer@@@code{Key_performer}
+
+  @item @code{Time_signature_performer}
+@cindex Time_signature_performer@@@code{Time_signature_performer}
+
+  @item @code{Note_performer}
+@cindex Note_performer@@@code{Note_performer}
+
+  @item @code{Lyric_performer}
+@cindex Lyric_performer@@@code{Lyric_performer}
+
+  @item @code{Swallow_performer}
+@cindex Swallow_performer@@@code{Swallow_performer}
+
+@end table
+
+
+
+@node Pre-defined Identifiers, ident, midilist, LilyPond 1-2-0 Reference Manual
+@section Pre-defined Identifiers
+
+@cindex pre-defined identifiers
+
+@node ident, Running LilyPond, Pre-defined Identifiers, LilyPond 1-2-0 Reference Manual
+
+Various identifiers are defined in the initialization files to
+provide shorthands for some settings.  Most of them are in
+@file{ly/declarations.ly}.
+
+@table @samp
+  @item @code{\break}
+@cindex break@@@code{\break}
+ @* 
+    Force a line break in music by using a large argument for the
+    keyword @code{\penalty}.
+
+  @item @code{\center}
+@cindex center@@@code{\center}
+ @* 
+    Used for setting direction  properties.  Equals 0.
+
+  @item @code{\down}
+@cindex down@@@code{\down}
+ @* 
+    Used for setting direction setting properties.  Is equal
+    to -1.
+
+  @item @code{\free}
+@cindex free@@@code{\free}
+ @* 
+    Used for setting direction setting properties.  Is equal
+    to 0.
+
+  @item @code{\left}
+@cindex left@@@code{\left}
+ @* 
+    Used for setting text alignment property.  Is equal to -1.
+
+  @item @code{\nobreak}
+@cindex nobreak@@@code{\nobreak}
+ @* 
+    Prevent a line break in music by using a large negative argument
+    for the keyword @code{\penalty}.
+
+  @item @code{\none}
+@cindex none@@@code{\none}
+ @* 
+    Used for setting @code{Score.beamslopedamping} and
+    @code{Score.beamquantisation} properties.  Is equal to 0.
+
+  @item @code{\normal}
+@cindex normal@@@code{\normal}
+ @* 
+    Used for setting @code{Score.beamslopedamping} and
+    @code{Score.beamquantisation} properties.  Is equal to 1.
+
+  @item @code{\normalkey}
+@cindex normalkey@@@code{\normalkey}
+ @* 
+    Select normal key signatures where each octave has the same key
+    signature.  This sets the @code{Staff.keyoctaviation} property.
+
+  @item @code{\right}
+@cindex right@@@code{\right}
+ @* 
+    Used for setting text alignment property.  Is set to 1.
+
+  @item @code{\shiftoff}
+@cindex shiftoff@@@code{\shiftoff}
+ @* 
+    Disable horizontal shifting of note heads that collide.  Sets the
+    @code{Voice.horizontalNoteShift} property.
+
+  @item @code{\shifton}
+@cindex shifton@@@code{\shifton}
+ @* 
+    Enable note heads that collide with other note heads to be
+    shifted horiztonally.  Sets the @code{Voice.horizontalNoteShift}
+    property.
+
+  @item @code{\slurboth}
+@cindex slurboth@@@code{\slurboth}
+ @* 
+    Allow slurs to be above or below notes.  This sets the
+    @code{Voice.slurVerticalDirection} property.
+
+  @item @code{\slurdown}
+@cindex slurdown@@@code{\slurdown}
+ @* 
+    Force slurs to be below notes.  This sets the
+    @code{Voice.slurVerticalDirection} property.
+
+  @item @code{\slurup}
+@cindex slurup@@@code{\slurup}
+ @* 
+    Force slurs to be above notes.  This sets the
+    @code{Voice.slurVerticalDirection} property.
+
+  @item @code{\specialkey}
+@cindex specialkey@@@code{\specialkey}
+ @* 
+    Allow key signatures do differ in different octaves.  This sets
+    the @code{Staff.keyoctaviation} property.
+
+  @item @code{\stemboth}
+@cindex stemboth@@@code{\stemboth}
+ @* 
+    Allow stems, beams, and slurs to point either upwards or
+    downwards, decided automatically by LilyPond.  This sets the
+    @code{Voice.verticalDirection} property.
+
+  @item @code{\stemdown}
+@cindex stemdown@@@code{\stemdown}
+ @* 
+    Force stems, beams, and slurs to point down.  This sets the
+    @code{Voice.verticalDirection} property.
+
+  @item @code{\stemup}
+@cindex stemup@@@code{\stemup}
+ @* 
+    Force stems, beams and slurs to point up.  This sets the
+    @code{Voice.verticalDirection} property.
+
+  @item @code{\traditional}
+@cindex traditional@@@code{\traditional}
+ @* 
+    Used for setting the @code{Score.beamquantisation} property.  Is
+    equal to 2.
+
+  @item @code{\up}
+@cindex up@@@code{\up}
+ @* 
+    Used for setting various direction properties.  Is equal
+    to 1.
+@end table
+
+
+
+@node Running LilyPond, Top, ident, LilyPond 1-2-0 Reference Manual
+@section Running LilyPond
+
+@cindex running LilyPond
+
+
+When invoked with a filename that has no extension, LilyPond will try
+adding `@file{.ly}' as an extension first, then `@file{.fly}' and
+finally `@file{.sly}' extension.  If the filename ends with
+`@file{.fly}', LilyPond processes the file as music using
+`@file{init.fly}'.  In this case, LilyPond does something like:
+
+@quotation
+
+@example 
+\score @{
+  \notes\relative c @{
+    \input "yourfile.fly"
+  @}
+  \paper@{@}
+  \midi@{@}
+@} 
+@end example 
+
+@end quotation
+
+The result of `@file{.sly}' is similar except that a single unjustified
+line is produced.
+
+If you invoke LilyPond with a file `@file{foo.}' that doesn't
+have the `@file{.ly}' extension, then LilyPond will look for a file
+called `@file{init.}' and process this file.  The file
+`@file{init.}' must contain the @code{\maininput} keyword or
+LilyPond will not read the user specified file.
+
+When LilyPond processes @file{filename.ly} it will produce
+@file{filename.tex} as output.  If @file{filename.ly} contains a second
+@code{\paper} keyword, then LilyPond will produce @file{filename-1.tex}
+as well.  Subsequent @code{\paper} keywords will produce sequentially
+numbered file names.  Several files can be specified; they will each
+be processed independently.@footnote{Not entirely true: The status of
+GUILE is kept.}
+
+
+
+@bye
diff --git a/Documentation/tex/reference-manual.yo b/Documentation/tex/reference-manual.yo
deleted file mode 100644 (file)
index 0d17437..0000000
+++ /dev/null
@@ -1,3355 +0,0 @@
-mailto(gnu-music-discuss@gnu.org)
-COMMENT(-*-text-*-)
-
-redef(var)(1)(\
-  whenlatex(latexcommand({\normalfont\scshape )ARG1+latexcommand(}))\
-  whenhtml(sc(ARG1))\
-)
-
-def(indexcode)(1)(cindex(ARG1@code(ARG1)))
-def(indexandcode)(1)(code(ARG1)indexcode(ARG1))
-def(keyindex)(1)(cindex(ARG1@code(\ARG1)))
-
-redef(code)(1)(tt(ARG1))
-redef(cindex)(1)(\
-  whenlatex(latexcommand(\index{)ARG1+latexcommand(}))\
-  whentexinfo(XXnl()texinfocommand(@cindex )ARG1XXnl())\
-)
-
-
-COMMENT(
-  BUGS:
-
-    restStyle=mensural doesn't seem to work (lots of characters not found
-    for rests.fly)
-
-  TODO:
-  
-    accordeon symbols
-    Music expression / music expression
-    property lists  should be alphabetic.
-    
-)
-
-
-COMMENT( 
-  This document contains Mudela fragments.  You need at least
-  Yodl-1.30.18 to convert this to tex or html.
-)
-
-htmlbodyopt(bgcolor)(white)
-htmlcommand(<font color=black>)
-
-latexlayoutcmds(
-  \setlength{\topmargin}{-0.25in}
-  \setlength{\textheight}{9in}
-  \setlength{\textwidth}{5.875in} 
-  \setlength{\oddsidemargin}{0.25in}   
-  \setlength{\evensidemargin}{0.25in}
-  \input mudela-book
-  \usepackage{makeidx}
-  \makeindex
-)
-
-whentexinfo(notableofcontents())
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-article(LilyPond 1.2.0 Reference Manual)
-       (Adrian Mariano, Han-Wen Nienhuys and Jan Nieuwenhuizen)
-       (nop()PIPETHROUGH(date "+%B %d, %Y")()()nop())
-
-
-latexcommand(\def\interexample{})
-latexcommand(\def\preexample{\par})
-latexcommand(\def\postexample{\par\medskip})
-latexcommand(\def\file#1{{code(#1)}})
-COMMENT(
-  latexcommand(\def\texttt#1{\tt #1})
-  latexcommand(\def\textbf#1{\bf #1})
-)
-
-COMMENT(urg, texinfo include breaks)
-whenhtml(includefile(html-disclaimer.yo-urg))
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Overview)
-
-This nop(document)footnote(This document has been revised for
-LilyPond 1.2.) describes the the GNU LilyPond input format, which is
-a language for defining music.  We call this language em(Music
-Definition Language) or em(Mudela), for short.footnote(If anybody
-comes up with a better name, we'd gladly take this.  Gourlay already
-uses a ``Musical Description Language,'' ISO standard 10743 defines a
-``Standard Music Description Language.''  We're not being original
-here.)
-
-em(Mudela) is a language that allows you to
-
-itemize(
-  it() create musical expressions by combining pitches, durations 
-  it() output those musical expressions to various formats
-  it() give those musical expressions and output definitions names, so
-       you can enter them in manageable chunks.
-)
-
-em(Mudela) aims to define a piece of music completely, both from
-typesetting and from a performance point of view.
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Top level)
-cindex(top level)
-
-This section describes what you may enter at top level.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Score definitions)
-cindex(score definition)
-
-The output is generated combining a music expression with an output
-definition.  A score block has the following syntax:
-
-quote(
-  code(\score {) var(musicexpr) var(outputdefs) code(})
-)
-
-var(outputdefs) are zero or more output definitions.  If no output
-definition is supplied, the default code(\paper) block will be added.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Information header)
-cindex(header)
-keyindex(header)
-
-The syntax is
-
-quote(
-  code(\header) code({) var(key1) = var(val1);
-                        var(key2) = var(val2); ellipsis() code(})
-)
-
-A header describes the file's contents.  It can also appear in a
-code(\score) block.  Tools like indexandcode(ly2dvi) can use this
-information for generating titles.  Key values that are used by
-code(ly2dvi) are: title, subtitle, composer, opus, poet, instrument,
-metre, arranger, piece and tagline.
-
-It is customary to put the code(\header) at the top of the file.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Setting notenames and chordnames)
-label(notenames)
-
-Note name tables can be specified using
-
-quote(
-  code(\notenames)keyindex(notenames)
-    code({) var(assignmentlist) code(})
-)
-
-var(assignmentlist) is a list of definitions of the form
-
-quote(
-  var(name) = var(pitch)
-)
-
-Chord modifiers can be set analogously, with
-code(\chordmodifiers)keyindex(chordmodifiers).
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Output definitions)
-
-A code(\paper) block at top level sets the default paper block.  A
-code(\midi) block at top level works similarly.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(GUILE and Scheme)
-
-LilyPond contains a Scheme interpreter (the GUILE library) for
-internal use.  The following commands access the interpreter
-directly.
-
-quote(
-  code(\scm)keyindex(scm) var(scheme) code(;)
-)
-
-Evaluates the specified Scheme code.  The result is discarded.
-
-quote(
-  code(\scmfile)keyindex(scmfile) var(filename) code(;)
-)
-
-Reads Scheme code from the specified file.  The result is discarded.
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Identifiers)
-
-Identifier assignments may appear at top level.  Semicolons are
-forbidden after top level assignments.
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Lexical conventions)
-cindex(lexical conventions)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Comments)
-cindex(comment)
-indexcode(%)
-whenlatex(cindex(%A@latexcommand(\texttt{\%\textbraceleft})))
-whenlatex(cindex(%B@latexcommand(\texttt{\%\textbraceright})))
-
-A one line comment is introduced by a `code(%)' character. 
-Block comments are started by `code(%{)' and ended by `code(%})'. 
-They cannot be nested.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Keywords)
-cindex(keyword)
-
-Keywords start with a backslash, followed by a number of lower case
-alphabetic characters.  These are all the keywords.
-
-latexcommand(\begin{raggedright})
-quote(
-  code(\accepts)
-  code(\addlyrics)
-  code(\alternative)
-  code(\bar)
-  code(\breathe)
-  code(\cadenza)
-  code(\chordmodifiers)
-  code(\chords)
-  code(\clef)
-  code(\cm)
-  code(\consists)
-  code(\consistsend)
-  code(\context)
-  code(\duration)
-  code(\font)
-  code(\grace)
-  code(\header)
-  code(\in)
-  code(\key)
-  code(\keysignature)
-  code(\lyrics)
-  code(\mark)
-  code(\midi)
-  code(\mm)
-  code(\musicalpitch)
-  code(\name)
-  code(\notenames)
-  code(\notes)
-  code(\paper)
-  code(\partial)
-  code(\penalty)
-  code(\property)
-  code(\pt)
-  code(\relative)
-  code(\remove)
-  code(\repeat)
-  code(\repetitions)
-  code(\scm)
-  code(\scmfile)
-  code(\score)
-  code(\script)
-  code(\sequential)
-  code(\shape)
-  code(\simultaneous)
-  code(\skip)
-  code(\spanrequest)
-  code(\tempo)
-  code(\textscript)
-  code(\time)
-  code(\times)
-  code(\translator)
-  code(\transpose)
-  code(\type)
-)
-latexcommand(\end{raggedright})
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Integers)
-cindex(integer)
-
-Formed from an optional minus sign followed by digits.  Arithmetic
-operations cannot be done with integers, and integers cannot be mixed
-with reals.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Reals)
-cindex(real) 
-
-Formed from an optional minus sign and a sequence of digits followed
-by a em(required) decimal point and an optional exponent such as
-code(-1.2e3).  Reals can be built up using the usual operations:
-`indexandcode(+)', `indexandcode(-)', `indexandcode(*)', and
-`indexandcode(/)', with parentheses for grouping.
-
-A real constant can be followed by one of the dimension
-keywords:cindex(dimensions) code(\mm)keyindex(mm),
-code(\pt)keyindex(pt), code(\in)keyindex(in), or
-code(\cm)keyindex(cm), for millimeters, points, inches and
-centimeters, respectively.  This converts the number to a real that
-is the internal representation of dimensions.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(String)
-cindex(string) 
-
-Begins and ends with the `code(")' character.  To include a `code(")'
-character in a string write `code(\")'.  Various other backslash
-sequences have special interpretations as in the C language.  A
-string that contains no spaces can be written without the quotes. 
-See bind(section)ref(modes) for details on unquoted strings; their
-interpretation varies depending on the situation.  Strings can be
-concatenated with the `code(+)' operator.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Tokenizer commands)
-
-The tokenizer accepts the following commands.  They can appear
-anywhere.
-
-quote(
-  code(\maininput)keyindex(maininput)
-)
-
-This command is used in init files to signal that the user file must
-be read. This command cannot be used in a user file.
-
-quote(
-  code(\include)keyindex(include) var(file)
-)
-
-Include var(file).  The argument var(file) may be a quoted string (an
-unquoted string will not work here!) or a string identifier.  The full
-filename including the file(.ly) extension must be given,
-
-quote(
-  code(\version)keyindex(version) var(string) code(;)
-)
-
-Specify the version of LilyPond that a file was written for.  The
-argument is a version string in quotes, for example code("1.2.0"). 
-This is used to detect invalid input, and to aid
-code(convert-mudela), a tool that automatically upgrades input files.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Pitch Names in Other Languages)
-cindex(other languages)
-label(notelang)
-
-Note name definitions have been provided in various languages. 
-Simply include the language specific init file.  For example:
-`code(\include "english.ly")'.  The available language files and the
-names they define are:
-
-quote(
-verb(                        Note Names               sharp       flat
-
-nederlands.ly  c   d   e   f   g   a   bes b   -is         -es
-english.ly     c   d   e   f   g   a   bf  b   -s/-sharp   -f/-flat
-deutsch.ly     c   d   e   f   g   a   b   h   -is         -es
-norsk.ly       c   d   e   f   g   a   b   h   -iss/-is    -ess/-es
-svenska.ly     c   d   e   f   g   a   b   h   -iss        -ess
-italiano.ly    do  re  mi  fa  sol la  sid si  -d          -b
-catalan.ly     do  re  mi  fa  sol la  sid si  -d/-s       -b)
-)
-
-Pitch names can be redefined using the
-code(\notenames)keyindex(notenames) command, see
-bind(subsection)ref(notenames).
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Lexical modes)
-cindex(lexical modes)
-cindex(modes)
-label(modes)
-
-To simplify entering notes, lyrics, and chords, em(Mudela) has three
-special input modes on top of the default mode.  In each mode, words
-are identified on the input.  If code("word") is encountered, it is
-treated as a string.  If code(\word) is encountered, it is treated as
-a keyword or as an identifier.  The behavior of the modes differs in
-two ways: Different modes treat unquoted words differently, and
-different modes have different rules for deciding what is a word.
-
-description(
-  dit(Normal mode.)cindex(mode!normal) 
-    At the start of parsing, em(Mudela) is in Normal mode.  In Normal
-    mode, a word is an alphabetic character followed by alphanumeric
-    characters.  If code(word) is encountered on the input it is
-    treated as a string.
-
-  dit(Note mode.)cindex(mode!note)
-
-    Note mode is introduced by the keyword
-    code(\notes)keyindex(notes).  In Note mode, words can only
-    contain alphabetic characters.  If code(word) is encountered,
-    LilyPond first checks for a notename of code(word).  If no
-    notename is found, then code(word) is treated as a string.
-
-    Since combinations of numbers and dots are used for indicating
-    durations, it is not possible to enter real numbers in this mode.
-
-  dit(Chord mode.)cindex(mode!chord)
-    Chord mode is introduced by the keyword
-    code(\chords)keyindex(chords).  It is similar to Note mode, but
-    words are also looked up in a chord modifier table (containing
-    code(maj), code(dim), etc).
-
-    Since combinations of numbers and dots are used for indicating
-    durations, you can not enter real numbers in this mode.  Dashes
-    and carets are used to indicate chord additions and subtractions,
-    so scripts can not be entered in Chord mode.
-
-  dit(Lyrics mode.) cindex(mode!lyric)
-
-    Lyrics mode is introduced by the keyword
-    code(\lyrics)keyindex(lyrics).  This mode has rules that make it
-    easy to include punctuation and diacritical marks in words.  A
-    word in Lyrics mode begins with: an alphabetic character,
-    `code(_)', `code(?)', `code(!)', `code(:)', `code(')', the
-    control characters code(^A) through code(^F), code(^Q) through
-    code(^W), code(^Y), code(^^), any 8-bit character with ASCII code
-    over 127, or a two-character combination of a backslash followed
-    by one of `code(`)', `code(')', `code(")', or
-    `code(^)'.footnote(The purpose of Lyrics mode is that you can
-    enter lyrics in TeX() format or a standard encoding without
-    needing quotes.  The precise definition of this mode indeed is
-    ludicrous.  This will remain so until the authors of LilyPond
-    acquire a deeper understanding of character encoding, or someone
-    else steps up to fix this.)
-
-    Subsequent characters of a word can be any character that is not
-    a digit and not white space.  One important consequence of this
-    is that a word can end with `code(})', which may be confusing if
-    you thought the closing brace was going to terminate Lyrics
-    mode.footnote(LilyPond will issue a warning, though.)  Any
-    `code(_)' characters which appear in an unquoted word are
-    converted to spaces.  This provides a mechanism for introducing
-    spaces into words without using quotes.  Quoted words can also be
-    used in Lyrics mode to specify words that cannot be written with
-    the above rules.  Here are some examples.  Not all of these words
-    are printable by TeX().
-
-COMMENT(
-DOEXPAND(muckslash)^etre          % a word
-)
-
-    quote(
-verb(Ah!             % a word
-2B_||_!2B       % not a word because it starts with a digit
-``Hello''       % not a word because it starts with `
-_ _ _ _         % 4 words, each one a space)
-    )
-
-    Since combinations of numbers and dots are used for indicating
-    durations, you can not enter real numbers in this mode.
-)
-
-It is possible to create words that break the rules by prefixing them
-with the dollar sign `indexandcode($)'.  Regardless of the context, a
-word beginning with `code($)' extends until the next white space
-character.  Such words can contain numbers (even in Note mode), or
-other forbidden characters.  The dollar sign can be used to create
-and access identifiers that could not otherwise be used.footnote(Use
-of `code($)' hampers readability and portability to future LilyPond
-versions, thus the use of the dollar sign is discouraged.)
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Types)
-cindex(types and identifiers)
-
-em(Mudela) has a limited set of types:
-
-itemize(
-  it() integers
-  it() reals
-  it() strings
-  it() music expressions
-  it() durations of notes and rests (specified with
-       code(\notenames)keyindex(notenames))
-  it() note name tables
-  it() context definitions, part of output definitions.  See
-       bind(section)ref(contextdefs) for more information
-  it() output definitions (like code(\paper)keyindex(paper) blocks
-       and code(\midi)keyindex(midi) blocks)
-  it() score definitions (code(\score)keyindex(score) blocks)
-)
-
-Type is a syntactical property: em(Mudela) has no real type system,
-so there is no support for generic expressions, functions, or user
-defined types.  For the same reason, it is not possible to mix reals
-and integers in arithmetic expressions, and ``type
-errors''cindex(type error) (e.g., using a string identifier to
-initialize a code(\paper)keyindex(paper) block) will yield a ``parse
-error''.
-
-Identifiers allow objects to be assigned to names.  To assign an
-identifier, you use `var(name)=var(value)' and to refer to an
-identifier, you preceed its name with a backslash:
-`code(\)var(name)'.  Identifier assignments must appear at top level
-in the em(Mudela) file.  Semicolons are forbidden after assignments
-appearing at top level but they are obligatory after assignments
-appearing in the code(\paper) block, see bind(Section)ref(paper).
-
-var(value) is any of the types listed above.
-
-An identifier can be created with any string for its name, but you
-will only be able to refer to identifiers whose names begin with a
-letter, being entirely alphanumeric.  It is impossible to refer to an
-identifier whose name is the same as the name of a keyword.
-
-The right hand side of an identifier assignment is parsed completely
-before the assignment is done, so it is allowed to redefine an
-identifier in terms of its old value, e.g.
-
-quote(
-  code(foo = \foo * 2.0)
-)
-
-When an identifier is referenced, the information it points to is
-copied.  Therefore it only makes sense to put identifiers for
-translators, output definitions, and code(\score)keyindex(score)
-blocks as the first item in a block.  For this reason, if you
-reference a code(\foo) variable in a code(\foo) block, it must be the
-first item in the list following code(\foo).footnote(code(\paper{\one
-\two}) does not make sense, because the information of code(\two)
-would overwrite the information of code(\one), thereby making the
-reference to the first identifier useless.)
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Music expressions)
-cindex(music expressions)
-
-Music in em(Mudela) is entered as a music expression.  Notes, rests,
-lyric syllables are music expressions (the atomic
-expressions)cindex(atomic music expressions), and you can combine
-music expressions to form new ones.  This example forms a compound
-expressions out of the quarter code(c) note and a code(d)
-note:
-
-quote(
-  verb(\sequential { c4 d4 })
-)
-
-The meaning of this compound expression is to play the `code(c)'
-first, and then the `code(d)' (as opposed to playing them
-simultaneously, for instance).
-
-Atomic music expression are discussed in
-bind(subsection)ref(atomicmusic).  Compound music expressions are
-discussed in bind(subsection)ref(compoundmusic).
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Atomic music expressions)
-label(atomicmusic)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Pitch and duration)
-cindex(pitch)
-cindex(duration) 
-
-The syntax for pitch specification is
-
-quote(
-  code(\musicalpitch)keyindex(musicalpitch)
-    code({) var(octave) var(note) var(shift) code(})
-)
-
-var(octave) is specified by an integer, zero for the octave
-containing middle C.  var(note) is a number from 0 to 7, with 0
-corresponding to C and 7 corresponding to B.  The shift is zero for a
-natural, negative to add flats, or positive to add sharps.
-
-In Note and Chord mode, pitches may be designated by names.  See
-bind(section)ref(notelang) for pitch names in different languages.
-
-The syntax for duration specification is
-
-quote(
-  code(\duration)keyindex(duration)
-    code({) var(length) var(dotcount) code(})
-)
-
-var(length) is the negative logarithm (base 2) of the duration:
-bind(1)is a half note, bind(2)is a quarter note, bind(3)is an eighth
-note, etc.  The number of dots after the note is given by
-var(dotcount).
-
-In Note, Chord, and Lyrics mode, durations may be designated by
-numbers and dots.  See bind(Section)ref(notelang) for details.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Note specification)
-label(notedesc)
-cindex(note specification)
-cindex(pitches)
-cindex(entering notes)
-
-A note specification has the form
-
-quote(
-  var(pitch)[var(octavespec)][code(!)][code(?)][var(duration)]
-)
-
-The pitch of the note is specified by the note's name.
-
-subsubsect(Pitches)
-
-The default names are the Dutch note names.  The notes are specified
-by the letters `code(c)' through `code(b)', where `code(c)' is an
-octave below middle C and the letters span the octave above that C. 
-In Dutchcindex(notenames!Dutch), a sharp is formed by adding
-`code(-is)' to the end of a pitch name.  A flat is formed by adding
-`code(-es)'. Double sharps and double flats are obtained by adding
-`code(-isis)' or `code(-eses)'.  `code(aes)' and `code(ees)' are
-contracted to `code(as)' and `code(es)' in Dutch, but both forms will
-be accepted.
-
-LilyPond has predefined sets of notenames for various languages.  See
-bind(section)ref(notelang) for details.
-
-subsubsect(Octaves)
-
-The optional octave specification takes the form of a series of
-single quote (`indexandcode(')') characters or a series of comma
-(`indexandcode(,)') characters.  Each code(') raises the pitch by one
-octave; each code(,) lowers the pitch by an octave.
-
-mudela(fragment,verbatim,center)(  c' d' e' f' g' a' b' c'')
-
-mudela(fragment,verbatim,center)(  cis' dis' eis' fis' gis' ais' bis')
-
-mudela(fragment,verbatim,center)(  ces' des' es' fes' ges' as' bes')
-
-mudela(fragment,verbatim,center)(  cisis' eisis' gisis' aisis' beses')
-
-mudela(fragment,verbatim,center)(  ceses' eses' geses' ases' beses')
-
-Whenever a C-sharp is desired,  you must specify a C-sharp.  LilyPond
-will determine what accidentals to typeset depending on the key and
-context.  A reminder accidental cindex(reminder accidental) can be
-forced by adding an exclamation mark `code(!)' after the pitch.  A
-cautionary accidental, cindex(cautionary accidental) i.e., an
-accidental within parentheses can be obtained by adding the question
-mark `indexandcode(?)' after the pitch.
-
-mudela(fragment,verbatim,center)(  cis' d' e' cis'  c'? d' e' c'!)
-
-subsubsect(Duration)
-cindex(duration)
-
-Durations are entered as their reciprocal values.  For notes longer
-than a whole note, use identifiers.
-
-quote(
-verb(c'\longa c'\breve  
-c'1 c'2 c'4 c'8 c'16 c'32 c'64 c'64)
-)
-
-quote(
-mudela()(\score {
-  \notes \relative c'' {
-    a\longa a\breve  
-    a1 a2 a4 a8 a16 a32 a64 a64 
-  }
-  \paper {
-    loose_column_distance = 2.5 * \interline;
-    linewidth = -1.0;
-    \translator {
-      \type "Score_engraver";
-      \name "Score";
-      \consists "Note_heads_engraver";
-      \consists "Stem_engraver";
-      \consists "Rhythmic_column_engraver";
-    }
-  }
-})
-)
-
-quote(
-verb(r\longa r\breve  
-r1 r2 r4 r8 r16 r32 r64 r64)
-)
-
-quote(
-mudela()(\score {
-  \notes \relative c'' {
-    r\longa r\breve  
-    r1 r2 r4 r8 r16 r32 r64 r64 
-  }
-  \paper {
-    loose_column_distance = 2.5 * \interline;
-    linewidth = -1.0;
-    \translator {
-      \type "Score_engraver";
-      \name "Score";
-      \consists "Rest_engraver";
-      \consists "Stem_engraver";
-      \consists "Rhythmic_column_engraver";
-    }
-  }
-})
-)
-
-If the duration is omitted then it is set equal to the previous
-duration.  If there is no previous duration, a quarter note is
-assumed.  The duration can be followed by a dot (`indexandcode(.)')
-to obtain dotted note lengths.
-
-mudela(fragment,verbatim,center)(  a'4. b'4.)
-
-You can alter the length of duration by writing
-`code(*)var(fraction)' after it.  This will not affect the
-appearance of note heads or rests.
-
-subsubsect(Rests)
-
-Rests are entered like notes, with note name `indexandcode(r)',
-or `indexandcode(R)'.  There is also a note name `indexandcode(s)',
-which produces a space of the specified duration. 
-`code(R)' is specifically meant for entering parts: the code(R) rest
-can expand to fill a score with rests, or it can be printed as a
-single multimeasure rest.
-
-subsubsect(Lyrics syllables)
-cindex(lyrics expressions)
-
-Syllables are entered like notes, with pitches replaced by text.  For
-example, `code(Twin-4 kle4 twin-4 kle4)' enters four syllables, each
-with quarter note duration.  Note that the hyphen has no special
-meaning for lyrics, and does not introduce special symbols.  See
-bind(section)ref(modes) for a description of what is interpreted as
-lyrics.
-
-Spaces can be introduced into a lyric either by using quotes
-(`code(")') or by using an underscore without quotes: `code(He_could4
-not4)'.  All unquoted underscores are converted to spaces.  Printing
-lyrics is discussed in bind(section)ref(lyricprint).
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Properties)
-cindex(properties)
-
-quote(
-  code(\property)keyindex(property)
-    var(contextname)code(.)var(propname) code(=) var(value)
-)
-
-Sets the var(propname) property of the context var(contextname) to
-the specified var(value).  All three arguments are strings. 
-Depending on the context, it may be necessary to quote the strings or
-to leave space on both sides of the dot.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Translator switches)
-cindex(translator switches)
-
-quote(
-  code(\translator)keyindex(translator)
-    var(contexttype) = var(name)
-)
-
-A music expression indicating that the context which is a direct
-child of the a context of type var(contexttype) should be shifted to
-a context of type var(contexttype) and the specified name.
-
-Usually this is used to switch staffs in Piano music, e.g.
-
-quote(
-  code(\translator Staff = top) var(Music)
-)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Commands)
-cindex(commands)
-
-Commands are music expressions that have no duration.   
-
-subsubsect(Key signatures)
-
-quote(
-  code(\key)keyindex(key) var(pitch) var(type) code(;)
-)
-
-Change the key signature.  var(type) should be
-code(\major)keyindex(major) or code(\minor)keyindex(minor) to get
-var(pitch)-major or var(pitch)-minor, respectively.  The second
-argument is optional; the default is major keys.  The var(\context)
-argument can also be given as an integer, which tells the number of
-semitones that should be added to the pitch given in the subsequent
-code(\key)keyindex(key) commands to get the corresponding major key,
-e.g., code(\minor)keyindex(minor) is defined bind(as)3.  The standard
-mode names code(\ionian)keyindex(ionian),
-code(\locrian)keyindex(locrian), code(\aeolian)keyindex(aeolian),
-code(\mixolydian)keyindex(mixolydian), code(\lydian)keyindex(lydian),
-code(\phrygian)keyindex(phrygian), and code(\dorian)keyindex(dorian)
-are also defined.
-
-quote(
-  code(\keysignature)keyindex(keysignature) var(pitchseq) code(;)
-)
-
-Specify an arbitrary key signature.  The pitches from var(pitch) will
-be printed in the key signature in the order that they appear on the
-list.
-
-subsubsect(Rehearsal marks)
-        
-quote(
-  code(\mark)keyindex(mark) var(unsigned) code(;) nl()
-  code(\mark) var(string) code(;)
-)
-
-Prints a mark over or under (depending on the
-indexandcode(markDirection) property) the staff.  You must add
-indexandcode(Mark_engraver) to either the Score or Staff context for
-this to work.
-
-subsubsect(Bar lines)
-label(barlines)
-
-quote(
-  code(\bar)keyindex(bar) var(bartype) code(;)
-)
-
-This is a request to print a special bar symbol. It replaces the 
-regular bar symbol with a special
-symbol.  The argument var(bartype) is a string which specifies the
-kind of bar to print.  Options are code(":|")cindex("|A@code(:|)),
-code("|:")cindex("|B@code(|:)), code(":|:")cindex("|C@code(:|:)),
-code("||")cindex("|D@code(||)), code("|.")cindex("|E@code(|.)),
-code(".|")cindex("|F@code(.|)), and code(".|.")cindex("|G@code(.|.)). 
-These produce, respectively, a right repeat, a left repeat, a double
-repeat, a double bar, a start bar, an end bar, and a thick double
-bar.  If var(bartype) is set to code("empty") then nothing is
-printed, but a line break is allowed at that spot.
-
-You are encouraged to use code(\repeat) for repetitions.
-See bind(section)ref(sec:repeats).
-
-subsubsect(Timing commands) 
-
-quote(
-  code(\cadenza)keyindex(cadenza) var(togglevalue) code(;)
-)
-
-Music expression that toggles the automatic generation of bar lines. 
-If var(togglevalue) bind(is)1, bar line generation is turned off.  If
-var(togglevalue) bind(is)0, a bar line is immediately printed and 
-automatic bar generation is turned on.
-
-quote(
-  code(\time)keyindex(time) var(numerator)code(/)var(denominator) code(;)
-)
-
-Change the time signature.  The default time signature bind(is)4/4. 
-The time signature is used to generate bar lines.
-
-quote(
-  code(\tempo)keyindex(tempo) var(duration) = var(perminute) code(;)
-)
-
-Used to specify the tempo.  For example, `code(\tempo 4 = 76;)'
-requests output with bind(76)quarter notes per minute.
-
-quote(
-  code(\partial)keyindex(partial) var(duration) code(;)
-)
-cindex(anacrusis)
-cindex(upstep)
-
-This creates an incomplete measure (anacrusis, upbeat) at the start of 
-the music, e.g., `code(\partial 8*2;)' creates a starting measure 
-lasting two eighth notes.
-
-quote(
-  code(|)indexcode(|)cindex(bar check)
-)
-cindex(shorten measures)
-cindex(upstep)
-
-`code(|)' is a barcheck.  Whenever a barcheck is encountered during
-interpretation, a warning message is issued if it doesn't fall at a
-measure boundary.  This can help you finding errors in the input. 
-The beginning of the measure will be relocated, so this can also
-be used to shorten measures.
-
-subsubsect(Other commands)
-
-quote(
-  code(\penalty)keyindex(penalty) var(int) code(;)
-)
-
-Discourage or encourage line breaks.  See identifiers
-code(\break)keyindex(break) and code(\nobreak)keyindex(nobreak) in
-bind(section)ref(ident).
-
-quote(
-  code(\clef)keyindex(clef) var(clefname) code(;)
-)
-
-Music expression that sets the current clef.  The argument is a
-string which specifies the name of the clef.  Several clef names are
-supported.  If `code(_8)' or `code(^8)' is added to the end of a clef
-name, then the clef lowered or raised an octave will be generated. 
-Here are the supported clef names with bind(middle)C shown in each
-clef:
-
-quote(
-mudela()(\score {
-  \notes {
-    \cadenza 1;
-    %\property Voice.textStyle = typewriter
-    \clef subbass;     c'4-"\kern -5mm subbass" 
-    \clef bass;        c'4^"\kern -2mm bass"
-    \clef baritone;    c'4_"\kern -5mm baritone"
-    \clef varbaritone; c'4^"\kern -6mm varbaritone"
-    \clef tenor;       c'4_"\kern -3mm tenor"
-    \clef "G_8";       c'4^"\kern -2mm G\\texttt{\\_}8" 
-  }  
-  \paper {
-    linewidth = 4.5 \in;
-  }
-})
-)
-
-quote(
-mudela()(\score {
-  \notes {
-    \cadenza 1;
-    \clef alto;         c'4_"\kern -2mm alto"
-    \clef mezzosoprano; c'4^"\kern -9mm mezzosoprano"
-    \clef soprano;      c'4_"\kern -6mm soprano"
-    \clef treble;       c'4^"\kern -4mm treble"
-    \clef french;       c'4_"\kern -4mm french"
-  }
-  \paper {
-    linewidth = 4.5 \in;
-  }
-})
-)
-
-The three clef symbols can also be obtained using the names `code(G)', 
-`code(C)' or `code(F)', optionally followed by an integer which 
-indicates at which note line the clef is located. An as example, the 
-code(mezzosoprano) clef can also be given as `code(C2)'.
-
-quote(
-  code(\skip)keyindex(skip) var(duration) code(;)
-)
-
-Skips the amount of time specified by var(duration).  If no other
-music is played, a gap will be left for the skipped time with no
-notes printed.  It works in Note Mode or Lyrics Mode.  In Note mode,
-this has the same effect as the space rest `code(s)'.
-
-subsubsect(Beams)
-cindex(beams)
-label(manualbeam)
-
-A beam is specified by surrounding the beamed notes with brackets
-`indexandcode([)' and `indexandcode(])'.  
-
-mudela(fragment,verbatim,center)(  [a'8 a'] [a'16 a' a' a'])
-
-Some more elaborate constructions:
-
-mudela(fragment,verbatim,center)(  [a'16 <a' c''> c'' <a' c''>]
-  \times 2/3 { [e'8 f' g'] })
-
-Beaming can be generated automatically; see bind(section)ref(autobeam).
-
-To place tremolo marks cindex(tremolo beams) between two notes, begin
-with `code([:)var(length)' and end with `code(])'.  Tremolo marks
-will appear instead of beams.  Putting more than two notes in such a
-construction will produce odd effects.  To create tremolo beams on a
-single note, simply attach `code(:)var(length)' to the note itself
-(see also bind(section)ref(tremolo)).
-  
-mudela(fragment,verbatim,center)(  [:16 e'1 g'] [:8 e'4 f'])
-  
-mudela(fragment,verbatim,center)(  c'4:32 [:16 c'8 d'8])
-
-subsubsect(Lyric helpers)
-cindex(--@code(-)code(-))
-indexcode(__)
-cindex(extender)
-cindex(hyphen)
-
-The syntax for an extender mark is `code(__)'.  This syntax can only
-be used within lyrics mode.  The syntax for a spanning hyphen (i.e.,
-a hyphen that will be printed between two lyric syllables) is
-`code(-)code(-)'.
-
-subsubsect(Ties)
-cindex(ties)
-
-A tie connects two adjacent note heads of the same pitch.  When used
-with chords, it connects all of the note heads whose pitches match.
-Ties are indicated using the tilde symbol `indexandcode(~)'.
-If you try to tie together chords which have no common pitches, a
-warning message will appear and no ties will be created.
-
-mudela(fragment,verbatim,center)(  e' ~ e' <c' e' g'> ~ <c' e' g'>)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Atomic music expressions: add-ons)
-
-[TODO: explain Requests]
-
-subsubsect(Articulations)
-cindex(articulations)
-cindex(scripts)
-cindex(ornaments)
-
-A variety of symbols can appear above and below notes to indicate
-different characteristics of the performance.  These symbols can be
-added to a note with `var(note)code(-\)var(name)'.  Numerous symbols
-are defined in file(script.ly) and file(script.scm).  Symbols can be
-forced to appear above or below the note by writing
-`var(note)code(^\)var(name)' and `var(note)code(_\)var(name)'
-respectively.  Here is a chart showing symbols above notes, with the
-name of the corresponding symbol appearing underneath.
-
-mudela()(
-  \score {
-    < \notes {
-        c''-\accent      c''-\marcato      c''-\staccatissimo c''-\fermata 
-        c''-\stopped     c''-\staccato     c''-\tenuto        c''-\upbow
-        c''-\downbow     c''^\lheel        c''-\rheel         c''^\ltoe
-        c''-\rtoe        c''-\turn         c''-\open          c''-\flageolet
-        c''-\reverseturn c''-\trill        c''-\prall         c''-\mordent
-        c''-\prallprall  c''-\prallmordent c''-\upprall       c''-\downprall
-        c''-\thumb       c''-\segno        c''-\coda
-      }
-      \context Lyrics \lyrics {  
-        accent__      marcato__      staccatissimo__ fermata
-        stopped__     staccato__     tenuto__        upbow
-        downbow__     lheel__        rheel__         ltoe
-        rtoe__        turn__         open__          flageolet
-        reverseturn__ trill__        prall__         mordent
-        prallprall__  prallmordent__ uprall__        downprall
-        thumb__       segno__        coda
-      }
-    >
-    \paper {
-      linewidth = 5.875\in;          
-      indent    = 0.0;
-    }
-  }
-)
-
-In addition, it is possible to place arbitrary strings of text or
-TeX() above or below notes by using a string instead of an
-identifier: `code(c^"text")'.  Fingerings cindex(fingering) can be
-placed by simply using digits.  All of these note ornaments appear in
-the printed output but have no effect on the MIDI rendering of the
-music.
-
-To save typing, fingering instructions (digits 0 bind(to)9 are
-supported) and single characters shorthands exist for a few
-common symbols
-
-mudela()(
-  \score {
-    \notes {
-      \property Voice.textStyle = typewriter
-      c''4-._"c-."      s4
-      c''4--_"c-{}-"    s4
-      c''4-+_"c-+"      s4
-      c''4-|_"c-|"      s4
-      c''4->_"c->"      s4
-      c''4-^_"c-\\^{ }" s4
-      c''4-1_"c-1"      s4
-      c''4-2_"c-2"      s4
-      c''4-3_"c-3"      s4
-      c''4-4_"c-4"      s4
-    }
-    \paper {
-      linewidth = 5.875 \in;
-      indent    = 0.0;
-    }
-  }
-)
-
-Dynamic marks are specified by using an identifier after a note:
-`code(c4-\ff)' (the dash is optional for dynamics: `code(c4 \ff))'.  
-The available dynamic marks are:
-code(\ppp)keyindex(ppp),
-code(\pp)keyindex(pp), code(\p)keyindex(p), code(\mp)keyindex(mp),
-code(\mf)keyindex(mf), code(\f)keyindex(f), code(\ff)keyindex(ff),
-code(\fff)keyindex(fff), code(\fff)keyindex(ffff),
-code(\fp)keyindex(fp), code(\sf)keyindex(sf),
-code(\sff)keyindex(sff), code(\sp)keyindex(sp),
-code(\spp)keyindex(spp), code(\sfz)keyindex(sfz), and
-code(\rfz)keyindex(rfz).
-
-subsubsect(General text scripts)
-
-quote(
-  code(\textscript)keyindex(textscript) var(text) var(style)
-)
-
-Defines a text to be printed over or under a note.  var(style) is a
-string that may be one of code(roman), code(italic), code(typewriter), 
-code(bold), code(Large), code(large), code(dynamic) or code(finger).
-
-You can attach a general textscript request using this syntax:
-
-quote(
-verb(c4-\textscript "6" "finger"
-c4-\textscript "foo" "normal")
-)
-
-This is equivalent to `code(c4-6 c4-"foo")'.  
-
-subsubsect(General scripts)
-cindex(scripts)
-
-quote(
-  code(\script)keyindex(script) var(alias)
-)
-
-Prints a symbol above or below a note.  The argument is a string
-which points into the script-alias table defined in file(script.scm).
-The scheme definitions specify whether the symbol follows notes into
-the staff, dependence of symbol placement on staff direction, and a
-priority for placing several symbols over one note.  Usually the
-code(\script)keyindex(script) keyword is not used directly.  Various
-helpful identifier definitions appear in file(script.ly).
-
-subsubsect(Slurs)
-cindex(slur)
-
-Slurs connects chords and try to avoid crossing stems.  A slur is
-started with `code(CHAR(40))' and stopped with `code(CHAR(41))'.  The
-starting `code(CHAR(40))' appears to the right of the first note in
-the slur.  The terminal `code(CHAR(41))' appears to the left of the
-first note in the slur.  This makes it possible to put a note in
-slurs from both sides:
-
-mudela(fragment,verbatim,center)(  f'()g'()a' [a'8 b'(] a'4 g'2 )f'4)
-
-subsubsect(Crescendo)
-cindex(crescendo)
-
-A crescendo mark is started with code(\cr)keyindex(cr) and terminated
-with code(\rc)keyindex(rc).  A decrescendo mark is started with
-code(\decr)keyindex(decr) and terminated with
-code(\rced)keyindex(rced).  There are also shorthands for these
-marks.  A crescendo can be started with code(\<)keyindex(<) and a
-decrescendo can be started with code(\>)keyindex(>).  Either one can
-be terminated with code(\!)keyindex("!).  Note that code(\!)
-must go before the last note of the dynamic mark whereas code(\rc)
-and code(\rced) go after the last note.  Because these marks are
-bound to notes, if you want to get several marks during one note, you
-must use spacer notes.
-
-mudela(fragment,verbatim,center)(  c'' \< \! c''   d'' \decr e'' \rced 
-  < f''1 { s4 \< \! s2 \> \! s4 } >)
-
-subsubsect(General spanners)
-
-quote(
-  code(\spanrequest)keyindex(spanrequest) var(startstop) var(type)
-)
-
-Define a spanning request. The var(startstop) parameter is bind(either)-1
-(code(\start)keyindex(start)) bind(or)1 (code(\stop)keyindex(stop)) and
-var(type) is a string that describes what should be started.
-Supported types are code(crescendo), code(decrescendo),
-code(beam), code(slur).  This is an internal command.  Users should
-use the shorthands which are defined in the initialization file
-file(spanners.ly).
-
-You can attach a (general) span request to a note using
-
-mudela(fragment,verbatim,center)(  c'4-\spanrequest \start "slur"
-  c'4-\spanrequest \stop "slur")
-
-The slur syntax with parentheses is a shorthand for this.
-
-COMMENT(came till here with indexifying)
-
-subsubsect(Tremolo marks)
-cindex(tremolo marks)
-label(tremolo)
-
-Tremolo marks can be printed on a single note by adding
-`code(:)[var(length)]' after the note.  The length must be at
-bind(least)8.  A var(length) value bind(of)8 gives one line across
-the note stem.  If the length is omitted, then the last value is
-used, or the value of the indexandcode(abbrev) property if there was
-no last value.
-
-mudela(verbatim,fragment,center)(  c'2:8 c':32)
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Compound music expressions)
-cindex(compound music expressions)
-label(compoundmusic)
-
-Music expressions are compound data structures.  You can nest music
-expressions any way you like.  This simple example shows how three
-chords can be expressed in two different ways:
-
-mudela(fragment,verbatim,center)(  \notes \context Staff {
-    \cadenza 1;
-    <a c'> <b  d' > <c' e' >
-    <{a b  c'}{c' d' e'}>
-  })
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Context selection)
-cindex(context selection)
-
-quote(
-  code(\context)keyindex(context)
-    var(contexttype) [code(=) var(contextname)] var(musicexpr)
-)
-
-Interpret var(musicexpr) within a context of type var(contexttype). 
-If the context does not exist, it will be created.  The new context
-can optionally be given a name.  See
-bind(section)ref(contextselection) bind(and)ref(contextdefs) for more
-information on interpretation contexts.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Music entry modes)
-cindex(input modes)
-cindex(mode switch)
-
-Mode switching keywords form compound music expressions: code(\notes)
-keyindex(notes) var(musicexpr), code(\chords) keyindex(chords)
-var(musicexpr), and code(\lyrics) keyindex(lyrics) var(musicexpr). 
-These expressions do not add anything to the meaning of their
-arguments.  They are just a way to indicate that the arguments should
-be parsed in indicated mode.  See bind(section)ref(modes) for more
-information on modes.
-
-More information on context selection can be found in
-bind(section)ref(contextselection).
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Sequential music)
-cindex(sequential music)
-COMMENT(It's not possible to index `{' and `}' directly, thus we
-        must construct it.)
-whenlatex(cindex(?A@latexcommand(\texttt{\textbraceleft})))
-whenlatex(cindex(?B@latexcommand(\texttt{\textbraceright})))
-
-quote(
-  code(\sequential)keyindex(sequential)
-    code({) var(musicexprlist) code(})
-)
-
-This means that list should be played or written in sequence, i.e.,
-the second after the first, the third after the second.  The duration
-of sequential music is the the sum of the durations of the elements. 
-There is a shorthand, which leaves out the keyword:
-
-quote(
-  code({) var(musicexprlist) code(})
-)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Simultaneous music)
-cindex(simultaneous music)
-indexcode(<)
-indexcode(>)
-
-quote(
-  code(\simultaneous)keyindex(simultaneous)
-    code({) var(musicexprlist) code(})
-)
-
-It constructs a music expression where all of its arguments start at
-the same moment.  The duration is the maximum of the durations of the
-elements.  The following shorthand is a common idiom:
-
-quote(
-  code(<) var(musicexprlist) code(>)
-)
-
-If you try to use a chord as the first thing in your score, you might
-get multiple staffs instead of a chord.
-
-mudela(verbatim,center)(  \score {
-    \notes <c''4 e''>
-    \paper {
-      linewidth = -1.;
-    }
-  })
-
-This happens because the chord is interpreted by a score context.
-Each time a note is encountered a default Voice context (along with a
-Staff context) is created.  The solution is to explicitly instantiate
-a Voice context:
-
-mudela(verbatim,center)(  \score {
-    \notes\context Voice <c''4 e''>
-    \paper {
-      linewidth = -1.;
-    }
-  })
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Relative Pitch Specification)
-cindex(relative pitch specification)
-label(relative)
-
-It is easy to get confused by octave changing marks and accidentally
-putting a pitch in the wrong octave.  A much better way of entering a
-note's octave is `the relative octave' mode.
-
-quote(
-  code(\relative)keyindex(relative) var(startpitch) var(musicexpr)
-)
-
-The octave of notes that appear in var(musicexpr) are calculated as
-follows: If no octave changing marks are used, the basic interval
-between this and the last note is always taken to be a fourth or
-less.footnote(The interval is determined without regarding
-accidentals.  A code(fisis) following a code(ceses) will be put above
-the code(ceses).)  The octave changing marks `code(')' and `code(,)'
-can then be added to raise or lower the pitch by an extra octave. 
-Upon entering relative mode, an absolute starting pitch must be
-specified that will act as the predecessor of the first note of
-var(musicexpr).
-
-Entering scales is straightforward in relative mode.
-
-mudela(fragment,verbatim,center)(  \relative c' {
-    c d e f g a b c c,
-  })
-
-And octave changing marks are used for intervals greater than a fourth.
-
-mudela(fragment,verbatim,center)(  \relative c'' {
-    c g c f, c' a, e'' })
-
-If the preceding item is a chord, the first note of the chord is used
-to determine the first note of the next chord.  But other notes
-within the second chord are determined by looking at the immediately
-preceding note.
-
-mudela(fragment,verbatim,center)(  \relative c' {
-    c <c e g> 
-    <c' e g>
-    <c, e' g>
-  }) 
-
-The pitch after the code(\relative) contains a notename.  To parse
-the pitch as a notename, you have to be in note mode, so there must
-be a surrounding code(\notes)keyindex(notes) keyword (which is not
-shown here).
-
-The relative conversion will not affect code(\transpose) or
-code(\relative) sections in its argument.  If you want to use
-relative within transposed music, you must place an additional
-code(\relative) inside the code(\transpose).
-
-It is strongly recommended to use relative pitch mode: less work,
-less error-prone, and more readable.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Chord names)
-
-Chord names are a way to generate simultaneous music expressions that
-correspond with traditional chord names.  It can only be used in
-Chord mode (see bind(section)ref(modes)).
-
-quote(
-  var(tonic)[var(duration)][code(-)var(modifiers)]\
-                           [code(^)var(subtractions)]\
-                           [code(/)var(inversion)].
-)
-
-var(tonic) should be the tonic note of the chord, and var(duration)
-is the chord duration in the usual notation.  There are two kinds of
-modifiers.  One type is em(chord additions), which are obtained by
-listing intervals separated by dots.  An interval is written by its
-number with an optional `code(+)' or `code(-)' to indicate raising or
-lowering by half a step.  Chord additions has two effects: It adds
-the specified interval and all lower odd numbered intervals to the
-chord, and it may lower or raise the specified interval.  Intervals
-must be separated by a dot (`code(.)').
-
-quote(
-mudela(fragment,verbatim)(\transpose c'' {
-  \chords {
-    c1  c-3-       c-7     c-8
-    c-9 c-9-.5+.7+ c-3-.5- c-4.6.8
-  }
-}
-)
-)
-
-The second type of modifier that may appear after the `code(-)' is a
-named modifier.  Named modifiers are listed in the file
-file(chord-modifiers.ly).  The available modifiers are `code(m)' and
-`code(min)' which lower the 3rd half a step, `indexandcode(aug)' which
-raises the 5th, `indexandcode(dim)' which lowers the 5th,
-`indexandcode(maj)' which adds a raised 7th, and `indexandcode(sus)'
-which replaces the 5th with a 4th.
-
-quote(
-mudela(fragment,verbatim)(\transpose c'' {
-  \chords {
-    c1-m c-min7 c-maj c-aug c-dim c-sus
-  }
-}
-)
-) 
-
-Chord subtractions are used to eliminate notes from a chord.  The
-notes to be subtracted are listed after a `code(^)' character,
-separated by dots.
-
-mudela(fragment,verbatim,center)(  \transpose c'' {
-    \chords {
-      c1^3 c-7^5.3 c-8^7
-    }
-  }) 
-
-Chord inversions can be specified by appending `indexandcode(/)' and
-the name of a single note to a chord.  This has the effect of
-lowering the specified note by an octave so it becomes the lowest
-note in the chord.  If the specified note is not in the chord, a
-warning will be printed.
-
-mudela(fragment,verbatim,center)(  \transpose c''' {
-    \chords {
-      c1 c/e c/g c-7/e
-    }
-  }
-) 
-
-Throughout these examples, chords have been shifted around the staff
-using code(\transpose).
-
-You should not combine code(\relative) with named chords. 
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Tuplets)
-cindex(tuplets)
-
-Tuplets are made out of a music expression by multiplying their
-duration with a fraction.
-
-quote(
-  code(\times)keyindex(times) var(fraction) var(musicexpr)
-)
-
-The duration of var(musicexpr) will be multiplied by the fraction. 
-In print, the fraction's denominator will be printed over the notes,
-optionally with a bracket.  The most common tuplet is the triplet in
-which bind(3)notes have the length bind(of)2, so the notes are 2/3 of
-their written length:
-
-mudela(fragment,verbatim,center)(  g'4 \times 2/3 {c'4 c' c'} d'4 d'4)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Grace notes)
-cindex(grace notes)
-
-quote(
-  code(\grace)keyindex(grace) var(musicexpr)
-)
-
-A grace note expression has bind(duration)0; the next real note is
-assumed to be the main note.
-
-You cannot have the grace note after the main note, in terms of
-duration, and main notes, but you can typeset the grace notes to the
-right of the main note using the property
-indexandcode(graceAlignPosition).
-
-When grace music is interpreted, a score-within-a-score is set up:
-var(musicexpr) has its own time bookkeeping, and you could (for
-example) have a separate time signature within grace notes.  While in
-this score-within-a-score, you can create notes, beams, slurs, etc.
-Unbeamed eighth notes and shorter by default have a slash through the
-stem.  This behavior can be controlled with the
-indexandcode(stemStyle) property.
-
-quote(
-mudela(fragment,verbatim)(\relative c'' {
-  \grace c8 c4 \grace { [c16 c16] } c4
-  \grace { \property Grace.stemStyle = "" c16 } c4
-}
-)
-)
-
-At present, nesting code(\grace)keyindex(grace) notes, e.g.
-
-quote(
-  code(\grace { \grace c32 c16 } c4)
-)
-
-may result in run-time errors of LilyPond.  Since the meaning of such
-a construct is unclear, we don't consider this a loss.  Similarly,
-juxtaposing two code(\grace) sections is syntactically valid, but
-makes no sense and may cause runtime errors.
-
-Ending a staff or score with grace notes may also generate a run-time
-error, since there will be no main note to attach the grace notes to.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Repeats)
-cindex(repeats)
-label(sec:repeats)
-
-In order to specify repeats, use the code(\repeat)keyindex(repeat)
-keyword.  Since repeats look and sound differently when played or
-printed, there are a few different variants of repeats.
-
-description(
-  dit(unfolded) nl()
-    Repeated music is fully written (played) out.  Useful for MIDI
-    output.
-
-  dit(volta) nl()
-    This is the normal notation: Repeats are not written out, but
-    alternative endings (voltas) are printed, left to right.
-
-  dit(folded) nl()
-    Alternative endings are written stacked, which is useful for
-    lyrics.
-)  
-
-The syntax for repeats is
-
-quote(
-  code(\repeat) var(variant) var(repeatcount) var(repeatbody)
-)
-
-If you have alternative endings, you may add
-
-quote(
-  code(\alternative)keyindex(alternative)
-    code({) var(alternative1)
-            var(alternative2)
-            var(alternative3) ellipsis() code(})
-)
-
-where each var(alternative) is a Music expression.
-
-Normal notation repeats are used like this:
-
-quote(
-mudela(fragment,verbatim)(  c'1
-  \repeat volta 2 { c'4 d' e' f' }
-  \repeat volta 2 { f' e' d' c' }
-)
-)
-
-With alternative endings:
-
-quote(
-mudela(fragment,verbatim)(  c'1
-  \repeat volta 2 {c'4 d' e' f'} 
-  \alternative { {d'2 d'} {f' f} }
-)
-)
-
-Folded repeats look like this:footnote(Folded repeats offer little
-more over simultaneous music.  However, it is to be expected that
-more functionality -- especially for the MIDI backend -- will be
-implemented.)
-
-quote(
-mudela(fragment,verbatim)(  c'1
-  \repeat fold 2 {c'4 d' e' f'} 
-  \alternative { {d'2 d'} {f' f} }
-)
-)
-
-quote(
-mudela(fragment,verbatim)(\context Staff {
-  \relative c' {
-    \partial 4;
-    \repeat volta 2 { e | c2 d2 | e2 f2 | }
-    \alternative { { g4 g g } { a | a a a a | b1 } }
-  }
-}
-)
-)
-
-If you don't give enough alternatives for all of the repeats, then
-the first alternative is assumed to be repeated often enough to equal
-the specified number of repeats.
-
-quote(
-mudela(fragment,verbatim)(\context Staff {
-  \relative c' {
-    \repeat volta 3 { \partial 4; e | c2 d2 | e2 f2 | }
-    \alternative { { g4 g g }
-                   {\partial 1; e4 e e } 
-                   {\partial 1; a a a a | b1 } }
-  }
-}
-)
-)
-
-It is possible to nest code(\repeat).  This is not entirely
-supported: the notes will come be in the right places, but the repeat
-bars will not.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Transposition of Pitches)
-cindex(transposition of pitches)
-label(transpose)
-
-A music expression can be transposed with
-code(\transpose)keyindex(transpose).  The syntax is
-
-quote(
-  code(\transpose) var(pitch) var(musicexpr)
-)
-
-This means that middle C in var(musicexpr) is transposed to
-var(pitch).
-
-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.
-
-quote(
-mudela(fragment,verbatim)(\context Staff {
-  \clef "F";
-  { \key e; c d e f }
-  \clef "G";
-  \transpose des'' { \key e; c d e f }
-  \transpose cis'' { \key e; c d e f }
-}
-)
-)
-
-If you want to use both code(\transpose) and code(\relative), then
-you must use code(\transpose) first.  code(\relative) will have no
-effect music that appears inside a code(\transpose).
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Automatic lyric durations)
-cindex(automatic lyric durations)
-
-If you have lyrics that are set to a melody, you can import the
-rhythm of that melody into the lyrics using code(\addlyrics).
-keyindex(addlyrics) The syntax for this is
-
-quote(
-  code(\addlyrics) var(musicexpr1 musicexpr2)
-)
-
-This means that both var(musicexpr1) and var(musicexpr2) are
-interpreted, but that every non-command atomic music expression
-(``every syllable'') in var(musicexpr2) is interpreted using timing
-of var(musicexpr1).
-
-If the property indexandcode(automaticMelismata) is set in the
-context of var(musicexpr1), no lyrics will be put on slurred or tied
-notes.
-
-quote(
-mudela(verbatim,fragment)(\addlyrics
-\transpose c'' {
-  \property Voice.automaticMelismata = "1"
-  c8 () cis d8. e16 f2
-}
-\context Lyrics \lyrics {
- do4 re mi fa }
-)
-)
-
-You should use a single rhythm melody, and single rhythm lyrics (a
-constant duration is the obvious choice).  If you do not, you will get
-undesired effects when using multiple stanzas:
-
-quote(
-mudela(verbatim,fragment)(\addlyrics
-\transpose c'' {
-  c8 () cis d8. e16 f2
-}
-\context Lyrics \lyrics
-< { do4 re mi fa }
-  { do8 re mi fa } >
-)
-)
-
-It is valid (but probably not very useful) to use notes instead of
-lyrics for var(musicexpr2).
-
-COMMENT(
-  mudela(verbatim,fragment)(
-    \context Voice \addlyrics
-      { s4 s8 s16 s32 }
-      { [c16 c c c] }
-  )
-)
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Ambiguities)
-cindex(ambiguities)
-
-The grammar contains a number of ambiguities.footnote(The authors
-hope to resolve them at a later time.)
-
-itemize(
-  it() The assignment
-
-       quote(
-         verb(foo = bar)
-       )
-
-       can be interpreted as making a string identifier code(\foo)
-       containing code("bar"), or a music identifier code(\foo)
-       containing the syllable `bar'.
-
-  it() The assignment
-
-       quote(
-         verb(foo = -6)
-       )
-
-       can be interpreted as making an integer identifier
-       bind(containing)-6, or a Request identifier containing the
-       bind(fingering)`6' (with neutral direction).
-
-  it() If you do a nested repeat like
-
-       quote(
-verb(\repeat ...
-\repeat ...
-\alternative)
-       )
-
-       then it is ambiguous to which code(\repeat) the
-       code(\alternative) belongs.  This is the classic if-then-else
-       dilemma.  It may be solved by using braces.
-
-  it() (an as yet unidentified ambiguity :-)
-)
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Notation conversion specifics)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Automatic Beam Generation)
-cindex(automatic beam generation)
-label(autobeam)
-
-By default, LilyPond will generate beams automatically.  This feature
-can be disabled by setting the indexandcode(Voice.noAutoBeaming)
-property bind(to)1.  It can be overridden for specific cases by
-specifying explicit beams as described in
-bind(section)ref(manualbeam).
-
-A large number of Voice properties are used to decide how to generate
-beams.  Their default values appear in file(auto-beam-settings.ly).
-In general, beams can begin anywhere, but their ending location is
-significant.  Beams can end on a beat, or at durations specified by
-the indexandcode(Voice.beamAutoEnd) property.  To end beams every
-quarter note, for example, you could set
-indexandcode(Voice.beamAutoEnd) equal to `code("1/4")'.  To end beams
-at every three eighth notes you would set it to `code("3/8")'.  The
-same syntax can be used to specify beam starting points using
-indexandcode(Voice.beamAutoBegin).
-
-To allow different settings for different time signatures, these
-property names can start with `code(time)var(N)code(_)var(M)' to
-restrict the definition to `var(N)code(/)var(M)' time.  For example,
-to specify beams ending only for bind(6/8)time you would use the
-property code(Voice.time6_8beamAutoEnd).  To allow different endings
-for notes of different durations, the duration can be tacked onto the
-end of the property.  To specify beam endings for beams that contain
-bind(32nd)notes, you would use code(Voice.beamAutoEnd_32).
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Printing chord names)
-cindex(chord names)
-cindex(chords)
-cindex(printing!chord names)
-
-For displaying printed chord names, use the indexandcode(ChordNames)
-and indexandcode(ChordNameVoice) contexts.  The chords may be entered
-either using the notation described above, or directly using
-simultaneous music.
-
-quote(
-mudela(fragment,verbatim)(<
-  \context ChordNames {
-    \chords{a b c} \notes{<d f g>  <e g b>}
-  }
-  \context Staff \notes {
-    a b c' d' e'
-  }
->
-)
-)
-
-LilyPond examines chords specified as lists of notes to determine a
-name to give the chord.  By default, LilyPond will not try to
-identify chord inversions:
-
-mudela(fragment,verbatim,center)(  <
-    \context ChordNameVoice \notes {
-      <e'1 g' c''>
-    }
-    \context Thread \notes {
-      <e'1 g' c''>
-    }
-  >)
-
-If you want inversions to be recognized, you must set the property
-indexandcode(ChordNames.chordInversion):
-
-mudela(fragment,verbatim,center)(  <
-    \property Score.chordInversion = 1
-    \context ChordNameVoice \notes {
-      <e'1 g' c''>
-    }
-    \context Thread \notes {
-      <e'1 g' c''>
-    }
-  >)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Printing lyrics)
-cindex(lyrics)
-cindex(printing!lyrics)
-label(lyricprint)
-
-Lyric syllables must be interpreted within a code(Lyrics) context
-cindex(context!Lyrics) for printing them.
-
-Here is a full example: 
-
-quote(
-mudela(verbatim)(\score {
-  <
-    \notes \transpose c'' {
-      c d e c | c d e c |
-      e f g2 | e4 f g2 \bar "|.";
-    }
-    \context Lyrics \lyrics { 
-      Va-4 der Ja- cob Va- der Ja- cob
-      Slaapt gij nog?2 Slaapt4 gij nog?2
-    }
-  >
-}
-)
-)
-
-You may want a continuous line after the syllables to show melismata. 
-To achieve this effect, add a `code(__)' lyric as a separate word
-after the lyric to be extended.  This will create an extender, a line
-that extends over the entire duration of the lyric.  This line will
-run all the way to the start of the next lyric, so you may want to
-shorten it by using a blank lyric (using `code(_)').
-
-quote(
-mudela(verbatim)(\score {
-  <
-    \notes \relative c'' {
-      a4 () b () c () d | c () d () b () a | c () d () b () a
-    }
-    \context Lyrics \lyrics {
-      foo1 __ | bar2. __ _4 | baz1 __
-    }
-  >
-}
-)
-)
-     
-If you want to have hyphens centered between syllables (rather than
-attached to the end of the first syllable) you can use the special
-`code(-)code(-)' lyric as a separate word between syllables.  This
-will result in a hyphen which length varies depending on the space
-between syllables, and which will be centered between the syllables. 
-For example:
-
-quote(
-mudela(verbatim)(\score {
-  <
-    \notes \transpose c'' {
-      c d e c | c d e c |
-      e f g2 | e4 f g2 \bar "|.";
-    }
-    \context Lyrics \lyrics {
-      Va4 -- der Ja -- cob | Va -- der Ja -- cob |
-      Slaapt gij nog?2 | Slaapt4 gij nog?2
-    }
-  >
-}
-)
-)
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Notation Contexts)
-cindex(notation contexts)
-
-Notation contexts are objects that only exist during a run of
-LilyPond.  During the interpretation phase of LilyPond, the Music
-expression contained in a code(\score) block is interpreted in time
-order.  This is the order in which humans read, play, and write
-music.
-
-A context is an object that holds the reading state of the
-expression; it contains information like
-
-itemize(
-  it() What notes are playing at this point?
-  it() What symbols will be printed at this point?
-  it() In what style will they printed?
-  it() What is the current key signature, time signature, point within
-       the measure, etc.?
-)
-
-Contexts are grouped hierarchically: A code(Voice) context is
-contained in a code(Staff) context (because a staff can contain
-multiple voices at any point), a code(Staff) context is contained in
-a code(Score), code(StaffGroup), or code(ChoirStaff) context (because
-these can all contain multiple staffs).
-
-Contexts associated with sheet music output are called em(notation
-contexts), those for sound output are called playing contexts.
-
-Contexts are created either manually or automatically.  Initially,
-the top level music expression is interpreted by the top level
-context (the code(Score) context).  When a atomic music expression
-(i.e. a note, a rest, code(\bar), or code(\time) commands), a nested
-set of contexts is created that can process these atomic expressions,
-as in this example:
-
-quote(
-  verb(\score { \notes < c4 > })
-)
-
-The sequential music, `code({ c4 })' is interpreted by code(Score)
-context. When the note `code(c4)' itself is interpreted, a set of
-contexts is needed that will accept notes.  The default for this is a
-code(Voice) context, contained in a code(Staff) context.  Creation of
-these contexts results in the staff being printed.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Context selection)
-label(contextselection)
-cindex(context)
-
-You can also create contexts manually, and you probably have to do so
-if you want to typeset complicated multiple part material.  If a
-`code(\context) var(name) var(musicexpr)' expression is encountered
-during the interpretation phase, the var(musicexpr) argument will be
-interpreted with a context of type var(name).  If you specify a name,
-the specific context with that name is searched.
-
-If a context of the specified type and name can not be found, a new
-one is created.  For example,
-
-quote(
-mudela(verbatim)(\score {
-  \notes \relative c'' {
-    c4 <d4 \context Staff = "another" e4> f
-  }
-}
-)
-)
-
-In this example, the code(c) bind(and)code(d) are printed on the
-default staff.  For bind(the)code(e), a context Staff called
-`code(another)' is specified; since that does not exist, a new
-context is created.  Within code(another), a (default) Voice context
-is created for bind(the)code(e4).  When all music referring to a
-context is finished, the context is ended as well.  So after the
-third quarter, code(another) is removed.
-
-Almost all music expressions inherit their interpretation context
-from their parent.  In other words, suppose that the syntax for a
-music expression is
-
-quote(
-  code(\keyword) var(musicexpr1) var(musicexpr2) ellipsis()
-)
-
-When the interpretation of this music expression starts, the context
-for var(musicexpr1), var(musicexpr2), etc. is that of the total
-expression.
-
-Lastly, you may wonder, why this:
-
-quote(
-verb(\score {
-  \notes \relative c'' {
-    c4 d4 e4
-  }
-})
-)
-
-doesn't result in this:
-
-mudela()(
-  \score {
-    \notes \relative c'' {
-      <c4> <d4> <e4>
-    }
-  }
-)
-
-For bind(the)code(c4), a default code(Staff) (with a contained
-code(Voice)) context is created.  After bind(the)code(c4) ends, no
-music refers to this default staff, so it would be ended, with the
-result shown.  To prevent this inconvenient behavior, the context to
-which the sequential music refers is adjusted during the
-interpretation.  So after bind(the)code(c4) ends, the context of the
-sequential music is also the default code(Voice) context. 
-bind(The)code(d4) gets interpreted in the same context
-bind(as)code(c4).
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Predefined contexts)
-
-These are the contexts supplied with the package.  They are defined
-in the initialization file file(ly/engraver.ly).
-
-description(
-  dit(code(Grace))indexcode(Grace) nl()
-    The context for handling grace notes.  It is instantiated
-    automatically when you use code(\grace).  Basically, it is an
-    `embedded' miniature of the Score context.  Since this context
-    needs special interaction with the rest of LilyPond, you should
-    not explicitly instantiate it.
-
-  dit(code(LyricVoice))indexcode(LyricVoice) nl()
-    Corresponds to a voice with lyrics.  Handles the printing of a
-    single line of lyrics.
-
-  dit(code(Thread))indexcode(Thread) nl()
-    Handles note heads, and is contained in the Voice context.  You
-    have to instantiate this explicitly if you want to adjust the
-    style of individual note heads.
-
-  dit(code(Voice))indexcode(Voice) nl()
-    Corresponds to a voice on a staff.  This context handles the
-    conversion of dynamic signs, stems, beams, super- and subscripts,
-    slurs, ties, and rests.
-
-    You have to instantiate this explicitly if you want to have
-    multiple voices on the same staff.
-
-  dit(code(ChordNamesVoice))indexcode(ChordNamesVoice) nl()
-    A voice with chord names.  Handles printing of a line of chord
-    names.
-
-  dit(code(ChordNames))indexcode(ChordNames) nl()
-    Typesets chord names.  Can contain code(ChordNamesVoice)
-    contexts.
-
-  dit(code(Lyrics))indexcode(Lyrics) nl()
-    Typesets lyrics.  It can contain code(LyricVoice) contexts.
-
-  dit(code(Staff))indexcode(Staff) nl()
-    Handles clefs, bar lines, keys, accidentals.  It can contain
-    code(Voice) contexts.
-
-  dit(code(RhythmicStaff))indexcode(RhythmicStaff) nl()
-    A context like code(Staff) but for printing rhythms.  Pitches are
-    ignored; the notes are printed on one line.  It can contain
-    code(Voice) contexts.
-
-  dit(code(GrandStaff))indexcode(GrandStaff) nl()
-    Contains code(Staff) or code(RhythmicStaff) contexts.  It adds a
-    brace on the left side, grouping the staffs together.  The bar
-    lines of the contained staffs are connected vertically.  It can
-    contain code(Staff) contexts.
-
-  dit(code(PianoStaff))indexcode(PianoStaff) nl()
-    Just like code(GrandStaff) but with code(minVerticalAlign) set
-    equal to code(maxVerticalAlign) so that interstaff beaming and
-    slurring can be used.
-
-  dit(code(StaffGroup))indexcode(StaffGroup) nl()
-    Contains code(Staff) or code(RhythmicStaff) contexts.  Adds a
-    bracket on the left side, grouping the staffs together.  The bar
-    lines of the contained staffs are connected vertically.  It can
-    contain code(Staff), code(RhythmicStaff), code(GrandStaff), or
-    code(Lyrics) contexts.
-
-  dit(code(ChoirStaff))indexcode(ChoirStaff) nl()
-    Identical to code(StaffGroup) except that the contained staffs
-    are not connected vertically.
-
-  dit(code(Score))indexcode(Score) nl()
-    This is the top level notation context.  No other context can
-    contain a code(Score) context.  This context handles the
-    administration of time signatures.  It also makes sure that items
-    such as clefs, time signatures, and key-signatures are aligned
-    across staffs.  It can contain code(Lyrics), code(Staff),
-    code(RhythmicStaff), code(GrandStaff), code(StaffGroup), and
-    code(ChoirStaff) contexts.
-
-    You cannot explicitly instantiate a Score context (since it is
-    not contained in any other context).  It is instantiated
-    automatically when an output definition (a code(\score) or
-    code(\paper) block) is processed.
-)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Context properties)
-
-Properties that are set in one context are inherited by all of the
-contained contexts.  This means that a property valid for the
-code(Voice) context can be set in the code(Score) context (for
-example) and thus take effect in all code(Voice) contexts.
-
-Properties can be preset within the code(\translator) block
-corresponding to the appropriate context.  In this case, the syntax
-is
-
-quote(
-  var(propname) code(=) var(value)
-)
-
-This assignment happens before interpretation starts, so a
-code(\property) expression will override any predefined settings.
-
-The code(\property) expression will create any property you specify.
-There is no guarantee that a property will be used.  So if you spell
-a property name wrong, there will be no error message.
-
-The property settings are used during the interpretation phase.  They
-are read by the LilyPond modules where interpretation contexts are
-built of.  These modules are called em(translators).  Translators for
-notation are called em(engravers), and translators for sound are
-called em(performers).
-
-The precise result of a property is determined by the implementation
-of the translator that reads them.  Therefore, the result of a
-property can vary, since it is implementation and configuration
-dependent.
-
-In order to fully find out what properties are used, you must
-currently search the source code for calls to code(get_property). 
-The rest of the section is devoted to an (incomplete) overview of
-available properties.
-
-subsubsect(Lyrics properties)
-cindex(properties!Lyrics)
-
-description(
-  dit(code(textStyle))indexcode(textStyle) nl()
-    Set the font for lyrics.  The available font choices are
-    code(roman), code(italic), code(bold), code(large), code(Large),
-    code(typewriter), and code(finger).  The code(finger) font can
-    only display numbers.  Note also that you must be careful when
-    using code(\property) in Lyrics mode, because of the way strings
-    are parsed.  Either put quotes around the arguments to
-    code(\property) or be sure to leave a space on both sides of the
-    dot.
-)
-
-subsubsect(Thread properties)
-cindex(properties!Thread)
-
-description(
-  dit(code(noteheadStyle))indexcode(noteheadStyle) nl()
-    Selects type of note head.  Choices are code(cross),
-    code(diamond), code(harmonic), code(transparent), and code(""). 
-    They are shown in that order below.
-
-    mudela(center)(
-      \score {
-        \notes { 
-          \property Staff.barNonAuto = 1
-          \property Voice.noteHeadStyle = cross 
-          a'
-          \property Voice.noteHeadStyle = diamond
-          a'
-          \property Voice.noteHeadStyle = harmonic
-          a'
-          \property Voice.noteHeadStyle = transparent
-          a' 
-          \property Voice.noteHeadStyle = ""
-          a'
-        }
-        \paper {
-          linewidth = -1.;
-        }
-      }
-    )
-)
-
-subsubsubsect(Grace properties)
-cindex(properties!Grace)
-description(  
-  dit(indexandcode(stemStyle)) nl()
-    By default set to code("grace") meaning that all unbeamed 
-    notes with flags are typeset with a slash through the flag. 
-    Setting to code("") gives standard flags.
-)
-
-subsubsect(Voice properties)
-cindex(properties!Voice)
-
-description(  
-  dit(code(abbrev))indexcode(abbrev) nl()
-    Set length for tremolo to be used if no length is explicitly
-    specified. 
-
-  dit(code(articulationScriptPadding))indexcode(articulationScriptPadding)
-    nl()
-    Determines the extra space added between articulation marks, such
-    as staccato, tenuto, trill, up/down bow or fermata, and the
-    closest staff line or note.
-
-  dit(code(articulationScriptVerticalDirection))
-    indexcode(articulationScriptVerticalDirection) nl()
-    Determines the location of articulation marks.  Set to code(\up)
-    to print marks above the staff; set to code(\down) to print marks
-    below the staff.  This property does not override explicit
-    directions marked with `code(^)' or `code(_)' in the mudela file.
-    
-  dit(code(noAutoBeaming))indexcode(beamAuto) nl()
-    If set bind(to)1 then beams are not generated automatically.
-
-  dit(code(beamAutoEnd))indexcode(beamAutoEnd) nl()
-    Specifies when automatically generated beams can end.  See
-    bind(section)ref(autobeam).
-
-  dit(code(beamAutoBegin))indexcode(beamAutoBegin) nl()
-    Specifies when automatically generated beams can start.  See
-    bind(section)ref(autobeam).
-
-  dit(code(beamquantisation))indexcode(beamquantisation) nl()
-    Set to code(\none) for no quantization.  Set to code(\normal) to
-    quantize position and slope.  Set to code(\traditional) to avoid
-    wedges.  These three settings are available via
-    code(\beamposfree)keyindex(beamposfree),
-    code(\beamposnormal)keyindex(beamposnormal), and
-    code(\beampostraditional)keyindex(beampostraditional).
-
-  dit(code(beamslopedamping))indexcode(beamslopedamping) nl()
-    Set to code(\none) for undamped beams.  Set to code(\normal) for
-    damped beams.  Set to code(\infinity) for beams with zero slope. 
-    The identifiers
-    code(\beamslopeproportional)keyindex(beamslopeproportional),
-    code(\beamslopedamped)keyindex(beamslopedamped), and
-    code(\beamslopezero)keyindex(beamslopezero) each set the
-    corresponding value.
-
-  dit(code(dynamicDirection))indexcode(dynamicDirection) nl()
-    Determines location of dynamic marks.  Set to code(\up) to print
-    marks above the staff; set to code(\down) to print marks below
-    the staff.
-
-  dit(code(dynamicStyle))indexcode(dynamicStyle) nl()
-    Set the text style for dynamics.  
-
-  dit(code(fontSize))indexcode(fontSize) nl()
-    Can be used to select smaller font sizes for music.  The normal
-    font size bind(is)0, and the two smaller sizes are -1
-    bind(and)-2.
-
-
-   dit(code(forceHorizontalShift))indexcode(forceHorizontalShift) nl()
-    Force horizontal shift for collision resolution.  It overrides
-    automatic collision resolution.  The value is the shift amount
-    expressed in code(note_width), as set in the paper section.
-    
-
-  dit(code(horizontalNoteShift))indexcode(horizontalNoteShift) nl()
-    Enable LilyPond to shift notes horizontally if they collide with
-    other notes.  This is useful when typesetting many voices on one
-    staff.  The identifier code(\shift)keyindex(shift) is defined to
-    enable this.  Traditionally, the outer chords (the upmost and
-    downmost voices), should have no code(horizontalNoteShift).
-
-  dit(code(markScriptPadding))indexcode(markScriptPadding) nl()
-    Determines the extra space added between the mark and the closest
-    staff line or note.
-
-  dit(code(markDirection))indexcode(markDirection) nl()
-    Determines if marks should be printed above or below the staff.
-    Set to code(\up) to print marks above the staff; set to
-    code(\down) to print marks below the staff.
-
-  dit(code(midiInstrument))indexcode(midiInstrument) nl()
-    Sets the instrument for MIDI output.  If this property is not set
-    then LilyPond will use the code(instrument) property.  This must
-    be set to one of the strings on the list of MIDI instruments that
-    appears in bind(section)ref(midilist).  If you use a string which
-    is not listed, LilyPond will silently substitute piano.
-
-
-  dit(code(oldTieBehavior))indexcode(oldTieBehavior) nl()
-    Set bind(to)1 in order to get old tie behavior where ties would
-    connect unequal pitches.  This property is deprecated, and its
-    use is not recommended.
-
-  dit(code(restStyle))indexcode(restStyle) nl()
-    Change the layout of rests shorter than quarter notes. 
-    Currently, the standard layout code("") and mensural notation
-    code("mensural") are available. Mensural rests of duration
-    32 or shorter are not available.
-    
-  dit(code(scriptHorizontal))indexcode(scriptHorizontal) nl()
-    Put scripts left or right of note heads.  Support for this is
-    limited.  Accidentals will collide with scripts.
-    
-  dit(code(slurVerticalDirection))indexcode(slurVerticalDirection) nl()
-    Set to code(\free) for free choice of slur direction, set to
-    code(\up) to force slurs up, set to code(\down) to force slurs
-    down.  The shorthands code(\slurup)keyindex(slurup),
-    code(\slurdown)keyindex(slurdown), and
-    code(\slurboth)keyindex(slurboth) are available.
-
-
-  dit(code(slurDash))indexcode(slurDash) nl()
-    Set bind(to)0 for normal slurs, bind(1)for dotted slurs, and a
-    larger value for dashed slurs.  Identifiers
-    code(\slurnormal)keyindex(slurnormal) and
-    code(\slurdotted)keyindex(slurdotted) are predefined to set the
-    first two settings.
-
-dit(code(stemLength))indexcode(stemLength) nl()
-    Set length of stems.  Unit is `code(interline)/2', so
-    code(stemLength) defaults bind(to)7.
-
-  dit(code(stemLeftBeamCount))indexcode(stemLeftBeamCount) nl()
-    Specify the number of beams to draw on the left side of the next
-    note.  Overrides automatic beaming.  The value is only used once,
-    and then it is erased.
-
-  dit(code(stemRightBeamCount))indexcode(stemRightBeamCount) nl()
-    Specify the number of beams to draw on the right side of the next
-    note.  Overrides automatic beaming.  The value is only used once,
-    and then it is erased.
-  dit(code(tieVerticalDirection))indexcode(tieVerticalDirection) nl()
-    Set to code(\free) for free choice of tie direction, set to
-    code(\up) to force ties up, set to code(\down) to force ties
-    down.
-
-  dit(code(transposing))indexcode(transposing) nl()
-    Transpose the MIDI output.  Set this property to the number of
-    half-steps to transpose by.
-
-  
-  dit(code(textEmptyDimension))indexcode(textEmptyDimension) nl()
-    If set bind(to)1 then text placed above or below the staff is
-    assumed to have zero width.
-  
-  dit(code(textStyle))indexcode(textStyle) nl()
-    Set the text style for superscripts and subscripts.  See above
-    for list of text styles.
-
-  dit(code(textScriptPadding))indexcode(textScriptPadding) nl()
-    Determines the extra space added between superscripted resp.
-    subscripted text and the closest staff line or note.
-
-  dit(code(verticalDirection))indexcode(verticalDirection) nl()
-    Determines the direction of stems, subscripts, beams, slurs, and
-    ties.  Set to code(\down) to force them down, code(\up) to force
-    them up, or code(\free) to let LilyPond decide.  This can be used
-    to distinguish between voices on the same staff.  The
-    code(\stemdown)keyindex(stemdown), code(\stemup)keyindex(stemup),
-    and code(\stemboth)keyindex(stemboth) identifiers set this
-    property.
-    
-
-  dit(code(tupletDirection))indexcode(tupletDirection) nl()
-    Determines the direction of triplets and other tuplets.  Set to
-    code(\down) to force them below the staff, code(\up) to force
-    them above, or code(\free) to let LilyPond decide.
-
-  dit(code(tupletVisibility))indexcode(tupletVisibility) nl()
-    Determines whether tuplets of notes are labelled.  Setting
-    bind(to)0 shows nothing; setting bind(to)1 shows a number;
-    setting bind(to)2 shows a number and a bracket if there is no
-    beam; setting bind(to)3 shows a number, and if there is no beam
-    it adds a bracket; setting bind(to)4 shows both a number and a
-    bracket unconditionally.
-
-)
-
-subsubsubsect(Staff properties)
-cindex(properties!Staff)
-
-description(
-  dit(code(barNonAuto))indexcode(barNonAuto) nl()
-    If set bind(to)1 then bar lines will not be printed
-    automatically; they must be explicitly created with code(\bar)
-    keywords.  Unlike with the code(\cadenza) keyword, measures are
-    still counted.  Bar generation will resume according to that
-    count if this property is set to zero.
-
-  dit(code(barNumberDirection))indexcode(barNumberDirection) nl()
-    Set to code(\up) or code(\down) to put bar numbers above or below
-    the staff.
-
-  dit(code(barNumberHangOnClef))indexcode(barNumberHangOnClef) nl()
-    Set bind(to)1 to cause bar numbers to appear above or below the
-    clef instead of on the bar line.  This property is deprecated. 
-    Do not use.
-
-  dit(code(barNumberScriptPadding))indexcode(barNumberScriptPadding) nl()
-    Sets extra space between the bar number and the bar it labels.
-
-  dit(code(barSize))indexcode(barSize) nl()
-    Specify the height of the bar lines if it should be different
-    than the staff height.
-
-  dit(code(barAtLineStart))indexcode(barAtLineStart) nl()
-    Set bind(to)1 to produce a bar line after the clef at the start
-    of each line (but not at the beginning of the music).
-
-  dit(code(clefStyle))indexcode(clefStyle) nl()
-    Determines how clefs are typeset.  If set to code(transparent),
-    the clefs are not printed at all, if set to
-    code(fullSizeChanges), clef changes in the middle of a line are
-    typeset with a full size clef.  By default, clef changes are
-    typeset in smaller size.
-
-  dit(code(createKeyOnClefChange))indexcode(createKeyOnClefChange) nl()
-    Set to a nonempty string if you want key signatures to be printed
-    when the clef changes.  Set to the empty string if you do not
-    want key signatures printed.
-
-  dit(code(createInitdefaultClef))indexcode(createInitdefaultClef) nl()
-    Specify whether clefs are created on default?  (Doesn't seem to
-    do anything.)
-
-  dit(code(defaultClef))indexcode(defaultClef) nl()
-    Determines the default clef.  See code(\clef) keyword.
-
-  dit(code(markHangOnClef))indexcode(markHangOnClef) nl()
-    Set bind(to)1 to cause marks to appear by clefs instead of by bar
-    lines.  Deprecated, use is not recommended.
-
-  dit(code(marginDirection))indexcode(marginDirection) nl()
-    Set to code(\left) or code(\right) to specify location of
-    marginal scripts.
-
-  dit(code(marginScriptPadding))indexcode(marginScriptPadding) nl()
-    Specify extra space for marginal scripts.
-
-  dit(code(forgetAccidentals))indexcode(forgetAccidentals) nl()
-    Causes accidentals to be printed at every note instead of
-    remembered for the duration of a measure.
-
-  dit(code(noResetKey))indexcode(noResetKey) nl()
-    Do not reset the key at the start of a measure.  Accidentals will
-    be printed only once and are in effect until overridden, possibly
-    many measures later.
-
-  dit(code(staffLineLeading))indexcode(staffLineLeading) nl()
-    Specifies the distance (in points) between lines of the staff.
-
-  dit(code(numberOfStaffLines))indexcode(numberOfStaffLines) nl()
-    Specifies the number of staff lines.  The default bind(is)5.
-
-  dit(code(postBreakPadding))indexcode(postBreakPadding) nl()
-    Extra space in points to be added after the clef, time signature
-    and key signature on the staff.  Deprecated, do not use.
-
-  dit(code(noVoltaBraces))indexcode(noVoltaBraces) nl()
-    Set to true to suppress the printing of brackets over alternate
-    endings specified by the command code(\alternative).
-
-  dit(code(numberOfStaffLines))indexcode(numberOfStaffLines) nl()
-    Sets the number of lines that the staff has.
-  dit(code(barAlways))indexcode(barAlways) nl()
-    If set bind(to)1 a bar line is drawn after each note.
-
-  dit(code(defaultBarType))indexcode(defaultBarType) nl()
-    Sets the default type of bar line. See bind(Section)ref(barlines) 
-    for a list of available bar types.
-
-  dit(code(instrument), code(instr))
-    indexcode(instrument)indexcode(instr) nl()
-    If code(Staff_margin_engraver)cindex(Staff_margin_engraver) is
-    added to the Staff translator, then the code(instrument) property
-    is used to label the first line of the staff and the code(instr)
-    property is used to label subsequent lines.  If the
-    code(midiInstrument) property is not set, then code(instrument)
-    is used to determine the instrument for MIDI output.
-
-  dit(code(keyOctaviation))indexcode(keyOctaviation) nl()
-    If set bind(to)1, then keys are the same in all octaves.  If set
-    bind(to)0 then the key signature for different octaves can be
-    different and is specified independently:
-
-    quote(
-      code(\keysignature bes fis')
-    )
-
-    The default value bind(is)1.  Can be set to zero with
-    code(\specialkey) or reset bind(to)1 with code(\normalkey).
-
-  dit(code(timeSignatureStyle))indexcode(timeSignatureStyle) nl()
-    Changes the default two-digit layout for time signatures.  The
-    following values are recognized:
-
-    description(
-      dit(code(C))indexcode(C) nl()
-        4/4 and 2/2 are typeset as C and struck C, respectively.  All
-        other time signatures are written with two digits.
-
-      dit(code(old))indexcode(old) nl()
-        2/2, 3/2, 2/4, 3/4, 4/4, 6/4, 9/4, 4/8, 6/8 and 9/8 are
-        typeset with old-style mensuration marks.  All other time
-        signatures are written with two digits.
-
-      dit(code(1))indexcode(1) nl()
-        All time signatures are typeset with a single
-        digit, e.g. 3/2 is written bind(as)3.
-
-      dit(indexcode(CM/N)code(C)var(M)code(/)var(N), 
-      indexcode(oldM/N)code(old)var(M)code(/)var(N) or
-      indexandcode(old6/8alt)) nl()
-        Tells LilyPond to use a specific symbol as time signature.
-    )
-
-    The different time signature characters are shown below with its
-    names:
-
-    mudela(center)(
-      \score {
-        \notes\relative c'' {
-          \property Voice.textStyle = typewriter
-          \property Staff.timeSignatureStyle = "C2/2"
-          \time 2/2; a2^"C2/2" a2 
-          \property Staff.timeSignatureStyle = "C4/4"
-          \time 2/2; a2^"C4/4" a2 
-          \property Staff.timeSignatureStyle = "old2/2"
-          \time 2/2; a2^"old2/2" a2 
-          \property Staff.timeSignatureStyle = "old3/2"
-          \time 2/2; a2^"old3/2" a2 
-          \property Staff.timeSignatureStyle = "old2/4"
-          \time 2/2; a2^"old2/4" a2 
-          \property Staff.timeSignatureStyle = "old4/4"
-          \time 2/2; a2^"old4/4" a2 
-          \property Staff.timeSignatureStyle = "old6/4"
-          \time 2/2; a2^"old6/4" a2 
-          \property Staff.timeSignatureStyle = "old9/4"
-          \time 2/2; a2^"old9/4" a2 
-          \property Staff.timeSignatureStyle = "old4/8"
-          \time 2/2; a2^"old4/8" a2 
-          \property Staff.timeSignatureStyle = "old6/8"
-          \time 2/2; a2^"old6/8" a2 
-          \property Staff.timeSignatureStyle = "old6/8alt"
-          \time 2/2; a2^"old6/8alt" a2 
-          \property Staff.timeSignatureStyle = "old9/8"
-          \time 2/2; a2^"old9/8" a2 
-        }
-        \paper {
-          linewidth = 4.5 \in;
-        }
-      }
-    )
-
-  dit(code(voltaSpannerDuration))indexcode(voltaSpannerDuration) nl()
-    Set to an integer to control the size of the brackets printed by
-    code(\alternative).  The integer specifies the number of whole
-    notes duration to use for the brackets.  It is rounded to the
-    nearest measure.  This can be used to shrink the length of
-    brackets in the situation where one alternative is very large. 
-    It may have odd effects if the specified duration is longer than
-    the music given in an code(\alternative).
-)
-   
-subsubsect(GrandStaff properties)
-cindex(properties!GrandStaff)
-
-description( 
-  dit(code(alignmentReference))indexcode(alignmentReference) nl()
-    Set to code(\center) for vertical alignment reference point to be
-    in the center of the vertical group.  Set to code(\up) to put the
-    reference point at the top of the group.
-
-  dit(code(maxVerticalAlign))indexcode(maxVerticalAlign) nl()
-    Set the maximum vertical distance between staffs.
-
-  dit(code(minVerticalAlign))indexcode(minVerticalAlign) nl()
-    Set the minimum vertical distance between staffs.  
-)
-
-subsubsect(Score properties)
-cindex(properties!Score)
-
-description(
-  dit(code(skipBars))indexcode(skipBars) nl()
-    Set bind(to)1 to skip the empty bars that are produced by
-    multimeasure notes and rests.  These bars will not appear on the
-    printed output.  Set to zero (the default) to expand multimeasure
-    notes and rests into their full length, printing the appropriate
-    number of empty bars so that synchronization with other voices is
-    preserved.
-
-    quote(
-mudela(fragment,verbatim,center)\
-  (r1 r1*3 R1*3\property Score.skipBars=1 r1*3 R1*3
-)
-    )
-)
-
-subsubsect(ChordNamesVoice properties)
-cindex(properties!ChordNamesVoice)
-
-description(
-  dit(code(chordInversion))indexcode(chordInversion) nl()
-    Determines whether LilyPond should look for chord inversions when
-    translating from notes to chord names.  Set bind(to)1 to find
-    inversions.  The default bind(is)0 which does not look for
-    inversions.
-)
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Notation output definitions)
-cindex(output)
-cindex(notation output)
-cindex(output definition)
-label(output)
-label(paper)
-
-The most important output definition is the code(\paper) block, for
-music notation.  The syntax is
-
-quote(
-  code(\paper {) [var(paperidentifier)] var(items) code(})
-)
-
-where each of the items is one of
-
-itemize(
-  it() An assignment.  The assignment must be terminated by a
-       semicolon.  See bind(section)ref(papervars) for information on
-       paper variables.
-
-  it() A context definition.  See bind(section)ref(contextdefs) for
-       more information on context definitions.
-
-  it() A margin shape declaration.  The syntax is
-
-       quote(
-         code(\shape) var(indent1)code(,) var(width1)code(,)
-                      var(indent2)code(,) var(width2) ellipsis() code(;)
-       )
-       keyindex(shape)
-
-       Each pair of var(indent) and var(width) values is a dimension
-       specifying how far to indent and how wide to make the line. 
-       The indentation and width of successive lines are specified by
-       the successive pairs of dimensions.  The last pair of
-       dimensions will define the characeristics of all lines beyond
-       those explicitly specified.
-
-  it() A font declaration.  Its syntax is
-
-       quote(
-         var(fontsize) code(=) code(\font)keyindex(font) var(fontname)
-       )
-
-       var(fontsize) is an integer describing the font to be used. 
-       bind(0)is the default font.  var(fontname) is the basename of
-       a font (usually a member of the Feta family).
-)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Changing Font Size and Paper Size)
-cindex(changing font size and paper size)
-
-The Feta font provides musical symbols at six different sizes.  These
-fonts are bind(11)point, bind(13)point, bind(16)point, bind(20)point,
-bind(23)point, and bind(26)point.  The point size of a font is the
-height of the five lines in a staff when displayed in the font.
-
-Definitions for these sizes are the files file(paperSZ.ly), where
-code(SZ) is one of 11, 13, 16, 20, 23 bind(and)26.  If you include
-any of these files, the identifiers code(paper_eleven),
-code(paper_thirteen), code(paper_sixteen), code(paper_twenty),
-code(paper_twentythree), and code(paper_twentysix) are defined
-respectively.  The default code(\paper) block is also set.
-
-To change the paper size, you must first set the
-indexandcode(papersize) variable at top level.  Set it to the strings
-code(a4), code(letter), or code(legal).  After this specification,
-you must set the font as described above.  If you want the default
-font, then use the bind(20)point font.  The new paper size will not
-take effect if the font is not loaded and selected afterwards.  Paper
-size selection works by loading a file named after the paper size you
-select.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Paper variables)
-cindex(paper variables)
-label(papervars)
-
-There is a large number of paper variables that are used to control
-details of the layout.  These variables control the defaults for the
-entire score.  Usually, they do not have to be changed; they are by
-default set to values that depend on the font size in use.  The
-values are used by the graphic objects while formatting the score;
-they are therefore implementation dependent.  Most variables are
-accompanied by documentation in the initalization file
-file(params.ly) or file(paperSZ.ly), where code(SZ) is the staff
-height in points.
-
-Nevertheless, here are some variables you may want to use or change:
-
-description(
-  dit(code(indent))indexcode(indent) nl()
-    The indentation of the first line of music.
-
-  dit(code(interline))indexcode(interline) nl()
-    The distance between two staff lines, calculated from the center
-    of the lines.  You should use either this or code(rulethickness)
-    as a unit for distances you modify.
-  
-  dit(code(linewidth))indexcode(linewidth) nl()
-    Sets the width of the lines.  If set bind(to)-1.0, a single
-    unjustified line is produced.
-
-  dit(code(output))indexcode(output) nl()
-    Specifies an alternate name for the the output file(s).
-    A file(.tex), file(.midi) or file(.ps) extension will be 
-    added to the string you specify.
-
-  dit(code(rulethickness))indexcode(rulethickness) nl()
-    Determines the thickness of staff and bar lines. 
-
-  dit(code(castingalgorithm))indexcode(castingalgorithm) nl()
-    The algorithm to use for breaking lines.  Choices are
-    code(\Gourlay)keyindex(Gourlay) for a TeX()-like dynamic
-    programming algorithm, and code(\Wordwrap)keyindex(Wordwrap) for
-    a simple algorithm.  Gourlay breaking looks much better, but
-    takes a lot more resources.  Wordwrap leaves loosely spaced lines
-    at the end.
-)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Context definitions)
-label(contextdefs)
-cindex(context definition)
-
-A notation contexts is defined by the following information
-
-enumerate(
-  it() A name.
-
-  it() The LilyPond modules that do the actual conversion of music to
-       notation.  Each module is a so-called
-       em(engraver)cindex(engraver).
-
-  it() How these modules should cooperate, i.e. which ``cooperation
-       module'' should be used.  This cooperation module is a special
-       type of engraver.
-
-  it() What other contexts the context can contain,
-
-  it() What properties are defined.
-)
-
-A context definition has this syntax:
-
-quote(
-  code(\translator) code({)
-                      var(translatorinit) var(translatormodifierlist)
-                    code(})
-)
-
-var(translatorinit) can be an identifier or of the form
-
-quote(
-  code(\type) var(typename) code(;)
-)
-
-var(typename) is one of
-
-description(
-  dit(code(Engraver_group_engraver))indexcode(Engraver_group_engraver) nl()
-    The standard cooperation engraver.
-
-  dit(code(Score_engraver))indexcode(Score_engraver) nl()
-    This is cooperation module that should be in the top level context.
-
-  dit(code(Grace_engraver_group))indexcode(Grace_engraver_group) nl()
-    This is a special cooperation module (resembling
-    code(Score_engraver)) that is used to created an embedded
-    `miniscore'.
-) 
-
-var(translatormodifierlist) is a list of items where each item is
-one of
-
-itemize(
-  it() code(\consists) var(engravername) code(;) nl()
-    Add var(engravername) to the list of modules in this context. 
-    bind(Section)ref(engravers) contains an overview of the engravers
-    available.  The order of engravers added with code(\consists) is
-    significant.
-  
-  it() code(\consistsend) var(engravername) code(;) nl()
-    Analogous to code(\consists), but makes sure that
-    var(engravername) is always added to the end of the list of
-    engravers.
-
-    Some engraver types need to be at the end of the list; this
-    insures they are put there, and stay there, if a user adds or
-    removes engravers.  This command is usually not needed for
-    end-users.
-    
-  it() code(\accepts) var(contextname) code(;) nl()
-    Add var(contextname) to the list of  context this context can
-    contain.  The first listed context the context to create by
-    default.
-  
-  it() code(\remove) var(engravername) code(;) nl()
-    Remove a previously added (with code(\consists)) engraver.
-  
-  it() code(\name) var(contextname) code(;) nl()
-    This sets name of the context, e.g. code(Staff), code(Voice).  If
-    the name is not specified, the translator won't do anything.
-
-  it() var(propname) code(=) var(value) code(;) nl()
-    A property assignment.  It is allowed to use reals for
-    var(value).
-)
-
-In the code(\paper) block, it is also possible to define translator
-identifiers.  Like other block identifiers, the identifier can only
-be used as the very first item of a translator.  In order to define
-such an identifier outside of code(\score), you must do
-
-quote(
-verb(\paper {
-  foo = \translator { ... }
-}
-\score {
-  \notes {
-    ...
-  }
-  \paper {
-    \translator { \foo ... }
-  }
-})
-)
-
-subsubsect(Paper Types, Engravers, and Pre-defined Translators)
-cindex(paper types, engravers, and pre-defined translators)
-
-Some pre-defined identifiers can simplify modification of
-translators.  The pre-defined identifiers are:
-
-description(
-  dit(code(StaffContext))indexcode(StaffContext) nl()
-    Default Staff context. 
-
-  dit(code(RhythmicStaffContext))indexcode(RhythmicStaffContext) nl()
-    Default RhythmicStaff context. 
-
-  dit(code(VoiceContext))indexcode(VoiceContext) nl()
-    Default Voice context.  
-
-  dit(code(ScoreContext))indexcode(ScoreContext) nl()
-    Default Score context. 
-
-  dit(code(ScoreWithNumbers))indexcode(ScoreWithNumbers) nl()
-    Score context with numbering at the Score level.
-
-  dit(code(BarNumberingStaffContext))indexcode(BarNumberingStaffContext) nl()
-    Staff context with numbering at the Staff level.
-
-  dit(code(HaraKiriStaffContext))indexcode(HaraKiriStaffContext) nl()
-    Staff context that does not print if it only contains rests. 
-    Useful for orchestral scores.footnote(Harakiri, also called
-    Seppuku, is the ritual suicide of the Samourai.)
-
-  dit(code(OrchestralPartStaffContext))indexcode(OrchestralPartStaffContext)
-
-  dit(code(OrchestralScoreContext))indexcode(OrchestralScoreContext)
-)
-
-Using these pre-defined values, you can remove or add items to the
-translator:
-
-quote(
-verb(\paper {
-  \translator {
-    \StaffContext
-    \remove Some_engraver;
-    \consists Different_engraver;
-  }
-})
-)
-      
-subsubsect(Engravers)
-label(engravers)
-
-The engravers for paper output are:
-
-[incomplete, FIXME]
-
-description(
-  dit(code(Bar_engraver))indexcode(Bar_engraver) nl()
-    Engraves bar lines.  Normally in code(Staff) and
-    code(RhythmicStaff).
-
-  dit(code(Bar_number_engraver))indexcode(Bar_number_engraver) nl()
-    Engrave bar numbers.  These numbers appear at the start of each
-    line.  Not normally in any translator.  Can be added to
-    code(Score) for score-wide numbering or to code(Staff) for
-    numbering on each staff.
-
-  dit(code(Beam_engraver))indexcode(Beam_engraver) nl()
-    Handles beam requests by engraving beams.  Normally appears in
-    the code(Voice) translator.  If omitted, then notes will be
-    printed with flags instead of beams.
-
-  dit(code(Beam_req_swallow_translator))
-    indexcode(Beam_req_swallow_translator) nl()
-    Swallows beam requests.  In code(LyricVoice).  
-
-  dit(code(Chord_name_engraver))indexcode(Chord_name_engraver) nl()
-    Engraves chord names.  Normally in code(ChordNameVoice) .
-
-  dit(code(Chord_tremolo_engraver))indexcode(Chord_tremolo_engraver)
-
-  dit(code(Clef_engraver))indexcode(Clef_engraver) nl()
-    Engraves the clef symbol.  Normally in code(Staff).
-
-  dit(code(Collision_engraver))indexcode(Collision_engraver)
-
-  dit(code(Dot_column_engraver))indexcode(Dot_column_engraver) nl()
-    Engraves dots on dotted notes shifted to the right of the note. 
-    Normally in code(Voice).  If omitted, then dots appear on top of
-    the notes.
-
-  dit(code(Dynamic_engraver))indexcode(Dynamic_engraver) nl()
-    Engraves dynamics symbols.  Normally in code(Voice).
-
-  dit(code(Font_size_engraver))indexcode(Font_size_engraver)
-
-  dit(code(Key_engraver))indexcode(Key_engraver) nl()
-    Engraves the key signature.  Normally in code(Staff).
-
-  dit(code(Local_key_engraver))indexcode(Local_key_engraver)
-
-  dit(code(Lyric_engraver))indexcode(Lyric_engraver) nl()
-    Engraves lyrics.  Normally in code(LyricVoice).
-
-  dit(code(Multi_measure_rest_engraver))
-    indexcode(Multi_measure_rest_engraver) nl()
-    Engraves multi-measure rests that are produced with code(R). 
-    Normally in code(Voice).
-
-  dit(code(Piano_bar_engraver))indexcode(Piano_bar_engraver)
-
-  dit(code(Pitch_squash_engraver))indexcode(Pitch_squash_engraver) nl()
-    Treat all pitches as middle C.  Used in code(RhythmicStaff). 
-    Note that the notes move, but the locations of accidentals stay
-    the same.
-
-  dit(code(Priority_horizontal_align_engraver))
-    indexcode(Priority_horizontal_align_engraver)
-
-  dit(code(Repeat_engraver))indexcode(Repeat_engraver) nl()
-    Handles repeats?  In code(Staff) and code(RhythmicStaff).
-
-  dit(code(Rest_collision_engraver))indexcode(Rest_collision_engraver) nl()
-    Handles collisions of rests.  In code(Staff).
-
-  dit(code(Rest_engraver))indexcode(Rest_engraver) nl()
-    Engraves rests.  Normally in code(Voice).
-
-  dit(code(Rhythmic_column_engraver))indexcode(Rhythmic_column_engraver)
-
-  dit(code(Score_priority_engraver))indexcode(Score_priority_engraver)
-
-  dit(code(Script_engraver))indexcode(Script_engraver) nl()
-    Handles note ornaments generated by code(\script).  Normally in
-    code(Voice).
-
-  dit(code(Separating_line_group_engraver))
-    indexcode(Separating_line_group_engraver)
-
-  dit(code(Skip_req_swallow_translator))
-    indexcode(Skip_req_swallow_translator)
-
-  dit(code(Slur_engraver))indexcode(Slur_engraver) nl()
-    Engraves slurs.  Normally in code(Voice).
-
-  dit(code(Span_bar_engraver))indexcode(Span_bar_engraver) nl()
-    Engraves lines across multiple staffs.  Normally in
-    code(Staffgroup) and code(GrandStaff).  Removing this from
-    code(StaffGroup) gives the definition of code(ChoirStaff).
-
-  dit(code(Span_score_bar_engraver))indexcode(Span_score_bar_engraver)
-
-  dit(code(Staff_group_bar_engraver))indexcode(Staff_group_bar_engraver)
-
-  dit(code(Staff_margin_engraver))indexcode(Staff_margin_engraver) nl()
-    Prints the name of the instrument (specified by
-    code(Staff.instrument) and code(Staff.instr)) at the left of the
-    staff.
-
-  dit(code(Staff_sym_engraver))indexcode(Staff_sym_engraver)
-
-  dit(code(Stem_engraver))indexcode(Stem_engraver) nl()
-    Engraves stems.  Normally in code(Voice).
-
-  dit(code(Ties_engraver))indexcode(Ties_engraver) nl()
-    Engraves ties.  Normally in code(Voice).
-
-  dit(code(Time_signature_engraver))indexcode(Time_signature_engraver) nl()
-    Engraves the time signature.  Normally in code(Staff) and
-    code(RhythmicStaff).
-
-  dit(code(Timing_engraver))indexcode(Timing_engraver) nl()
-    Responsible for synchronizing timing information from staffs. 
-    Normally in code(Score).  In order to create polyrhythmic music,
-    this engraver should be removed from code(Score) and placed in
-    code(Staff).
-
-  dit(code(Tuplet_engraver))indexcode(Tuplet_engraver) nl()
-    Engraves tuplet brackets?  In code(Staff).
-
-  dit(code(Vertical_align_engraver))indexcode(Vertical_align_engraver) 
-)
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Sound output)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(output definition)
-
-The MIDI block is analogous to the paper block, but it is simpler.
-The code(\midi) block can contain:cindex(MIDI block)
-
-itemize(
-  it() a code(\tempo) definition
-  it() context definitions
-)
-
-Assignments in the code(\midi) block are not allowed.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Context definitions)
-cindex(context definition)
-
-Context definitions follow precisely the same syntax as within the
-\paper block.  Translation modules for sound are called performers.
-The contexts for MIDI output are defined in file(ly/performer.ly).
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(MIDI Instrument Names)
-cindex(MIDI instrument names)
-label(midilist)
-
-The MIDI instrument name is set by the
-indexandcode(Staff.midiInstrument) property or, if that property is
-not set, the indexandcode(Staff.instrument) property.  The instrument
-name should be chosen from the following list.  If the selected
-string does not exactly match, then LilyPond uses the default piano.
-
-COMMENT( acordina = accordion, tango accordian = concertina
-         distortion guitar = distorted guitar
-         orchestral strings = harp 
-         pan flute = wood flute? )
-
-quote(
-verb("acoustic grand"            "contrabass"           "lead 7 (fifths)"
-"bright acoustic"           "tremolo strings"      "lead 8 (bass+lead)"
-"electric grand"            "pizzicato strings"    "pad 1 (new age)"
-"honky-tonk"                "orchestral strings"   "pad 2 (warm)"
-"electric piano 1"          "timpani"              "pad 3 (polysynth)"
-"electric piano 2"          "string ensemble 1"    "pad 4 (choir)"
-"harpsichord"               "string ensemble 2"    "pad 5 (bowed)"
-"clav"                      "synthstrings 1"       "pad 6 (metallic)"
-"celesta"                   "synthstrings 2"       "pad 7 (halo)"
-"glockenspiel"              "choir aahs"           "pad 8 (sweep)"
-"music box"                 "voice oohs"           "fx 1 (rain)"
-"vibraphone"                "synth voice"          "fx 2 (soundtrack)"
-"marimba"                   "orchestra hit"        "fx 3 (crystal)"
-"xylophone"                 "trumpet"              "fx 4 (atmosphere)"
-"tubular bells"             "trombone"             "fx 5 (brightness)"
-"dulcimer"                  "tuba"                 "fx 6 (goblins)"
-"drawbar organ"             "muted trumpet"        "fx 7 (echoes)"
-"percussive organ"          "french horn"          "fx 8 (sci-fi)"
-"rock organ"                "brass section"        "sitar"
-"church organ"              "synthbrass 1"         "banjo"
-"reed organ"                "synthbrass 2"         "shamisen"
-"accordion"                 "soprano sax"          "koto"
-"harmonica"                 "alto sax"             "kalimba"
-"concertina"                "tenor sax"            "bagpipe"
-"acoustic guitar (nylon)"   "baritone sax"         "fiddle"
-"acoustic guitar (steel)"   "oboe"                 "shanai"
-"electric guitar (jazz)"    "english horn"         "tinkle bell"
-"electric guitar (clean)"   "bassoon"              "agogo"
-"electric guitar (muted)"   "clarinet"             "steel drums"
-"overdriven guitar"         "piccolo"              "woodblock"
-"distorted guitar"          "flute"                "taiko drum"
-"guitar harmonics"          "recorder"             "melodic tom"
-"acoustic bass"             "pan flute"            "synth drum"
-"electric bass (finger)"    "blown bottle"         "reverse cymbal"
-"electric bass (pick)"      "skakuhachi"           "guitar fret noise"
-"fretless bass"             "whistle"              "breath noise"
-"slap bass 1"               "ocarina"              "seashore"
-"slap bass 2"               "lead 1 (square)"      "bird tweet"
-"synth bass 1"              "lead 2 (sawtooth)"    "telephone ring"
-"synth bass 2"              "lead 3 (calliope)"    "helicopter"
-"violin"                    "lead 4 (chiff)"       "applause"
-"viola"                     "lead 5 (charang)"     "gunshot"
-"cello"                     "lead 6 (voice)")
-)
-
-subsubsect(MIDI Types and Performers)
-cindex(MIDI types and performers)
-
-The types available for  MIDI translators are:
-
-description(
-  dit(code(Performer_group_performer))indexcode(Performer_group_performer)
-  dit(code(Score_performer))indexcode(Score_performer)
-  dit(code(Staff_performer))indexcode(Staff_performer)
-)
-
-The performers for MIDI translators are:
-
-description(
-  dit(code(Key_performer))indexcode(Key_performer)
-  dit(code(Time_signature_performer))indexcode(Time_signature_performer)
-  dit(code(Note_performer))indexcode(Note_performer)
-  dit(code(Lyric_performer))indexcode(Lyric_performer)
-  dit(code(Swallow_performer))indexcode(Swallow_performer)
-)
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Pre-defined Identifiers)
-cindex(pre-defined identifiers)
-label(ident)
-
-Various identifiers are defined in the initialization files to
-provide shorthands for some settings.  Most of them are in
-file(ly/declarations.ly).
-
-description(
-  dit(code(\break))keyindex(break) nl()
-    Force a line break in music by using a large argument for the
-    keyword code(\penalty).
-
-  dit(code(\center))keyindex(center) nl()
-    Used for setting direction  properties.  bind(Equals)0.
-
-  dit(code(\down))keyindex(down) nl()
-    Used for setting direction setting properties.  Is equal
-    bind(to)-1.
-
-  dit(code(\free))keyindex(free) nl()
-    Used for setting direction setting properties.  Is equal
-    bind(to)0.
-
-  dit(code(\left))keyindex(left) nl()
-    Used for setting text alignment property.  Is equal bind(to)-1.
-
-  dit(code(\nobreak))keyindex(nobreak) nl()
-    Prevent a line break in music by using a large negative argument
-    for the keyword code(\penalty).
-
-  dit(code(\none))keyindex(none) nl()
-    Used for setting code(Score.beamslopedamping) and
-    code(Score.beamquantisation) properties.  Is equal bind(to)0.
-
-  dit(code(\normal))keyindex(normal) nl()
-    Used for setting code(Score.beamslopedamping) and
-    code(Score.beamquantisation) properties.  Is equal bind(to)1.
-
-  dit(code(\normalkey))keyindex(normalkey) nl()
-    Select normal key signatures where each octave has the same key
-    signature.  This sets the code(Staff.keyoctaviation) property.
-
-  dit(code(\right))keyindex(right) nl()
-    Used for setting text alignment property.  Is set bind(to)1.
-
-  dit(code(\shiftoff))keyindex(shiftoff) nl()
-    Disable horizontal shifting of note heads that collide.  Sets the
-    code(Voice.horizontalNoteShift) property.
-
-  dit(code(\shifton))keyindex(shifton) nl()
-    Enable note heads that collide with other note heads to be
-    shifted horiztonally.  Sets the code(Voice.horizontalNoteShift)
-    property.
-
-  dit(code(\slurboth))keyindex(slurboth) nl()
-    Allow slurs to be above or below notes.  This sets the
-    code(Voice.slurVerticalDirection) property.
-
-  dit(code(\slurdown))keyindex(slurdown) nl()
-    Force slurs to be below notes.  This sets the
-    code(Voice.slurVerticalDirection) property.
-
-  dit(code(\slurup))keyindex(slurup) nl()
-    Force slurs to be above notes.  This sets the
-    code(Voice.slurVerticalDirection) property.
-
-  dit(code(\specialkey))keyindex(specialkey) nl()
-    Allow key signatures do differ in different octaves.  This sets
-    the code(Staff.keyoctaviation) property.
-
-  dit(code(\stemboth))keyindex(stemboth) nl()
-    Allow stems, beams, and slurs to point either upwards or
-    downwards, decided automatically by LilyPond.  This sets the
-    code(Voice.verticalDirection) property.
-
-  dit(code(\stemdown))keyindex(stemdown) nl()
-    Force stems, beams, and slurs to point down.  This sets the
-    code(Voice.verticalDirection) property.
-
-  dit(code(\stemup))keyindex(stemup) nl()
-    Force stems, beams and slurs to point up.  This sets the
-    code(Voice.verticalDirection) property.
-
-  dit(code(\traditional))keyindex(traditional) nl()
-    Used for setting the code(Score.beamquantisation) property.  Is
-    equal bind(to)2.
-
-  dit(code(\up))keyindex(up) nl()
-    Used for setting various direction properties.  Is equal
-    bind(to)1.
-)
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Running LilyPond)
-cindex(running LilyPond)
-
-
-When invoked with a filename that has no extension, LilyPond will try
-adding `file(.ly)' as an extension first, then `file(.fly)' and
-finally `file(.sly)' extension.  If the filename ends with
-`file(.fly)', LilyPond processes the file as music using
-`file(init.fly)'.  In this case, LilyPond does something like:
-
-quote(
-verb(\score {
-  \notes\relative c {
-    \input "yourfile.fly"
-  }
-  \paper{}
-  \midi{}
-})
-)
-The result of `file(.sly)' is similar except that a single unjustified
-line is produced.
-
-If you invoke LilyPond with a file `file(foo.)var(ext)' that doesn't
-have the `file(.ly)' extension, then LilyPond will look for a file
-called `file(init.)var(ext)' and process this file.  The file
-`file(init.)var(ext)' must contain the code(\maininput) keyword or
-LilyPond will not read the user specified file.
-
-When LilyPond processes file(filename.ly) it will produce
-file(filename.tex) as output.  If file(filename.ly) contains a second
-code(\paper) keyword, then LilyPond will produce file(filename-1.tex)
-as well.  Subsequent code(\paper) keywords will produce sequentially
-numbered file names.  Several files can be specified; they will each
-be processed independently.footnote(Not entirely true: The status of
-GUILE is kept.)
-
-whenlatex(latexcommand(\printindex))
-
-COMMENT(End of reference-manual.yo)
diff --git a/Documentation/tex/regression-test.tely b/Documentation/tex/regression-test.tely
new file mode 100644 (file)
index 0000000..9f9d06b
--- /dev/null
@@ -0,0 +1,294 @@
+\input texinfo @c -*-texinfo-*-   vim:tw=72
+@setfilename regression-test.info
+@settitle LilyPond Regression test
+
+@node Top, , , 
+
+This document tries give an brief overview of LilyPond features.  When
+the text correspond with the shown notation, we consider LilyPond
+Officially BugFree (tm).  This document is intended for finding bugs,
+and documenting bugfixes.
+
+@section Notes and rests
+
+Rests.  Note that the dot of 8th, 16th and 32nd rests rest should be
+next to the top of the rest.  All rests except the whole rest are
+centered on the middle staff line.  
+
+@mudelafile{rest.fly}
+
+Note head shapes are settable.  The stem endings should be adjusted
+per note head.  If you want different note head styles on one stem,
+you must create a special context called Thread.
+
+@mudelafile{noteheadstyle.ly}
+
+Noteheads can have dots, and ---although this is bad style in duple
+meters--- rests can too.  Augmentation dots should never be printed on
+a staff line, but rather be shifted vertically. They should go up, but
+in case of multiple parts, the down stems have down shifted dots.
+(Wanske p. 186) In case of chords, all dots should be in a column.
+The dots go along as rests are shifted to avoid collisions.
+
+@mudelafile{dots.fly}
+
+Multiple measure rests do not collide with barlines and clefs.  They
+are not expanded when you set \verb+Score.SkipBars+.  Although the
+multi-measure-rest is a Spanner, minimum distances are set to keep it
+colliding from barlines. 
+
+@mudelafile{multi-measure-rest.ly}
+
+@section Stems
+
+Stem tremolos (official naming?) or rolls are tremolo signs that look
+like beam segments crossing stems.  If the stem is in a beam, the
+tremolo must be parallel to the beam.  If the stem is invisible
+(eg. on a whole note), the tremolo must be centered on the note.
+
+@mudelafile{stem-tremolo.ly}
+
+Chord tremolos look like beams, but are a kind of repeat symbol.
+To avoid confusion, chord tremolo beams do not reach the stems, but 
+leave a gap.  Chord tremolo beams on half notes are not ambiguous,
+as half notes cannot appear in a regular beam, and should reach the 
+stems.
+  
+@mudelafile{chord-tremolo.sly}
+
+Beams, stems and noteheads often have communication troubles, since
+the two systems for y dimensions (1 unit = staffspace, 1 unit = 1
+point) are mixed.
+
+Stems, beams, ties and slurs should behave similarly, when placed
+on the middle staff line. Of course stem-direction is down for high
+notes, and up for low notes.
+
+@mudelafile{stem-direction.sly}
+
+Similarly, if \verb+stem_default_neutral_direction+ is set to \verb+-1+.
+
+@mudelafile{stem-direction-down.ly}
+
+@section Scripts
+
+The staccato dot (and all scripts with follow-into-staff set), must
+not be on staff lines.
+
+@mudelafile{staccato-pos.sly}
+
+@section Grace notes
+
+Grace notes are typeset as an encapsulated piece of music. You can
+have beams, notes, chords, stems etc. within a \verb|\grace| section.
+Slurs that start within a grace section, but aren't ended are attached
+to the next normal note.  Grace notes have zero duration.  If there
+are tuplets, the grace notes won't be under the brace.  Grace notes
+can have accidentals, but they are (currently) spaced at a fixed
+distance.  Grace notes (of course) come before the accidentals of the
+main note.  Grace notes can also be positioned after the main note.
+
+@mudelafile{grace.ly}
+
+
+@section Beams, slurs and other spanners
+
+Beaming is generated automatically. Beams may cross bar lines. In that
+case, line breaks are forbidden.  Yet clef and key signatures are
+hidden just as with breakable bar lines.
+
+@mudelafile{beaming.ly}
+
+Beams should behave reasonably well, even under extreme circumstances.
+Stems may be short, but noteheads should never touch the beam.
+
+@mudelafile{beam-extreme.ly}
+
+Beams should always reach the middle staff line, the second beam
+counting from the note head side, should never be lower than the
+second staff line.  This does not hold for grace note beams.
+
+@mudelafile{beam-position.sly}
+
+Slurs should look nice and symmetric.  The curvature may increase
+only to avoid noteheads, and as little as possible.
+
+@mudelafile{slur-symmetry.ly}
+@mudelafile{slur-symmetry-1.ly}
+
+Ties are strictly horizontal.  They are placed in between note heads.
+The horizontal middle should not overlap with a staffline.
+
+@mudelafile{tie.ly}
+
+Beams can be typeset over fixed distance aligned staffs, beam
+beautification doesn't really work, but knees do. Beams should be
+behave well, wherever the switching point is.
+
+@mudelafile{beam-interstaff.ly}
+
+The same goes for slurs. They behave decently when broken across
+linebreak.
+
+@mudelafile{slur-interstaff.ly}
+
+Tuplets are indicated by a bracket with a number.  There should be no
+bracket if there is one beam that matches  the length of the tuplet.
+The bracket does not interfere with the stafflines, and the number is
+centered in the gap in the bracket.
+
+@mudelafile{tup.ly}
+
+@section Repeats
+
+LilyPond has three modes for repeats: folded, unfolded and
+semi-unfolded.  Unfolded repeats are fully written out. Semi unfolded
+repeats have the body written and all alternatives sequentially.
+Folded repeats have the body written and all alternatives
+simultaneously.  If the number of alternatives is larger than the
+repeat count, the excess alternatives are ignored.  If the number of
+alternatives is smaller, the first alternative is multiplied to get to
+the number of repeats.
+
+Unfolded behavior:
+
+@mudelafile{repeat-unfold.ly}
+
+Semi (un)folded behavior.  Voltas can start on non-barline moments.
+If they don't barlines should still be shown.
+
+@mudelafile{repeat-semifold.ly}
+
+Folded.  This doesn't make sense without alternatives, but it works.
+
+@mudelafile{repeat-fold.ly}
+
+@section Lyrics
+
+Lyrics can be set to a melody automatically.  Excess lyrics will be
+dumped.  Lyrics will not be set over rests.  You can have melismata
+either by setting a property melismaBusy, or by setting
+automaticMelismas (which will set melismas during slurs and ties).  If
+you want a different order than first Music, then Lyrics, you must
+precook a chord of staffs/lyrics and label those.  Of course
+@code{\rhythm} ignores any other rhythms in the piece.  Hyphens and
+extenders do not assume anything about lyric lengths, so they continue
+to work.
+
+@mudelafile{lyric-combine.ly}
+
+@section Multiple notes
+
+Rests should not collide with beams, stems and noteheads.  Rests may
+be under beams.  Rests should be move by integral number of spaces
+inside the staff, and by half spaces outside.  Notice that the half
+and whole rests just outside the staff get ledger lines in different
+cases.
+
+@mudelafile{rest-collision.ly}
+
+Normal collisions. We have support for polyphony, where the
+middle voices are horizontally shifted.
+
+@mudelafile{collisions.ly}
+
+The number of stafflines of a staff can be set with the property
+numberOfStaffLines.  Ledger lines both on note heads and rests are
+adjusted.  Barlines also are adjusted.
+
+
+@mudelafile{number-staff-lines.fly}
+
+@section Spacing
+
+In a limited number of cases, LilyPond corrects for optical spacing
+effects.  In this example, space for opposite pointed stems is adjusted
+
+@mudelafile{stem-spacing.sly}
+
+If there are accidentals in the music, we add space, but the space
+between note and accidentals is less than between the notes with the
+same value.  Clef changes also get extra space, but not as much as
+barlines.
+
+
+Even if a line is very tightly spaced, there will still be room
+between prefatory matter and the following notes.  The space after the
+prefatory is very rigid.  In contrast, the space before the barline
+must stretch like the space within the measure.
+
+Tight:
+
+@mudelafile{spacing-tight.ly}
+
+Natural:
+
+@mudelafile{spacing-natural.ly}
+
+Loose:
+
+@mudelafile{spacing-loose.ly}
+
+
+@section Global stuff
+
+Markings that are attached to (invisible) barlines are 
+delicate: the are attached to the rest of the score without the score
+knowing it.  Consequently, they fall over  often.
+
+@mudelafile{bar-scripts.ly}
+
+Staff margins are also markings attached to barlines.  They should be
+left of the staff, and be centered vertically wrt the staff.  They may
+be on normal staffs, but also on compound staffs, like the PianoStaff
+
+@mudelafile{staff-margin.ly}
+
+Breathing signs, also used for phrasing, do normally not influence
+global spacing -- only if space gets tight, notes are shifted to make
+room for the breathing sign. Breathing signs break beams running
+through their voice. In the following example, the notes in the first
+two measures all have the same distance from each other:
+
+@mudelafile{breathing-sign.ly}
+
+Fonts are  available in a default set of sizes: 11, 13, 16, 20, 23 and
+26pt staffheight.  Sizes of the text fonts and symbol fonts are made
+to match the staff dimensions.    
+
+@mudelafile[nofly]{size11.ly}
+
+@mudelafile[nofly]{size13.ly}
+
+@mudelafile[nofly]{size16.ly}
+
+@mudelafile[nofly]{size20.ly}
+
+@mudelafile[nofly]{size23.ly}
+
+@mudelafile[nofly]{size26.ly}
+
+
+@section Clefs and Time Signatures
+
+The transparent clef should not occupy any space and with style
+@code{fullSizeChanges}, the changing clef should be typeset in full
+size. For octaviated clefs, the ``8'' should appear closely above or
+below the clef respectively.  The ``8'' is processed in a convoluted
+way, so this is fragile as well.
+
+@mudelafile{clefs.ly}
+
+@ignore
+@c the input file is too long and does not test for specific bugs
+By default, time signatures are written with two numbers. With style
+``C'', 4/4 and 2/2 are written with their corresponding symbols and
+with style ``old'', 2/2, 3/2, 2/4, 3/4, 4/4, 6/4, 9/4, 4/8, 6/8 and
+9/8 are typeset with symbols, all other signatures retain the default
+layout. The style ``1'', gives single number signatures for all
+signatures. 
+%
+\mu delafile{time.fly}
+@end ignore
+
+@bye
diff --git a/Documentation/tex/tutorial.tely b/Documentation/tex/tutorial.tely
new file mode 100644 (file)
index 0000000..23ad4c3
--- /dev/null
@@ -0,0 +1,933 @@
+\\input texinfo @c -*-texinfo-*-
+@setfilename tutorial.info
+@settitle Typesetting music with LilyPond
+
+
+@ifinfo
+
+This is a short tutorial to show you how  LilyPond works.  It is not a
+tutorial.  It was written by Han-Wen Nienhuys.
+
+Copyright 1999 by its authors.
+@end ifinfo
+
+@titlepage
+@sp 10
+@comment The title is printed in a large font.
+@center @titlefont{LilyPond tutorial}
+@vskip 20pt
+@center @titlefont{Han-Wen Nienhuys}
+
+@vskip 0pt plus 1filll
+Copyright @copyright{} 1999 by its author(s)
+@end titlepage
+
+
+@node Top, , The end, (dir)
+@top
+@menu
+* Typesetting music with LilyPond::Typesetting music with LilyPond
+@end menu
+
+
+
+
+
+
+
+
+
+
+
+
+@node Typesetting music with LilyPond, Introduction, , Top
+@menu
+* Introduction::                  Introduction
+* tutorial-introduction::         tutorial-introduction
+* The first tune::                The first tune
+* sec-firsttune::                 sec-firsttune
+* Lyrics and chords::             Lyrics and chords
+* Piano music::                   Piano music
+* The end::                       The end
+@end menu
+@chapter Typesetting music with LilyPond
+
+
+
+
+
+
+@node Introduction, tutorial-introduction, Typesetting music with LilyPond, Typesetting music with LilyPond
+@section Introduction
+@node tutorial-introduction, The first tune, Introduction, Typesetting music with LilyPond
+
+  
+LilyPond prints music from a specification that you, the user, supply.
+You have to give that specification using a @emph{language}.  This
+document is a gentle introduction to that language, which is called
+Mudela, an acronym of Music Definition Language.
+
+This tutorial will demonstrate how to use Mudela by presenting
+examples of input along with resulting output.  We will use English
+terms for notation.  In case you are not familiar with those, you may
+consult the glossary that is distributed with LilyPond.
+
+The examples discussed are included in the distribution, in the
+subdirectory @file{input/tutorial/}.  It is recommended that you
+experiment with writing Mudela input yourself, to get a feel for
+how LilyPond behaves.
+
+@node The first tune, sec-firsttune, tutorial-introduction, Typesetting music with LilyPond
+@section The first tune
+@node sec-firsttune, Lyrics and chords, The first tune, Typesetting music with LilyPond
+
+To demonstrate what LilyPond input looks like, we start off with a
+full fledged, yet simple example. It is a convoluted version
+of the famous menuet in J. S. Bach's @emph{Klavierbuechlein}.
+
+@mudela[verbatim]
+% lines preceded by a percent are comments.
+\include "paper16.ly"
+\score {
+    \notes                        
+    \relative c'' \sequential{                
+            \time 3/4;                
+            \key g;
+
+        \repeat "volta" 2 {
+            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.  |
+        }
+
+        b'4 g8 a b g
+        a4 d,8 e fis d |
+        g4 e8 fis g d cis4 b8 cis a4 |
+        a8-. b-. cis-. d-. e-. fis-.
+        g4 fis e |
+        fis a,  r8 cis8
+        d2.-\fermata
+        \bar "|.";
+    }
+    \paper {
+       % standard settings are too wide for a book
+       linewidth = 14.0 \cm;
+   }
+}
+@end mudela
+
+Enter it (or copy it, the filename is @file{menuet.ly}), compile it
+with LilyPond and view the output.  Details of this procedure may vary
+from system to system.  To create the output, one would issue the
+command `@code{ly2dvi menuet}'.  @file{ly2dvi} is a program that does
+the job of running LilyPond and TeX, handling of titles and
+adjusting of page margins.
+
+If all goes well, the file @file{menuet.dvi} will be created.
+To view this output, issue the command `@code{xdvi menuet}'.
+
+Now that we are familiar with the procedure of producing output, we
+will analyse the input, line by line.@example 
+
+        % lines preceded by a percent are comments.
+@end example 
+The percent sign, `@code{%}', introduces a line comment.  If you want to
+make larger comments, you can use block comments. These are delimited
+by `@code{%@{}' and `@code{%@}}'@example 
+
+        \input "paper16.ly"
+@end example 
+By default, LilyPond will use definitions for a 20
+point@footnote{A point is the standard measure of length for
+printing.  One point is 1/72.27 inch.} high staff.  We want smaller
+output (16 point staff height), so we must import the settings for
+that size, which is done.@example 
+
+        \score @{
+@end example 
+  A mudela file combines music with directions for outputting that
+music.  The music is combined with the output directions by putting
+them into a @code{\score} block.
+@example 
+
+        \notes                
+@end example 
+ This makes LilyPond ready for accepting notes.
+@example 
+
+        \relative c''
+@end example 
+ As we will see, pitches are combinations of octave, note name and
+chromatic alteration.  In this scheme, the octave is indicated by
+using raised quotes (`@code{'}') and ``lowered'' quotes (commas:
+`@code{,}').  The central C is denoted by @code{c'}.  The C one octave
+higher is @code{c''}.  One and two octaves below the central C is
+denoted by @code{c} and @code{c,} respectively.
+
+For pitches in a long piece you might have to type many quotes.  To
+remedy this, LilyPond has a ``relative'' octave entry mode.  In this
+mode, octaves of notes without quotes are chosen such that a note is
+as close as possible (graphically, on the staff) to the the preceding
+note.  If you add a high-quote an extra octave is added.  The lowered
+quote (a comma) will subtract an extra octave.  Because the first note
+has no predecessor, you have to give the (absolute) pitch of the note
+to start with.@example 
+
+        \sequential @{
+@end example 
+  What follows is sequential music, i.e.,
+notes that are to be played and printed after each other.@example 
+
+        \time 3/4;
+@end example 
+  This command changes the time signature of the current piece: a 3/4
+sign is printed.  This command is also used to generate bar lines in
+the right spots.@example 
+
+        \key g;
+@end example 
+ This command changes the current key to G-major.  Although this
+command comes after the @code{\time} command, in the output, the key
+signature comes before the time signature: LilyPond knows about music
+typesetting conventions. @example 
+
+        \repeat "volta" 2
+@end example 
+  This command tells LilyPond that the following piece of music must
+be played twice; @code{"volta"} volta brackets should be used for
+alternatives---if there were any.
+@example 
+
+        @{
+@end example 
+The subject of the repeat is again sequential music.  Since
+@code{\sequential} is such a common construct, a shorthand is provided:
+just leave off @code{\sequential}, and the result is the same. @example 
+
+        d4
+@end example 
+ This is a note with pitch @code{d} (determined up to octaves).  The
+relative music was started with a @code{c''}, so the real pitch of this
+note is @code{d''}.  The @code{4} designates the duration of the note
+(it is a quarter note). @example 
+
+        a b
+@end example 
+These are notes with pitch @code{a} and @code{b}.  Because their
+duration is the same as the @code{g}, there is no need to enter the
+duration (You may enter it anyway, eg. @code{a4 b4}) @example 
+
+        d4 g, g |
+@end example 
+ Three more notes.  The `@code{|}' character is a `barcheck'.  When
+processing the music, LilyPond will verify that barchecks are found at
+the start of a measure.  This can help you track down errors.
+
+ So far, no notes were chromatically altered.  Here is the first one
+that is: @code{fis}. Mudela by default uses Dutch note names, and
+``Fis'' is the Dutch note name for ``F sharp''.  However, there is no
+sharp sign in the output. The program keeps track of key signatures,
+and will only print accidentals if they are needed.
+@example 
+
+        c8 d e fis
+@end example 
+LilyPond guesses were beams can be added to eighth and shorter notes.
+In this case, a beam over 4 eighths is added.
+@example 
+
+        c4 d8( )c b a( )b4 c8 b a g |
+@end example 
+  The next line shows how to make a slur:
+the beginning and ending note of the slur is marked with an opening and
+closing parenthesis respectively.  In the line shown above this is
+done for two slurs.  Slur markers (parentheses) are between
+the notes.@example 
+
+        a4 [b8 a] [g fis] 
+@end example 
+Automatic beaming can be overridden by inserting beam marks
+(brackets).  Brackets are put around notes you want beamed.@example 
+
+        g2.  |
+@end example 
+A duration with augmentation dot  is notated
+with the duration number followed by a period.@example 
+
+        @}
+@end example 
+  This ends the sequential music to be repeated.  LilyPond will typeset
+a repeat bar.  @example 
+
+        cis'4 b8 cis a4 |
+@end example 
+ This line shows that Lily will print an accidental if that is
+needed: the first C sharp will be printed with an accidental, the
+second one without.  @example 
+
+        a8-. b-. cis-. d-. e-. fis-.
+@end example 
+You can enter articulation signs either in a verbose form using a
+shorthand.  Here we demonstrate the shorthand: it is formed by a dash
+and the the character for the articulation to use, e.g. `@code{-.}' for
+staccato as shown above.  @example 
+
+        fis a, r8 cis8
+@end example 
+Rests are denoted by the special notename `@code{r}'.  You can also enter
+an invisible rest by using the special notename `@code{s}'.
+@example 
+
+        d2.-\fermata
+@end example 
+ All articulations have a verbose form, like @code{\fermata}.  The
+command `@code{\fermata}' is not part of the core of the language (most
+of the other discussed elements are), but it is a shorthand for a more
+complicated description of a fermata.  @code{\fermata} names that
+description and is therefore called an @emph{identifier}. @example 
+
+        @}
+@end example 
+Here the music ends.
+@example 
+
+        \paper @{
+                linewidth = 14.0\cm;
+        @}
+@end example 
+This specifies a conversion from music to notation output.  Most of
+the details of this conversions (font sizes, dimensions, etc.) have
+been taken care of, but  to fit the output  in this document, it has
+to be smaller.  We do this by setting the line width to 14 centimeters
+(approximately 6 inches).
+@example 
+
+        @}
+@end example 
+The last brace ends the @code{\score} block.
+
+There are two things to note here. The format contains musical
+concepts like pitches and durations, instead of symbols and positions:
+the input format tries to capture the meaning of @emph{music}, and not
+notation.  Therefore Second, the format tries to be @emph{context-free}:
+a note will sound the same regardless of the current time signature,
+the key, etc.
+
+The purpose of LilyPond is explained informally by the term `music
+typesetter'.  This is not a fully correct name: not only does the
+program print musical symbols, it also makes esthetic decisions.  All
+symbols and their placement is @emph{generated} from a high-level musical
+description.  In other words,  LilyPond would be best
+described by `music compiler' or `music to notation compiler'.
+
+@node Lyrics and chords, Piano music, sec-firsttune, Typesetting music with LilyPond
+@section Lyrics and chords
+
+In this section we show how to typeset a song of unknown
+origin.@footnote{The author would welcome information about the origin
+of this song.}.
+
+@example 
+\header @{
+        title = "The river is flowing";
+        composer = "Traditional (?)";
+@}
+\include "paper16.ly"
+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.
+        \bar "|.";
+@}
+
+text = \lyrics @{
+        The ri -- ver is flo- __ wing, flo -- wing and gro -- wing, the
+        ri -- ver is flo -- wing down to the sea.
+@}
+
+accompaniment =\chords @{
+        r8
+        c2-3- f-3-.7 d-min es4 c8-min r8
+        c2-min f-min7 g-7^3.5 c-min @}
+
+\score @{
+        \simultaneous @{
+%         \accompaniment
+          \context ChordNames \accompaniment
+
+          \addlyrics
+            \context Staff = mel @{        
+              \property Staff.noAutoBeaming = "1"
+              \property Staff.automaticMelismata = "1"
+              \melody 
+            @}
+            \context Lyrics \text
+        @}
+        \midi  @{ @}
+        \paper @{ linewidth = 10.0\cm; @}
+@} 
+@end example 
+
+
+The result would look this@footnote{The titling and font size shown
+may differ, since the titling in this document is not generated by
+@file{ly2dvi}.}.
+
+@center @strong{The river is flowing}
+@center Traditional 
+
+@mudela[center]
+\header {
+        title = "The river is flowing";
+        composer = "Traditional (?)";
+}
+\include "paper16.ly"
+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.
+        \bar "|.";
+}
+
+text = \lyrics {
+        The ri -- ver is flo- __ wing, flo -- wing and gro -- wing, the
+        ri -- ver is flo -- wing down to the sea.
+}
+
+accompaniment =\chords {
+        r8
+        c2-3- f-3-.7 d-min es4 c8-min r8
+        c2-min f-min7 g-7^3.5 c-min }
+
+\score {
+        \simultaneous {
+%         \accompaniment
+          \context ChordNames \accompaniment
+
+          \addlyrics
+            \context Staff = mel {
+              \property Staff.noAutoBeaming = "1"
+              \property Staff.automaticMelismata = "1"
+              \melody 
+            }
+            \context Lyrics \text
+        }
+        \midi  { }
+        \paper { linewidth = 10.0\cm; }
+}
+@end mudela
+
+Again, we will dissect the file line by line.@example 
+
+        \header @{
+@end example 
+Information about the music you are about to typeset goes into a
+@code{\header} block.  The information in this block is not used by
+LilyPond, but it is included in the output.  @file{ly2dvi} uses this
+information to print titles above the music.
+@example 
+
+        title = "The river is flowing";
+        composer = "Traditional (?)"; 
+@end example 
+the @code{\header} block contains assignments.  An assignment starts
+with a string.  (which is unquoted, in this case). Then comes the
+equal sign `@code{=}'.  After the equal sign comes the expression you
+want to store.  In this case, you want to put in strings.  The
+information has to be quoted here, because it contains spaces. The
+assignment is finished with a semicolon.@example 
+
+        \include "paper16.ly"
+@end example 
+Smaller size for inclusion in a book.@example 
+
+        melody = \notes \relative c' @{
+@end example 
+The structure of the file will be the same as the previous one, a
+@code{\score} block with music in it.  To keep things readable, we will
+give names to the different parts of music, and use the names to
+construct the music within the score block.
+
+@example 
+
+        \partial 8;
+@end example 
+
+The piece starts with an anacrusis of one eighth.  @example 
+
+        c4 c8 d [es () d] c4 | f4 f8 g [es() d] c g |
+        c4 c8 d [es () d] c4 | d4 es8 d c4.
+        \bar "|.";
+@end example 
+We use explicit beaming.  Since this is a song,  we will turn automatic
+beams off, and use explicit beaming where needed.@example 
+
+        @}
+@end example 
+This ends the definition of @code{melody}.  Note that there are no
+semicolons after assignments at top level.@example 
+
+        text = \lyrics @{
+@end example 
+Another identifier assignment.  This one is for the lyrics. 
+Lyrics are formed by syllables that have duration, and not by
+notes. To make LilyPond parse words as syllables,  switch it  into
+lyrics mode with @code{\lyrics}.  Again, the brace after @code{\lyrics}
+is a shorthand for @code{\sequential @{}. @example 
+
+        The4 ri -- ver is flo- __ wing,  flo -- wing and gro -- wing, the
+        ri- ver is flo- __ wing down to the sea.
+        @}
+@end example 
+The syllables  themselves are  separated by spaces.  You can get syllable
+extenders by entering `@code{__}', and centered hyphens with
+`@code{-}@code{-}'.  We enter the syllables as if they are all quarter notes
+in length (hence the @code{4}), and use a feature to align the
+syllables to the music (which obviously isn't all quarter notes.)
+@example 
+
+        accompaniment =\chords @{
+@end example 
+We'll put chords over the music.  There is a special mode (analogous
+to @code{\lyrics} and @code{\notes} mode) where you can give the names
+of the chords you want, instead of the notes comprising the chord.
+@example 
+
+        r8
+@end example 
+There is no accompaniment during the anacrusis.@example 
+
+        c2-3- f-3-.7
+@end example 
+A chord is started by  the tonic of the chord. The
+first one lasts a half note.  An unadorned note creates a major
+triad, while a minor triad is wanted.  @code{3-} modifies the third to
+be small. @code{7} modifies (adds) a seventh, which is small by default
+to create the @code{f a c es} chord.  Multiple modifiers must be
+separated by a dot.@example 
+
+        d-min es4 c8-min r8
+@end example 
+Some modifiers have predefined names, eg. @code{min} is  the same as
+@code{3-}, so @code{d-min} is a minor @code{d} chord.@example 
+
+        c2-min f-min7 g-7^3.5 c-min @}
+@end example 
+A named modifier @code{min} and a normal modifier @code{7} do not have
+to be separated by a dot.  Tones from a chord are removed with chord
+subtractions.  Subtractions are started with a caret, and they are
+also separated by dots.  In this example, @code{g-7^3.5} produces a
+minor seventh.  The brace ends the sequential music. @example 
+
+        \score @{
+                \simultaneous @{
+@end example 
+We assemble the music in the @code{\score} block.  Melody, lyrics and
+accompaniment have to sound at the same time, so they should be
+@code{\simultaneous}.@example 
+
+        %\accompaniment
+@end example 
+Chord mode generates notes grouped in @code{\simultaneous} music.  If
+you remove the comment sign, you can see the chords in normal
+notation: they will be printed as note heads on a separate
+staff. @example 
+
+        \context ChordNames \accompaniment
+@end example 
+Normally, the notes that you enter are transformed into note heads.
+The note heads alone make no sense, they need surrounding information:
+a key signature, a clef, staff lines, etc.  They need @emph{context}.  In
+LilyPond, these symbols are created by objects called `interpretation
+context'.  Interpretation contexts only exist during a run of
+LilyPond.  Interpretation contexts that are for printing music (as
+opposed to playing music) are called `notation context'.
+
+By default, LilyPond will create a Staff contexts for you.  If you
+would remove the @code{%} sign in the previous line, you can see that
+mechanism in action.
+
+We don't want default contexts here, because we want names, not note
+heads.  An interpretation context can also created upon explicit
+request. The keyword for such a request is @code{\context}.  It takes
+two arguments.  The first is the name of a interpretation context.
+The name is a string, it can be quoted with double quotes).  The
+second argument is the music that should be interpreted in this
+context.  For the previous line, we could have written @code{\context
+Staff \accompaniment}, and get the same effect.@example 
+
+        \addlyrics
+@end example 
+The lyrics need to be aligned with the melody.  This is done by
+combining both with @code{\addlyrics}.  @code{\addlyrics} takes two
+pieces of music (usually a melody and lyrics, in that order) and
+aligns the syllables of the second piece under the notes of the
+first piece.  If you would reverse the order, the notes would be
+aligned on the lyrics, which is not very useful. (Besides, it looks
+silly.)@example 
+
+        \context Staff = mel @{
+@end example 
+This is the argument of @code{\addlyrics}.  We instantiate a
+@code{Staff} context explicitly: should you chose to remove comment
+before the ``note heads'' version of the accompaniment, the
+accompaniment will be on a nameless staff.  The melody has to be on a
+different staff as the accompaniment.  This is accomplished by giving
+the melody staff a different name.@example 
+
+        \property Staff.noAutoBeaming = "1"
+@end example 
+An interpretation context has variables that tune its behaviour.  One
+of the variables is @code{noAutoBeaming}.  If set and non-zero (i.e.,
+true) LilyPond will not try to put automatic beaming on the current
+staff.@example 
+
+        \property Staff.automaticMelismata = "1"
+@end example 
+Similarly, we  don't want to print a  syllable when there is
+a slur. This sets up the Staff context to signal slurs while
+@code{\addlyrics} is processed. @example 
+
+          \melody
+        @}
+@end example 
+Finally, we put the melody on the current staff.  Note that the
+@code{\property} directives and @code{\melody} are grouped in sequential
+music,  so the property settings are done before the melody is
+processed.  @example 
+
+        \context Lyrics \text
+@end example 
+The second argument of @code{\addlyrics} is the text. The text also
+should not land on a Staff, but on a interpretation context for
+syllables, extenders, hyphens etc.  This context is called
+Lyrics.@example 
+
+        @}
+@end example 
+This ends @code{\simultaneous}.@example 
+
+        \midi  @{ @}
+@end example 
+This makes the music go to a MIDI file.  MIDI is great for
+checking music you enter.  You listen to the MIDI file: if you hear
+something unexpected, it's probably a typing error.  @code{\midi} is an
+`output definition', a declaration that specifies how to output music
+analogous to @code{\paper @{ @}}.@example 
+
+        \paper @{ linewidth = 10.0\cm; @}
+@end example 
+We also want notation output.  The linewidth is short so the piece
+will be set in two lines. @example 
+
+        @}
+@end example 
+End the score block.
+
+@node Piano music, The end, Lyrics and chords, Typesetting music with LilyPond
+@section Piano music
+
+Our third subject is a piece piano music.  The fragment in the input
+file is a piano reduction of the G major Sinfonia by Giovanni Battista
+Sammartini.  It was composed around 1740. 
+
+@mudela[verbatim]
+
+\include "paper16.ly";
+
+viola = \notes \relative c' \context Voice = viola {
+        <c4-\f g' c>
+        \property Voice.verticalDirection = \down g'8. b,16
+        s1 s2. r4
+        g
+}
+
+oboes = \notes \relative c'' \context Voice = oboe {
+        \stemup s4  g8. b,16 c8 r <e'8.-\p g> <f16 a>
+        \grace <e8( g> <d4 f> <c2 e> \times 2/3 { <d8 \< f> <e g> <f a> }
+        <
+          { \times 2/3 { a8 g c } \! c2 }
+          \context Voice = oboeTwo {
+                \stemdown
+                \grace {
+                    \property Grace.verticalDirection = \down
+                    [f,16 g] }
+                f8 e e2
+        } >
+        \stemboth
+        \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,>
+}
+
+hoomPah  = \notes \transpose c' {
+    c8 \translator Staff = top \stemdown 
+    c'8 \translator Staff = bottom \stemup }
+
+hoomPahHoomPah = { [\hoomPah \hoomPah] }
+
+bassvoices = \notes \relative c' {
+        c4 g8. b,16
+        \hoomPahHoomPah \hoomPahHoomPah \hoomPahHoomPah \hoomPahHoomPah
+        \stemdown [c8 c'8] r4
+        <g d'> r4
+        < {\stemup r2 <e4 c'> <c8 g'> }
+          \context Voice = reallyLow  {\stemdown g2 ~ | g4 c8 } >
+}
+
+\score {
+        \context PianoStaff \notes <
+                \context Staff = top < \time 2/2;
+                        \context Voice = viola \viola
+                        \oboes
+                >
+                \context Staff = bottom < \time 2/2; \clef bass;
+                        \bassvoices
+                >
+        >
+        \midi { }
+        \paper {
+          indent = 0.0;
+          linewidth = 15.0 \cm; }
+}
+@end mudela
+
+If it looks like incomprehensible gibberish to you... Then you are
+right.  The author has doctored this example to have as many quirks in
+one system as possible.@example 
+viola = \notes \relative c'  \context Voice = viola @{ 
+@end example 
+In this example, you can see multiple parts on a staff.  Each part is
+associated with one notation context.  This notation context handles
+stems and dynamics (among others).  The name of this context is
+@code{Voice}.  For each part we have to make sure that there is
+precisely one Voice context@footnote{If @code{\context} would not
+have been specified explicitly, three @code{Voice} contexts would be
+created: one for each note  in the first chord.}.@example 
+<c4-\f g' c> 
+@end example 
+@code{<} and @code{>} are short hands for @code{\simultaneous @{} and
+@code{@}}. So the expression enclosed in @code{<} and @code{>} is a
+chord.  @code{\f} places a forte symbol  under the chord.@example 
+\property Voice.verticalDirection = \down 
+@end example 
+@code{verticalDirection} is a property of the voice context. It
+controls the directions of stems, articulations marks and other
+symbols.
+  If @code{verticalDirection} is set to @code{\down}
+(identifier for the integer -1) the stems go down,
+@code{\up} (identifier for the integer 1) makes the stems go up.@example 
+        g'8. b,16 
+@end example 
+Relative octaves work a little differently with chords.  The starting
+point for the note following a chord is the first note of the chord.  So
+the @code{g} gets an octave up quote: it is a fifth above the starting
+note of the previous chord (the central C).
+
+@example 
+s1 s2. r4 
+@end example 
+@code{s} is a `spacer' rest.  It does not print anything,  but it does
+have the duration of a rest.   @example 
+oboes = \notes \relative c'' \context Voice = oboe @{ 
+@end example 
+Now comes a part for two oboes.  They play homophonically, so we
+print the notes as one voice that makes chords. Again, we insure that
+these notes are indeed processed by precisely one context with
+@code{\context}.@example 
+\stemup s4  g8. b,16 c8 r <e'8.-\p g> <f16 a> 
+@end example 
+@code{\stemup} is an identifier reference.  It is shorthand for
+@code{\property Voice.verticalDirection = \up}.  If possible, you
+should use predefined identifiers like these for setting properties.
+Your input will be less dependent upon the implementation of LilyPond.
+@example 
+\grace <e8( g> < )d4 f> <c2 e> 
+@end example 
+@code{\grace} introduces grace notes.  It takes one argument, in this
+case a chord.  The slur started on the @code{e} of the chord
+will be attached to the next note.@footnote{LilyPond will squirm
+about unended Slurs.  In this case, you can ignore the warning}.
+@example 
+\times 2/3 
+@end example 
+Tuplets are made with the @code{\times} keyword.  It takes two
+arguments: a fraction and a piece of music.  The duration of the
+second argument is multiplied by the first argument.  Triplets make
+notes occupy 2/3 of their notated duration, so in this case the
+fraction is 2/3. @example 
+@{ <d8 \< f> <e g> <f a> @} 
+@end example 
+The piece of music to be `tripletted' is sequential music containing
+three notes.  On the first chord (the @code{d}), a crescendo is started
+with @code{\<}.@example 
+< 
+@end example 
+At this point, the homophonic music splits into two rhythmically
+different parts.  We can't use a sequence of chords to enter this, so
+we make a `chord' of sequences to do it.  We start with the upper
+voice, which continues with upward stems: @example 
+ @{ \times 2/3 @{ a8 g c @} \! c2 @} 
+@end example 
+The crescendo is ended at the half note by the escaped exclamation
+mark `@code{\!}'.  @example 
+\context Voice = oboeTwo @{
+\stemdown 
+@end example 
+We can't share stems with the other voice, so we have to create a new
+@code{Voice} context.  We give it the name @code{oboeTwo} to distinguish
+it from the other context.  Stems go down in this voice. @example 
+\grace @{  
+@end example 
+When a grace section is processed, a @code{Grace} context is
+created. This context acts like a miniature score of its own.  It has
+its own time bookkeeping, and you can make notes, beams, slurs
+etc. Here fiddle with a property and make a beam.  The argument of
+@code{\grace} is sequential music.@example 
+\property Grace.verticalDirection = \down
+[f,16 g] @} 
+@end example 
+Normally, grace notes are always stem up, but in this case, the upper
+voice interferes. We set the stems down here.
+
+As far as relative mode is concerned, the previous note is the
+@code{c'''2} of the upper voice, so we have to go an octave down for
+the @code{f}.
+@example 
+
+  f8 e e2
+@} > 
+@end example 
+This ends the two-part section. @example 
+\stemboth
+\grace <c,8( e> <)b8. d8.-\trill> <c16 e> |  
+@end example 
+@code{\stemboth} ends the forced stem directions. From here, stems are
+positioned as if it were single part music.
+
+The bass has a little hoom-pah melody to demonstrate parts switching
+between staffs.  Since it is repetitive, we use identifiers:@example 
+hoomPah  = \notes \transpose c' @{ 
+@end example 
+Transposing can be done with @code{\transpose}.  It takes two
+arguments; the first specifies what central C should be transposed to.
+The second is the to-be-transposed music.  As you can see, in this
+case, the transposition is a no-op.  Central C is transposed to
+central C.
+
+The purpose of this no-op is circumventing relative mode.  Relative
+mode can not be used in conjunction with transposition, so relative
+mode will leave the contents of @code{\hoomPah} alone.  We can use it
+without having to worry about getting the motive in a wrong
+octave@footnote{@code{hoomPah = \relative ...} would be more
+intuitive to use, but that would not let me plug @code{\transpose}
+:-).}.@example 
+c8 \translator Staff = top \stemdown  
+@end example 
+We assume that the first note will be put in the lower staff.  After
+that note we switch to the upper staff with @code{\translator}.  To be
+precise, this @code{\translator} entry switches the current voice to a
+@code{Staff} named @code{top}. So we have to name the upper staff
+`@code{top}'.  Stem directions are set to avoid interfering with the
+oboe voices.  @example 
+c'8 \translator Staff = bottom \stemup @} 
+@end example 
+Then a note is put on the upper staff, and we switch again.  We have
+to name the lower staff `@code{bottom}'. @example 
+hoomPahHoomPah = @{ [\hoomPah \hoomPah] @} 
+@end example 
+Put two of these fragments in sequence, and beam them.@example 
+bassvoices = \notes \relative c' @{
+c4 g8. b,16
+\hoomPahHoomPah \hoomPahHoomPah \hoomPahHoomPah
+\hoomPahHoomPah 
+@end example 
+Entering the bass part is easy: the hoomPahHoomPah variable is
+referenced four times.@example 
+\context Voice = reallyLow  @{\stemdown g2 ~ | g4 c8 @} > 
+@end example 
+After skipping some lines, we see @code{~}.  This mark makes ties.@example 
+\context PianoStaff 
+@end example 
+For piano music, a special context is needed to get cross staff
+beaming right.  It is called @code{PianoStaff}.@example 
+\context Staff = bottom < \time 2/2; \clef bass; 
+@end example 
+The bottom staff must have a different clef.@example 
+indent = 0.0; 
+@end example 
+To make some more room on the line, the first (in this case the only)
+line is not indented.  The line still looks is very cramped, but that is due
+to the format of this tutorial.
+
+This example shows a lot of features, but the organisation isn't
+perfect.  For example, it would be less confusing to use a chord
+containing sequential music than a sequence of chords for the oboe
+parts.
+
+[TODO: demonstrate Hara-Kiri with scores and  part extraction.]
+
+@node The end, Top, Piano music, Typesetting music with LilyPond
+@section The end        
+         
+That's all folks.  From here, you can either try fiddling with input
+files, or you can read the reference manual.
+
+
+@bye
diff --git a/Documentation/tex/tutorial.yo b/Documentation/tex/tutorial.yo
deleted file mode 100644 (file)
index 5d5c11b..0000000
+++ /dev/null
@@ -1,999 +0,0 @@
-mailto(gnu-music-discuss@gnu.org)
-COMMENT(-*-text-*-)
-
-redef(var)(1)(whenlatex(latexcommand({\normalfont\scshape )ARG1+latexcommand(}))\
-    whenhtml(sc(ARG1)))
-
-COMMENT(urg)
-DEFINEMACRO(Large)(1)(\
-    whenlatex(latexcommand(\Large{)ARG1+latexcommand(}))\
-    whentexinfo(texinfocommand(@strong{)ARG1+texinfocommand(}))\
-    whenhtml(htmlcommand(<font size=+2>)ARG1+htmlcommand(</font>))\
-    whentxt(ARG1))
-
-COMMENT( This document contains Mudela fragments.  You need at least
-Yodl-1.30.18 to convert this to tex or html.
-
-TODO
-
-    * pipethrough(date) sucks.
-    * paragraphs have too much space.
-    * fix the amount of spaces (urg:tabs) at the start of verb() blocks
-      or even better: do verb and description side-by side
-      (TeX: use minipage construct):
-
-      \foo                  This does the
-                            foo construct
-
-      The explaining texts are right in between examples.
-      Constructs like 'This shows' and 'The next line' are esp.
-      confusing, here.
-)
-
-COMMENT(
-        Mainly written by Han-Wen Nienhuys, 
-
-        with help of (among others)
-
-        * Jan Nieuwenhuizen
-)
-
-htmlbodyopt(bgcolor)(white)
-htmlcommand(<font color=black>)
-
-latexlayoutcmds(
-    \topmargin -0.25in  
-    \textheight 53\baselineskip
-    \advance\textheight by \topskip
-    \marginparwidth 1 in        %   Width of marginal notes.
-    \oddsidemargin 0.25 in      %   Note that \oddsidemargin = \evensidemargin
-    \evensidemargin 0.25 in
-    \marginparwidth 0.75 in
-    \textwidth 5.875 in % Width of text line.
-    \input mudela-book
-)
-
-whenlatex(notableofcontents())
-whentexinfo(notableofcontents())
-
-article(Typesetting music with LilyPond)
-      (Han-Wen Nienhuys and Jan Nieuwenhuizen)
-      (nop()PIPETHROUGH(date "+%B %d, %Y")()()nop())
-
-
-latexcommand(\def\interexample{})
-latexcommand(\def\preexample{\par})
-latexcommand(\def\postexample{\par\medskip})
-latexcommand(\def\file#1{{code(#1)}})
-
-whenhtml(
-includefile(html-disclaimer.yo-urg)
-)
-
-
-sect(Introduction)
-label(tutorial:introduction)
-latexcommand(\parindent2pc)
-  
-LilyPond prints music from a specification that you, the user, supply.
-You have to give that specification using a em(language).  This
-document is a gentle introduction to that language, which is called
-Mudela, an acronym of Music Definition Language.
-
-This tutorial will demonstrate how to use Mudela by presenting
-examples of input along with resulting output.  We will use English
-terms for notation.  In case you are not familiar with those, you may
-consult the glossary that is distributed with LilyPond.
-
-The examples discussed are included in the distribution, in the
-subdirectory file(input/tutorial/).  It is recommended that you
-experiment with writing Mudela input yourself, to get a feel for
-how LilyPond behaves.
-
-sect(The first tune)
-label(sec:firsttune)
-
-To demonstrate what LilyPond input looks like, we start off with a
-full fledged, yet simple example. It is a convoluted version
-of the famous menuet in bind(J.)bind(S.)Bach's em(Klavierbuechlein).
-
-COMMENT(urg: the fermata sign is placed below the note by default)
-mudela(verbatim)(% lines preceded by a percent are comments.
-\include "paper16.ly"
-\score {
-    \notes                        
-    \relative c'' \sequential{                
-            \time 3/4;                
-            \key g;
-
-        \repeat "volta" 2 {
-            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.  |
-        }
-
-        b'4 g8 a b g
-        a4 d,8 e fis d |
-        g4 e8 fis g d cis4 b8 cis a4 |
-        a8-. b-. cis-. d-. e-. fis-.
-        g4 fis e |
-        fis a,  r8 cis8
-        d2.-\fermata
-        \bar "|.";
-    }
-    \paper {
-       % standard settings are too wide for a book
-       linewidth = 14.0 \cm;
-   }
-})
-
-Enter it (or copy it, the filename is file(menuet.ly)), compile it
-with LilyPond and view the output.  Details of this procedure may vary
-from system to system.  To create the output, one would issue the
-command `code(ly2dvi menuet)'.  file(ly2dvi) is a program that does
-the job of running LilyPond and TeX(), handling of titles and
-adjusting of page margins.
-
-If all goes well, the file file(menuet.dvi) will be created.
-To view this output, issue the command `code(xdvi menuet)'.
-
-Now that we are familiar with the procedure of producing output, we
-will analyse the input, line by line.COMMENT(
-
-)verb(
-        % lines preceded by a percent are comments.
-)COMMENT(
-
-)The percent sign, `code(%)', introduces a line comment.  If you want to
-make larger comments, you can use block comments. These are delimited
-by `code(%{)' and `code(%})'COMMENT(
-
-)verb(
-        \input "paper16.ly"
-)COMMENT(
-
-)By default, LilyPond will use definitions for a 20
-nop(point)footnote(A point is the standard measure of length for
-printing.  One point is 1/72.27 inch.) high staff.  We want smaller
-output (16 point staff height), so we must import the settings for
-that size, which is done.COMMENT(
-
-)verb(
-        \score {
-) COMMENT(
-
-) A mudela file combines music with directions for outputting that
-music.  The music is combined with the output directions by putting
-them into a code(\score) block.
-verb(
-        \notes                
-) COMMENT( 
-
-)This makes LilyPond ready for accepting notes.
-verb(
-        \relative c''
-)COMMENT(
-
-) As we will see, pitches are combinations of octave, note name and
-chromatic alteration.  In this scheme, the octave is indicated by
-using raised quotes (`code(')') and ``lowered'' quotes (commas:
-`code(,)').  The central C is denoted by code(c').  The C one octave
-higher is code(c'').  One and two octaves below the central C is
-denoted by code(c) and code(c,) respectively.
-
-For pitches in a long piece you might have to type many quotes.  To
-remedy this, LilyPond has a ``relative'' octave entry mode.  In this
-mode, octaves of notes without quotes are chosen such that a note is
-as close as possible (graphically, on the staff) to the the preceding
-note.  If you add a high-quote an extra octave is added.  The lowered
-quote (a comma) will subtract an extra octave.  Because the first note
-has no predecessor, you have to give the (absolute) pitch of the note
-to start with.COMMENT(
-
-)verb(
-        \sequential {
-)COMMENT(
-
-)  What follows is sequential music, i.e.,
-notes that are to be played and printed after each other.COMMENT(
-
-)verb(
-        \time 3/4;
-) COMMENT(
-
-) This command changes the time signature of the current piece: a 3/4
-sign is printed.  This command is also used to generate bar lines in
-the right spots.COMMENT(
-
-)verb(
-        \key g;
-)COMMENT(
-
-) This command changes the current key to G-major.  Although this
-command comes after the code(\time) command, in the output, the key
-signature comes before the time signature: LilyPond knows about music
-typesetting conventions. COMMENT(
-
-)verb(
-        \repeat "volta" 2
-) COMMENT(
-
-) This command tells LilyPond that the following piece of music must
-be played twice; code("volta") volta brackets should be used for
-alternatives---if there were any.
-COMMENT(
-
-)verb(
-        {
-)COMMENT(
-
-)The subject of the repeat is again sequential music.  Since
-code(\sequential) is such a common construct, a shorthand is provided:
-just leave off code(\sequential), and the result is the same. COMMENT(
-
-)verb(
-        d4
-)COMMENT(
-
-) This is a note with pitch code(d) (determined up to octaves).  The
-relative music was started with a code(c''), so the real pitch of this
-note is code(d'').  The code(4) designates the duration of the note
-(it is a quarter note). COMMENT(
-
-)verb(
-        a b
-)COMMENT(
-
-)These are notes with pitch code(a) and code(b).  Because their
-duration is the same as the code(g), there is no need to enter the
-duration (You may enter it anyway, eg. code(a4 b4)) COMMENT(
-
-)verb(
-        d4 g, g |
-)COMMENT(
-
-) Three more notes.  The `code(|)' character is a `barcheck'.  When
-processing the music, LilyPond will verify that barchecks are found at
-the start of a measure.  This can help you track down errors.
-
- So far, no notes were chromatically altered.  Here is the first one
-that is: code(fis). Mudela by default uses Dutch note names, and
-``Fis'' is the Dutch note name for ``F sharp''.  However, there is no
-sharp sign in the output. The program keeps track of key signatures,
-and will only print accidentals if they are needed.
-COMMENT(
-
-)verb(
-        c8 d e fis
-)COMMENT(
-
-)LilyPond guesses were beams can be added to eighth and shorter notes.
-In this case, a beam over 4 eighths is added.
-COMMENT(
-
-)verb(
-        c4 d8( )c b a( )b4 c8 b a g |
-) COMMENT(
-
-) The next line shows how to make a slur:
-the beginning and ending note of the slur is marked with an opening and
-closing parenthesis respectively.  In the line shown above this is
-done for two slurs.  Slur markers (parentheses) are between
-the notes.COMMENT( 
-)verb(
-        a4 [b8 a] [g fis] 
-)COMMENT(
-
-)Automatic beaming can be overridden by inserting beam marks
-(brackets).  Brackets are put around notes you want beamed.COMMENT(
-
-)verb(
-        g2.  |
-)COMMENT(
-
-)A duration with augmentation dot  is notated
-with the duration number followed by a period.COMMENT(
-)verb(
-        }
-) COMMENT(
-
-) This ends the sequential music to be repeated.  LilyPond will typeset
-a repeat bar.  COMMENT(
-
-)verb(
-        cis'4 b8 cis a4 |
-) COMMENT(
-
-)This line shows that Lily will print an accidental if that is
-needed: the first C sharp will be printed with an accidental, the
-second one without.  COMMENT(
-
-)verb(
-        a8-. b-. cis-. d-. e-. fis-.
-)COMMENT(
-
-)You can enter articulation signs either in a verbose form using a
-shorthand.  Here we demonstrate the shorthand: it is formed by a dash
-and the the character for the articulation to use, e.g. `code(-.)' for
-staccato as shown above.  COMMENT(
-
-)verb(
-        fis a, r8 cis8
-) COMMENT(
-
-)
-Rests are denoted by the special notename `code(r)'.  You can also enter
-an invisible rest by using the special notename `code(s)'.
-verb(
-        d2.-\fermata
-) COMMENT(
-
-)All articulations have a verbose form, like code(\fermata).  The
-command `code(\fermata)' is not part of the core of the language (most
-of the other discussed elements are), but it is a shorthand for a more
-complicated description of a fermata.  code(\fermata) names that
-description and is therefore called an em(identifier). COMMENT(
-
-)verb(
-        }
-) COMMENT(
-
-)
-Here the music ends.
-COMMENT(
-
-)verb(
-        \paper {
-                linewidth = 14.0\cm;
-        }
-)COMMENT(
-
-)This specifies a conversion from music to notation output.  Most of
-the details of this conversions (font sizes, dimensions, etc.) have
-been taken care of, but  to fit the output  in this document, it has
-to be smaller.  We do this by setting the line width to 14 centimeters
-(approximately 6 inches).
-COMMENT(
-
-)verb(
-        }
-)COMMENT(
-
-)The last brace ends the code(\score) block.
-
-There are two things to note here. The format contains musical
-concepts like pitches and durations, instead of symbols and positions:
-the input format tries to capture the meaning of em(music), and not
-notation.  Therefore Second, the format tries to be em(context-free):
-a note will sound the same regardless of the current time signature,
-the key, etc.
-
-The purpose of LilyPond is explained informally by the term `music
-typesetter'.  This is not a fully correct name: not only does the
-program print musical symbols, it also makes esthetic decisions.  All
-symbols and their placement is em(generated) from a high-level musical
-description.  In other words,  LilyPond would be best
-described by `music compiler' or `music to notation compiler'.
-
-
-sect(Lyrics and chords)
-
-In this section we show how to typeset a song of unknown
-origin.footnote(The author would welcome information about the origin
-of this song.).
-
-verb(\header {
-        title = "The river is flowing";
-        composer = "Traditional (?)";
-}
-\include "paper16.ly"
-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.
-        \bar "|.";
-}
-
-text = \lyrics {
-        The ri -- ver is flo- __ wing, flo -- wing and gro -- wing, the
-        ri -- ver is flo -- wing down to the sea.
-}
-
-accompaniment =\chords {
-        r8
-        c2-3- f-3-.7 d-min es4 c8-min r8
-        c2-min f-min7 g-7^3.5 c-min }
-
-\score {
-        \simultaneous {
-%         \accompaniment
-          \context ChordNames \accompaniment
-
-          \addlyrics
-            \context Staff = mel {        
-              \property Staff.noAutoBeaming = "1"
-              \property Staff.automaticMelismata = "1"
-              \melody 
-            }
-            \context Lyrics \text
-        }
-        \midi  { }
-        \paper { linewidth = 10.0\cm; }
-})
-
-
-The result would look nop(this)footnote(The titling and font size shown
-may differ, since the titling in this document is not generated by
-file(ly2dvi).).
-
-center(bf(Large(The river is flowing))
-
-var(Traditional (?))
-)
-
-mudela(center)(\header {
-        title = "The river is flowing";
-        composer = "Traditional (?)";
-}
-\include "paper16.ly"
-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.
-        \bar "|.";
-}
-
-text = \lyrics {
-        The ri -- ver is flo- __ wing, flo -- wing and gro -- wing, the
-        ri -- ver is flo -- wing down to the sea.
-}
-
-accompaniment =\chords {
-        r8
-        c2-3- f-3-.7 d-min es4 c8-min r8
-        c2-min f-min7 g-7^3.5 c-min }
-
-\score {
-        \simultaneous {
-%         \accompaniment
-          \context ChordNames \accompaniment
-
-          \addlyrics
-            \context Staff = mel {
-              \property Staff.noAutoBeaming = "1"
-              \property Staff.automaticMelismata = "1"
-              \melody 
-            }
-            \context Lyrics \text
-        }
-        \midi  { }
-        \paper { linewidth = 10.0\cm; }
-})
-
-Again, we will dissect the file line by line.COMMENT(
-
-)verb(
-        \header {
-)COMMENT(
-
-)Information about the music you are about to typeset goes into a
-code(\header) block.  The information in this block is not used by
-LilyPond, but it is included in the output.  file(ly2dvi) uses this
-information to print titles above the music.
-verb(
-        title = "The river is flowing";
-        composer = "Traditional (?)";)COMMENT(
-
-)the code(\header) block contains assignments.  An assignment starts
-with a string.  (which is unquoted, in this case). Then comes the
-equal sign `code(=)'.  After the equal sign comes the expression you
-want to store.  In this case, you want to put in strings.  The
-information has to be quoted here, because it contains spaces. The
-assignment is finished with a semicolon.COMMENT(
-
-)verb(
-        \include "paper16.ly"
-)COMMENT(
-
-)Smaller size for inclusion in a book.COMMENT(
-
-)verb(
-        melody = \notes \relative c' {
-)COMMENT(
-
-)The structure of the file will be the same as the previous one, a
-code(\score) block with music in it.  To keep things readable, we will
-give names to the different parts of music, and use the names to
-construct the music within the score block.
-
-verb(
-        \partial 8;
-)
-
-The piece starts with an anacrusis of one eighth.  COMMENT(
-
-)verb(
-        c4 c8 d [es () d] c4 | f4 f8 g [es() d] c g |
-        c4 c8 d [es () d] c4 | d4 es8 d c4.
-        \bar "|.";
-)COMMENT(
-
-)We use explicit beaming.  Since this is a song,  we will turn automatic
-beams off, and use explicit beaming where needed.COMMENT(
-
-)verb(
-        }
-)COMMENT(
-
-)This ends the definition of code(melody).  Note that there are no
-semicolons after assignments at top level.COMMENT( 
-
-)verb(
-        text = \lyrics {
-)COMMENT(
-
-)Another identifier assignment.  This one is for the lyrics. 
-Lyrics are formed by syllables that have duration, and not by
-notes. To make LilyPond parse words as syllables,  switch it  into
-lyrics mode with code(\lyrics).  Again, the brace after code(\lyrics)
-is a shorthand for code(\sequential {). COMMENT(
-
-)verb(
-        The4 ri -- ver is flo- __ wing,  flo -- wing and gro -- wing, the
-        ri- ver is flo- __ wing down to the sea.
-        }
-)COMMENT(
-
-)The syllables  themselves are  separated by spaces.  You can get syllable
-extenders by entering `code(__)', and centered hyphens with
-`code(-)code(-)'.  We enter the syllables as if they are all quarter notes
-in length (hence the code(4)), and use a feature to align the
-syllables to the music (which obviously isn't all quarter notes.)
-COMMENT(
-
-)verb(
-        accompaniment =\chords {
-)COMMENT(
-
-)We'll put chords over the music.  There is a special mode (analogous
-to code(\lyrics) and code(\notes) mode) where you can give the names
-of the chords you want, instead of the notes comprising the chord.
-COMMENT(
-
-)verb(
-        r8
-)COMMENT(
-
-)There is no accompaniment during the anacrusis.COMMENT(
-
-)verb(
-        c2-3- f-3-.7
-)A chord is started by  the tonic of the chord. The
-first one lasts a half note.  An unadorned note creates a major
-triad, while a minor triad is wanted.  code(3-) modifies the third to
-be small. code(7) modifies (adds) a seventh, which is small by default
-to create the code(f a c es) chord.  Multiple modifiers must be
-separated by a dot.COMMENT(
-
-)verb(
-        d-min es4 c8-min r8
-)COMMENT(
-
-)Some modifiers have predefined names, eg. code(min) is  the same as
-code(3-), so code(d-min) is a minor code(d) chord.COMMENT(
-
-)verb(
-        c2-min f-min7 g-7^3.5 c-min }
-)COMMENT(
-
-)A named modifier code(min) and a normal modifier code(7) do not have
-to be separated by a dot.  Tones from a chord are removed with chord
-subtractions.  Subtractions are started with a caret, and they are
-also separated by dots.  In this example, code(g-7^3.5) produces a
-minor seventh.  The brace ends the sequential music. COMMENT(
-
-)verb(
-        \score {
-                \simultaneous {
-)COMMENT(
-
-)We assemble the music in the code(\score) block.  Melody, lyrics and
-accompaniment have to sound at the same time, so they should be
-code(\simultaneous).COMMENT(
-
-)verb(
-        %\accompaniment
-)COMMENT(
-
-)Chord mode generates notes grouped in code(\simultaneous) music.  If
-you remove the comment sign, you can see the chords in normal
-notation: they will be printed as note heads on a separate
-staff. COMMENT(
-
-)verb(
-        \context ChordNames \accompaniment
-)COMMENT(
-
-)Normally, the notes that you enter are transformed into note heads.
-The note heads alone make no sense, they need surrounding information:
-a key signature, a clef, staff lines, etc.  They need em(context).  In
-LilyPond, these symbols are created by objects called `interpretation
-context'.  Interpretation contexts only exist during a run of
-LilyPond.  Interpretation contexts that are for printing music (as
-opposed to playing music) are called `notation context'.
-
-By default, LilyPond will create a Staff contexts for you.  If you
-would remove the code(%) sign in the previous line, you can see that
-mechanism in action.
-
-
-We don't want default contexts here, because we want names, not note
-heads.  An interpretation context can also created upon explicit
-request. The keyword for such a request is code(\context).  It takes
-two arguments.  The first is the name of a interpretation context.
-The name is a string, it can be quoted with double quotes).  The
-second argument is the music that should be interpreted in this
-context.  For the previous line, we could have written code(\context
-Staff \accompaniment), and get the same effect.COMMENT(
-
-)verb(
-        \addlyrics
-)COMMENT(
-        
-)The lyrics need to be aligned with the melody.  This is done by
-combining both with code(\addlyrics).  code(\addlyrics) takes two
-pieces of music (usually a melody and lyrics, in that order) and
-aligns the syllables of the second piece under the notes of the
-first piece.  If you would reverse the order, the notes would be
-aligned on the lyrics, which is not very useful. (Besides, it looks
-silly.)COMMENT(
-
-)verb(
-        \context Staff = mel {
-)COMMENT(
-
-)This is the argument of code(\addlyrics).  We instantiate a
-code(Staff) context explicitly: should you chose to remove comment
-before the ``note heads'' version of the accompaniment, the
-accompaniment will be on a nameless staff.  The melody has to be on a
-different staff as the accompaniment.  This is accomplished by giving
-the melody staff a different name.COMMENT(
-
-)verb(
-        \property Staff.noAutoBeaming = "1"
-)COMMENT(
-
-)An interpretation context has variables that tune its behaviour.  One
-of the variables is code(noAutoBeaming).  If set and non-zero (i.e.,
-true) LilyPond will not try to put automatic beaming on the current
-staff.COMMENT(
-
-)verb(
-        \property Staff.automaticMelismata = "1"
-)COMMENT(
-
-)Similarly, we  don't want to print a  syllable when there is
-a slur. This sets up the Staff context to signal slurs while
-code(\addlyrics) is processed. COMMENT(
-
-)verb(
-          \melody
-        }
-)COMMENT(
-
-)Finally, we put the melody on the current staff.  Note that the
-code(\property) directives and code(\melody) are grouped in sequential
-music,  so the property settings are done before the melody is
-processed.  COMMENT(
-
-)verb(
-        \context Lyrics \text
-)COMMENT(
-
-)The second argument of code(\addlyrics) is the text. The text also
-should not land on a Staff, but on a interpretation context for
-syllables, extenders, hyphens etc.  This context is called
-Lyrics.COMMENT(
-
-)verb(
-        }
-)COMMENT(
-
-)This ends code(\simultaneous).COMMENT(
-
-)verb(
-        \midi  { }
-)COMMENT(
-
-)This makes the music go to a MIDI file.  MIDI is great for
-checking music you enter.  You listen to the MIDI file: if you hear
-something unexpected, it's probably a typing error.  code(\midi) is an
-`output definition', a declaration that specifies how to output music
-analogous to code(\paper { }).COMMENT(
-
-)verb(
-        \paper { linewidth = 10.0\cm; }
-)COMMENT(
-
-)We also want notation output.  The linewidth is short so the piece
-will be set in two lines. COMMENT(
-
-)verb(
-        }
-)COMMENT(
-
-)End the score block.
-
-sect(Piano music)
-
-Our third subject is a piece piano music.  The fragment in the input
-file is a piano reduction of the G major Sinfonia by Giovanni Battista
-Sammartini.  It was composed around 1740. COMMENT(Sesam atlas vd
-Muziek. Deel II, blz 414)
-
-mudela(verbatim)(
-\include "paper16.ly";
-
-viola = \notes \relative c' \context Voice = viola {
-        <c4-\f g' c>
-        \property Voice.verticalDirection = \down g'8. b,16
-        s1 s2. r4
-        g
-}
-
-oboes = \notes \relative c'' \context Voice = oboe {
-        \stemup s4  g8. b,16 c8 r <e'8.-\p g> <f16 a>
-        \grace <e8( g> <d4 f> <c2 e> \times 2/3 { <d8 \< f> <e g> <f a> }
-        <
-          { \times 2/3 { a8 g c } \! c2 }
-          \context Voice = oboeTwo {
-                \stemdown
-                \grace {
-                    \property Grace.verticalDirection = \down
-                    [f,16 g] }
-                f8 e e2
-        } >
-        \stemboth
-        \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,>
-}
-
-hoomPah  = \notes \transpose c' {
-    c8 \translator Staff = top \stemdown 
-    c'8 \translator Staff = bottom \stemup }
-
-hoomPahHoomPah = { [\hoomPah \hoomPah] }
-
-bassvoices = \notes \relative c' {
-        c4 g8. b,16
-        \hoomPahHoomPah \hoomPahHoomPah \hoomPahHoomPah \hoomPahHoomPah
-        \stemdown [c8 c'8] r4
-        <g d'> r4
-        < {\stemup r2 <e4 c'> <c8 g'> }
-          \context Voice = reallyLow  {\stemdown g2 ~ | g4 c8 } >
-}
-
-\score {
-        \context PianoStaff \notes <
-                \context Staff = top < \time 2/2;
-                        \context Voice = viola \viola
-                        \oboes
-                >
-                \context Staff = bottom < \time 2/2; \clef bass;
-                        \bassvoices
-                >
-        >
-        \midi { }
-        \paper {
-          indent = 0.0;
-          linewidth = 15.0 \cm; }
-})
-
-If it looks like incomprehensible gibberish to you... Then you are
-right.  The author has doctored this example to have as many quirks in
-one system as possible.COMMENT(
-
-)verb(viola = \notes \relative c'  \context Voice = viola {)COMMENT(
-
-)In this example, you can see multiple parts on a staff.  Each part is
-associated with one notation context.  This notation context handles
-stems and dynamics (among others).  The name of this context is
-code(Voice).  For each part we have to make sure that there is
-precisely one Voice nop(context)footnote(If code(\context) would not
-have been specified explicitly, three code(Voice) contexts would be
-created: one for each note  in the first chord.).COMMENT(
-
-)verb(<c4-\f g' c>)COMMENT(
-
-)code(<) and code(>) are short hands for code(\simultaneous {) and
-code(}). So the expression enclosed in code(<) and code(>) is a
-chord.  code(\f) places a forte symbol  under the chord.COMMENT(
-
-)verb(\property Voice.verticalDirection = \down)COMMENT(
-
-)code(verticalDirection) is a property of the voice context. It
-controls the directions of stems, articulations marks and other
-symbols.
-  If code(verticalDirection) is set to code(\down)
-(identifier for the integer -1) the stems go down,
-code(\up) (identifier for the integer 1) makes the stems go up.COMMENT(
-
-)verb(        g'8. b,16)COMMENT(
-
-)Relative octaves work a little differently with chords.  The starting
-point for the note following a chord is the first note of the chord.  So
-the code(g) gets an octave up quote: it is a fifth above the starting
-note of the previous chord (the central C).
-
-verb(s1 s2. r4)COMMENT(
-
-)code(s) is a `spacer' rest.  It does not print anything,  but it does
-have the duration of a rest.   COMMENT(
-
-)verb(oboes = \notes \relative c'' \context Voice = oboe {)COMMENT(
-
-)Now comes a part for two oboes.  They play homophonically, so we
-print the notes as one voice that makes chords. Again, we insure that
-these notes are indeed processed by precisely one context with
-code(\context).COMMENT(
-
-)verb(\stemup s4  g8. b,16 c8 r <e'8.-\p g> <f16 a>)COMMENT(
-
-)code(\stemup) is an identifier reference.  It is shorthand for
-code(\property Voice.verticalDirection = \up).  If possible, you
-should use predefined identifiers like these for setting properties.
-Your input will be less dependent upon the implementation of LilyPond.
-COMMENT(
-
-)verb(\grace <e8( g> < )d4 f> <c2 e>)COMMENT(
-
-)code(\grace) introduces grace notes.  It takes one argument, in this
-case a chord.  The slur started on the code(e) of the chord
-will be attached to the next nop(note.)footnote(LilyPond will squirm
-about unended Slurs.  In this case, you can ignore the warning).
-COMMENT(
-
-)verb(\times 2/3)COMMENT(
-
-)Tuplets are made with the code(\times) keyword.  It takes two
-arguments: a fraction and a piece of music.  The duration of the
-second argument is multiplied by the first argument.  Triplets make
-notes occupy 2/3 of their notated duration, so in this case the
-fraction is 2/3. COMMENT(
-
-)verb({ <d8 \< f> <e g> <f a> })COMMENT(
-
-)The piece of music to be `tripletted' is sequential music containing
-three notes.  On the first chord (the code(d)), a crescendo is started
-with code(\<).COMMENT(
-
-)verb(<)COMMENT(
-
-)At this point, the homophonic music splits into two rhythmically
-different parts.  We can't use a sequence of chords to enter this, so
-we make a `chord' of sequences to do it.  We start with the upper
-voice, which continues with upward stems: COMMENT(
-
-)verb( { \times 2/3 { a8 g c } \! c2 })COMMENT(
-
-)The crescendo is ended at the half note by the escaped exclamation
-mark `code(\!)'.  COMMENT(
-         
-)verb(\context Voice = oboeTwo {
-\stemdown)COMMENT(
-
-)We can't share stems with the other voice, so we have to create a new
-code(Voice) context.  We give it the name code(oboeTwo) to distinguish
-it from the other context.  Stems go down in this voice. COMMENT(
-
-)verb(\grace { )COMMENT(
-
-)When a grace section is processed, a code(Grace) context is
-created. This context acts like a miniature score of its own.  It has
-its own time bookkeeping, and you can make notes, beams, slurs
-etc. Here fiddle with a property and make a beam.  The argument of
-code(\grace) is sequential music.COMMENT(
-
-)verb(\property Grace.verticalDirection = \down
-[f,16 g] })COMMENT(
-
-)Normally, grace notes are always stem up, but in this case, the upper
-voice interferes. We set the stems down here.
-
-As far as relative mode is concerned, the previous note is the
-code(c'''2) of the upper voice, so we have to go an octave down for
-the code(f).
-COMMENT(
-
-)verb(
-  f8 e e2
-} >)COMMENT(
-
-)This ends the two-part section. COMMENT(
-
-)verb(\stemboth
-\grace <c,8( e> <)b8. d8.-\trill> <c16 e> | )COMMENT(
-
-)code(\stemboth) ends the forced stem directions. From here, stems are
-positioned as if it were single part music.
-
-The bass has a little hoom-pah melody to demonstrate parts switching
-between staffs.  Since it is repetitive, we use identifiers:COMMENT(
-
-)verb(hoomPah  = \notes \transpose c' {)COMMENT(
-
-)Transposing can be done with code(\transpose).  It takes two
-arguments; the first specifies what central C should be transposed to.
-The second is the to-be-transposed music.  As you can see, in this
-case, the transposition is a no-op.  Central C is transposed to
-central C.
-
-The purpose of this no-op is circumventing relative mode.  Relative
-mode can not be used in conjunction with transposition, so relative
-mode will leave the contents of code(\hoomPah) alone.  We can use it
-without having to worry about getting the motive in a wrong
-nop(octave)footnote(code(hoomPah = \relative ...) would be more
-intuitive to use, but that would not let me plug code(\transpose)
-:-CHAR(41).).COMMENT(
-
-)verb(c8 \translator Staff = top \stemdown )COMMENT(
-
-)We assume that the first note will be put in the lower staff.  After
-that note we switch to the upper staff with code(\translator).  To be
-precise, this code(\translator) entry switches the current voice to a
-code(Staff) named code(top). So we have to name the upper staff
-`code(top)'.  Stem directions are set to avoid interfering with the
-oboe voices.  COMMENT(
-
-)verb(c'8 \translator Staff = bottom \stemup })COMMENT(
-
-)Then a note is put on the upper staff, and we switch again.  We have
-to name the lower staff `code(bottom)'. COMMENT(
-
-)verb(hoomPahHoomPah = { [\hoomPah \hoomPah] })COMMENT(
-
-)Put two of these fragments in sequence, and beam them.COMMENT(
-
-)verb(bassvoices = \notes \relative c' {
-c4 g8. b,16
-\hoomPahHoomPah \hoomPahHoomPah \hoomPahHoomPah
-\hoomPahHoomPah)COMMENT(
-
-)Entering the bass part is easy: the hoomPahHoomPah variable is
-referenced four times.COMMENT(
-
-)verb(\context Voice = reallyLow  {\stemdown g2 ~ | g4 c8 } >)COMMENT(
-
-)After skipping some lines, we see code(~).  This mark makes ties.COMMENT(
-
-)verb(\context PianoStaff)COMMENT(
-
-)For piano music, a special context is needed to get cross staff
-beaming right.  It is called code(PianoStaff).COMMENT(
-
-)verb(\context Staff = bottom < \time 2/2; \clef bass;)COMMENT(
-
-)The bottom staff must have a different clef.COMMENT(
-
-)verb(indent = 0.0;)COMMENT(
-
-)To make some more room on the line, the first (in this case the only)
-line is not indented.  The line still looks is very cramped, but that is due
-to the format of this tutorial.
-
-This example shows a lot of features, but the organisation isn't
-perfect.  For example, it would be less confusing to use a chord
-containing sequential music than a sequence of chords for the oboe
-parts.
-
-[TODO: demonstrate Hara-Kiri with scores and  part extraction.]
-
-sect(The end)        
-         
-That's all folks.  From here, you can either try fiddling with input
-files, or you can read the reference manual.
-
diff --git a/Documentation/topdocs/AUTHORS.texi b/Documentation/topdocs/AUTHORS.texi
new file mode 100644 (file)
index 0000000..c0eaec3
--- /dev/null
@@ -0,0 +1,69 @@
+\input texinfo @c -*-texinfo-*-
+@setfilename AUTHORS.info
+@settitle AUTHORS - who did what on GNU LilyPond-
+
+@node Top, , AUTHORS - who did what on GNU LilyPond-, (dir)
+@top
+@menu
+* AUTHORS - who did what on GNU LilyPond-::AUTHORS - who did what on GNU LilyPond-
+@end menu
+
+@node AUTHORS - who did what on GNU LilyPond-, Top, , Top
+@chapter AUTHORS - who did what on GNU LilyPond?
+
+
+This file lists authors of GNU LilyPond, and what they wrote.  This
+list is alphabetically ordered.
+
+@itemize @bullet
+@item @email{tomcato@@xoommail.com, Tom Cato Amundsen},
+    cembalo-partita in mudela, accordion symbols, some mudela-book.py
+@item @email{matsb@@s3.kth.se, Mats Bengtsson},
+    @uref{http://www.s3.kth.se/~matsb/}
+    lots of testing, fixes, general comments and contributions.
+@item @email{eric@@aut.ee.ethz.ch, Eric Bullinger},
+    accidental transposition.
+@item Laura Conrad (lconrad@@world.std.com)
+    fixes to abc2ly
+@item @email{Jan.A.Fagertun@@energy.sintef.no, Jan Arne Fagertun},
+    TeX titling and lytodvi.sh
+@item @email{foka@@debian.org, Anthony Fok}, 
+    debian package: debian/*
+@item @email{bjoern.jacke@@gmx.de, Bjoern Jacke}
+    german glossary stuff.
+@item @email{nj104@@cus.cam.ac.uk, Neil Jerram}. 
+    parts of Documentation/Vocab*
+@item Donald Ervin Knuth,  @uref{http://www-cs-staff.stanford.edu/~knuth/}
+    mf/ital-*.mf (these were taken from the CM fonts)
+@item @email{m.krause@@tu-harburg.de, Michael Krause},
+    breathing signs
+@item @email{wl@@gnu.org, Werner Lemberg},
+    misc bugfixes, some Beam and Stem code. 
+@item @email{drl@@vuse.vanderbilt.edu, David R. Linn},
+    Mailing list maintenance.
+@item @email{, Adrian Mariano}
+    Reference manual, tutorial fixes, glossary.
+@item @email{hanwen@@cs.uu.nl, Han-Wen Nienhuys}, 
+    @uref{http://www.cs.uu.nl/~hanwen/}
+    Main author (initials: HWN).
+@item @email{janneke@@gnu.org, Jan Nieuwenhuizen}, 
+    @uref{http://www.xs4all.nl/~jantien/}
+    Main author (initials: JCN).
+@item @email{oliva@@dcc.unicamp.br, Alexandre Oliva}, 
+    @uref{http://sunsite.unicamp.br/~oliva/}
+    testing
+@item @email{pinard@@iro.umontreal.ca, Franc,ois Pinard}, 
+    parts of Documentation/Vocab*, started internationalization stuff
+@item @email{glenprideaux@@iname.com, Glen Prideaux},
+    minor bug fix to script used to generate doc++ documentation
+@item @email{daboys@@austin.rr.com, Jeffrey B. Reed},
+    Windows-NT support.
+@item Shay Rojanski
+    Some mudela source.
+@end itemize
+
+Your name could be here! If you want to fix something, do it, and send
+us a patch!
+
+
+@bye
diff --git a/Documentation/topdocs/AUTHORS.yo b/Documentation/topdocs/AUTHORS.yo
deleted file mode 100644 (file)
index 3d41246..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-article(AUTHORS - who did what on GNU LilyPond?)()()
-
-This file lists authors of GNU LilyPond, and what they wrote.  This
-list is alphabetically ordered.
-
-itemize(
-it()nemail(Tom Cato Amundsen)(tomcato@xoommail.com),
-    cembalo-partita in mudela, accordion symbols, some mudela-book.py
-it()nemail(Mats Bengtsson)(matsb@s3.kth.se),
-    lurl(http://www.s3.kth.se/~matsb/)
-    lots of testing, fixes, general comments and contributions.
-it()nemail(Eric Bullinger)(eric@aut.ee.ethz.ch),
-    accidental transposition.
-it()nemail(Jan Arne Fagertun)(Jan.A.Fagertun@energy.sintef.no),
-    TeX titling and lytodvi.sh
-it()nemail(Anthony Fok)(foka@debian.org), 
-    debian package: debian/*
-it()nemail(Bjoern Jacke)(bjoern.jacke@gmx.de)
-    german glossary stuff.
-it()nemail(Neil Jerram)(nj104@cus.cam.ac.uk). 
-    parts of Documentation/Vocab*
-it()Donald Ervin Knuth,  lurl(http://www-cs-staff.stanford.edu/~knuth/)
-    mf/ital-*.mf (these were taken from the CM fonts)
-it()nemail(Michael Krause)(m.krause@tu-harburg.de),
-    breathing signs
-it()nemail(Werner Lemberg)(xlwy01@uxp1.hrz.uni-dortmund.de),
-    misc bugfixes, some Beam and Stem code. 
-it()nemail(David R. Linn)(drl@vuse.vanderbilt.edu),
-    Mailing list maintenance.
-it()nemail(Adrian Mariano)()
-    Reference manual, tutorial fixes, glossary.
-it()nemail(Han-Wen Nienhuys)(hanwen@cs.uu.nl), 
-    lurl(http://www.cs.uu.nl/~hanwen/)
-    Main author (initials: HWN).
-it()nemail(Jan Nieuwenhuizen)(janneke@gnu.org), 
-    lurl(http://www.xs4all.nl/~jantien/)
-    Main author (initials: JCN).
-it()nemail(Alexandre Oliva)(oliva@dcc.unicamp.br), 
-    lurl(http://sunsite.unicamp.br/~oliva/)
-    testing
-it()nemail(Franc,ois Pinard)(pinard@iro.umontreal.ca), 
-    parts of Documentation/Vocab*, started internationalization stuff
-it()nemail(Glen Prideaux)(glenprideaux@iname.com),
-    minor bug fix to script used to generate doc++ documentation
-it()nemail(Jeffrey B. Reed)(daboys@austin.rr.com),
-    Windows-NT support.
-it()Shay Rojanski
-    Some mudela source.
-it()Laura Conrad (lconrad@world.std.com)
-    fixes to abc2ly
-)
-
-
-Your name could be here! If you want to fix something, do it, and send
-us a patch!
-
index db918cafb4832c09a9de0c9a4738c2821e9ecf41..d59c175603d2a959cfa05a5e5c76dca77d53ce91 100644 (file)
@@ -2,8 +2,12 @@ depth = ../..
 
 BLURBS=BLURB COPERTINA FLAPTEKST
 
-STEPMAKE_TEMPLATES=documentation yolily-topdoc
-LOCALSTEPMAKE_TEMPLATES=lilypond
+STEPMAKE_TEMPLATES=documentation tex texinfo yolily-topdoc
+LOCALSTEPMAKE_TEMPLATES=lilypond mudela
+HTML_FILES=$(addprefix $(outdir)/, $(TEXI_FILES:.texi=.html) $(TELY_FILES:.tely=.html))
+
 
 include $(depth)/make/stepmake.make 
 
+local-WWW: $(HTML_FILES)
+
diff --git a/Documentation/topdocs/INSTALL.texi b/Documentation/topdocs/INSTALL.texi
new file mode 100644 (file)
index 0000000..c246ff1
--- /dev/null
@@ -0,0 +1,406 @@
+\input texinfo @c -*-texinfo-*-
+@setfilename INSTALL.info
+@settitle INSTALL - compiling and installing GNU LilyPond
+
+@node Top, , AUTHORS, (dir)
+@top
+@menu
+* INSTALL - compiling and installing GNU LilyPond::INSTALL - compiling and installing GNU LilyPond
+@end menu
+
+
+@node INSTALL - compiling and installing GNU LilyPond, abstract, , Top
+@menu
+* abstract::                      abstract
+* obtaining::                     obtaining
+* PREREQUISITES::                 PREREQUISITES
+* running::                       running
+* WEBSITE::                       WEBSITE
+* CONFIGURING and COMPILING::     CONFIGURING and COMPILING
+* CONFIGURING FOR MULTIPLE PLATFORMS::CONFIGURING FOR MULTIPLE PLATFORMS
+* INSTALLING::                    INSTALLING
+* REDHAT LINUX::                  REDHAT LINUX
+* DEBIAN GNU/LINUX::              DEBIAN GNU/LINUX
+* WINDOWS NT/95::                 WINDOWS NT/95
+* w32::                           w32
+* BUGS::                          BUGS
+* AUTHORS::                       AUTHORS
+@end menu
+@chapter INSTALL - compiling and installing GNU LilyPond
+
+
+@node abstract, obtaining, INSTALL - compiling and installing GNU LilyPond, INSTALL - compiling and installing GNU LilyPond
+@section abstract
+
+TODO: document xdeltas
+
+This document explains what you need to install LilyPond, and what you
+should do.  If you are going to compile and install LilyPond often,
+e.g. when doing development, you might want to check out the 
+@file{buildscripts/set-lily.sh} script.  It sets some environment 
+variables and symlinks, which comes in handly when you have to compile 
+LilyPond more often.  
+
+@node obtaining, PREREQUISITES, abstract, INSTALL - compiling and installing GNU LilyPond
+@section obtaining
+
+You can get the latest version of LilyPond at
+@url{ ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/}.  Refer to the links
+document for mirror sites.
+
+@emph{If you upgrade by patching do remember to rerun autoconf after
+applying the patch}.
+
+@node PREREQUISITES, running, obtaining, INSTALL - compiling and installing GNU LilyPond
+@section PREREQUISITES
+
+For compilation you need:
+
+@itemize @bullet
+@item A GNU system: GNU LilyPond is known to run on these GNU systems: Linux
+    (PPC, intel), FreeBSD, AIX, NeXTStep, IRIX, Digital Unix and
+Solaris.
+
+@item Lots of disk space: LilyPond takes between 30 and 100 mb to
+compile if you use debugging information.  If you are short on
+disk-space run configure with @code{--disable-debugging}.
+
+Although we recommend to use Unix, LilyPond is known to run on Windows
+NT/95/98 as well.  See Section @xref{w32}.
+
+@item  EGCS 1.1 or newer. Check out @url{ ftp://ftp.gnu.org/pub/gcc/}
+
+@item  Python 1.5,
+Check out
+@url{ftp://ftp.python.org} or @url{ftp://ftp.cwi.nl/pub/python}.
+
+@item  GUILE 1.3,  check out @url{http://www.gnu.org/software/guile/guile.html}.
+
+@item GNU make. 
+Check out @url{ftp://ftp.gnu.org/make/}.
+
+@item Flex (version 2.5.4 or newer). 
+Check out @url{ftp://ftp.gnu.org/flex/}.
+
+@item Bison (version 1.25 or newer).
+Check out @url{ftp://ftp.gnu.org/bison/}.
+
+@item Texinfo. Check out @url{ftp://ftp.gnu.org/pub/texinfo/}.
+Most documentation is in texinfo.
+
+@item Yodl.  Needed for obsolete docs (1.31.17)
+@url{ftp://ftp.lilypond.org/pub/yodl}.
+
+@item The geometry package for LaTeX is needed to use ly2dvi.  
+Available at 
+@url{ftp://ftp.ctan.org/tex-archive/macros/latex/contrib/supported/geometry}
+or at mirror site @url{ftp://ftp.dante.de}
+
+@item MetaPost, if you want to use direct PostScript output. Please
+note  that  tetex-0.4pl8 (included with Redhat 5.x) does not include
+@file{mfplain.mp}, which is needed  for producing the scaleable font files.
+
+@end itemize
+
+@node running, WEBSITE, PREREQUISITES, INSTALL - compiling and installing GNU LilyPond
+@section running
+
+GNU LilyPond does use a lot of resources. For operation you need the
+following software
+
+@itemize @bullet
+@item TeX
+@item A PostScript printer and/or viewer (such as Ghostscript) is strongly
+    recommended.  Xdvi will show all embedded PostScript too if you have
+    Ghostscript installed.
+@item  GUILE 1.3, check out @url{http://www.gnu.org/programs/guile.html}
+@end itemize
+
+For running LilyPond successfully you have to help TeX and MetaFont
+find various files.  The recommended way of doing so is adjusting the
+environment variables in the start-up scripts of your shell.  An
+example is given here for the Bourne shell:
+@example 
+export MFINPUTS="/usr/local/share/lilypond/mf:"
+export TEXINPUTS="/usr/local/share/lilypond/tex:/usr/local/share/lilypond/ps:"
+@end example 
+
+The empty path component
+represents TeX and MetaFont's default search paths.  Scripts with
+the proper paths for the bourne and C-shell respectively are generated in
+@file{buildscripts/out/lilypond-profile} and
+@file{buildscripts/out/lilypond-login} during compilation. 
+
+LilyPond is a hiddeously big, slow and bloated program.  A fast CPU
+and plenty of RAM is recommended for comfortable use.
+
+@node WEBSITE, CONFIGURING and COMPILING, running, INSTALL - compiling and installing GNU LilyPond
+@section WEBSITE
+
+The website is the most convenient form to use for reading the
+documentation on-line documentation. It is made by entering @example 
+
+  make website
+@end example 
+This does require a fully functioning
+
+If you want to auto-generate Lily's website, you'll need some additional
+conversion tools.
+
+@itemize @bullet
+@item YODL 1.31.15 or later.
+
+@item xpmtoppm (from the Portable Bitmap Utilities) (For RedHat Linux
+            users: it is included within the package libgr-progs).
+       the original is at
+@url{ftp://ftp.x.org/contrib/utilities/netpbm-1mar1994.p1.tar.gz}
+
+@item pnmtopng, which is also in libgr-progs for RedHat. The original is
+at
+@url{ftp://swrinde.nde.swri.edu/pub/png/applications/pnmtopng-2.37.2.tar.gz}.i
+
+The version of @file{pnmtopng} that is distributed with RedHat 5.1 and
+5.2 contains a bug: pnmtopng is dynamically linked to the wrong
+version of libpng, which results in cropped images.  Recompile it from 
+source, and make sure that the pnmtopng binary is linked statically to 
+the libpng that is included in libgr.  RedHat 6.0 does not have this 
+problem.
+
+@example 
+ tar xzf libgr-2.0.13.tar.gz
+      make
+      cd png
+      rm libpng.so*
+      make pnmtopng
+@end example 
+
+You can then install the new pnmtopng into @file{/usr/local/bin/}
+
+@item Bib2html @url{http://pertsserver.cs.uiuc.edu/~hull/bib2html.}
+    Which, in turn depends on man2html for proper installation.
+man2html can be had from @url{http://askdonald.ask.uni-karlsruhe.de/hppd/hpux/Networking/WWW/Man2html-1.05}.
+
+The website will build without this utility, but you will not see our
+hypertextified bibliography.
+
+@item Doc++ (optional) to read the source code.
+
+@end itemize
+
+You also have to install @file{buildscripts/out/ps-to-gifs} in a
+directory that is in the path.
+
+@node CONFIGURING and COMPILING, CONFIGURING FOR MULTIPLE PLATFORMS, WEBSITE, INSTALL - compiling and installing GNU LilyPond
+@section CONFIGURING and COMPILING
+
+to install GNU LilyPond, simply type:
+@example 
+
+       gunzip -c lilypond-x.y.z | tar xf -
+       cd lilypond-x.y.z
+       ./configure             # fill in your standard prefix with --prefix
+       make
+       make install
+@end example 
+
+This will install a number of files, something close to:
+@example 
+
+       /usr/local/man/man1/mi2mu.1
+       /usr/local/man/man1/convert-mudela.1
+       /usr/local/man/man1/mudela-book.1
+       /usr/local/man/man1/lilypond.1
+       /usr/local/bin/lilypond
+       /usr/local/bin/mi2mu
+       /usr/local/share/lilypond/*
+       /usr/local/share/locale/@{it,nl@}/LC_MESSAGES/lilypond.mo
+@end example 
+
+
+The above assumes that you are root and have the GNU development
+tools, and your make is GNU make.  If this is not the case, you can
+adjust your environment variables to your taste:
+
+@example 
+
+       export CPPFLAGS="-I /home/me/my_include -DWEIRD_FOOBAR" 
+       ./configure
+@end example 
+
+@code{CPPFLAGS} are the preprocessor flags. 
+
+The configure script is Cygnus configure, and it will accept
+@strong{--help}. If you are not root, you will probably have to make it
+with a different @strong{--prefix} option.  Our favourite location is
+
+@example 
+
+       ./configure --prefix=$HOME/usr
+@end example 
+
+In this case, you will have to set up MFINPUTS, and TEXINPUTS accordingly.
+
+Since GNU LilyPond currently is beta, you are advised to also use
+
+@example 
+
+       --enable-debugging
+       --enable-checking
+@end example 
+
+Options to configure include:
+
+@table @samp
+@item @strong{--enable-printing}
+    Enable debugging print routines (lilypond @strong{-D} option)
+@item @strong{--enable-optimise}
+    Set maximum optimisation: compile with @strong{-O2}.  This can be
+unreliable on some compiler/platform combinations (eg, DEC Alpha and PPC)
+@item @strong{--enable-profiling}
+    Compile with support for profiling.
+@item @strong{--enable-config}
+    Output to a different configuration file.  Needed for multi-platform
+    builds
+@end table
+
+All options are documented in the @file{configure} help
+The option @strong{--enable-optimise} is recommended for Real Life usage.
+
+If you do
+
+@example 
+
+       make all
+@end example 
+
+everything will be compiled, but nothing will be installed.  The
+resulting binaries can be found in the subdirectories @file{out/} (which
+contain all files generated during compilation).
+
+@node CONFIGURING FOR MULTIPLE PLATFORMS, INSTALLING, CONFIGURING and COMPILING, INSTALL - compiling and installing GNU LilyPond
+@section CONFIGURING FOR MULTIPLE PLATFORMS
+
+If you want to compile LilyPond with different configuration settings,
+then, you can use the @strong{--enable-config} option.  Example: suppose I
+want to build with and   without profiling.  Then I'd use the
+following for the normal build, 
+
+@example 
+
+      ./configure --prefix=~ --disable-optimise --enable-checking
+      make
+      make install
+      
+@end example 
+
+and for the profiling version, I specify a different configuration.
+
+@example 
+
+      ./configure --prefix=~ --enable-profiling --enable-config=optprof --enable-optimise --disable-checking
+      make config=optprof
+      make config=optprof install
+@end example 
+
+
+@node INSTALLING, REDHAT LINUX, CONFIGURING FOR MULTIPLE PLATFORMS, INSTALL - compiling and installing GNU LilyPond
+@section INSTALLING
+
+If you have done a successful @code{make}, then a simple
+
+@example 
+
+       make install
+@end example 
+
+should do the trick.
+
+If you are doing an upgrade, please remember to remove obsolete
+@file{.pk} and @file{.tfm} files of the fonts.  A script has been
+provided to do the work for you, see @file{bin/clean-fonts.sh}.
+
+@unnumberedsec CAVEATS
+    
+
+@itemize @bullet
+@item The -O2 option  triggers  bugs on various platforms (PowerPC, Alpha).
+    If you experience problems, you  should first try  turning off
+    this.
+@item  On PPC you need at least EGCS-1.1.2f.
+@end itemize
+
+@node REDHAT LINUX, DEBIAN GNU/LINUX, INSTALLING, INSTALL - compiling and installing GNU LilyPond
+@section REDHAT LINUX
+
+RedHat Linux users can compile an RPM. A spec file is in
+@file{make/out/lilypond.spec}, it is distributed along with the
+sources.
+
+You can make the rpm by issuing
+@example 
+
+       rpm -tb lilypond-x.y.z.tar.gz
+       rpm -i /usr/src/redhat/RPMS/i386/lilypond-x.y.z
+@end example 
+
+Precompiled i386 RedHat RPMS are available from
+@url{ftp://freshmeat.net/pub/rpms/lilypond/} and
+@url{http://linux.umbc.edu/software/lilypond/rpms/}.
+
+For compilation on a RedHat system you need these packages,
+in addition to the those needed for running:
+@itemize @bullet
+@item glibc-devel
+@item libstdc++-devel
+@item guile-devel
+@item flex
+@item bison
+@item texinfo
+@end itemize
+
+@node DEBIAN GNU/LINUX, WINDOWS NT/95, REDHAT LINUX, INSTALL - compiling and installing GNU LilyPond
+@section DEBIAN GNU/LINUX
+
+A Debian package is also available; contact Anthony Fok
+@email{foka@@debian.org}.  The build scripts are in the subdirectory
+@file{debian/}.
+
+@node WINDOWS NT/95, w32, DEBIAN GNU/LINUX, INSTALL - compiling and installing GNU LilyPond
+@section WINDOWS NT/95
+@node w32, BUGS, WINDOWS NT/95, INSTALL - compiling and installing GNU LilyPond
+
+
+Separate instructions on building for W32 are available
+@url{../../outdir/README-W32.html}.
+
+@node BUGS, AUTHORS, w32, INSTALL - compiling and installing GNU LilyPond
+@section BUGS
+
+Send bug reports to bug-gnu-music@@gnu.org.  For help and questions use
+help-gnu-music@@gnu.org and gnu-music-discuss@@gnu.org.  Please consult
+the faq before mailing your problems.
+
+@node AUTHORS, Top, BUGS, INSTALL - compiling and installing GNU LilyPond
+@section AUTHORS
+
+@email{hanwen@@cs.uu.nl, Han-Wen Nienhuys}
+
+@email{janneke@@gnu.org, Jan Nieuwenhuizen}
+
+In case of problems, please use the mailing list for help.
+
+Have fun!
+
+@bye
diff --git a/Documentation/topdocs/INSTALL.yo b/Documentation/topdocs/INSTALL.yo
deleted file mode 100644 (file)
index 9724f77..0000000
+++ /dev/null
@@ -1,334 +0,0 @@
-article(NSTALL - compiling and installing GNU LilyPond)(HWN & JCN)()
-
-sect(ABSTRACT)
-
-This document explains what you need to install LilyPond, and what you
-should do.  If you are going to compile and install LilyPond often,
-e.g. when doing development, you might want to check out the 
-file(buildscripts/set-lily.sh) script.  It sets some environment 
-variables and symlinks, which comes in handly when you have to compile 
-LilyPond more often.  
-
-sect(OBTAINING)
-
-You can get the latest version of LilyPond at
-lurl(ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/).  Refer to the links
-document for mirror sites.
-
-em(If you upgrade by patching do remember to rerun autoconf after
-applying the patch).
-
-sect(PREREQUISITES)
-
-For compilation you need:
-
-itemize(
-it()A GNU system: GNU LilyPond is known to run on these GNU systems: Linux
-    (PPC, intel), FreeBSD, AIX, NeXTStep, IRIX, Digital Unix and
-Solaris.
-
-it()Lots of disk space: LilyPond takes between 30 and 100 mb to
-compile if you use debugging information.  If you are short on
-disk-space run configure with code(--disable-debugging).
-
-Although we recommend to use Unix, LilyPond is known to run on Windows
-NT/95/98 as well.  See Section ref(w32).
-
-it() EGCS 1.1 or newer.
-
-it() Python 1.5,
-Check out
-lurl(ftp://ftp.python.org) or lurl(ftp://ftp.cwi.nl/pub/python).
-
-it() GUILE 1.3,  check out lurl(http://www.gnu.org/software/guile/guile.html).
-
-it()GNU make. 
-Check out lurl(ftp://ftp.gnu.org).
-
-it()Flex (version 2.5.4 or newer). 
-Check out lurl(ftp://ftp.gnu.org).
-
-it()Bison (version 1.25 or newer).
-Check out lurl(ftp://ftp.gnu.org).
-
-it()Yodl.  All documentation will be in Yodl. (1.31.15)
-lurl(ftp://ftp.lilypond.org/pub/yodl). You need the latest version of YODL,
-because the tutorial will trigger a bug in earlier versions.
-
-it()The geometry package for LaTeX is needed to use ly2dvi.  
-Available at 
-lurl(ftp://ftp.ctan.org/tex-archive/macros/latex/contrib/supported/geometry)
-or at mirror site lurl(ftp://ftp.dante.de)
-
-it()MetaPost, if you want to use direct PostScript output. Please
-note  that  tetex-0.4pl8 (included with Redhat 5.x) does not include
-file(mfplain.mp), which is needed  for producing the scaleable font files.
-)
-
-
-sect(RUNNING)
-
-GNU LilyPond does use a lot of resources. For operation you need the
-following software
-
-itemize(
-it()TeX
-it()A PostScript printer and/or viewer (such as Ghostscript) is strongly
-    recommended.  Xdvi will show all embedded PostScript too if you have
-    Ghostscript installed.
-it() GUILE 1.3, check out lurl(http://www.gnu.org/programs/guile.html)
-)
-
-
-For running LilyPond successfully you have to help TeX and MetaFont
-find various files.  The recommended way of doing so is adjusting the
-environment variables in the start-up scripts of your shell.  An
-example is given here for the Bourne shell:
-verb(export MFINPUTS="/usr/local/share/lilypond/mf:"
-export TEXINPUTS="/usr/local/share/lilypond/tex:/usr/local/share/lilypond/ps:"
-)
-The empty path component
-represents TeX() and MetaFont's default search paths.  Scripts with
-the proper paths for the bourne and C-shell respectively are generated in
-file(buildscripts/out/lilypond-profile) and
-file(buildscripts/out/lilypond-login) during compilation. 
-
-LilyPond is a hiddeously big, slow and bloated program.  A fast CPU
-and plenty of RAM is recommended for comfortable use.
-
-sect(WEBSITE)
-
-The website is the most convenient form to use for reading the
-documentation on-line documentation. It is made by entering verb(
-  make website
-)This does require a fully functioning
-
-If you want to auto-generate Lily's website, you'll need some additional
-conversion tools.
-
-itemize(
-it()YODL 1.31.15 or later.
-
-it()xpmtoppm (from the Portable Bitmap Utilities) (For RedHat Linux
-            users: it is included within the package libgr-progs).
-       the original is at
-lurl(ftp://ftp.x.org/contrib/utilities/netpbm-1mar1994.p1.tar.gz)
-
-it()pnmtopng, which is also in libgr-progs for RedHat. The original is
-at
-lurl(ftp://swrinde.nde.swri.edu/pub/png/applications/pnmtopng-2.37.2.tar.gz).i
-
-The version of file(pnmtopng) that is distributed with RedHat 5.1 and
-5.2 contains a bug: pnmtopng is dynamically linked to the wrong
-version of libpng, which results in cropped images.  Recompile it from 
-source, and make sure that the pnmtopng binary is linked statically to 
-the libpng that is included in libgr.  RedHat 6.0 does not have this 
-problem.
-
-verb( tar xzf libgr-2.0.13.tar.gz
-      make
-      cd png
-      rm libpng.so*
-      make pnmtopng
-)
-
-You can then install the new pnmtopng into file(/usr/local/bin/)
-
-it()Bib2html lurl(http://pertsserver.cs.uiuc.edu/~hull/bib2html.)
-    Which, in turn depends on man2html for proper installation.
-man2html can be had from lurl(http://askdonald.ask.uni-karlsruhe.de/hppd/hpux/Networking/WWW/Man2html-1.05).
-
-The website will build without this utility, but you will not see our
-hypertextified bibliography.
-
-it()Doc++ (optional) to read the source code.
-
-)
-
-You also have to install file(buildscripts/out/ps-to-gifs) in a
-directory that is in the path.
-
-
-sect(CONFIGURING and COMPILING)
-
-to install GNU LilyPond, simply type:
-verb(
-       gunzip -c lilypond-x.y.z | tar xf -
-       cd lilypond-x.y.z
-       ./configure             # fill in your standard prefix with --prefix
-       make
-       make install
-)
-
-This will install a number of files, something close to:
-verb(
-       /usr/local/man/man1/mi2mu.1
-       /usr/local/man/man1/convert-mudela.1
-       /usr/local/man/man1/mudela-book.1
-       /usr/local/man/man1/lilypond.1
-       /usr/local/bin/lilypond
-       /usr/local/bin/mi2mu
-       /usr/local/share/lilypond/*
-       /usr/local/share/locale/{it,nl}/LC_MESSAGES/lilypond.mo
-)
-
-
-The above assumes that you are root and have the GNU development
-tools, and your make is GNU make.  If this is not the case, you can
-adjust your environment variables to your taste:
-
-verb(
-       export CPPFLAGS="-I /home/me/my_include -DWEIRD_FOOBAR" 
-       ./configure
-)
-
-code(CPPFLAGS) are the preprocessor flags. 
-
-The configure script is Cygnus configure, and it will accept
-bf(--help). If you are not root, you will probably have to make it
-with a different bf(--prefix) option.  Our favourite location is
-
-verb(
-       ./configure --prefix=$HOME/usr
-)
-
-In this case, you will have to set up MFINPUTS, and TEXINPUTS accordingly.
-
-Since GNU LilyPond currently is beta, you are advised to also use
-
-verb(
-       --enable-debugging
-       --enable-checking
-)
-
-Options to configure include:
-
-description(
-dit(bf(--enable-printing))
-    Enable debugging print routines (lilypond bf(-D) option)
-dit(bf(--enable-optimise))
-    Set maximum optimisation: compile with bf(-O2).  This can be
-unreliable on some compiler/platform combinations (eg, DEC Alpha and PPC)
-dit(bf(--enable-profiling))
-    Compile with support for profiling.
-dit(bf(--enable-config))
-    Output to a different configuration file.  Needed for multi-platform
-    builds
-)
-
-All options are documented in the file(configure) help
-The option bf(--enable-optimise) is recommended for Real Life usage.
-
-If you do
-
-verb(
-       make all
-)
-
-everything will be compiled, but nothing will be installed.  The
-resulting binaries can be found in the subdirectories file(out/) (which
-contain all files generated during compilation).
-
-sect(CONFIGURING FOR MULTIPLE PLATFORMS)
-
-If you want to compile LilyPond with different configuration settings,
-then, you can use the bf(--enable-config) option.  Example: suppose I
-want to build with and   without profiling.  Then I'd use the
-following for the normal build, 
-
-verb(
-      ./configure --prefix=~ --disable-optimise --enable-checking
-      make
-      make install
-     )
-
-and for the profiling version, I specify a different configuration.
-
-verb(
-      ./configure --prefix=~ --enable-profiling --enable-config=optprof --enable-optimise --disable-checking
-      make config=optprof
-      make config=optprof install
-)
-
-
-sect(INSTALLING)
-
-If you have done a successful code(make), then a simple
-
-verb(
-       make install
-)
-
-should do the trick.
-
-If you are doing an upgrade, please remember to remove obsolete
-file(.pk) and file(.tfm) files of the fonts.  A script has been
-provided to do the work for you, see file(bin/clean-fonts.sh).
-
-nsect(CAVEATS)
-
-itemize(
-it()The -O2 option  triggers  bugs on various platforms (PowerPC, Alpha).
-    If you experience problems, you  should first try  turning off
-    this.
-it() On PPC you need at least EGCS-1.1.2f.
-)
-
-sect(REDHAT LINUX)
-
-RedHat Linux users can compile an RPM. A spec file is in
-file(make/out/lilypond.spec), it is distributed along with the
-sources.
-
-You can make the rpm by issuing
-verb(
-       rpm -tb lilypond-x.y.z.tar.gz
-       rpm -i /usr/src/redhat/RPMS/i386/lilypond-x.y.z
-)
-
-Precompiled i386 RedHat RPMS are available from
-lurl(ftp://freshmeat.net/pub/rpms/lilypond/) and
-lurl(http://linux.umbc.edu/software/lilypond/rpms/).
-
-
-For compilation on a RedHat system you need these packages,
-in addition to the thoes needed for running:
-itemize(
-it() glibc-devel
-it() libstdc++-devel
-it() guile-devel
-it() flex
-it() bison
-)
-
-
-sect(DEBIAN GNU/LINUX)
-
-A Debian package is also available; contact Anthony Fok
-email(foka@debian.org).  The build scripts are in the subdirectory
-file(debian/).
-
-
-sect(WINDOWS NT/95)
-label(w32)
-
-
-Separate instructions on building for W32 are avaible
-url(in the file README-W32.yo)(../../DOEXPAND(outdir)/README-W32.html).
-
-sect(BUGS)
-
-Send bug reports to bug-gnu-music@gnu.org.  For help and questions use
-help-gnu-music@gnu.org and gnu-music-discuss@gnu.org.  Please consult
-the faq before mailing your problems.
-
-sect(AUTHORS)
-
-nemail(Han-Wen Nienhuys)(hanwen@cs.uu.nl)
-
-nemail(Jan Nieuwenhuizen)(janneke@gnu.org)
-
-In case of problems, please use the mailing list for help.
-
-
-Have fun!
diff --git a/Documentation/topdocs/PATCHES.texi b/Documentation/topdocs/PATCHES.texi
new file mode 100644 (file)
index 0000000..d71dff6
--- /dev/null
@@ -0,0 +1,185 @@
+\input texinfo @c -*-texinfo-*-
+@setfilename PATCHES.info
+@settitle Toplevel
+
+@node Top, , ,  (dir)
+@top
+
+@unnumberedsec name
+    
+
+PATCHES - track and distribute your code changes
+
+@unnumberedsec description
+    
+
+This page documents how to distribute your changes to GNU lilypond
+
+@unnumberedsec abstract
+    
+We would like to have unified context diffs with full pathnames.  A
+script automating supplied with Lily.
+
+ Distributing a change normally
+goes like this:
+
+@itemize @bullet
+@item make your fix/add your code 
+@item Add changes to NEWS, and add yourself to Documentation/topdocs/AUTHORS.yo
+@item generate a patch, 
+@item e-mail your patch to one of the mailing lists
+    gnu-music-discuss@@gnu.org or bug-gnu-music@@gnu.org
+@end itemize
+
+@unnumberedsec Generating a patch
+    
+
+In @file{VERSION}, set MY_PATCH_LEVEL:
+
+@example 
+
+    VERSION:
+       ...
+       MY_PATCH_LEVEL=jcn1
+@end example 
+
+In @file{CHANGES}, enter a summary of changes:
+
+@example 
+       pl 0.1.73.jcn1
+               - added PATCHES.texi
+@end example 
+
+Then, from the top of Lily's source tree, type
+
+@example 
+
+    make dist
+    make diff
+@end example 
+
+which rolls the tarball @file{../releases/lilypond-0.1.73.tar.gz}
+and leaves your patch as @file{./lilypond-0.1.73.jcn1.diff}.
+@footnote{'Make diff' generates a patch between two tarballs.  For 
+more info type 'make diff help=='.}  We assume that there is a tarball 
+@file{lilypond-0.1.73.tar.gz} in the directory @file{../releases}.
+
+If you didn't configure Lily using --srcdir, you can do:
+
+@example 
+
+    make release
+
+    tar-ball: ../patches/lilypond-0.1.73.jcn1.gz
+    patch: ../patches/lilypond-0.1.73.jcn1.gz
+@end example 
+
+@unnumberedsec Prerequisites
+    
+
+For creating a patch you need
+
+@itemize @bullet
+@item All items mentioned in @file{INSTALL}.  You're not going to send a patch
+    that you haven't even built, right?
+@item GNU diff
+@example 
+    make distclean
+    cd ..
+    diff -urN lilypond-0.1.73 lilypond-0.1.73.jcn1 > lilypond-0.1.73.jcn1
+@end example 
+
+but there are handy python scripts available.  If you're doing development,
+you'll need Python for other LilyPond scripts anyway.
+
+@item The Lily directory structure, which looks like:
+
+    @example 
+
+    doos/                        # gnu/windows32 build and binary releases
+    harmonia -> harmonia-x.y.z 
+    harmonia-x.y.z/
+    lilypond -> lilypond-x.y.z   # symlink to development directory
+    lilypond-x.y.z/              # current development
+    patches/                    # patches between different releases
+    RedHat/BUILD                 # RedHat build and binary releases
+    RedHat/RPMS
+    RedHat/SPECS
+    releases/                    # .tar.gz releases
+    test/                        # tarballs and diffs from current version
+    yodl -> yodl-1.30.17
+    yodl-1.30.17
+@end example 
+
+with prefix @file{$HOME/usr/src}
+and (for building rpms only) in @file{$HOME/.rpmrc}:
+@example 
+
+    topdir: /home/fred/usr/src/RedHat
+@end example 
+
+@end itemize
+       
+@unnumberedsec Applying patches
+    
+
+If you're following LilyPond development regularly, you probably want to
+download just the patch for each subsequent release.
+After downloading the patch (into the patches directory, of course), simply 
+apply it:
+
+@example 
+
+    gzip -dc ../patches/lilypond-0.1.74.diff.gz | patch -p1 -E
+@end example 
+
+and don't forget to make automatically generated files:
+
+@example 
+
+    autoconf footnote(patches don't include automatically generated files, 
+    i.e. file(configure) and files generated by file(configure).)
+
+    configure
+@end example 
+
+@unnumberedsec Synchronise
+    
+
+If you're not very quick with sending your patch, there's a good
+chance that an new release of LilyPond comes available.  In such a
+case, the maintainer will probably ask you to make a new patch against
+the latest release.  Your best bet is to download the latest release,
+and apply your patch against this new source tree:
+
+@example 
+
+    cd lilypond-0.1.74
+    gzip -dc ../patches/lilypond-0.1.73.jcn1.diff.gz | patch -p1 -E
+    autoconf
+    configure
+@end example 
+
+Then, make a patch as shown above.
+
+@unnumberedsec See also
+    
+
+@file{stepmake/INSTALL.txt}
+
+@unnumberedsec maintainer
+    
+
+@email{hanwen@@cs.uu.nl, Han-Wen Nienhuys}
+
+Just keep on sending those patches!
+
+
+@bye
diff --git a/Documentation/topdocs/PATCHES.yo b/Documentation/topdocs/PATCHES.yo
deleted file mode 100644 (file)
index eee04b3..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-nsect(NAME)
-
-PATCHES - track and distribute your code changes
-
-nsect(DESCRIPTION)
-
-This page documents how to distribute your changes to GNU lilypond
-
-nsect(ABSTRACT)
-
-We would like to have unified context diffs with full pathnames.  A
-script automating supplied with Lily.
-
- Distributing a change normally
-goes like this:
-
-itemize(
-it()make your fix/add your code 
-it()Add changes to NEWS, and add yourself to Documentation/topdocs/AUTHORS.yo
-it()generate a patch, 
-it()e-mail your patch to one of the mailing lists
-    gnu-music-discuss@gnu.org or bug-gnu-music@gnu.org
-)
-
-nsect(GENERATING A PATCH)
-
-In file(VERSION), set MY_PATCH_LEVEL:
-
-verb(
-    VERSION:
-       ...
-       MY_PATCH_LEVEL=jcn1
-)
-
-In file(NEWS), enter a summary of changes:
-
-verb(
-    NEWS:
-       pl 0.1.73.jcn1
-               - added PATCHES.yo
-)
-
-Then, from the top of Lily's source tree, type
-
-verb(
-    make dist
-    make diff
-)
-
-which rolls the tarball file(../releases/lilypond-0.1.73.tar.gz)
-and leaves your patch as file(./lilypond-0.1.73.jcn1.diff).
-footnote('Make diff' generates a patch between two tarballs.  For 
-more info type 'make diff help=='.)  We assume that there is a tarball 
-file(lilypond-0.1.73.tar.gz) in the directory file(../releases).
-
-
-If you didn't configure Lily using --srcdir, you can do:
-
-verb(
-    make release
-
-    tar-ball: ../patches/lilypond-0.1.73.jcn1.gz
-    patch: ../patches/lilypond-0.1.73.jcn1.gz
-    updeet: ../test/updeet
-)
-
-nsect(PREREQUISITES)
-
-For creating a patch you need
-
-itemize(
-it()All items mentioned in file(INSTALL).  You're not going to send a patch
-    that you haven't even built, right?
-it()GNU diff
-it()Python (version 1.5 or newer).  
-    You can of course make a patch by hand, which would go something like:
-
-verb(
-    make distclean
-    cd ..
-    diff -urN lilypond-0.1.73 lilypond-0.1.73.jcn1 > lilypond-0.1.73.jcn1
-)
-
-but there are handy python scripts available.  If you're doing development,
-you'll need Python for other LilyPond scripts anyway.
-
-it()The Lily directory structure, which looks like:
-
-includefile(../../stepmake/Documentation/layout.yo)
-)
-       
-nsect(APPLYING PATCHES)
-
-If you're following LilyPond development regularly, you probably want to
-download just the patch for each subsequent release.
-After downloading the patch (into the patches directory, of course), simply 
-apply it:
-
-verb(
-    gzip -dc ../patches/lilypond-0.1.74.diff.gz | patch -p1 -E
-)
-
-and don't forget to make automatically generated files:
-
-verb(
-    autoconf footnote(patches don't include automatically generated files, 
-    i.e. file(configure) and files generated by file(configure).)
-
-    configure
-)
-
-nsect(SYNCHRONISE)
-
-If you're not very quick with sending your patch, there's a good
-chance that an new release of LilyPond comes available.  In such a
-case, the maintainer will probably ask you to make a new patch against
-the latest release.  Your best bet is to download the latest release,
-and apply your patch against this new source tree:
-
-verb(
-    cd lilypond-0.1.74
-    gzip -dc ../patches/lilypond-0.1.73.jcn1.diff.gz | patch -p1 -E
-    autoconf
-    configure
-)
-
-Then, make a patch as shown above.
-
-nsect(SEE ALSO)
-
-file(stepmake/INSTALL.txt)
-
-nsect(MAINTAINER)
-
-nemail(Han-Wen Nienhuys)(hanwen@cs.uu.nl)
-
-Just keep on sending those patches!
-
diff --git a/Documentation/topdocs/README.texi b/Documentation/topdocs/README.texi
new file mode 100644 (file)
index 0000000..d7eb776
--- /dev/null
@@ -0,0 +1,135 @@
+\input texinfo @c -*-texinfo-*-
+@setfilename README.info
+@settitle This is the toplevel README to LilyPond
+
+@node Top, , cdrom distributions, (dir)
+@top
+@menu
+* This is the toplevel README to LilyPond::This is the toplevel README to LilyPond
+@end menu
+
+
+
+
+@node This is the toplevel README to LilyPond, versioning, , Top
+@menu
+* versioning::                    versioning
+* requirements::                  requirements
+* installation::                  installation
+* documentation::                 documentation
+* comments::                      comments
+* windows 32::                    windows 32
+* caveats::                       caveats
+* bugs::                          bugs
+* cdrom distributions::           cdrom distributions
+@end menu
+@chapter This is the toplevel README to LilyPond
+
+
+LilyPond is a music typesetter.  It produces beautiful sheet music
+using a high level description file as input.  LilyPond is part of 
+the GNU Project.
+
+@node versioning, requirements, This is the toplevel README to LilyPond, This is the toplevel README to LilyPond
+@section versioning
+
+LilyPond uses a versioning scheme similar to the Linux kernel.  In a
+version "x.y.z", an even second number 'y' denotes a stable version.
+For development versions 'y' is odd.  For using straightforward score
+production, please use the latest stable version.  Development versions
+may not produce good or nice scores.
+
+@node requirements, installation, versioning, This is the toplevel README to LilyPond
+@section requirements
+
+For the compilation and running of LilyPond you need some additional
+packages.  Please refer to the installation instructions.
+
+NOTE: If you downloaded a binary (.rpm or a W95/NT .zip file), then
+you don't have to compile LilyPond.
+
+@node installation, documentation, requirements, This is the toplevel README to LilyPond
+@section installation
+
+For your convenience, a formatted copy of the INSTALL instructions are
+in the toplevel directory, as INSTALL.txt
+
+@node documentation, comments, installation, This is the toplevel README to LilyPond
+@section documentation
+
+The real documentation is the directory Documentation/
+
+If you want to read the documentation online, these are options:
+@itemize @bullet
+@item  use @file{.html}. Refer to INSTALL.txt for info on how to make the
+.html documentation.
+@item  use @file{.html}. Point your browser to
+@uref{http://www.cs.uu.nl/~hanwen/lilypond/index.html}.
+@item use @file{.dvi},  for the tutorial and reference manual. Do
+
+@example 
+  make -C Documentation/tex/ dvi 
+@end example 
+
+  
+@item  use ASCII. Do
+using @example 
+       make -C Documentation/
+@end example 
+
+@end itemize
+
+
+@node comments, windows 32, documentation, This is the toplevel README to LilyPond
+@section comments
+
+LilyPond is a long way from finished and polished.  We do appreciate
+criticism, comments, bugreports, patches, etc.
+@example 
+
+          Please send your e-mail to one of the MAILING LISTS
+@end example 
+
+and @emph{not} to us personally.  See @file{Documentation/links.yo} for more info.
+
+@node windows 32, caveats, comments, This is the toplevel README to LilyPond
+@section windows 32
+
+If you have received this file as part of a DOS/Window32 distribution
+(LilyPond-*.zip), then it is advisable to also download the source
+package, since it might contain more documentation
+@uref{ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/}
+
+If you decide to build LilyPond from source, please read the INSTALL.txt
+document first, especially the Windows NT/95 section.
+
+@node caveats, bugs, windows 32, This is the toplevel README to LilyPond
+@section caveats
+
+* Please read the file BUGS for some ugly bugs.  
+
+* If you have installed a previous version, be sure to remove old font
+files, eg
+@example 
+rm `find /var/lib/texmf/fonts -name 'feta*'` 
+@end example 
+
+a script to do this for you is in @file{buildscripts/clean-fonts.sh}
+
+@node bugs, cdrom distributions, caveats, This is the toplevel README to LilyPond
+@section bugs
+
+Send bug reports to bug-gnu-music@@gnu.org.  For help and questions use
+help-gnu-music@@gnu.org and gnu-music-discuss@@gnu.org.  Please consult
+the faq before mailing your problems.
+
+@node cdrom distributions, Top, bugs, This is the toplevel README to LilyPond
+@section cdrom distributions
+
+if you have received LilyPond on a cdrom, chances are that development
+has moved a some patchlevels up.  Please check the latest version of
+LilyPond before reporting bugs.
+
+
+@bye
diff --git a/Documentation/topdocs/README.yo b/Documentation/topdocs/README.yo
deleted file mode 100644 (file)
index c5633ca..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-COMMENT(-*-Text-*-)
-
-
-redef(XXsetchapternum)(0)()
-
-notableofcontents()
-article(This is the toplevel README to LilyPond)()()
-
-includefile(../BLURB.in)
-
-sect(VERSIONING)
-
-LilyPond uses a versioning scheme similar to the Linux kernel.  In a
-version "x.y.z", an even second number 'y' denotes a stable version.
-For development versions 'y' is odd.  For using straightforward score
-production, please use the latest stable version.  Development versions
-may not produce good or nice scores.
-
-sect(REQUIREMENTS)
-
-For the compilation and running of LilyPond you need some additional
-packages.  Please refer to the installation instructions.
-
-NOTE: If you downloaded a binary (.rpm or a W95/NT .zip file), then
-you don't have to compile LilyPond.
-
-
-sect(INSTALLATION)
-
-For your convenience, a formatted copy of the INSTALL instructions are
-in the toplevel directory, as INSTALL.txt
-
-The process is fairly straightforward, but chances are that you have
-to specify directories for TeX() to code(configure): this is done with
-the options code(--enable-tex-dir) and code(--enable-mf-dir)
-
-
-sect(DOCUMENTATION)
-
-The real documentation is the directory Documentation/
-
-If you want to read the documentation online, these are options:
-itemize(
-it() use file(.html). Refer to INSTALL.txt for info on how to make the
-.html documentation.
-it() use file(.html). Point your browser to
-lurl(http://www.cs.uu.nl/~hanwen/lilypond/index.html).
-it() use file(.dvi),  for the tutorial and reference manual. Do verb(
-  make -C Documentation/tex/ dvi)
-  
-it() use ASCII. Do
-using verb(
-       make -C Documentation/
-)
-The tutorial and the reference manual  can not be made in ASCII, as
-they contain graphics.
-)
-
-
-
-sect(COMMENTS)
-
-LilyPond is a long way from finished and polished.  We do appreciate
-criticism, comments, bugreports, patches, etc.
-verb(
-          Please send your e-mail to one of the MAILING LISTS
-)
-and em(not) to us personally.  See file(Documentation/links.yo) for more info.
-
-
-sect(WINDOWS 32)
-
-If you have received this file as part of a DOS/Window32 distribution
-(LilyPond-*.zip), then it is advisable to also download the source
-package, since it might contain more documentation
-lurl(ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/)
-
-If you decide to build LilyPond from source, please read the INSTALL.txt
-document first, especially the Windows NT/95 section.
-
-
-sect(CAVEATS)
-
-* Please read the file BUGS for some ugly bugs.  
-
-* If you have installed a previous version, be sure to remove old font
-files, eg
-verb(rm `find /var/lib/texmf/fonts -name 'feta*'`)
-
-a script to do this for you is in file(buildscripts/clean-fonts.sh)
-
-
-sect(BUGS)
-
-Send bug reports to bug-gnu-music@gnu.org.  For help and questions use
-help-gnu-music@gnu.org and gnu-music-discuss@gnu.org.  Please consult
-the faq before mailing your problems.
-
-
-sect(CDROM DISTRIBUTIONS)
-
-If you have received LilyPond on a cdrom, chances are that development
-has moved a some patchlevels up.  Please check the latest version of
-LilyPond before reporting bugs.
-
diff --git a/Documentation/topdocs/index.tely b/Documentation/topdocs/index.tely
new file mode 100644 (file)
index 0000000..253c68c
--- /dev/null
@@ -0,0 +1,108 @@
+\input texinfo @c -*-texinfo-*-
+@setfilename index.info
+@settitle index
+
+@node Top, , , (dir)
+@top
+
+
+
+@unnumbered LilyPond -- The @uref{http://www.fsf.org/gnu/gnu-history.html,GNU Project} Music Typesetter
+
+@quotation
+@mudela[fragment]
+       \relative c'' { \key es; r8 [c16 b] [c8 g] [as c16 b] [c8 d] | g,4 }
+@end mudela 
+@end quotation
+
+@c include BLURB?
+
+LilyPond is a music typesetter.  It produces beautiful sheet music
+using a high level description file as input.  LilyPond is part of 
+the GNU Project.
+
+@c include screenshot
+
+
+
+@unnumberedsec View sheet music
+    
+
+@itemize @bullet
+
+@item @uref{./input/out-www/index.html,Examples}:
+
+simple pieces, tests and bugs.  MIDI, PNG, PostScript, and Source.
+
+@item @uref{./mutopia/out-www/index.html,Music in Mutopia}:
+
+LilyPond handling real music.  MIDI, view PNG, PostScript, and Source.
+@end itemize
+
+@unnumberedsec Documentation
+    
+
+@itemize @bullet
+@item @uref{Documentation/tex/out-www/tutorial.html,Tutorial}
+@item @uref{Documentation/out-www/faq.html,FAQ}
+@item @uref{Documentation/out-www/mail.html,Mailing Lists}
+@item @uref{Documentation/out-www/index.html,All of the LilyPond documentation}
+@item @uref{./docxx/index.html,The DOC++ documentation of the C++ sources.}
+@item @uref{Documentation/topdocs/out-www/INSTALL.html,The installation instructions}
+@end itemize
+
+@unnumberedsec Sites
+    
+
+@itemize @bullet
+@item @uref{http://www.gnu.org/software/...}  LilyPond is part of the GNU
+project.  The webpages for the stable version reside at GNU.
+
+@item @uref{http://www.cs.uu.nl/people/hanwen/lilypond/} Han-Wen's site
+has the development pages.
+@item @uref{http://sca.uwaterloo.ca/lilypond/} Eric's mirror
+@item @uref{http://home.austin.rr.com/jbr/jeff/lilypond/} Jeff's Windows NT Distribution site
+@end itemize
+
+@unnumberedsec NEWS
+    
+
+This is what the latest version brings:
+@example 
+
+top_of_NEWS
+@end example 
+
+@unnumberedsec Download
+
+@itemize @bullet
+@item @uref{ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/development/}
+@item @uref{http://sca.uwaterloo.ca/lilypond/}
+    Eric Praetzel was kind enough to provide a mirror of both the website
+    and the ftp site.
+@item  @uref{ftp://ftp.lilypond.org/pub/LilyPond/}
+       A mirror of the FTP site.  Updated at 0:00 MET daily. 
+@item @uref{ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/RedHat/RPMS/} RedHat binary
+@item @uref{ftp://ftp.debian.org/pub/debian/dists/unstable/main/binary-i386/tex} Debian binary
+@item @uref{http://home.austin.rr.com/jbr/jeff/lilypond/} Windows NT binary
+@item @uref{http://linux.umbc.edu/software/lilypond/rpms/} i386 RPM.
+@item @uref{ftp://freshmeat.net/pub/rpms/lilypond/} i386 RPM.
+@end itemize
+
+@unnumberedsubsec Webmaster's Disclaimer
+
+These pages were entirely created from the LilyPond package-sources.
+Sorry for poor look they have: we want to be hacking at LilyPond, and
+not at the webpages.  If you want to volunteer for making shazzy
+webpages, then please mail us!
+
+Note: These pages are created from the latest @strong{development snapshots}
+of LilyPond, specifically, this page was made from LilyPond
+(fixme-version).tar.gz
+
+Note: the pages may have been created from an unreleased development
+version.  Please have patience, all changes will appear in the
+official version.
+
+@bye
diff --git a/Documentation/topdocs/index.yo b/Documentation/topdocs/index.yo
deleted file mode 100644 (file)
index bf794f4..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-DEFINEMACRO(depth)(0)(.)
-DEFINEMACRO(docdir)(0)(Documentation)
-DEFINEMACRO(pic)(1)(url(ARG1)(DOEXPAND(docdir)/pictures/DOEXPAND(outdir)/ARG1.png
-))
-
-DEFINEMACRO(beginbold)(0)(whenhtml(htmlcommand(<font size=4><strong>)))
-DEFINEMACRO(endbold)(0)(whenhtml(htmlcommand(</strong></font>)))
-redef(htmlnewfile)(0)()
-setchapterstring()
-
-nchapter(LilyPond -- The url(GNU Project)(http://www.fsf.org/gnu/gnu-history.html) Music Typesetter)
-
-includefile(../BLURB.in)(url(italiano)(DOEXPAND(docdir)/DOEXPAND(outdir)/COPERTINA.html))(url(nederlands)(DOEXPAND(docdir)/DOEXPAND(outdir)/FLAPTEKST.html))
-nl()
-pic(screenshot)
-
-center(mudela(fragment)(
-       \relative c'' { \key es; r8 [c16 b] [c8 g] [as c16 b] [c8 d] | g,4 }
-))
-
-nsect(Free Software)
-
-Of course LilyPond, being part of the GNU project, is url(free
-software)(http://www.fsf.org/copyleft/copyleft.html).  For more
-url(information)(http://www.fsf.org/philosophy/philosophy.html), see
-the url(Free Software Foundation)(http://www.fsf.org/).
-
-LilyPond comes in two variants, a stable one, and a development
-snapshots.  The webpages matching the stable versions are at
-lurl(http://www.gnu.org/software/...), the development pages are at
-lurl(http://www.cs.uu.nl/~hanwen/lilypond/).
-
-
-nsect(Preview)
-
-itemize(
-beginbold()
-it()url(Examples)(DOEXPAND(depth)/input/DOEXPAND(outdir)/index.html):
-endbold()
- simple pieces, tests and bugs.  MIDI, PNG (gif replacement), PostScript, and Source.
-beginbold()
-it()url(Music in Mutopia)(DOEXPAND(depth)/mutopia/DOEXPAND(outdir)/index.html):
-endbold()
- LilyPond handling real music.  MIDI, view PNG (gif replacement), PostScript, and Source.
-)
-
-nsect(Documentation)
-
-itemize(
-it()url(Tutorial)(DOEXPAND(docdir)/tex/DOEXPAND(outdir)/tutorial.html)
-it()url(FAQ)(DOEXPAND(docdir)/DOEXPAND(outdir)/faq.html)
-it()url(Mailing Lists)(DOEXPAND(docdir)/DOEXPAND(outdir)/mail.html)
-it()url(All of the LilyPond documentation)(DOEXPAND(docdir)/DOEXPAND(outdir)/index.html)
-it()url(The DOC++ documentation of the C++ sources.)(DOEXPAND(depth)/docxx/index.html)
-it()url(The installation instructions)(Documentation/topdocs/DOEXPAND(outdir)/INSTALL.html)
-)
-
-nsect(Sites)
-
-itemize(
-it()lurl(http://www.cs.uu.nl/people/hanwen/lilypond/) Han-Wen's site
-it()lurl(http://sca.uwaterloo.ca/lilypond/) Eric's mirror
-it()lurl(http://home.austin.rr.com/jbr/jeff/lilypond/) Jeff's Windows NT Distribution site
-)
-
-nsect(NEWS)
-
-This is what the latest version brings:
-verb(
-top_of_NEWS
-)
-
-nsect(Download)
-
-beginbold()
-Go get it at
-itemize(
-it()lurl(ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/development/)
-endbold()
-it() lurl(http://sca.uwaterloo.ca/lilypond/)
-    Eric Praetzel was kind enough to provide a mirror of both the website
-    and the ftp site.
-it() lurl(ftp://ftp.lilypond.org/pub/LilyPond/)
-       A mirror of the FTP site.  Updated at 0:00 MET daily. 
-it()lurl(ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/RedHat/RPMS/) RedHat binary
-it()lurl(ftp://ftp.debian.org/pub/debian/dists/unstable/main/binary-i386/tex) Debian binary
-it()lurl(http://home.austin.rr.com/jbr/jeff/lilypond/) Windows NT binary
-it()lurl(http://linux.umbc.edu/software/lilypond/rpms/) i386 RPM.
-it()lurl(ftp://freshmeat.net/pub/rpms/lilypond/) i386 RPM.
-)
-
-nsubsect(Webmaster's Disclaimer)
-
-These pages were entirely created from the LilyPond package-sources.
-Sorry for poor look they have: we want to be hacking at LilyPond, and
-not at the webpages.  If you want to volunteer for making shazzy
-webpages, then please mail us!
-
-Note: These pages are created from the latest bf(development snapshots)
-of LilyPond, specifically, this page was made from LilyPond
-@TOPLEVEL_VERSION@.tar.gz
-
-Note: the pages may have been created from an unreleased development
-version.  Please have patience, all changes will appear in the
-official version.
-
-@COUNTER_REF@
diff --git a/Documentation/topdocs/scherm.in b/Documentation/topdocs/scherm.in
deleted file mode 100644 (file)
index 005b645..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-18:46:03 mub ~/lelie$ lilypond twinkle
-GNU LilyPond 0.1.78/FlowerLib 1.1.44.
-Ontleden...[/home/fred/usr/src/lilypond/init/init.ly[/home/fred/usr/src/lilypond/init/declarations.ly[/home/fred/usr/src/lilypond/init/dynamic.ly][/home/fred/usr/src/lilypond/init/nederlands.ly][/home/fred/usr/src/lilypond/init/script.ly][/home/fred/usr/src/lilypond/init/paper20.ly[/home/fred/usr/src/lilypond/init/table20.ly][/home/fred/usr/src/lilypond/init/table13.ly][/home/fred/usr/src/lilypond/init/table16.ly][/home/fred/usr/src/lilypond/init/params.ly[/home/fred/usr/src/lilypond/init/a4.ly][/home/fred/usr/src/lilypond/init/paper.ly][/home/fred/usr/src/lilypond/init/engraver.ly]]][/home/fred/usr/src/lilypond/init/midi.ly[/home/fred/usr/src/lilypond/init/performer.ly]][/home/fred/usr/src/lilypond/init/property.ly]][/home/fred/usr/src/lilypond/input/twinkle.ly]]
-Vertolken van muziek...[8][16][24][25]
-duur: 1.34 seconden
-Voorbewerken van elementen... [/home/fred/usr/src/lilypond/mf/out/feta20.afm]
-Berekenen van kolomposities... [3][6][9][12][15][18][21][24][25]
-geschat: 231 regels (van gemiddeld 21.4 kolommen)
-exact berekend: 66 regels (van gemiddeld 25.5 kolommen)
-duur: 6.11 seconden
-Nabewerken van elementen... 
-TeX uitvoer naar twinkle.tex...
-
-Vertolken van muziek...
-duur: 0.22 seconden
-MIDI uitvoer naar twinkle.midi...
diff --git a/Documentation/topdocs/schermo.in b/Documentation/topdocs/schermo.in
deleted file mode 100644 (file)
index b4fb407..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-18:37:15 mub ~/lelie$ lilypond twinkle
-GNU LilyPond 0.1.78/FlowerLib 1.1.44.
-Analizzare...[/home/fred/usr/src/lilypond/init/init.ly[/home/fred/usr/src/lilypond/init/declarations.ly[/home/fred/usr/src/lilypond/init/dynamic.ly][/home/fred/usr/src/lilypond/init/nederlands.ly][/home/fred/usr/src/lilypond/init/script.ly][/home/fred/usr/src/lilypond/init/paper20.ly[/home/fred/usr/src/lilypond/init/table20.ly][/home/fred/usr/src/lilypond/init/table13.ly][/home/fred/usr/src/lilypond/init/table16.ly][/home/fred/usr/src/lilypond/init/params.ly[/home/fred/usr/src/lilypond/init/a4.ly][/home/fred/usr/src/lilypond/init/paper.ly][/home/fred/usr/src/lilypond/init/engraver.ly]]][/home/fred/usr/src/lilypond/init/midi.ly[/home/fred/usr/src/lilypond/init/performer.ly]][/home/fred/usr/src/lilypond/init/property.ly]][/home/fred/usr/src/lilypond/input/twinkle.ly]]
-Interpretare musica...[8][16][24][25]
-durata: 1.36 secondi
-Preprocessare elementi... [/home/fred/usr/src/lilypond/mf/out/feta20.afm]
-Calcolare posizioni di colonne... [3][6][9][12][15][18][21][24][25]
-approssimato: 231 linee (con una media di 21 colonne):
-calcolato esattamente: 66 linee (con una media di 25 colonne)
-durata: 6.14 secondi
-Postprocessare elementi... 
-Prodotto di TeX verso twinkle.tex...
-
-Interpretare musica...
-durata: 0.21 secondi
-Prodotto di MIDI verso twinkle.midi...
diff --git a/Documentation/topdocs/topweb.yo b/Documentation/topdocs/topweb.yo
deleted file mode 100644 (file)
index 64bd836..0000000
+++ /dev/null
@@ -1 +0,0 @@
-whenhtml(htmlcommand(<meta http-equiv=refresh content="0; url=Documentation/topdocs/out-www/index.html">))
index 7968bdb5233f3090069f9b7d9ce66dc3fc675dc1..b64465f9c3ed73dac1b20437694a81978ee2f15e 100644 (file)
 
-       NSTALL - compiling and installing GNU LilyPond
 
-                         HWN & JCN
+INSTALL - compiling and installing GNU LilyPond
+***********************************************
 
-Contents
+ABSTRACT
+========
 
-     1: ABSTRACT
-2: OBTAINING
-3: PREREQUISITES
-4: RUNNING
-5: WEBSITE
-6: CONFIGURING and COMPILING
-7: CONFIGURING FOR MULTIPLE PLATFORMS
-8: INSTALLING
-9: REDHAT LINUX
-10: DEBIAN GNU/LINUX
-11: WINDOWS NT/95
-12: BUGS
-13: AUTHORS
+   This document explains what you need to install LilyPond, and what
+you should do.  If you are going to compile and install LilyPond often,
+e.g. when doing development, you might want to check out the
+`buildscripts/set-lily.sh' script.  It sets some environment variables
+and symlinks, which comes in handly when you have to compile LilyPond
+more often.
 
-1: ABSTRACT
+OBTAINING
+=========
 
-This document explains what you need to install LilyPond,
-and what you should do.  If you are going to compile and
-install LilyPond often, e.g. when doing development, you
-might want to check out the buildscripts/set-lily.sh script.
-It sets some environment variables and symlinks, which comes
-in handly when you have to compile LilyPond more often.
+   You can get the latest version of LilyPond at <
+ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/>.  Refer to the links document for
+mirror sites.
 
-2: OBTAINING
+   _If you upgrade by patching do remember to rerun autoconf after
+applying the patch_.
 
-You can get the latest version of LilyPond at
-ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/.  Refer to the links
-document for mirror sites.
+PREREQUISITES
+=============
 
-If you upgrade by patching do remember to rerun autoconf
-after applying the patch.
+   For compilation you need:
 
-3: PREREQUISITES
+   * A GNU system: GNU LilyPond is known to run on these GNU systems:
+     Linux     (PPC, intel), FreeBSD, AIX, NeXTStep, IRIX, Digital Unix
+     and Solaris.
 
-For compilation you need:
+   * Lots of disk space: LilyPond takes between 30 and 100 mb to
+     compile if you use debugging information.  If you are short on
+     disk-space run configure with `--disable-debugging'.
 
-o    A GNU system: GNU LilyPond is known to run on these GNU
-     systems: Linux (PPC, intel), FreeBSD, AIX, NeXTStep,
-     IRIX, Digital Unix and Solaris.
+     Although we recommend to use Unix, LilyPond is known to run on
+     Windows NT/95/98 as well.  See Section *Note w32::.
 
-o    Lots of disk space: LilyPond takes between 30 and 100
-     mb to compile if you use debugging information.  If you
-     are short on disk-space run configure with --disable-
-     debugging.
+   * EGCS 1.1 or newer. Check out < ftp://ftp.gnu.org/pub/gcc/>
 
-     Although we recommend to use Unix, LilyPond is known to
-     run on Windows NT/95/98 as well.  See Section 11.
+   * Python 1.5, Check out <ftp://ftp.python.org> or
+     <ftp://ftp.cwi.nl/pub/python>.
 
-o    EGCS 1.1 or newer.
+   * GUILE 1.3,  check out
+     <http://www.gnu.org/software/guile/guile.html>.
 
-o    Python 1.5, Check out ftp://ftp.python.org or
-     ftp://ftp.cwi.nl/pub/python.
+   * GNU make.  Check out <ftp://ftp.gnu.org/make/>.
 
-o    GUILE 1.3,  check out http://www.gnu.org/soft-
-     ware/guile/guile.html.
+   * Flex (version 2.5.4 or newer).  Check out
+     <ftp://ftp.gnu.org/flex/>.
 
-o    GNU make.  Check out ftp://ftp.gnu.org.
+   * Bison (version 1.25 or newer).  Check out
+     <ftp://ftp.gnu.org/bison/>.
 
-o    Flex (version 2.5.4 or newer).  Check out
-     ftp://ftp.gnu.org.
+   * Texinfo. Check out <ftp://ftp.gnu.org/pub/texinfo/>.  Most
+     documentation is in texinfo.
 
-o    Bison (version 1.25 or newer).  Check out
-     ftp://ftp.gnu.org.
+   * Yodl.  Needed for obsolete docs (1.31.17)
+     <ftp://ftp.lilypond.org/pub/yodl>.
 
-o    Yodl.  All documentation will be in Yodl. (1.31.15)
-     ftp://ftp.lilypond.org/pub/yodl. You need the latest
-     version of YODL, because the tutorial will trigger a
-     bug in earlier versions.
+   * The geometry package for LaTeX is needed to use ly2dvi.  Available
+     at
+     <ftp://ftp.ctan.org/tex-archive/macros/latex/contrib/supported/geometry>
+     or at mirror site <ftp://ftp.dante.de>
 
-o    The geometry package for LaTeX is needed to use ly2dvi.
-     Available at ftp://ftp.ctan.org/tex-
-     archive/macros/latex/contrib/supported/geometry or at
-     mirror site ftp://ftp.dante.de
+   * MetaPost, if you want to use direct PostScript output. Please note
+     that  tetex-0.4pl8 (included with Redhat 5.x) does not include
+     `mfplain.mp', which is needed  for producing the scaleable font
+     files.
 
-o    MetaPost, if you want to use direct PostScript output.
-     Please note  that  tetex-0.4pl8 (included with Redhat
-     5.x) does not include mfplain.mp, which is needed  for
-     producing the scaleable font files.
 
-4: RUNNING
+RUNNING
+=======
 
-GNU LilyPond does use a lot of resources. For operation you
-need the following software
+   GNU LilyPond does use a lot of resources. For operation you need the
+following software
 
-o    TeX
+   * TeX
 
-o    A PostScript printer and/or viewer (such as
-     Ghostscript) is strongly recommended.  Xdvi will show
-     all embedded PostScript too if you have Ghostscript
-     installed.
+   * A PostScript printer and/or viewer (such as Ghostscript) is
+     strongly     recommended.  Xdvi will show all embedded PostScript
+     too if you have     Ghostscript installed.
 
-o    GUILE 1.3, check out http://www.gnu.org/pro-
-     grams/guile.html
-
-For running LilyPond successfully you have to help TeX and
-MetaFont find various files.  The recommended way of doing
-so is adjusting the environment variables in the start-up
-scripts of your shell.  An example is given here for the
-Bourne shell:
+   * GUILE 1.3, check out <http://www.gnu.org/programs/guile.html>
 
+   For running LilyPond successfully you have to help TeX and MetaFont
+find various files.  The recommended way of doing so is adjusting the
+environment variables in the start-up scripts of your shell.  An
+example is given here for the Bourne shell:
      export MFINPUTS="/usr/local/share/lilypond/mf:"
      export TEXINPUTS="/usr/local/share/lilypond/tex:/usr/local/share/lilypond/ps:"
 
-The empty path component represents  and MetaFont's default
-search paths.  Scripts with the proper paths for the bourne
-and C-shell respectively are generated in build-
-scripts/out/lilypond-profile and buildscripts/out/lilypond-
-login during compilation.
+   The empty path component represents TeX and MetaFont's default
+search paths.  Scripts with the proper paths for the bourne and C-shell
+respectively are generated in `buildscripts/out/lilypond-profile' and
+`buildscripts/out/lilypond-login' during compilation.
 
-LilyPond is a hiddeously big, slow and bloated program.  A
-fast CPU and plenty of RAM is recommended for comfortable
-use.
+   LilyPond is a hiddeously big, slow and bloated program.  A fast CPU
+and plenty of RAM is recommended for comfortable use.
 
-5: WEBSITE
+WEBSITE
+=======
 
-The website is the most convenient form to use for reading
-the documentation on-line documentation. It is made by
-entering
+   The website is the most convenient form to use for reading the
+documentation on-line documentation. It is made by entering
 
        make website
+   This does require a fully functioning
 
-This does require a fully functioning
-
-If you want to auto-generate Lily's website, you'll need
-some additional conversion tools.
-
-o    YODL 1.31.15 or later.
+   If you want to auto-generate Lily's website, you'll need some
+additional conversion tools.
 
-o    xpmtoppm (from the Portable Bitmap Utilities) (For Red-
-     Hat Linux users: it is included within the package
-     libgr-progs).  the original is at ftp://ftp.x.org/con-
-     trib/utilities/netpbm-1mar1994.p1.tar.gz
+   * YODL 1.31.15 or later.
 
-o    pnmtopng, which is also in libgr-progs for RedHat. The
-     original is at
-     ftp://swrinde.nde.swri.edu/pub/png/applications/pnm-
-     topng-2.37.2.tar.gz.i
+   * xpmtoppm (from the Portable Bitmap Utilities) (For RedHat Linux
+      users: it is included within the package libgr-progs).
+     the original is at
+     <ftp://ftp.x.org/contrib/utilities/netpbm-1mar1994.p1.tar.gz>
 
-     The version of pnmtopng that is distributed with RedHat
-     5.1 and 5.2 contains a bug: pnmtopng is dynamically
-     linked to the wrong version of libpng, which results in
+   * pnmtopng, which is also in libgr-progs for RedHat. The original is
+     at
+     <ftp://swrinde.nde.swri.edu/pub/png/applications/pnmtopng-2.37.2.tar.gz>.i
 
-     cropped images.  Recompile it from source, and make
-     sure that the pnmtopng binary is linked statically to
-     the libpng that is included in libgr.  RedHat 6.0 does
-     not have this problem.
+     The version of `pnmtopng' that is distributed with RedHat 5.1 and
+     5.2 contains a bug: pnmtopng is dynamically linked to the wrong
+     version of libpng, which results in cropped images.  Recompile it
+     from source, and make sure that the pnmtopng binary is linked
+     statically to the libpng that is included in libgr.  RedHat 6.0
+     does not have this problem.
 
            tar xzf libgr-2.0.13.tar.gz
                 make
@@ -158,188 +137,196 @@ o    pnmtopng, which is also in libgr-progs for RedHat. The
                 rm libpng.so*
                 make pnmtopng
 
-     You can then install the new pnmtopng into
-     /usr/local/bin/
+     You can then install the new pnmtopng into `/usr/local/bin/'
 
-o    Bib2html http://pertsserver.cs.uiuc.edu/~hull/bib2html.
-     Which, in turn depends on man2html for proper installa-
-     tion.  man2html can be had from http://askdon-
-     ald.ask.uni-karlsruhe.de/hppd/hpux/Network-
-     ing/WWW/Man2html-1.05.
+   * Bib2html <http://pertsserver.cs.uiuc.edu/~hull/bib2html.>
+     Which, in turn depends on man2html for proper installation.
+     man2html can be had from
+     <http://askdonald.ask.uni-karlsruhe.de/hppd/hpux/Networking/WWW/Man2html-1.05>.
 
-     The website will build without this utility, but you
-     will not see our hypertextified bibliography.
+     The website will build without this utility, but you will not see
+     our hypertextified bibliography.
 
-o    Doc++ (optional) to read the source code.
+   * Doc++ (optional) to read the source code.
 
-You also have to install buildscripts/out/ps-to-gifs in a
+
+   You also have to install `buildscripts/out/ps-to-gifs' in a
 directory that is in the path.
 
-6: CONFIGURING and COMPILING
+CONFIGURING and COMPILING
+=========================
+
+   to install GNU LilyPond, simply type:
+
+       gunzip -c lilypond-x.y.z | tar xf -
+       cd lilypond-x.y.z
+       ./configure             # fill in your standard prefix with --prefix
+       make
+       make install
 
-to install GNU LilyPond, simply type:
+   This will install a number of files, something close to:
 
-          gunzip -c lilypond-x.y.z | tar xf -
-          cd lilypond-x.y.z
-          ./configure         # fill in your standard prefix with --prefix
-          make
-          make install
+       /usr/local/man/man1/mi2mu.1
+       /usr/local/man/man1/convert-mudela.1
+       /usr/local/man/man1/mudela-book.1
+       /usr/local/man/man1/lilypond.1
+       /usr/local/bin/lilypond
+       /usr/local/bin/mi2mu
+       /usr/local/share/lilypond/*
+       /usr/local/share/locale/{it,nl}/LC_MESSAGES/lilypond.mo
 
-This will install a number of files, something close to:
+   The above assumes that you are root and have the GNU development
+tools, and your make is GNU make.  If this is not the case, you can
+adjust your environment variables to your taste:
 
-          /usr/local/man/man1/mi2mu.1
-          /usr/local/man/man1/convert-mudela.1
-          /usr/local/man/man1/mudela-book.1
-          /usr/local/man/man1/lilypond.1
-          /usr/local/bin/lilypond
-          /usr/local/bin/mi2mu
-          /usr/local/share/lilypond/*
-          /usr/local/share/locale/{it,nl}/LC_MESSAGES/lilypond.mo
 
-The above assumes that you are root and have the GNU devel-
-opment tools, and your make is GNU make.  If this is not the
-case, you can adjust your environment variables to your
-taste:
+       export CPPFLAGS="-I /home/me/my_include -DWEIRD_FOOBAR"
+       ./configure
 
-          export CPPFLAGS="-I /home/me/my_include -DWEIRD_FOOBAR"
-          ./configure
+   `CPPFLAGS' are the preprocessor flags.
 
-CPPFLAGS are the preprocessor flags.
+   The configure script is Cygnus configure, and it will accept
+*-help*. If you are not root, you will probably have to make it with a
+different *-prefix* option.  Our favourite location is
 
-The configure script is Cygnus configure, and it will accept
---help. If you are not root, you will probably have to make
-it with a different --prefix option.  Our favourite location
-is
 
-          ./configure --prefix=$HOME/usr
+       ./configure --prefix=$HOME/usr
 
-In this case, you will have to set up MFINPUTS, and TEXIN-
-PUTS accordingly.
+   In this case, you will have to set up MFINPUTS, and TEXINPUTS
+accordingly.
 
-Since GNU LilyPond currently is beta, you are advised to
-also use
+   Since GNU LilyPond currently is beta, you are advised to also use
 
-          --enable-debugging
-          --enable-checking
 
-Options to configure include:
+       --enable-debugging
+       --enable-checking
 
---enable-printing
-     Enable debugging print routines (lilypond -D option)
+   Options to configure include:
 
---enable-optimise
-     Set maximum optimisation: compile with -O2.  This can
-     be unreliable on some compiler/platform combinations
-     (eg, DEC Alpha and PPC)
+`*--enable-printing*'
+     Enable debugging print routines (lilypond *-D* option)
 
---enable-profiling
+`*--enable-optimise*'
+     Set maximum optimisation: compile with *-O2*.  This can be
+     unreliable on some compiler/platform combinations (eg, DEC Alpha
+     and PPC)
+
+`*--enable-profiling*'
      Compile with support for profiling.
 
---enable-config
+`*--enable-config*'
      Output to a different configuration file.  Needed for
-     multi-platform builds
+     multi-platform     builds
+
+   All options are documented in the `configure' help The option
+*-enable-optimise* is recommended for Real Life usage.
+
+   If you do
 
-All options are documented in the configure help The option
---enable-optimise is recommended for Real Life usage.
 
-If you do
+       make all
 
-          make all
+   everything will be compiled, but nothing will be installed.  The
+resulting binaries can be found in the subdirectories `out/' (which
+contain all files generated during compilation).
 
-everything will be compiled, but nothing will be installed.
-The resulting binaries can be found in the subdirectories
-out/ (which contain all files generated during compilation).
+CONFIGURING FOR MULTIPLE PLATFORMS
+==================================
 
-7: CONFIGURING FOR MULTIPLE PLATFORMS
+   If you want to compile LilyPond with different configuration
+settings, then, you can use the *-enable-config* option.  Example:
+suppose I want to build with and   without profiling.  Then I'd use the
+following for the normal build,
 
-If you want to compile LilyPond with different configuration
-settings, then, you can use the --enable-config option.
-Example: suppose I want to build with and   without profil-
-ing.  Then I'd use the following for the normal build,
 
            ./configure --prefix=~ --disable-optimise --enable-checking
            make
            make install
 
-and for the profiling version, I specify a different config-
-uration.
+   and for the profiling version, I specify a different configuration.
+
 
            ./configure --prefix=~ --enable-profiling --enable-config=optprof --enable-optimise --disable-checking
            make config=optprof
            make config=optprof install
 
-8: INSTALLING
+INSTALLING
+==========
+
+   If you have done a successful `make', then a simple
 
-If you have done a successful make, then a simple
 
-          make install
+       make install
 
-should do the trick.
+   should do the trick.
 
-If you are doing an upgrade, please remember to remove obso-
-lete .pk and .tfm files of the fonts.  A script has been
-provided to do the work for you, see bin/clean-fonts.sh.
+   If you are doing an upgrade, please remember to remove obsolete
+`.pk' and `.tfm' files of the fonts.  A script has been provided to do
+the work for you, see `bin/clean-fonts.sh'.
 
 CAVEATS
+=======
 
-o    The -O2 option  triggers  bugs on various platforms
-     (PowerPC, Alpha).  If you experience problems, you
-     should first try  turning off this.
+   * The -O2 option  triggers  bugs on various platforms (PowerPC,
+     Alpha).      If you experience problems, you  should first try
+     turning off     this.
 
-o    On PPC you need at least EGCS-1.1.2f.
+   * On PPC you need at least EGCS-1.1.2f.
 
-9: REDHAT LINUX
+REDHAT LINUX
+============
 
-RedHat Linux users can compile an RPM. A spec file is in
-make/out/lilypond.spec, it is distributed along with the
-sources.
+   RedHat Linux users can compile an RPM. A spec file is in
+`make/out/lilypond.spec', it is distributed along with the sources.
 
-You can make the rpm by issuing
+   You can make the rpm by issuing
 
-          rpm -tb lilypond-x.y.z.tar.gz
-          rpm -i /usr/src/redhat/RPMS/i386/lilypond-x.y.z
+       rpm -tb lilypond-x.y.z.tar.gz
+       rpm -i /usr/src/redhat/RPMS/i386/lilypond-x.y.z
 
-Precompiled i386 RedHat RPMS are available from ftp://fresh-
-meat.net/pub/rpms/lilypond/ and http://linux.umbc.edu/soft-
-ware/lilypond/rpms/.
+   Precompiled i386 RedHat RPMS are available from
+<ftp://freshmeat.net/pub/rpms/lilypond/> and
+<http://linux.umbc.edu/software/lilypond/rpms/>.
 
-For compilation on a RedHat system you need these packages,
-in addition to the thoes needed for running:
+   For compilation on a RedHat system you need these packages, in
+addition to the thoes needed for running:
+   * glibc-devel
 
-o    glibc-devel
+   * libstdc++-devel
 
-o    libstdc++-devel
+   * guile-devel
 
-o    guile-devel
+   * flex
 
-o    flex
+   * bison
 
-o    bison
+DEBIAN GNU/LINUX
+================
 
-10: DEBIAN GNU/LINUX
+   A Debian package is also available; contact Anthony Fok
+<foka@debian.org>.  The build scripts are in the subdirectory `debian/'.
 
-A Debian package is also available; contact Anthony Fok
-foka@debian.org.  The build scripts are in the subdirectory
-debian/.
+WINDOWS NT/95
+=============
 
-11: WINDOWS NT/95
+   Separate instructions on building for W32 are available
+<../../outdir/README-W32.html>.
 
-Separate instructions on building for W32 are avaible in the
-file README-W32.yo.
+BUGS
+====
 
-12: BUGS
+   Send bug reports to bug-gnu-music@gnu.org.  For help and questions
+use help-gnu-music@gnu.org and gnu-music-discuss@gnu.org.  Please
+consult the faq before mailing your problems.
 
-Send bug reports to bug-gnu-music@gnu.org.  For help and
-questions use help-gnu-music@gnu.org and gnu-music-dis-
-cuss@gnu.org.  Please consult the faq before mailing your
-problems.
+AUTHORS
+=======
 
-13: AUTHORS
+   Han-Wen Nienhuys <hanwen@cs.uu.nl>
 
-Han-Wen Nienhuys <hanwen@cs.uu.nl>
+   Jan Nieuwenhuizen <janneke@gnu.org>
 
-Jan Nieuwenhuizen <janneke@gnu.org>
+   In case of problems, please use the mailing list for help.
 
-In case of problems, please use the mailing list for help.
+   Have fun!
 
-Have fun!
diff --git a/NEWS b/NEWS
index 46cf0a67b59035067f163e612c17e5cf015ec174..1d595bfa445ef012ba196531a7972d9e642d1474 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -23,5 +23,3 @@ WHAT'S NEW?
 * More elegant spacing.  Text is spaced exactly.
 
 * Lots of bugfixes.
-
-pl 1.2.2.lec1 fix to abc2ly for fermata and space following >; to paddy.abc to include X: header line (lec1); to PATCHES.yo to point to real authors.yo
index d5dd11f03764980172df6ab79802fc3b1b773564..34ebbcad1367da1257c6257cf031161d3c06ce10 100644 (file)
 
-          This is the toplevel README to LilyPond
 
-LilyPond is a music typesetter.  It produces beautiful sheet
-music using a high level description file as input.  Lily-
-Pond is part of the GNU Project.
+   )
 
-1: VERSIONING
+This is the toplevel README to LilyPond
+***************************************
 
-LilyPond uses a versioning scheme similar to the Linux ker-
-nel.  In a version "x.y.z", an even second number 'y'
-denotes a stable version.  For development versions 'y' is
-odd.  For using straightforward score production, please use
-the latest stable version.  Development versions may not
-produce good or nice scores.
+   LilyPond is a music typesetter.  It produces beautiful sheet music
+using a high level description file as input.  LilyPond is part of the
+GNU Project.
 
-2: REQUIREMENTS
+versioning
+==========
 
-For the compilation and running of LilyPond you need some
-additional packages.  Please refer to the installation
-instructions.
+   LilyPond uses a versioning scheme similar to the Linux kernel.  In a
+version "x.y.z", an even second number 'y' denotes a stable version.
+For development versions 'y' is odd.  For using straightforward score
+production, please use the latest stable version.  Development versions
+may not produce good or nice scores.
 
-NOTE: If you downloaded a binary (.rpm or a W95/NT .zip
-file), then you don't have to compile LilyPond.
+requirements
+============
 
-3: INSTALLATION
+   For the compilation and running of LilyPond you need some additional
+packages.  Please refer to the installation instructions.
 
-For your convenience, a formatted copy of the INSTALL
-instructions are in the toplevel directory, as INSTALL.txt
+   NOTE: If you downloaded a binary (.rpm or a W95/NT .zip file), then
+you don't have to compile LilyPond.
 
-The process is fairly straightforward, but chances are that
-you have to specify directories for  to configure: this is
-done with the options --enable-tex-dir and --enable-mf-dir
+installation
+============
 
-4: DOCUMENTATION
+   For your convenience, a formatted copy of the INSTALL instructions
+are in the toplevel directory, as INSTALL.txt
 
-The real documentation is the directory Documentation/
+   The process is fairly straightforward, but chances are that you have
+to specify directories for TeX to `configure': this is done with the
+options `--enable-tex-dir' and `--enable-mf-dir'
 
-If you want to read the documentation online, these are
-options:
+documentation
+=============
 
-o    use .html. Refer to INSTALL.txt for info on how to make
-     the .html documentation.
+   The real documentation is the directory Documentation/
 
-o    use .html. Point your browser to
-     http://www.cs.uu.nl/~hanwen/lilypond/index.html.
+   If you want to read the documentation online, these are options:
+   * use `.html'. Refer to INSTALL.txt for info on how to make the
+     .html documentation.
 
-o     use .dvi,  for the tutorial and reference manual. Do
+   * use `.html'. Point your browser to
+     `http://www.cs.uu.nl/~hanwen/lilypond/index.html'.
 
-            make -C Documentation/tex/ dvi
+   * use `.dvi',  for the tutorial and reference manual. Do
 
-o    use ASCII. Do using
+            make -C Documentation/tex/ dvi
 
-               make -C Documentation/
+   * use ASCII. Do using
 
-     The tutorial and the reference manual  can not be made
-     in ASCII, as they contain graphics.
+               make -C Documentation/
 
-5: COMMENTS
+     The tutorial and the reference manual  can not be made in ASCII, as
+     they contain graphics.
 
-LilyPond is a long way from finished and polished.  We do
-appreciate criticism, comments, bugreports, patches, etc.
+comments
+========
 
-             Please send your e-mail to one of the MAILING LISTS
+   LilyPond is a long way from finished and polished.  We do appreciate
+criticism, comments, bugreports, patches, etc.
 
-and not to us personally.  See Documentation/links.yo for
-more info.
+          Please send your e-mail to one of the MAILING LISTS
 
-6: WINDOWS 32
+   and _not_ to us personally.  See `Documentation/links.yo' for more
+info.
 
-If you have received this file as part of a DOS/Window32
-distribution (LilyPond-*.zip), then it is advisable to also
-download the source package, since it might contain more
-documentation ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/
+windows 32
+==========
 
-If you decide to build LilyPond from source, please read the
-INSTALL.txt document first, especially the Windows NT/95
-section.
+   If you have received this file as part of a DOS/Window32 distribution
+(LilyPond-*.zip), then it is advisable to also download the source
+package, since it might contain more documentation
+`ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/'
 
-7: CAVEATS
+   If you decide to build LilyPond from source, please read the
+INSTALL.txt document first, especially the Windows NT/95 section.
 
-* Please read the file BUGS for some ugly bugs.
+caveats
+=======
 
-* If you have installed a previous version, be sure to
-remove old font files, eg
+   * Please read the file BUGS for some ugly bugs.
 
+   * If you have installed a previous version, be sure to remove old
+font files, eg
      rm `find /var/lib/texmf/fonts -name 'feta*'`
 
-a script to do this for you is in buildscripts/clean-
-fonts.sh
+   a script to do this for you is in `buildscripts/clean-fonts.sh'
+
+bugs
+====
 
-8: BUGS
+   Send bug reports to bug-gnu-music@gnu.org.  For help and questions
+use help-gnu-music@gnu.org and gnu-music-discuss@gnu.org.  Please
+consult the faq before mailing your problems.
 
-Send bug reports to bug-gnu-music@gnu.org.  For help and
-questions use help-gnu-music@gnu.org and gnu-music-dis-
-cuss@gnu.org.  Please consult the faq before mailing your
-problems.
+cdrom distributions
+===================
 
-9: CDROM DISTRIBUTIONS
+   if you have received LilyPond on a cdrom, chances are that
+development has moved a some patchlevels up.  Please check the latest
+version of LilyPond before reporting bugs.
 
-If you have received LilyPond on a cdrom, chances are that
-development has moved a some patchlevels up.  Please check
-the latest version of LilyPond before reporting bugs.
diff --git a/TODO b/TODO
index ae058662c9bad1a5b2330eadd4e9ca18ff701221..cb02f6a3d4ad6ae4bbcc6451ca8a2f4774e853e4 100644 (file)
--- a/TODO
+++ b/TODO
@@ -10,6 +10,10 @@ Grep -i for TODO, FIXME and ugh/ugr/urg.
 
 .* TODO
 . * use Rhythmic_head::position_i () for all Staff_referenced 
+. * bug: dots.
+. * mmrests
+. * web: download link.
+. * guile detection.
 . * Break_req handling is silly (break_forbid () + \break fucks up.)
 . * script engraver
 
@@ -41,7 +45,7 @@ the mensural music notation.
 bar line fully drawn across the staves and after that keep to the
 ChoirStaff bar line types in the rest of the scores
 
-. * autoBeamMelisma: if I explicitly beam notes in a staff with auto beaming disabled I
+- autoBeamMelisma: if I explicitly beam notes in a staff with auto beaming disabled I
 would like to have these beams also to be melismatic.
 
 . * make all Feta (including dynamics) available to the user in
@@ -59,16 +63,6 @@ abc2ly, midi2ly?
 . * mudela-book
 .  * center option (??)
 .  * make mudela-book understand usepackage{geometry}
-.  * check that linewidth set in \paper is not wider than actual linewidth?
-.  * the following fails because mudelabook doesn't care that the
-  last } after \end{mudela} finishes the marginpar:
-    \marginpar{
-    \begin{mudela}
-       c d e f g
-    \end{mudela}}
-.  * force-verbatim is maybe not that useful since latex fails with footnotes,
-  marginpars and others
-"""
 . * Key_engraver, Local_key_item
 . * Think of comprehensive solution for "if (grace_b == self_grace_b_)"
 . * String[String.length] doesn't trap.
@@ -126,7 +120,7 @@ vertically between the two staves):
 
 - The stemLength property should affect also beamed stems.
 
-. * align left edge of broken (de)cresc/slur/tie/tuplet/volta
+. * align left edge of broken tuplet-spanner (have a test case?)
 . * fix dynamics decently, ie. use kerning & ligatures.
 . * key restorations & repeats
 . * paperXX.ly \quartwidth, font setting not up to date. (Should read from AFM?)
@@ -150,7 +144,6 @@ one of the spacing bugs mentioned in the TODO.
 . * rhythmic staff & accidentals.
 . * use melismaBusy in Lyric context to typeset melismata correctly.  
 . * ly2dvi/lilypond logfile.
-. * def stem dir.
 . * hang Item on Spanner
 . * do --safe for PS output?
 . * msgfmt -o check?
@@ -219,7 +212,6 @@ able to vertically align the chorus midway between the staves.
 
 6. It would be nice to be able to put vertical brackets either side of a
 repeated section with different words for each repeat.
-
 . * Give # lines in linebreaking.  
 . * arrows on slurs.
 . * rewrite context defs using Scheme
@@ -231,7 +223,7 @@ repeated section with different words for each repeat.
 . * Align_element::padding  ?
 . * typo checks on property names?
 . * use streambufs and iostream
-       to provide IO handling for TeX stream, mudela stream, data-file.
+to provide IO handling for TeX stream, mudela stream, data-file.
 . * seriously buffer TeX output (do profile of writing .5 mb TeX file.)
 . * strip EXEs before installing
 . * zip target for binary windows dist (JBR)
@@ -251,7 +243,6 @@ repeated section with different words for each repeat.
 .  * kpathsea?
 . * fix vertical alignment and stafflines
 . * declaring Performers
-. * *.yo: fix pod manpage layout legacy
 . * text-items clash with stems/beams
 . * --include, -I option for ly2dvi (pass on to lily)
 . * fix placement of beam-less abbrev
diff --git a/VERSION b/VERSION
index 9747bff5a377424bf16f340037a9ad50a5266d51..e752f734ffde5ad71310888339ca2389ca8ba626 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,7 +1,7 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=2
-PATCH_LEVEL=4
+PATCH_LEVEL=5
 MY_PATCH_LEVEL=
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
index 7417b337a51d7eab838f745ec236ef798e988965..a7127718d839c23176ffaf4698e2c740f876c383 100644 (file)
@@ -152,7 +152,7 @@ AC_DEFUN(AC_STEPMAKE_GXX, [
     # ugh autoconf
     # urg, egcs: how to check for egcs >= 1.1?
     changequote(<<, >>)dnl
-    if $CXX --version | egrep '2\.8|2\.9' > /dev/null ||
+    if $CXX --version | egrep '2\.[89]' > /dev/null ||
        $CXX --version | grep 'egcs' > /dev/null
     changequote([, ])dnl
     then
@@ -163,19 +163,9 @@ AC_DEFUN(AC_STEPMAKE_GXX, [
 ])
 
 AC_DEFUN(AC_STEPMAKE_GUILE, [
-    # on some systems, -lguile succeeds for guile-1.3
-    # others need readline, dl (or even more)
-    # urg, must check for different functions in libguile
-    # to force new check iso reading from cache
-
-    # gh_scm2doubles,gh_doubles2scm are new in 1.3
     GUILE_FLAGS
-    AC_CHECK_LIB(guile, gh_scm2doubles,
-      [LIBS="`echo $GUILE_LDFLAGS | sed -e 's/-L[[/-_a-zA-Z0-9]]\+ //g'` $LIBS"
-      AC_DEFINE(HAVE_LIBGUILE)], , $GUILE_LDFLAGS dnl
-    )
-    if test "$ac_cv_lib_guile_gh_scm2doubles" != yes ; then
-       AC_STEPMAKE_WARN(You should install guile 1.3 or newer)
+    if guile-config --version 2>&1 | grep -q 'version 1\.[012]'; then
+       AC_STEPMAKE_WARN(Guile version 1.3 or better needed)
     fi
 ])
 
index 11a12210596085ad88e8b4424edcb71e377a2c0c..5ea6bad2f2e974c0e2325bc88b08f67ca84bd81b 100644 (file)
@@ -10,6 +10,10 @@ import stat
 sys.path.append ('@abs-step-bindir@')
 
 
+def gulp_file (fn):
+       f = open (fn)
+       return f.read ()
+
 
 header_regex = regex.compile('\\header[ \t\n]*{\([^}]*\)}')
 header_entry_regex = regex.compile('[\n\t ]*\([^\n\t ]+\)[\n\t ]*=[\n \t]*\([^;]+\)[\n \t]*;')
index be2cb00274d2222add1658f395f4e63e9e1de9ea..0c1b920b10581609bbeaa57a6e83eed450bf82fe 100644 (file)
@@ -5,8 +5,8 @@
 package-depth = @package_depth@
 
 USER_CFLAGS = @CFLAGS@
-USER_CXXFLAGS = @CXXFLAGS@ @CPPFLAGS@
-USER_LDFLAGS = 
+USER_CXXFLAGS = @CXXFLAGS@ @CPPFLAGS@ @GUILE_CFLAGS@
+USER_LDFLAGS = @GUILE_LDFLAGS@
 
 CC = @CC@
 CXX = @CXX@
index 3ebe0d3ded4635e6b90ef8d6e6fe31ae3f5b4fae..25bdbb0df3384dde6dde705e398a76e605947395 100755 (executable)
--- a/configure
+++ b/configure
@@ -1748,7 +1748,7 @@ fi
 
     # ugh autoconf
     # urg, egcs: how to check for egcs >= 1.1?
-        if $CXX --version | egrep '2\.8|2\.9' > /dev/null ||
+        if $CXX --version | egrep '2\.[89]' > /dev/null ||
        $CXX --version | grep 'egcs' > /dev/null
         then
            true
@@ -2924,17 +2924,11 @@ test -n "$YODL2TXT" || YODL2TXT="-echo no yodl"
     fi    
 
 
-    # on some systems, -lguile succeeds for guile-1.3
-    # others need readline, dl (or even more)
-    # urg, must check for different functions in libguile
-    # to force new check iso reading from cache
-
-    # gh_scm2doubles,gh_doubles2scm are new in 1.3
     
 ## The GUILE_FLAGS macro.
   ## First, let's just see if we can find Guile at all.
   echo $ac_n "checking for Guile""... $ac_c" 1>&6
-echo "configure:2938: checking for Guile" >&5
+echo "configure:2932: checking for Guile" >&5
   guile-config link > /dev/null || {
     echo "configure: cannot find guile-config; is Guile installed?" 1>&2
     exit 1
@@ -2945,56 +2939,9 @@ echo "configure:2938: checking for Guile" >&5
   
   echo "$ac_t""yes" 1>&6
 
-    echo $ac_n "checking for gh_scm2doubles in -lguile""... $ac_c" 1>&6
-echo "configure:2950: checking for gh_scm2doubles in -lguile" >&5
-ac_lib_var=`echo guile'_'gh_scm2doubles | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  ac_save_LIBS="$LIBS"
-LIBS="-lguile $GUILE_LDFLAGS      $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 2958 "configure"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-char gh_scm2doubles();
-
-int main() {
-gh_scm2doubles()
-; return 0; }
-EOF
-if { (eval echo configure:2972: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=yes"
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-  LIBS="`echo $GUILE_LDFLAGS | sed -e 's/-L[/-_a-zA-Z0-9]\+ //g'` $LIBS"
-      cat >> confdefs.h <<\EOF
-#define HAVE_LIBGUILE 1
-EOF
-
-else
-  echo "$ac_t""no" 1>&6
-fi
-
-    if test "$ac_cv_lib_guile_gh_scm2doubles" != yes ; then
-       
-    echo "configure: warning: You should install guile 1.3 or newer" 1>&2
+    if guile-config --version 2>&1 | grep -q 'version 1\.012'; then
+       
+    echo "configure: warning: Guile version 1.3 or better needed" 1>&2
     warn_b=yes
 
     fi
@@ -3002,7 +2949,7 @@ fi
 
 
 echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6
-echo "configure:3006: checking for 8-bit clean memcmp" >&5
+echo "configure:2953: checking for 8-bit clean memcmp" >&5
 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3010,7 +2957,7 @@ else
   ac_cv_func_memcmp_clean=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 3014 "configure"
+#line 2961 "configure"
 #include "confdefs.h"
 #ifdef __cplusplus
 extern "C" void exit(int);
@@ -3023,7 +2970,7 @@ main()
 }
 
 EOF
-if { (eval echo configure:3027: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:2974: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_func_memcmp_clean=yes
 else
@@ -3041,12 +2988,12 @@ echo "$ac_t""$ac_cv_func_memcmp_clean" 1>&6
 test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}"
 
 echo $ac_n "checking for vprintf""... $ac_c" 1>&6
-echo "configure:3045: checking for vprintf" >&5
+echo "configure:2992: checking for vprintf" >&5
 if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3050 "configure"
+#line 2997 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char vprintf(); below.  */
@@ -3072,7 +3019,7 @@ vprintf();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3076: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3023: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_vprintf=yes"
 else
@@ -3096,12 +3043,12 @@ fi
 
 if test "$ac_cv_func_vprintf" != yes; then
 echo $ac_n "checking for _doprnt""... $ac_c" 1>&6
-echo "configure:3100: checking for _doprnt" >&5
+echo "configure:3047: checking for _doprnt" >&5
 if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3105 "configure"
+#line 3052 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char _doprnt(); below.  */
@@ -3127,7 +3074,7 @@ _doprnt();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3131: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3078: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func__doprnt=yes"
 else
@@ -3154,12 +3101,12 @@ fi
 for ac_func in memmem snprintf vsnprintf gettext
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3158: checking for $ac_func" >&5
+echo "configure:3105: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3163 "configure"
+#line 3110 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3185,7 +3132,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3189: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3136: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -3224,7 +3171,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3228: checking for $ac_word" >&5
+echo "configure:3175: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_MAKEINFO'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
diff --git a/flower/directed-graph.cc b/flower/directed-graph.cc
deleted file mode 100644 (file)
index 0c9a7cc..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
-  edge_out.cc -- implement Directed_graph_node
-
-  source file FlowerLib
-
-  (c)  1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-*/
-
-#include "directed-graph.hh"
-
-#ifdef PARANOID                        // these checks eat huge amounts of time.
-#define PARANOID_OK() OK()
-#else
-#define PARANOID_OK()
-#endif
-
-
-Link_array<Directed_graph_node> const &
-Directed_graph_node::get_in_edge_arr() const
-{
-  return edge_in_l_arr_;
-}
-
-Link_array<Directed_graph_node> const &
-Directed_graph_node::get_out_edge_arr() const
-{
-  return edge_out_l_arr_;
-}
-
-/*
-  Should not copy deps automatically
- */
-Directed_graph_node::Directed_graph_node (Directed_graph_node const&)
-{
-}
-
-void
-Directed_graph_node::copy_edges_out (Directed_graph_node const &s)
-{
-  for (int i=0; i < s.edge_out_l_arr_.size(); i++)
-    add_edge (s.edge_out_l_arr_[i]);
-}
-
-void
-Directed_graph_node::OK() const
-{ 
-#ifndef NDEBUG
-  for (int i=0; i < edge_out_l_arr_.size(); i++) 
-    {
-      assert (edge_out_l_arr_[i]->
-             edge_in_l_arr_.find_l (this));
-    }
-  for (int i=0; i < edge_in_l_arr_.size(); i++)
-    assert (edge_in_l_arr_[i]->contains_b (this));
-#endif
-}
-
-bool
-Directed_graph_node::contains_b (const Directed_graph_node *d) const
-{
-  return edge_out_l_arr_.find_l ((Directed_graph_node*)d);
-}
-  
-void
-Directed_graph_node::remove_edge_out_idx (int i)
-{
-  PARANOID_OK();
-  Directed_graph_node * d_l = edge_out_l_arr_.get (i);
-
-  int j = d_l->edge_in_l_arr_.find_i (this);
-  assert (j>=0);
-  d_l->edge_in_l_arr_.unordered_del (j);
-  PARANOID_OK();
-}
-
-void
-Directed_graph_node::remove_edge_in (Directed_graph_node *d_l)
-{
-  PARANOID_OK();
-  d_l->remove_edge_out (this);
-  PARANOID_OK();
-}
-void
-Directed_graph_node::remove_edge_out (Directed_graph_node *d_l)
-{
-  PARANOID_OK();
-  for (int i=0; i < edge_out_l_arr_.size();) 
-    {
-      if (edge_out_l_arr_[i]== d_l)
-       remove_edge_out_idx (i);
-      else
-       i++;
-    }
-  PARANOID_OK();
-}
-bool
-Directed_graph_node::linked_b() const
-{
-  return edge_out_l_arr_.size() || edge_in_l_arr_.size ();
-}
-
-void
-Directed_graph_node::junk_links()
-{
-  edge_in_l_arr_.set_size (0);
-  edge_out_l_arr_.set_size (0);
-}
-
-
-void
-Directed_graph_node::unlink()
-{
-#ifdef PARANOID
-  PARANOID_OK();
-
-  Link_array<Directed_graph_node> t = edge_out_l_arr_;
-  t.concat (edge_in_l_arr_);
-#endif
-
-  while (edge_out_l_arr_.size())
-    remove_edge_out_idx (0);
-       
-  while (edge_in_l_arr_.size())
-    remove_edge_in (edge_in_l_arr_[0]);
-
-#ifdef PARANOID
-  for (int i =0; i < t.size(); i++)
-    t[i]->OK();
-#endif
-}
-
-Directed_graph_node::~Directed_graph_node()
-{
-  // assert (!linked_b());  // hampered by memfrobbing
-}
-
-  
-void
-Directed_graph_node::add_edge (Directed_graph_node* dep_l)
-{
-  PARANOID_OK();
-  if (!dep_l)
-    return ;
-  dep_l->edge_in_l_arr_.push (this);
-  edge_out_l_arr_.push (dep_l);
-  PARANOID_OK();
-}
-  
-
-Directed_graph_node::Directed_graph_node()
-{
-}
-
diff --git a/flower/include/directed-graph.hh b/flower/include/directed-graph.hh
deleted file mode 100644 (file)
index 9f6c9b3..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
-  edge_out.hh -- declare Directed_graph_node
-
-  source file of the GNU LilyPond music typesetter
-
-  (c)  1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-*/
-
-
-#ifndef DEPENDENCY_HH
-#define DEPENDENCY_HH
-
-#include "parray.hh"
-
-/**
-  Class to handle two-sided connections between nodes (the Dependencies)
- */
-class Directed_graph_node {
-  Link_array<Directed_graph_node>edge_out_l_arr_;
-  /// targets
-  Link_array<Directed_graph_node> edge_in_l_arr_;
-    
-public:
-    
-  /** remove i-th edge_out (and exactly one ref to me in the edge_out)
-   */
-  void remove_edge_out_idx (int i);
-  void copy_edges_out (Directed_graph_node const&);
-  bool linked_b() const;
-  void unlink();
-  void junk_links();
-  void add_edge (Directed_graph_node*);
-  void remove_edge_in (Directed_graph_node *);
-  void remove_edge_out (Directed_graph_node*);
-  bool contains_b (Directed_graph_node const*) const;
-
-  Directed_graph_node (Directed_graph_node const &);
-  void OK() const;
-  Directed_graph_node();
-
-  ~Directed_graph_node();
-    
-  /**
-    ensure that no edge_out exists doubly.
-    */
-  void uniq();
-  Link_array<Directed_graph_node> const& get_out_edge_arr() const;
-  Link_array<Directed_graph_node> const& get_in_edge_arr() const;
-};
-
-#endif // DEPENDENCY_HH
diff --git a/input/bugs/addlyrmus.fly b/input/bugs/addlyrmus.fly
new file mode 100644 (file)
index 0000000..32b095b
--- /dev/null
@@ -0,0 +1,4 @@
+
+\context Voice \addlyrics
+               { s8 s16 s32 s64 }
+               { [c16 c c c] }
diff --git a/input/bugs/addlyrmus.ly b/input/bugs/addlyrmus.ly
deleted file mode 100644 (file)
index 32b095b..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-
-\context Voice \addlyrics
-               { s8 s16 s32 s64 }
-               { [c16 c c c] }
diff --git a/input/bugs/core.ly b/input/bugs/core.ly
deleted file mode 100644 (file)
index ef4cb12..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-
-text = \lyrics \repeat "fold" 2 {}
-\alternative {
-       foo bar
-       afoo abar
-}
-
-
-\score {
-\text
-}
index 66f99d1de7294d3da99c9d1337394acf70247d93..4372115e2023a736d3671a4c868019c422cc14fe 100644 (file)
@@ -1,2 +1,2 @@
 
-<f, c' d e f>
+\context Voice { <f,4. c'' d e f>}
index 2a51746a62aa5662fb8c4e7ffde76f7bf8912f96..59fd4de8d15e13f7f288baa68ec935629ccb2bb2 100644 (file)
@@ -3,7 +3,7 @@
 \score {
        \notes \relative c'' {
        \time 2/4;
-       \property Voice.beamAuto=0
+       \property Voice.noAutoBeaming=1
        a4 a8
        a32 a a a
 }
diff --git a/input/bugs/l.ly b/input/bugs/l.ly
new file mode 100644 (file)
index 0000000..f042e73
--- /dev/null
@@ -0,0 +1,13 @@
+\score {
+          \notes {
+               \repeat volta 5 {
+                       c' c' c' c'
+               }
+               \alternative {
+                       {d' d' d' d'}
+                       {e' e' e' e'}
+               }
+               f'
+           }
+       }
+
diff --git a/input/bugs/swits.ly b/input/bugs/swits.ly
deleted file mode 100644 (file)
index 44ee313..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-\score{
-  \context PianoStaff <
-    \context Staff=one \notes{ s2 }
-    \context Staff=two \notes\relative c{
-      \time 4/8;
-      \clef "bass";
-       [c8( e \stemup  \translator Staff=one \stemup 
-      g )c]
-    }
-  >
-  \paper {
-    linewidth=-1.0;
-  }
-}
-)
diff --git a/input/bugs/utremi_old.ly b/input/bugs/utremi_old.ly
new file mode 100644 (file)
index 0000000..60a6240
--- /dev/null
@@ -0,0 +1,262 @@
+\header {\r
+filename = "utremi.ly";\r
+enteredby = "Christian Mondrup";\r
+%composer = "Thomas Ravenscroft";\r
+opus = "Thomas Ravenscroft";\r
+%opus = "Pammelia, 1609, no. 31";\r
+arranger = "Pammelia, 1609, no. 31";\r
+title = "Vt, re, me, fa, sol, la, sol, fa, re, vt";\r
+tagline = "Typeset with GNU LilyPond by Christian Mondrup. Non-commercial copying welcome.";\r
+}\r
+\r
+papersize = "letter"\r
+\r
+\include "paper16.ly"\r
+%\include "a4.ly"\r
+\r
+lyricsOne = \lyrics {\r
+   ""\breve ""8\r
+   "Vt,"\breve re, me, fa, sol, la, ""\r
+   sol, la, fa, me, re, vt. \r
+}\r
+\r
+lyricsTwo = \lyrics {\r
+   "" ""\r
+   Hey downe downe hey downe downe downe downe hey down\r
+   hey down "" down down a.\r
+   My heart of gold as true as steele\r
+   as I me leant "" vn -- to the bowres.\r
+   but if my La -- dy loue me well,\r
+   Lord so Ro -- bin bowres,\r
+}\r
+\r
+lyricsThree = \lyrics {\r
+   "" "" "" "" "" "" "" "" "" "" "" ""\r
+   heaue and hoe Rum -- be -- lo, hey tro -- lo tro -- ly lo,\r
+   hey tro -- ly trol -- ly hey tro -- ly trol -- ly \r
+   hey tro -- ly trol -- ly hey trol -- "" ly trol -- ly lo. \r
+   My La -- dies gone to Can -- ter -- bu -- ry\r
+   S. Tho -- mas be her boote.\r
+   Shee met with Kate of Malms -- "" bu -- ry,  \r
+   why weepst thou ma -- ple \r
+}\r
+\r
+lyricsFour = \lyrics {\r
+   "" \r
+   roote:\r
+   O sleepst thou or wakst thon Ies -- se -- ry, Cooke,\r
+   the rost it burnes, turne round turne round "" a -- bout ""\r
+   turne round "" a -- bout, ""\r
+   turne round "" a -- bout, "" turne round. ""\r
+   O Fri -- er how fares thy ban -- de -- low ban -- de -- low\r
+   Fri -- er, how fares thy San -- de -- low, San -- de -- low.\r
+}\r
+\r
+global = \notes {\r
+   \key c;\r
+   %\time 4/2;\r
+   %\time 17/8;\r
+   \time 33/16;\r
+   \clef "tenor";\r
+}\r
+\r
+dummyBeat = \notes {\r
+   \property Staff.defaultBarType = "||"\r
+   \property Staff.barAlways = "1" \r
+   s16\r
+   \property Staff.barAlways = "0"\r
+   \property Staff.defaultBarType = "|"\r
+}\r
+\r
+incipOne = \notes\relative c' {\r
+   g\breve \r
+   \dummyBeat\r
+   \bar "";\r
+}\r
+\r
+incipTwo = \notes\relative c'' {\r
+   \property Voice.noteHeadStyle = "diamond"\r
+   g1. \r
+   \property Voice.noteHeadStyle = ""\r
+   f2 \r
+   \dummyBeat\r
+   \bar "";\r
+}\r
+\r
+incipThree = \notes\relative c' {\r
+   \property Voice.noteHeadStyle = "harmonic"\r
+   \property Voice.tupletVisibility = 0\r
+   \times 2/3 { d4. e8 d4 } \times 2/3 { b4. a8 g4 }\r
+   \times 2/3 { b4. c8 b4 } \times 2/3 { b4. a8 g4 }\r
+   \dummyBeat\r
+   \property Voice.tupletVisibility = 3\r
+   \bar "";\r
+}\r
+\r
+incipFour = \notes\relative c' {\r
+   \property Voice.noteHeadStyle = "diamond"\r
+   %\property Voice.restStyle = "mensural"\r
+   b1 r1\r
+   \dummyBeat\r
+   \bar "";\r
+}\r
+\r
+partOne = \notes\relative c' {\r
+   %\property Score.currentBarNumber = "1"\r
+   \property Voice.noteHeadStyle = ""\r
+   %\property Staff.barNumberScriptPadding = 1\r
+   g1 ~ | g | a ~ | a | bes ~ | bes | c ~ | c | d ~ | d | e ~ | e |\r
+   r | r | \r
+   e ~ | e | d ~ | d | c ~ | c | bes ~ | bes | a ~ | a | g ~ | g\r
+   \bar "|.";\r
+}\r
+\r
+partTwo = \notes\relative c'' {\r
+   \property Voice.noteHeadStyle = ""\r
+   g2. f4 | e2 d | c4. b8 a4 g | f2 e |\r
+   d g ~ | g4 a g2 | c,1 | r2 c |\r
+   g'2. a4 | b2 g | c c | c c |\r
+   b4 c d2 ~ | d4 d b g | c1 | r2 c |\r
+   g g | d2. e4 | f2 e | c1 |\r
+   g'2. g4 | g2 g | c,1 ~ | c | r | r \r
+   \bar "|.";\r
+}\r
+\r
+partThree = \notes\relative c' {\r
+   \property Voice.noteHeadStyle = ""\r
+   \times 2/3 { d4. e8 d4 } \times 2/3 {b4. a8 g4 } | \r
+   \times 2/3 { b4. c8 b4 } \times 2/3 { b4. a8 g4 }\r
+   c2 c4 c | c2 c |\r
+   d2 d4 d | d2 d | e2. f4 | e2 d4 c |\r
+   b2 g ~ | g4 f e d | c1 | r2 c |\r
+   g'2. g4 | g2 g | c,2. c4 | c c c'2 |\r
+   bes g | bes bes | a1 | r2 e' |\r
+   d d | g g | a2. g4 | fis e d2 |\r
+   g g | d2. c4 \r
+   \bar "|.";\r
+}\r
+\r
+partFour = \notes\relative c' {\r
+   \property Voice.noteHeadStyle = ""\r
+   b1^\fermata | r2 g' | e e4 e | a2. g4 | \r
+   fis2 e4 d | g1 | g2 g | g g |\r
+   g g | g g ~ | g4 f e d | c2 d ~ |\r
+   d4 c b a | g2 g' ~ | g4 f e d | c2 g' ~ |\r
+   g r | \times 2/3 { r1 d2 } \times 2/3 { a'2 a g } |\r
+   \times 2/3 { e1 f2 } \times 2/3 { g2. g4 g2 }\r
+   \times 2/3 { d2. d4 e2 } \times 2/3 { f2. f4 e2 }\r
+   \times 2/3 { d1 c2 } \times 2/3 { b2. a4 g2 }\r
+   \times 2/3 { d'2. d4 d2 }\r
+   \bar "|.";\r
+}\r
+\r
+partOneStaff =  <\r
+   \context Staff = vocal1 <\r
+      \property Staff.clefStyle = "fullSizeChanges"\r
+      \property Staff.instrument = "\large{1.}"\r
+      %\property Staff.instr = ""\r
+      \notes { \r
+        \global\r
+         \property Staff.timeSignatureStyle = "old4/4"\r
+         \incipOne\r
+         \clef "G_8";\r
+        \property Staff.timeSignatureStyle = "C2/2"\r
+        \time 4/4;\r
+        \partOne \r
+      }\r
+      {\context Lyrics = lyrOne \lyricsOne }\r
+   >\r
+>\r
+\r
+partTwoStaff = <\r
+   \context Staff = vocal2 <\r
+      \property Staff.clefStyle = "fullSizeChanges"\r
+      \property Staff.instrument = "\large{2.}"\r
+      %\property Staff.instr = ""\r
+      %\property Voice.automaticMelismata = "1"\r
+      \addlyrics\r
+      \notes { \r
+        \global\r
+         \property Staff.timeSignatureStyle = "old4/4"\r
+         \incipTwo\r
+        \clef "G_8";\r
+        \property Staff.timeSignatureStyle = "C2/2"\r
+        \time 4/4;\r
+        \partTwo\r
+      }\r
+      {\context Lyrics = lyrTwo \lyricsTwo }\r
+   >\r
+>\r
+\r
+\r
+partThreeStaff = <\r
+   \context Staff = vocal3 <\r
+      \property Staff.clefStyle = "fullSizeChanges"\r
+      \property Staff.instrument = "\large{3.}"\r
+      %\property Staff.instr = ""\r
+      %\property Voice.automaticMelismata = "1"\r
+      \addlyrics\r
+      \notes { \r
+         \context Voice = vthree \r
+           \property Voice.tupletDirection = \up\r
+        \global\r
+         \property Staff.timeSignatureStyle = "old4/4"\r
+         \incipThree\r
+        \clef "G_8";\r
+        \property Staff.timeSignatureStyle = "C2/2"\r
+        \time 4/4;\r
+        \partThree\r
+      }\r
+      {\context Lyrics = lyrThree \lyricsThree }\r
+   >\r
+>\r
+\r
+partFourStaff = <\r
+   \context Staff = vocal4 <\r
+      \property Staff.clefStyle = "fullSizeChanges"\r
+      \property Staff.timeSignatureStyle = "C2/2"\r
+      \property Staff.barNumberDirection = \up\r
+      \property Staff.instrument = "\large{4.}"\r
+      \property Staff.instr = ""\r
+      %\property Voice.automaticMelismata = "1"\r
+      \addlyrics\r
+      \notes { \r
+         \context Voice = vfour \r
+           \property Voice.tupletDirection = \up\r
+        \global\r
+        %\property Staff.instrument = "\large{4.}"\r
+        %\property Staff.instr = ""\r
+         \property Staff.timeSignatureStyle = "old4/4"\r
+         \incipFour\r
+        \clef "G_8";\r
+        \property Staff.timeSignatureStyle = "C2/2"\r
+        \time 4/4;\r
+        \partFour \r
+      }\r
+      {\context Lyrics = lyrFour \lyricsFour} \r
+   >\r
+>\r
+\r
+\score {\r
+   \context StaffGroup <\r
+      \partFourStaff\r
+      \partThreeStaff\r
+      \partTwoStaff\r
+      \partOneStaff\r
+  >\r
+   %\paper {\translator {\BarNumberingStaffContext } } \r
+   \paper {\r
+      indent = 0.\mm;\r
+      linewidth = 17.0\cm;\r
+      textheight = 27.0\cm;\r
+      gourlay_maxmeasures=6.0;\r
+      \translator { \StaffContext\r
+         \consists "Staff_margin_engraver"; }  \r
+      %\translator { \ScoreContext\r
+      %   minVerticalAlign = 1.5*\staffheight; }\r
+   }\r
+   %\midi { \r
+   %   output = "utremi.mid";\r
+   %   \tempo 2 = 80;\r
+   %}\r
+}\r
index 346c5c8a56dea577b9d639b9351358329e2a7852..d05959555bf5df9ce00866a2180d2c8aabbeabfa 100644 (file)
@@ -2,11 +2,11 @@
 %  no alts.
 \score { \notes
   \relative c'' {
-\repeat semi 3 { c^"3$\\times$ 0alt" d }
+\repeat volta 3 { c^"3$\\times$ 0alt" d }
 % less alts than body
-\repeat semi 4 { c^"4$\\times$ 2alt" d } \alternative { e f }
+\repeat volta 4 { c^"4$\\times$ 2alt" d } \alternative { e f }
 
 % more alts than body
-\repeat semi 2 { c^"2$\\times$ 3alt" d } \alternative { e f g } 
+\repeat volta 2 { c^"2$\\times$ 3alt" d } \alternative { e f g } 
 }}
 
index 2401502c9c9124a35d9ba6e8c9449b689fb2d741..825715087278c8bec9a73018639dfbda8cf7ecd7 100644 (file)
@@ -26,7 +26,7 @@ Crescendo::Crescendo ()
 Molecule
 Crescendo::get_symbol () const
 {
-  Real w_dim = extent (X_AXIS).length ();
+  Real w_dim = extent (X_AXIS).length () - get_broken_left_end_align ();
   Real absdyn_dim = paper_l ()-> get_realvar (ly_symbol ("crescendo_shorten"));
   if (dyn_b_drul_[LEFT])
     {
@@ -63,7 +63,8 @@ Crescendo::do_brew_molecule_p () const
 {
   Molecule* m_p =0;
   Real absdyn_dim = paper_l ()-> get_realvar (ly_symbol ("crescendo_shorten"));
-  Real x_off_dim=0.0;
+  Real x_off_dim =  get_broken_left_end_align ();
+
   if (dyn_b_drul_[LEFT])
     x_off_dim += absdyn_dim;
 
index 723cf5a2836da9079507fb18d35347677107019d..3494e6b11dc575ff563ec6c629149dbb5cfa4af8 100644 (file)
@@ -9,7 +9,6 @@
 
 #include "parray.hh"
 #include "virtual-methods.hh"
-#include "directed-graph.hh"
 #include "graphical-element.hh"
 #include "lily-guile.hh"
 
index 828391d70bdf9f53e45b6c7f713e9312105ad387..9cca78c8c48061bf5e2e11e7818e998b6061335b 100644 (file)
@@ -68,6 +68,7 @@ protected:
     this is virtual; for instance, Line_of_score overrides it.
     */
   virtual void break_into_pieces ();
+  Real get_broken_left_end_align () const;
 
   friend Axis_group_spanner; // UGH
 
index 214aab5098e3545e954137f878a02be06fe02b23..dc6d8d547acdb50d09fbf80299bccfe80eecaadf 100644 (file)
@@ -50,7 +50,8 @@ Multi_measure_rest::do_brew_molecule_p () const
     {
       Item * col = spanned_drul_[d]->column_l ();
 
-      Interval coldim = col->extent (X_AXIS);
+      Interval coldim = col->extent (X_AXIS)
+       + col->relative_coordinate (0, X_AXIS);
 
       sp_iv[d] = coldim[-d]  ;
     }
index c725690a4ac37a0a3ef69e3485ce476440a3f5c2..5243ff56cd77771a7e33626bde5e2eea255e9e1f 100644 (file)
@@ -54,6 +54,7 @@ Note_heads_engraver::do_process_requests()
        {
          Dots * d = new Dots;
          note_p->dots_l_ = d;
+         d->dots_i_ = note_req_l->duration_.dots_i_;
 
          Scalar dir = get_property ("verticalDirection",0);
          if (dir.isdir_b())
index 01023778241cdb0687a866060585d4faaa703bf4..401b120842f365814c7283ef9b143a1c30e45878 100644 (file)
@@ -19,7 +19,7 @@ Paper_stream::Paper_stream (String filename)
   if (filename.length_i () && (filename != "-"))
     os = new ofstream (filename.ch_C ());
   else
-//    os = new ostream (cout.ostreambuf ());
+    //    os = new ostream (cout.ostreambuf ());
     os = new ostream (cout._strbuf);
   if (!*os)
     error (_f ("can't open file: `%s\'", filename));
@@ -46,56 +46,57 @@ Paper_stream::operator << (Scalar s)
 {
   for (char const *cp = s.ch_C (); *cp; cp++)
     {
-       if (outputting_comment)
-         {
-           *os << *cp;
-           if (*cp == '\n')
-             {
-               outputting_comment=false;
-
-             }
-           continue;
-         }
-       line_len_i_ ++;
-       switch (*cp)
+      if (outputting_comment)
+       {
+         *os << *cp;
+         if (*cp == '\n')
            {
-           case '%':
-               outputting_comment = true;
-               *os << *cp;
-               break;
-           case '{':
-               nest_level++;
-               *os << *cp;
-               break;
-           case '}':
-               nest_level--;
-               *os << *cp;
-
-               if (nest_level < 0)
-                 {
-                   delete os;  // we want to see the remains.
-                   assert (nest_level>=0);
-                 }
-
-               /* don't break line if not nested; very ugly for ps */
-               if (nest_level == 0)
-                 break;
-
-               /* FALLTHROUGH */
-
-           case '\n':
-               break_line ();
-               break;
-           case ' ':
-               *os <<  ' ';
-               if (line_len_i_ > MAXLINELEN)
-                  break_line ();
-
-               break;
-           default:
-               *os << *cp;
-               break;
-             }
+             outputting_comment=false;
+
+           }
+         continue;
+       }
+      line_len_i_ ++;
+      switch (*cp)
+       {
+       case '%':
+         outputting_comment = true;
+         *os << *cp;
+         break;
+       case '{':
+         nest_level++;
+         *os << *cp;
+         break;
+       case '}':
+         nest_level--;
+         *os << *cp;
+
+         if (nest_level < 0)
+           {
+             delete os;        // we want to see the remains.
+             assert (nest_level>=0);
+           }
+
+         /* don't break line if not nested; very ugly for ps */
+         if (nest_level == 0)
+           break;
+
+         *os << '%';
+         break_line ();
+         break;
+       case '\n':
+         break_line ();
+         break;
+       case ' ':
+         *os <<  ' ';
+         if (line_len_i_ > MAXLINELEN)
+           break_line ();
+
+         break;
+       default:
+         *os << *cp;
+         break;
+       }
     }
   //urg, for debugging only!!
   *os << flush;
@@ -105,8 +106,7 @@ Paper_stream::operator << (Scalar s)
 void
 Paper_stream::break_line ()
 {
-  // aaargh
-  *os << "%\n";
+  *os << '\n';
   *os << to_str (' ', nest_level);
   line_len_i_ = 0;
 }
index 57b1b2bf88e8a13cff6b3377e8fc8ebac5d6ed5f..3b6da8cf4ee1cf69ed1bb31116bb4754ba8ab12e 100644 (file)
@@ -104,7 +104,8 @@ Repeated_music::alternatives_length_mom () const
     {
       m = m + p->car_->length_mom ();
       done ++;
-      if (repeats_i_ - done < alternatives_p_->length_i ())
+      if (volta_fold_b_
+         || repeats_i_ - done < alternatives_p_->length_i ())
        p = p->next_;
     }
   return m;
index aef1e884bb1163753dda1c64c89f8cbf0dd248a4..d3436d462b13c73237fd628ab75128dd5f2e77bf 100644 (file)
@@ -53,6 +53,7 @@ Rest_engraver::do_process_requests ()
        {
          dot_p_ = new Dots;
          rest_p_->dots_l_  =dot_p_;
+         dot_p_->dots_i_ = rest_req_l_->duration_.dots_i_;       
          announce_element (Score_element_info (dot_p_,0));
        }
       if (rest_p_->balltype_i_ >= 2) 
index 2838bcce9642dee6082194e64c946ec860b84424..8585589bd9a5e18a789c0c50e2696bbc556e2e59 100644 (file)
@@ -27,7 +27,6 @@
 #include "encompass-info.hh"
 #include "main.hh"
 
-
 Slur::Slur ()
 {
 }
@@ -186,11 +185,7 @@ Slur::do_post_processing ()
       */
       else
        {
-         /*
-           need break-align too.  what about other spanners?
-          */
-         if (d == LEFT)
-           dx_f_drul_[d] = spanned_drul_[LEFT]->extent (X_AXIS).length ();
+         dx_f_drul_[d] = get_broken_left_end_align ();
                
          /*
            broken: should get y from other piece, so that slur
index df73a595a43266bb6cbc433eb312ca0afc2a4e73..64ebe46a6b9b52b76cedb9eb4f8ed46c3f32c473 100644 (file)
@@ -165,6 +165,9 @@ Spacing_spanner::do_measure (int col1, int col2) const
          else
            stretch_dist += right_dist;
 
+         if (s.distance_f_ <0)
+           programming_error("negative dist");
+         
          if (stretch_dist == 0.0)
            {
              /*
index 843a020b36995a8ba63ec867eeeeeeb08675ac3c..ca2f5d5618124553beb744034d9f0cb8e68ada26 100644 (file)
@@ -12,6 +12,8 @@
 #include "paper-score.hh"
 #include "molecule.hh"
 #include "paper-outputter.hh"
+#include "score-column.hh"
+#include "line-of-score.hh"
 
 void
 Spanner::do_print() const
@@ -33,7 +35,7 @@ Spanner::break_into_pieces ()
         
   Item * left = spanned_drul_[LEFT];
   Item * right = spanned_drul_[RIGHT];
-  
+
   if  (left == right)
     {
       warning (_ ("left spanpoint is right spanpoint\n"));
@@ -70,7 +72,7 @@ Spanner::break_into_pieces ()
       span_p->set_bounds(LEFT,info.bounds_[LEFT]);
       span_p->set_bounds(RIGHT,info.bounds_[RIGHT]);
       pscore_l_->typeset_element (span_p);
-             
+
       info.broken_spanner_l_ = span_p;
       span_p->handle_broken_dependencies();
 
@@ -223,3 +225,31 @@ Spanner::handle_broken_dependents ()
        programming_error ("Spanner y -refpoint lost.");
     }
 }
+
+// If this is a broken spanner, return the amount the left end is to
+// be shifted horizontally so that the spanner starts after the
+// initial clef and key on the staves. This is necessary for ties,
+// slurs, crescendo and decrescendo signs, for example.
+Real
+Spanner::get_broken_left_end_align () const
+{
+  int i;
+  Line_of_score *l;
+  Score_column *sc = dynamic_cast<Score_column*> (spanned_drul_[LEFT]->column_l());
+
+  // Relevant only if left span point is first column in line
+  if(sc != NULL && sc->line_l ()->cols_.find_i (sc) == 0)
+    {
+      // We could possibly return the right edge of the whole Score_column here,
+      // but we do a full search for the Break_align_item.
+      for(i = 0; i < sc->elem_l_arr_.size (); i++)
+       {
+         if(0 == strcmp (classname (sc->elem_l_arr_[i]), "Break_align_item"))
+           {
+             return sc->elem_l_arr_[i]->extent (X_AXIS) [RIGHT];
+           }
+       }
+    }
+
+  return 0.0;
+}
index a74e1c8bf35df963350fc99083f22a33a5d807ce..b0cefd1e1b76f5a8f321dc86e50802b21d00884b 100644 (file)
@@ -158,7 +158,7 @@ Staff_side_element::do_print () const
     DOUT << "positioning " << to_position_l_->name();
 
   DOUT << "axis == " << axis_name_str (axis_)
-       << ", dir == " << to_str (dir_ );
+       << ", dir == " << to_str ((int)dir_ );
 #endif
 }
 
index 7b682914c3144e8117f1acf5e40702ab76ba561c..eeaf89fa984794989c00582f6d0fa78476aa82e4 100644 (file)
@@ -130,7 +130,7 @@ Tie::do_post_processing()
   if (head_l_drul_[LEFT])
     dx_f_drul_[LEFT] = head_l_drul_[LEFT]->extent (X_AXIS).length ();
   else
-    dx_f_drul_[LEFT] = spanned_drul_[LEFT]->extent (X_AXIS).length ();
+    dx_f_drul_[LEFT] = get_broken_left_end_align ();
   dx_f_drul_[LEFT] += x_gap_f;
   dx_f_drul_[RIGHT] -= x_gap_f;
 
index bcc2424106b80a23caed1042856ef5ebf45946e5..a227d07d7cc425f5dd56a265d7cd6d324dc30ebd 100644 (file)
@@ -48,7 +48,7 @@ Volta_spanner::do_brew_molecule_p () const
   Real t = paper_l ()->get_realvar (volta_thick_scm_sym);
 
   Real dx = internote_f;
-  Real w = extent (X_AXIS).length () - dx;
+  Real w = extent (X_AXIS).length () - dx - get_broken_left_end_align ();
   Real h = paper_l()->get_var ("volta_spanner_height");
   Molecule volta (lookup_l ()->volta (h, w, t, no_vertical_start, no_vertical_end));
 
@@ -98,6 +98,7 @@ Volta_spanner::do_post_processing ()
 {
   if (bar_arr_.size())
     translate_axis (bar_arr_[0]->extent (Y_AXIS)[UP], Y_AXIS);
+  translate_axis (get_broken_left_end_align (), X_AXIS);
 }
 
 void
index c2e1b202e52d2799717f84fd7718d6d41315dc77..b6c04a5e48765403ee447d7c529cc7e3fa1938a2 100644 (file)
@@ -11,14 +11,3 @@ $(outdir)/%.latex: %.doc
 $(outdir)/%.texi: %.tely
        cd $(outdir); $(PYTHON) $(depth)/../scripts/mudela-book.py -I .. -I $(depth)/../input/test/ --dependencies --format=texi ../$<
 
-$(outdir)/%.info: $(outdir)/%.texi
-       makeinfo --output=$@ $<
-
-$(outdir)/%.html:      $(outdir)/%.texi
-       makeinfo --output=$@ --html --no-headers $< 
-       $(PYTHON) $(step-bindir)/add-html-footer.py --package=$(topdir) --index=$(depth)/../index.html $@ $(wildcard $(basename $@)[0-9][0-9].html)
-
-$(outdir)/%.dvi:       $(outdir)/%.texi
-       # --clean only in >= 3.12s
-       # cd $(outdir); texi2dvi --clean ../$< 
-       cd $(outdir); texi2dvi ../$< 
index 8b137891791fe96927ad78e64b0aad7bded08bdc..e032d7ee59da0ee580e7967954f6938b5163084d 100644 (file)
@@ -1 +1,2 @@
+# empty
 
index 8b137891791fe96927ad78e64b0aad7bded08bdc..024d2ab564fbc9faabe06a86555cb4a39d88cfbb 100644 (file)
@@ -1 +1,4 @@
+# empty
+TELY_FILES := $(wildcard *.tely)
+EXTRA_DIST_FILES += $(TELY_FILES)
 
index 41b3a82f16f10416123fb3acbeebd87b9333ef7a..3e7c78c8ec0cec62eb587cd9d74f54fd33fdd31c 100644 (file)
@@ -1,7 +1,7 @@
 Begin3
 Title: LilyPond
-Version: 1.2.4
-Entered-date: 30AUG99
+Version: 1.2.5
+Entered-date: 02SEP99
 Description: 
 LilyPond is a music typesetter.  It produces beautiful sheet music
 using a high level description file as input.  LilyPond is part of 
@@ -12,8 +12,8 @@ Author: hanwen@cs.uu.nl (Han-Wen Nienhuys)
        janneke@gnu.org (Jan Nieuwenhuizen)
 Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
 Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
-       1000k lilypond-1.2.4.tar.gz 
+       1000k lilypond-1.2.5.tar.gz 
 Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
-       1000k lilypond-1.2.4.tar.gz 
+       1000k lilypond-1.2.5.tar.gz 
 Copying-policy: GPL
 End
index cd3d275e54e24a2d699109ad614265ea6380bdbd..88f90ecdae48f0c11d4bf17e91317139571aaec7 100644 (file)
@@ -1,9 +1,9 @@
 Name: lilypond
-Version: 1.2.4
+Version: 1.2.5
 Release: 1
 Copyright: GPL
 Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.2.4.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.2.5.tar.gz
 Summary: A program for printing sheet music.
 URL: http://www.cs.uu.nl/~hanwen/lilypond
 Packager: Han-Wen Nienhuys <hanwen@cs.uu.nl>
index f2d5c1a058093286fa13f40b3ea35d06fde31331..b25deb22b24015b1469201187f65550c7fc2b399 100644 (file)
@@ -1,5 +1,5 @@
 %!PS-Adobe-1.0: lily.ps
-
+%
 % 2 setlanguagelevel %  hmm. auto_resize_dicts doesn't help either. 
 % round cappings
 1 setlinecap
index ecfda6b42d247461940e9ec7660e95c187571cb8..cba847f06be1b1457fde1209bc4dc6cce5b5ac32 100644 (file)
     (string-append
      "\\font" (font-switch i) "=" s "\n"))
 
-  ;; UGH
-   
-  (define (header-end) "\\input lilyponddefs \\turnOnPostScript")
+  (define (header-end)
+    (string-append
+     "\\special{! "
+     (regexp-substitute/global #f "\n" (ly-gulp-file "lily.ps") 'pre " %\n" 'post)
+     "}"
+     "\\input lilyponddefs \\turnOnPostScript"))
 
   (define (header creator generate) 
     (string-append
index 8021e5181800d88377bbddee58db4a980e64d417..e679cae1d839fc059ae71f51a0bb02a4ab90f90e 100644 (file)
@@ -69,7 +69,7 @@ output_dict= {
     }
   >
 \end{mudela}""", 
-               'output-mudela':r"""\begin%s{mudela}
+               'output-mudela':r"""\begin[%s]{mudela}
 %s
 \end{mudela}""",
                'output-verbatim': r"""\begin{verbatim}%s\end{verbatim}""",
@@ -135,7 +135,7 @@ re_dict = {
                 'mudela-file': '@mudelafile(\[[^\\]]+\])?{([^}]+)}',
                 'mudela' : '@mudela(\[.*?\])?{(.*?)}',
                 'mudela-block': r"""(?s)@mudela(\[.*?\])?(.*?)@end mudela""",
-                'interesting-cs': r"""[\\@](node|mudelagraphic)""",
+                'interesting-cs': r"""[\\@](chapter|section)""",
                  'comma-sep' : ', *',           
                 }
        }
@@ -223,27 +223,32 @@ def compose_full_body (body, opts):
 
        # urg: breaks on \include of full score
        # Use nofly option if you want to \include full score.
-       if not 'nofly' in opts and not re.search ('\\\\score', body):
-               opts.append ('fly')
+       if 'nofly'  not in opts and not re.search ('\\\\score', body):
+               opts.append ('fragment')
 
-       if  'fragment' in opts or 'singleline' in opts:
+       if 'fragment' in opts and 'nosingleline' not in opts:
+               opts.append ('singleline')
+
+       if 'singleline' in opts:
                l = -1.0;
        else:
                l = latex_linewidths[cols][paper][latex_size]
 
 
-       if 'fly' in opts:
+       if 'relative' in opts:
+               body = '\\relative c { %s }' % body
+
+       
+       if 'fragment' in opts:
                body = r"""\score { 
-  \notes\relative c {
-    %s
-  }
+  \notes { %s }
   \paper { }  
 }""" % body
 
         opts = uniq (opts)
         optstring = string.join (opts, ' ')
        optstring = re.sub ('\n', ' ', optstring)
-               
+       
        body = r"""
 %% Generated by mudela-book.py; options are %s
 \include "paper%d.ly"
@@ -420,7 +425,8 @@ def find_mudela_shorthands (b):
                str = f.read (-1)
                opts = match.group (1)
                if opts:
-                       opts = re.split (',[ \n\t]*', opts[1:-1])
+                       opts = opts[1:-1]
+                       opts = re.split (',[ \n\t]*', opts)
                else:
                        opts = []
 
@@ -432,8 +438,6 @@ def find_mudela_shorthands (b):
                        opts .append ('nofly')
                        
                str_opts = string.join (opts, ',')
-               if str_opts: str_opts = '[' + str_opts + ']'
-
 
                str = ("%% copied from file `%s'\n" % full_path) + str 
                return get_output ('output-mudela') % (str_opts, str)
@@ -444,7 +448,7 @@ def find_mudela_shorthands (b):
        
 def find_mudela_chunks (str):
        """Find mudela blocks, while watching for verbatim. Returns
-       (STR,MUDS) with \mudelagraphic substituted for the blocks in STR,
+       (STR,MUDS) with  substituted for the blocks in STR,
        and the blocks themselves MUDS"""
   
        chunks = []
@@ -499,7 +503,7 @@ def advance_counters (counter, opts, str):
                                pass
                elif g == 'chapter':
                        (chapter, section, count)  = (chapter + 1, 0, 0)
-               elif g == 'section' or g == 'node':
+               elif g == 'section':
                        (section, count)  = (section + 1, 0)
                        
 
index 66401aa09a5b403964f8a07a8430276270dd71d0..c71271fe54474a141352dafa9ff4c791b93956fa 100644 (file)
@@ -150,7 +150,7 @@ AC_DEFUN(AC_STEPMAKE_GXX, [
     # ugh autoconf
     # urg, egcs: how to check for egcs >= 1.1?
     changequote(<<, >>)dnl
-    if $CXX --version | egrep '2\.8|2\.9' > /dev/null ||
+    if $CXX --version | egrep '2\.[89]' > /dev/null ||
        $CXX --version | grep 'egcs' > /dev/null
     changequote([, ])dnl
     then
@@ -161,19 +161,9 @@ AC_DEFUN(AC_STEPMAKE_GXX, [
 ])
 
 AC_DEFUN(AC_STEPMAKE_GUILE, [
-    # on some systems, -lguile succeeds for guile-1.3
-    # others need readline, dl (or even more)
-    # urg, must check for different functions in libguile
-    # to force new check iso reading from cache
-
-    # gh_scm2doubles,gh_doubles2scm are new in 1.3
     GUILE_FLAGS
-    AC_CHECK_LIB(guile, gh_scm2doubles,
-      [LIBS="`echo $GUILE_LDFLAGS | sed -e 's/-L[[/-_a-zA-Z0-9]]\+ //g'` $LIBS"
-      AC_DEFINE(HAVE_LIBGUILE)], , $GUILE_LDFLAGS dnl
-    )
-    if test "$ac_cv_lib_guile_gh_scm2doubles" != yes ; then
-       AC_STEPMAKE_WARN(You should install guile 1.3 or newer)
+    if guile-config --version 2>&1 | grep -q 'version 1\.[012]'; then
+       AC_STEPMAKE_WARN(Guile version 1.3 or better needed)
     fi
 ])
 
index 9c4126e0a1b78252b2a59ce338a41d9d4bc1831e..9ffa512c3319c9de18c086ba4513603803e91ba4 100644 (file)
@@ -10,7 +10,7 @@ version = '0.1'
 import sys
 import os
 import time
-from string import *
+import string 
 import getopt
 import __main__
 
@@ -29,13 +29,17 @@ This page was built from %s-%s by\
 
 (options, files) = getopt.getopt(sys.argv[1:], 'hp:', ['help', 'news=', 'index=', 'package=']) 
 
+def gulp_file (fn):
+       f = open (fn)
+       return f.read ()
+
 def help ():
-    sys.stdout.write ("Usage: add-html-footer [OPTION]... HTML-FILE\n"
-                "Add a nice footer, add the top of the NEWS file (up to the ********)\n\n"
-                + "Options:\n"
-                + "  -h, --help             print this help\n"
-                + "  -p, --package=DIR      specify package\n"
-                     )
+    sys.stdout.write (r"""Usage: add-html-footer [OPTION]... HTML-FILE
+Add a nice footer, add the top of the NEWS file (up to the ********)
+Options:
+  -h, --help             print this help
+  -p, --package          package name (ugh. Junkme.)
+  """)
     sys.exit (0)
 
 for opt in options:
@@ -93,8 +97,8 @@ if news_file:
     news = news[:i]
     
 def check_tag (tag, sub, s, bottom):
-    tag = lower (tag)
-    TAG = upper (tag)
+    tag = string.lower (tag)
+    TAG = string.upper (tag)
     s = regsub.sub (tag, TAG, s)
     i = regex.search (TAG, s)
     if i < 0:
@@ -130,16 +134,6 @@ for f in files:
        s = '<HTML>\n' + s
     s = check_tag ('</html>', '</HTML>', s, 1)
 
-    #urg
-    if regex.search ('@COUNTER_REF@', s) != -1:
-       counter = ''
-       try:
-           counter = os.environ[package.NAME + '_COUNTERPATH']
-           counter = '<hr><img src="' + counter + '">\n'
-       except:
-           pass
-       s = regsub.gsub ('@COUNTER_REF@', counter, s)
-
     dump_file (f, s)
 
 
index 92c0d1644a99dfdb82d6cecb1e78939836dc0771..98eb250d51f3a0a40915d76c6c445c31c8c0116f 100644 (file)
@@ -7,7 +7,11 @@ version = '0.1'
 
 import sys
 import os
-from string import *
+import string
+
+def gulp_file (fn):
+       f = open (fn)
+       return f.read ()
 
 import __main__
 import glob
index 2645a6fd53e895466583202dd5219787b61ce329..4919c80f0334fae5bcbf21d7142e9c2e665bfe3a 100644 (file)
@@ -5,10 +5,14 @@ version = '0.62'
 
 import sys
 import os
-from string import *
+import string
 import getopt
 import pipes
 
+def gulp_file (fn):
+       f = open (fn)
+       return f.read ()
+
 def program_id ():
        return name + ' ' + version;
 
@@ -159,7 +163,7 @@ def makediff (fromdir, todir, patch_name):
 def main ():
        os.environ['GZIP'] = '-q'
        identify ()
-       print 'argv: ' + join (sys.argv[2:])
+       print 'argv: ' + string.join (sys.argv[2:])
        (options, files) = getopt.getopt (sys.argv[1:], 
                'hF:f:o:p:rT:t:', ['from=', 'dir-from=', 'dir-to=', 'help', 'output=', 'package=', 'release', 'to='])
 
index a1b8bab54649316c9c5def950cd5e53beb9c4a40..1950f569354970c830d58cdd5a510d99aa6a9317 100755 (executable)
@@ -9,8 +9,8 @@
 
 import regex
 import regsub
-from string import *
-# from flower import *
+import string
+
 import sys
 import os
 import getopt
@@ -37,7 +37,7 @@ class Package:
                dict = read_makefile (dirname + '/VERSION')
                version_list = []
                for x in [ 'MAJOR_VERSION', 'MINOR_VERSION',   'PATCH_LEVEL']:
-                       version_list.append (atoi (dict[x]))
+                       version_list.append (string.atoi (dict[x]))
                version_list.append (dict['MY_PATCH_LEVEL'])
                self.topdir = dirname
                self.groupdir = self.topdir + '/..'
@@ -46,12 +46,12 @@ class Package:
                self.test_dir = self.groupdir + '/test/'
                self.version =  tuple(version_list)
                self.Name = dict['PACKAGE_NAME']
-               self.name = lower (self.Name)
+               self.name = string.lower (self.Name)
                if self.name == 'lilypond':
                        self.nickname = 'lelie'
                else:
                        self.nickname = self.name
-               self.NAME = upper (self.Name)
+               self.NAME = string.upper (self.Name)
 
 
 class Packager:
@@ -79,7 +79,7 @@ def full_version_tup(tup):
 
 def split_my_patchlevel(str):
        return (regsub.sub('[0-9]*$', '', str),
-               atoi(regsub.sub('[^0-9]*', '', str)))
+               string.atoi(regsub.sub('[^0-9]*', '', str)))
        
 
 def next_version(tup):
@@ -120,12 +120,12 @@ def version_tuple_to_str(tup):
        return ('%d.%d.%d' % tup[0:3]) + my
 
 def version_str_to_tuple(str):
-       t = split(str, '.')
+       t = string.split(str, '.')
        try:
                mypatch = t[3]
        except IndexError:
                mypatch = ''
-       return (atoi(t[0]), atoi(t[1]), atoi(t[2]), mypatch)
+       return (string.atoi(t[0]), string.atoi(t[1]), string.atoi(t[2]), mypatch)
 
 def version_compare (tupl, tupr):
        tupl = full_version_tup (tupl)
@@ -134,9 +134,9 @@ def version_compare (tupl, tupr):
                if tupl[i] - tupr[i]: return tupl[i] - tupr[i]
        if tupl[3] and tupr[3]:
                lname = regsub.sub('[0-9]*$', '', tupl[3])
-               lnum = atoi(regsub.sub('[^0-9]*', '', tupl[3]))
+               lnum = string.atoi(regsub.sub('[^0-9]*', '', tupl[3]))
                rname = regsub.sub('[0-9]*$', '', tupr[3])
-               rnum = atoi(regsub.sub('[^0-9]*', '', tupr[3]))
+               rnum = string.atoi(regsub.sub('[^0-9]*', '', tupr[3]))
                if lname != rname:
                        raise 'ambiguous'
                return sign (lnum - rnum)
@@ -161,18 +161,3 @@ def dump_file(f, s):
        i.write(s)
        i.close ()
 
-def gulp_file(f):
-       try:
-               i = open(f)
-               i.seek (0, 2)
-               n = i.tell ()
-               i.seek (0,0)
-       except:
-               sys.stderr.write( 'can\'t open file %s\n ' % f)
-               return ''
-       s = i.read (n)
-       if len (s) <= 0:
-               sys.stderr.write( 'gulped empty file: %s\n'% f)
-       return s
-
-
index 437116fbcc7842547a02fa4395a388374821b913..6cfc2f1c2d7eda06bde03ee39288b806f502abb7 100644 (file)
@@ -11,124 +11,139 @@ name = 'table-to-html'
 
 import os
 import sys
-
 import getopt
-from string import *
-import regex
-import regsub
+import string
 import time
+import re
+
+format = 'html'
 
 def program_id ():
-    return name + ' version ' + version;
+       return name + ' version ' + version;
 
 def identify ():
-    sys.stdout.write (program_id () + '\n')
+       sys.stdout.write (program_id () + '\n')
 
 def help ():
-    sys.stdout.write ("Usage: table-to-html [OPTION]... TABLE-FILE HTML-FILENAME\n"
-                + "Generate pretty table from char separated table\n\n"
-                + "Options:\n"
-                + "  -h, --help             print this help\n"
-                + "  -p, --package=DIR      specify package\n"
-                + "  -s, --separator=SEP    specify separator [:]\n"
-                + "  -t, --latex            do latex output instead\n"
-                     )
-    
-    sys.exit (0)
+       sys.stdout.write (
+r"""Usage: table-to-html [OPTION]... TABLE-FILE HTML-FILENAME
+Generate pretty table from char separated table
+Options:
+  -h, --help                    print this help
+  -p, --package=DIR      specify package
+  -s, --separator=SEP  specify separator [:]
+  -t, --latex                  do latex output instead
+""")
+       sys.exit (0)
 
 
 def header (html):
-    html.write ('<body bgcolor=white><table cellspacing=10>')
+       html.write ('<body bgcolor=white><table cellspacing=10>')
 
 def footer (html):
-    html.write ('</table></body>')
-
-def convert_html (inname, outname, cols, separator, linesep):
-    table = open (inname)
-    # ugh
-    html = open (outname, 'w')
-
-    header (html)
-    i = 0
-    for line in table.readlines ():
-       i = i + 1
-       if not len(line):
-           continue
-       columns = split (line, separator)
-       html_line = '<tr><td>' + join (columns, '</td><td>') + '</td></tr>'
-       html_line= regsub.gsub (linesep, ' ',html_line)
-       html.write (html_line)
-
-       if len (columns) <> cols:
-               print i
-               raise 'not enough cols'
-
-    table.close ()
-    footer (html)
-    html.close ()
-
-
-def convert_tex (inname, outname, cols, separator, linesep):
-    table = open (inname)
-    html = open(outname, 'w')
-
-    i = 0
-    for line in table.readlines ():    
-       i = i + 1
-       if not len(line):
-           continue
-       columns = split (line, separator)
-       if len (columns) <> cols:
-               print i
-               raise 'not enough cols'
-
-       tex_line =  '\\tableentry{' + join (columns, '}{') + '}\n'
-       tex_line = regsub.gsub (linesep, ' ', tex_line)
-       html.write (tex_line)
-       
-    table.close ()
-    html.close ()
-
-def main ():
-    identify ()
-    (options, files) = getopt.getopt (
-       sys.argv[1:], 'tl:o:hp:c:s:', ['columns=', 'help', 'latex', 'output=', 'package=', 'separator=', 'linesep='])
-    latex = 0
-    separator = '@'
-    output = ''
-    linesep = '\r'
-    for opt in options:
+       html.write ('</table></body>')
+
+def convert_html (lines, outname, cols, separator, linesep):
+       # ugh
+       html = open (outname, 'w')
+
+       header (html)
+       i = 0
+       for line in lines:
+               i = i + 1
+               if not len(line):
+                       continue
+               columns = string.split (line, separator)
+               html_line = '<tr><td>' + string.join (columns, '</td><td>') + '</td></tr>'
+               html_line= re.sub (linesep, ' ', html_line)
+               html.write (html_line)
+
+               if len (columns) <> cols:
+                               print i
+                               raise 'not enough cols'
+
+       footer (html)
+       html.close ()
+
+
+def convert_tex (lines, outname, cols, separator, linesep):
+       html = open(outname, 'w')
+       header = r"""\documentclass{article}
+\begin{document}
+{\parindent -1pc
+       \parskip 0pc\parsep 0pc
+       %  COMMENT( from the texbook)
+       \def\length#1{\count0=0 \getlength#1\end}
+       \def\getlength#1{\ifx#1\end \let\next=\relax
+         \else\advance\count0 by1 \let\next=\getlength\fi \next}
+         \def\inlanguage#1#2{{\length{#2}%
+               \ifnum\count0=0
+               \else
+               \emph{#1}: #2.
+               \fi}}
+       \small
+
+       \def\tableentry#1#2#3#4#5#6#7{\par{\bf #1}: #7
+         \inlanguage{Fran\c cais}{#2}
+          \inlanguage{British}{#4}  \inlanguage{Deutsch}{#3}
+          \inlanguage{Nederlands}{#5}\inlanguage{Italiano}{#6}}
+"""
+
+       html.write (header)
+       i = 0
+       for line in lines:
+               i = i + 1
+               if not len(line):
+                       continue
+               columns = string.split (line, separator)
+               if len (columns) <> cols:
+                               print i
+                               raise 'not enough cols'
+
+               tex_line =  '\\tableentry{' + string.join (columns, '}{') + '}\n'
+               tex_line = re.sub (linesep, ' ', tex_line)
+               html.write (tex_line)
+               
+       html.write(r"""}\end{document}""")
+       html.close ()
+
+def convert_texinfo (lines, outname, cols, separator, linesep):
+               pass
+
+
+
+identify ()
+(options, files) = getopt.getopt (
+       sys.argv[1:], 'f:tl:o:h:c:s:', ['columns=', 'help', 'format=', 'output=', 'separator=', 'linesep='])
+latex = 0
+separator = '@'
+output = ''
+linesep = '\r'
+for opt in options:
        o = opt[0]
        a = opt[1]
        if o == '--separator' or o == '-s':
-           separator = a
+               separator = a
        elif o== '--help' or o == '-h':
-           help ()
-       elif o=='--latex' or o == '-t':
-           latex = 1
+               help ()
+       elif o=='--format' or o == '-f':
+               format = a
        elif o == '--output' or o == '-o':
-           output = a
-       elif o == '--package' or o == '-p':
-           topdir=a
+               output = a
        elif o == '--linesep' or o == '-l':
                linesep = a
        elif o == '--columns' or o == '-c':
-               cols =  atoi(a)
+               cols =  string.atoi(a)
        else:
-           print o
-           raise getopt.error
-
-    sys.path.append (topdir + '/stepmake/bin')
-    from packagepython import *
-    package = Package (topdir)
-    packager = Packager ()
-
-    from flower import *
+               print o
+               raise getopt.error
 
-    if latex:
-       convert_tex (files[0], output,  cols, separator, linesep)
-    else:
-       convert_html (files[0], output, cols, separator, linesep)
+lines = open (files[0]).readlines ()
 
-main ()
+if format == 'latex':
+       convert_tex (lines, output,  cols, separator, linesep)
+elif format == 'html':
+       convert_html (lines, output, cols, separator, linesep)
+elif format == 'texi':
+       convert_texinfo (lines, output, cols, separator, linesep)
 
diff --git a/stepmake/bin/texi2man.sh b/stepmake/bin/texi2man.sh
deleted file mode 100644 (file)
index 58144a0..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/bin/sh
-# texi2man.sh
-
-if [ $# -ne 2 ]; then
-       echo "Usage: texi2man TEXINFO-FILE MAN-FILENAME"
-       exit 2
-fi
-
-date=`date +%d/%b/%y`
-#urg
-package_name=LilyPond
-#urg urg
-version=0.1.71
-
-infile=$1
-outfile=$2
-name=`basename $1 .texinfo`
-name=`basename $name .texi`
-name=`echo $name | tr '[A-Z]' '[a-z]'`
-NAME=`echo $name | tr '[a-z]' '[A-Z]'`
-
-echo .TH\ $NAME\ 1\ \"$date\" "$package_name Documentation" >$outfile
-
-NEWLINE="
-"
-cat $infile | 
-#urg, wish we could fix texi2roff :-(
-sed 's!.*\\input .*texinfo.*!!' |
-sed 's!^@chapter.*!@section NAME!' |
-# sed 's!^@node *[Ii]nvoking.*!@section SYNOPSIS!' |
-sed 's!^@node.*!!' |
-# perl -pe "{s/\@node ([^,]*).*/\@section /;\$i=\$1; \$i=~tr [a-z] [A-Z]; chop; \$_.=\$i . \"\n\";}" |
-perl -pe "{s/\@section (.*)/\@section /;\$i=\$1; \$i=~tr [a-z] [A-Z]; chop; \$_.=\$i . \"\n\";}" |
-sed 's!^@subsection .*!!' |
-sed 's!^@c *@texi2man@!@!' |
-perl -pe "s/\@url{([^}]*)}/\$1/" |
-perl -pe "s/\@email{([^},]*)}/<\$1>/" |
-perl -pe "s/\@email{([^},]*),([^}]*)}/\$2, <\$1>/" |
-sed "s!DESCRIPTION!& NEWLINE\
-This manual page was automatically generated from $infile by $0.  For more details, please refer to the info pages: NEWLINE\
-    info $name NEWLINE\
-!" |
-sed "s!NEWLINE!\\$NEWLINE!g" |
-# debugging:
-tee $infile.texi2roff |
-texi2roff -ms |
-sed 's!^\.ds __ !.SH !' |
-# /\&\n(H1.\n(H2      \*(__
-sed 's!.*(H1.*!!' |
-cat >> $outfile
-
index 3177c3bd83ca072d2fd95c9381a38df752146fd1..ce726fe8c1d53d3ee28bff34c84082d47d751d4a 100644 (file)
@@ -1,35 +1,22 @@
 # Texinfo_rules.make
 
-.SUFFIXES: .1 .html .texinfo
+.SUFFIXES: .html .texinfo
 
-texi2man = $(step-bindir)/out/texi2man $< $@
-texi2html =\
-    rm -f $@.urg;\
-    cat $< | sed "s!@include.*!!" > $@.urg;\
-    $(TEXI2HTML) $@.urg;\
-    rm -f $@.urg;\
-    mv $(@F).urg.html $@;\
-    rm -f $(@F:%.html=%.html.urg_toc.html);\
-    add-URLs $@
+$(outdir)/%.info: $(outdir)/%.texi
+       makeinfo --output=$@ $<
 
-$(outdir)/%.1: %.texinfo
-       $(texi2man)
+$(outdir)/%.html:      $(outdir)/%.texi
+       -makeinfo --force --output=$@ --html --no-headers $< 
+       $(PYTHON) $(step-bindir)/add-html-footer.py --package=$(topdir) --index=$(depth)/../index.html $@ $(wildcard $(basename $@)[0-9][0-9].html)
 
-$(outdir)/%.info: $(outdir)/%.texinfo
-       $(MAKEINFO) --force -o $@ $<
+$(outdir)/%.dvi:       $(outdir)/%.texi
+# --clean only in >= 3.12s
+# cd $(outdir); texi2dvi --clean ../$< 
+       cd $(outdir); texi2dvi ../$< 
 
-# $(outdir)/%.html: %.texinfo
-#      $(texi2html)
-#      add-html-footer --index $(depth)/../index.html $@
+$(outdir)/%.txt: $(outdir)/%.texi
+       $(MAKEINFO) --no-split --no-headers --output $@ $<
 
-# texi2html is as broken as pod2html 5004 :-) 
-# we'll have to use pod2html 5003 for now.
-# don't burn your .pod sources!
-#
-$(outdir)/%.html: $(outdir)/%.texinfo
-       $(texi2html)
-       $(PYTHON) $(step-bindir)/add-html-footer.py --package=$(topdir) --index $(depth)/../index.html $@
-
-$(outdir)/%.1: $(outdir)/%.texinfo
-       -$(texi2man)
+$(outdir)/%.texi: %.texi
+       cp $< $@
 
diff --git a/stepmake/stepmake/texinfo-targets.make b/stepmake/stepmake/texinfo-targets.make
new file mode 100644 (file)
index 0000000..1bb8bf6
--- /dev/null
@@ -0,0 +1 @@
+# empty
diff --git a/stepmake/stepmake/texinfo-vars.make b/stepmake/stepmake/texinfo-vars.make
new file mode 100644 (file)
index 0000000..3a7e7ae
--- /dev/null
@@ -0,0 +1,4 @@
+
+TEXI_FILES = $(wildcard *.texi)
+
+EXTRA_DIST_FILES += $(TEXI_FILES)
index cb353c583b22a63a214989fef2c207c5cacbd82d..da9907c536de0d950d32eee236e6d375a25182cc 100644 (file)
 % the code faster, and more reliable (less flexible)
 
 
-%
-% TODO : use GUILE for this kind of muckery.
-%
-
-{%
-   \def\par{ }%         %Ugh.  Don't try this at home, kids!
-   % neat file-include trick by Piet van Oostrum <piet@cs.uu.nl>
-   \newread\defin 
-   \newtoks\toksfiledefi\newtoks\toksfiledefii 
-   \def\ifnot#1{#1\else\expandafter\expandafter\fi\iffalse\iftrue\fi} 
-   \def\filedef#1#2{%#1=command name, #2=file name 
-           \openin\defin=#2\relax\def#1{} 
-           \ifeof\defin
-                   \message{***************** CAN NOT OPEN #2 ********************}
-                   \end
-           \fi 
-           \loop\ifnot{\ifeof\defin}\read\defin to\tempfiledef
-           \toksfiledefi=\expandafter{#1}% 
-           \toksfiledefii=\expandafter{\tempfiledef}% 
-   %        \expandafter\special\expandafter{!\the\toksfiledefi\the\toksfiledefii}\repeat%
-          \global\edef#1{\the\toksfiledefi\the\toksfiledefii}\repeat%
-   }
-   %
-   % This seems a little backwards, but we don't want to include the PS
-   % stuff too early
-   %
-   \filedef\includelilyps{lily.ps}%
-   \expandafter\special{! \includelilyps }
-}
-
-
 \def\turnOnPostScript{%
         % This sets CTM so that you get to the currentpoint
         % by executing a 0 0 moveto
@@ -53,7 +22,6 @@
                 \special{ps: @beginspecial @setspecial ##1 @endspecial}       
         }
         %
-
         \special{! 
 /stafflinethickness \mudelapaperstaffline\space def
 /interline \mudelapaperinterline\space def