]> git.donarmstrong.com Git - lilypond.git/commitdiff
release: 1.0.2 release/1.0.2
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Fri, 14 Aug 1998 11:24:46 +0000 (13:24 +0200)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Fri, 14 Aug 1998 11:24:46 +0000 (13:24 +0200)
63 files changed:
AUTHORS.txt
Documentation/faq.yo
Documentation/man/Makefile
Documentation/man/out/convert-mudela.1 [new file with mode: 0644]
Documentation/man/out/lilypond.1 [new file with mode: 0644]
Documentation/man/out/ly2dvi.1 [new file with mode: 0644]
Documentation/man/out/mi2mu.1 [new file with mode: 0644]
Documentation/man/out/mudela-book.1 [new file with mode: 0644]
Documentation/tex/Makefile
Documentation/tex/glossary.yo [new file with mode: 0644]
Documentation/tex/mudela.yo [deleted file]
Documentation/tex/refman.yo [new file with mode: 0644]
Documentation/tex/tutorial.yo [new file with mode: 0644]
NEWS
README.txt
TODO
VERSION
aclocal.m4
config.make.in
configure
flower/include/scalar.hh
flower/scalar.cc
input/Makefile
lily/VERSION
lily/text-def.cc
make/STATE-VECTOR
make/out/lelievijver.lsm
make/out/lilypond.lsm
make/out/lilypond.spec
make/out/zlilypond-docs.spec
mf/Makefile
mf/out/feta11.afm [new file with mode: 0644]
mf/out/feta13.afm [new file with mode: 0644]
mf/out/feta16.afm [new file with mode: 0644]
mf/out/feta19.afm [new file with mode: 0644]
mf/out/feta20.afm [new file with mode: 0644]
mf/out/feta23.afm [new file with mode: 0644]
mf/out/feta26.afm [new file with mode: 0644]
mutopia/J.S.Bach/Solo-Cello-Suites/allemande-alto.ly [deleted file]
mutopia/J.S.Bach/Solo-Cello-Suites/courante-alto.ly [deleted file]
mutopia/J.S.Bach/Solo-Cello-Suites/gigue-alto.ly [deleted file]
mutopia/J.S.Bach/Solo-Cello-Suites/menuetto-alto.ly [deleted file]
mutopia/J.S.Bach/Solo-Cello-Suites/prelude-alto.ly [deleted file]
mutopia/J.S.Bach/Solo-Cello-Suites/sarabande-alto.ly [deleted file]
mutopia/J.S.Bach/Solo-Cello-Suites/scsii-alto.ly [deleted file]
mutopia/standchen.ly
scripts/convert-mudela.py
scripts/ly2dvi.sh
scripts/mudela-book.py
stepmake/aclocal.m4
stepmake/bin/fake-yodl.sh
stepmake/bin/package-diff.py
stepmake/config.make.in
stepmake/configure
stepmake/stepmake/Documentation.shared.make
stepmake/stepmake/Executable.make
stepmake/stepmake/Install_outfiles.make
stepmake/stepmake/Installfiles.make
stepmake/stepmake/Manual.make
stepmake/stepmake/Po.make [new file with mode: 0644]
stepmake/stepmake/Targets.make
stepmake/stepmake/Toplevel.make
stepmake/stepmake/Variables.make

index ebf1db1135c275d8ddfbe8953a635ae14f72e8f5..7dd6318284eec16e1db9fe54867ea47d84701cef 100644 (file)
@@ -17,7 +17,7 @@ o Jan Arne Fagertun <Jan.A.Fagertun@energy.sintef.no>,
 o Anthony Fok <foka@debian.org>, 
     debian package: debian/*
 o Neil Jerram <nj104@cus.cam.ac.uk>. 
-    Documentation/Vocab*
+    parts of Documentation/Vocab*
 o Donald Ervin Knuth,  http://www.cs-staff.stanford.edu/~knuth
     mf/ital-*.mf (these were taken from the CM fonts)
 o Werner Lemberg <xlwy01@uxp1.hrz.uni-dortmund.de>,
@@ -29,14 +29,14 @@ o Han-Wen Nienhuys <hanwen@cs.uu.nl>,
 
     Main author.
 o Jan Nieuwenhuizen <janneke@gnu.org>, 
-    http://www.digicash.com/~jan
+    http://www.xs4all.nl/~jantien
 
     Main author
 o Alexandre Oliva <oliva@dcc.unicamp.br>, 
     http://sunsite.unicamp.br/~oliva
     testing
 o Franc,ois Pinard <pinard@iro.umontreal.ca>, 
-    Documentation/Vocab*, started internationalization stuff
+    parts of Documentation/Vocab*, started internationalization stuff
 o Jeffrey B. Reed <daboys@bga.com>,
     Windows-NT support.
 o Shay Rojanski
index 968fbb6b3fe0cb2dfcc94eba2d538c48626ad4b3..14dbafd8565cc23e98c9e4661e002d0223329415 100644 (file)
@@ -253,15 +253,19 @@ doubt if a simple-minded approach (dragging and dropping notes) is any
 easier or quicker to use than mudela.  But for composing a graphical
 environment probably is indispensable.
 
-In any case email(Derek Wyatt)(wyatt@?.edu) is working on embryonal GTK
-based editor.  There also a GUI package RoseGarden that could be
-extended to output mudela.
+In any case email(Derek Wyatt)(wyatt@scar.utoronto.edu) is working on
+GTK based editor, but that is still in an embryonal stage (see
+lurl(http://harmonia.scar.utoronto.ca).  There is also a GUI package
+RoseGarden that could be extended to output mudela.
+
+If you want to work on this, please send e-mail to the mailing list
+email(gnu-misc-discuss@gnu.org).
 
 
 question(I want to implement XXXX!  How should I do this?)
 
-Your best bet of getting me to include code, is to present it as a
-"fait accompli", i.e., to send me a patch.
+Your best bet of getting us to include code, is to present it as a
+"fait accompli", i.e., to send a patch to the mailing list.
 
 
 question(I made some code, how do I get you to include it?)
index a3157a3eb9c6334d689a50e4a615af1bb2b1ec17..1460196b887dc31e154dfc59dd32b49272149110 100644 (file)
@@ -13,7 +13,9 @@ MANGROFF = $(addprefix $(outdir)/, $(addsuffix .$(SECTION),$(basename $(YO_FILES
 
 OUTTEXINFO_FILES= $(addprefix $(outdir)/, $(addsuffix .texinfo,$(basename $(YO_FILES) .yo)))
 
-default: $(MANTXT) $(MANGROFF)
+OUT_DIST_FILES += $(MANGROFF)
+
+default: $(MANGROFF)
 
 texinfo: $(OUTTEXINFO_FILES)
 
diff --git a/Documentation/man/out/convert-mudela.1 b/Documentation/man/out/convert-mudela.1
new file mode 100644 (file)
index 0000000..a72de5e
--- /dev/null
@@ -0,0 +1,45 @@
+.TH "convert-mudela" "1" "1998" "The LilyPond package" "convert-mudela" 
+.PP 
+.PP 
+.SH "NAME" 
+convert-mudela \- convert-mudela to newer versions
+.PP 
+convert-mudela sequentially applies different mudela-conversions to
+upgrade a Mudela input file\&.
+.PP 
+.PP 
+.SH "DESCRIPTION" 
+.PP 
+Upgrade a Mudela input file from FROM_PATCHLEVEL to TO_PATCHLEVEL\&.
+If no files are given, the standard input and output are used\&.
+.PP 
+.SH "SYNOPSIS" 
+.PP 
+convert-mudela [options] [files]
+.PP 
+.SH "OPTIONS" 
+.IP "--output" 
+The output file to write
+.IP "--edit" 
+Do an inline edit of the input file\&. override @samp{--output}
+.IP "--show-rules" 
+shows all known conversions, and exit
+.IP "--from=FROM_PATCHLEVEL" 
+Set the level to convert from\&. If this is not set, convert-mudela will
+guess this, on the basis of \f(CW\eversion\fP strings in the file
+.IP "--to=TO_PATCHLEVEL" 
+Set the goal version of the conversion\&. It defaults to the latest
+available version\&.  
+.PP 
+.SH "BUGS" 
+.PP 
+Not all language changes are handled\&. Multiple output options won\'t
+work\&.
+.PP 
+convert-mudela is written in python, so you have install
+python\&.
+.PP 
+.SH "AUTHOR" 
+.PP 
+Han-Wen Nienhuys <hanwen@cs\&.uu\&.nl>, http://www\&.cs\&.uu\&.nl/people/hanwen
+.PP 
diff --git a/Documentation/man/out/lilypond.1 b/Documentation/man/out/lilypond.1
new file mode 100644 (file)
index 0000000..85af901
--- /dev/null
@@ -0,0 +1,223 @@
+.TH "LilyPond" "1" "1998" "The LilyPond package" "The GNU Project Music Typesetter" 
+.PP 
+.PP 
+.SH "NAME" 
+LilyPond \- the GNU Music Typesetter
+.PP 
+.PP 
+.PP 
+.SH "SYNOPSIS" 
+\fBlilypond\fP [OPTION]\&.\&.\&. [MUDELA-FILE]\&.\&.\&.
+.PP 
+.SH "DESCRIPTION" 
+.PP 
+
+.DS 
+LilyPond is the GNU Project music typesetter\&.  This program can print
+beautiful sheet music from a music definition file\&.  It can also play
+mechanical performances to a MIDI file\&.  Features include multiple
+staffs, meters, clefs, keys, lyrics, versatile input language, cadenzas,
+beams, slurs, triplets, formatting scores, part extraction\&.  It includes
+a nice font of musical symbols\&.
+
+.DE 
+
+.PP 
+.SH "OPTIONS" 
+.IP "-I,--include=FILE" 
+add \fBFILE\fP to the search path for input files\&.
+.IP "-M,--midi" 
+This disables TeX output\&. If you have a \emidi definition, it will do the 
+midi output only\&.
+.IP "-d,--dependencies" 
+Also output rules to be included in Makefile\&.
+.IP "-D,--debug" 
+Turn debugging info on\&.  GNU LilyPond reads the file \fB\&.dstreamrc\fP, 
+which lists what functions and classes may produce copious debugging
+output\&.
+.IP "-t,--test" 
+Switch on any experimental features\&.  Not for general public use\&.
+.IP "-w,--warranty" 
+Show the warranty with which GNU LilyPond comes\&. (It comes with 
+\fBNO WARRANTY\fP!)
+.IP "-o,--output=FILE" 
+Set the default output file to \fBFILE\fP\&.
+.IP "-h,--help" 
+Show a summary of usage\&.
+.IP "-i,--init=FILE" 
+Set init file to \fBFILE\fP (default: \fBinit\&.ly\fP)\&.
+.IP "--include, -I=DIRECTORY" 
+Add \fBDIRECTORY\fP to the search path for input files\&.
+.IP "--ignore-version, -V" 
+Make incompatible mudela version non-fatal\&.
+.IP "--find-fourths, -Q" 
+Warn about melodic intervals larger than a fourth\&.  Useful for 
+converting absolute octave mode stuff to relative octaves\&.
+.PP 
+.SH "FEATURES" 
+.PP 
+This is an overview of the features that GNU LilyPond supports\&.  For
+details on how to use them, you should consult the Mudela tutorial,
+which is included with the package\&.
+.PP 
+.IP o 
+ASCII script input, with identifiers (for music reuse),
+customizable notenames, customisable fontset\&.
+.IP o 
+MIDI output lets you check if you have entered the correct notes\&.
+.IP o 
+MIDI to Mudela conversion through the mi2mu program\&.
+.IP o 
+Multiple staffs in one score\&.  Each staff can have different meters\&.
+.IP o 
+Beams, slurs, ties, chords, super/subscripts (accents and text)
+triplets, general n-plet (triplet, quadruplets, etc\&.), lyrics,
+transposition dynamics (both absolute and hairpin style)\&.
+.IP o 
+Multiple voices within one staff; beams optionally shared
+between voices\&.  Up to four voices is handled cleanly\&.
+.IP o 
+Multiple scores within one input file\&.  Each score is output to
+a different file\&.
+.IP o 
+Clef changes, meter changes, cadenza-mode, key changes, repeat bars\&.
+.PP 
+.SH "DISCLAIMER" 
+.PP 
+GNU LilyPond is copyright 1996-1998 by its authors\&.  GNU LilyPond is
+distributed under the terms of the GNU General Public License\&.  GNU LilyPond 
+is provided without any warranty what so ever\&.
+GNU LilyPond may be freely distributed\&.  For further information consult 
+the GNU General Public License, from the file \fBCOPYING\fP\&.
+.PP 
+.SH "PROBLEMS" 
+.PP 
+There is an extensive list of todoes and bugs\&.  See \fBTODO\fP\&.  If you
+have a problem you should try to find out
+.PP 
+.IP o 
+If the bug has been fixed in a newer release\&.
+.IP o 
+If the bug has been found earlier, consult \fBTODO\fP and \fBBUGS\fP\&.
+.PP 
+If you have found a bug, then you should send a bugreport\&.
+.PP 
+.IP o 
+Send a copy of the input which causes the error\&.
+.IP o 
+Send a description of the platform you use\&.
+.IP o 
+Send a description of the LilyPond version you use 
+(with compile/configure options please)\&.
+.IP o 
+Send a description of the bug itself\&.
+.IP o 
+Send it to bug-gnu-music@gnu\&.org <bug-gnu-music@gnu\&.org> (you don\'t have to subscribe
+to this mailinglist)\&.
+.PP 
+.SH "FILES" 
+.IP "\fBinit\&.ly\fP" 
+The initialisation file with symbol tables etc\&.  It
+includes files from the directory \fBinit/\fP\&.
+.PP 
+manspagesection(environment)
+.PP 
+.IP "LILYINCLUDE" 
+additional directories for finding lilypond data\&.  The
+format is like the format of \fBPATH\fP\&.
+.IP "LANG" 
+selects the language for the warning messages of LilyPond\&.
+.PP 
+.SH "BUGS" 
+.PP 
+Lots of them\&.  See \fBTODO\fP and \fBBUGS\fP
+.PP 
+.SH "SEE ALSO" 
+.PP 
+.IP "internals" 
+On technical details of LilyPond
+.IP "mudela-man" 
+On the input format\&.  This is a LilyPond-enhanced LaTeX document\&.
+.IP "MANIFESTO" 
+Goals of the GNU LilyPond project\&.
+.IP "FAQ" 
+The GNU LilyPond FAQ list
+.IP "GNU LilyPond" 
+has her own webpage\&.  This webpage contains the MIDI, GIF and PS files for 
+some standard music files\&.  It also has the complete LilyPond documentation
+.PP 
+GNU LilyPond is
+updated very frequently, the latest version is always available at:
+ftp://pcnov095\&.win\&.tue\&.nl/pub/lilypond\&.  This FTP site is mirrored
+at a number of sites; consult the project web pages for information
+about mirrors\&.
+.PP 
+For programs which are part of the GNU music project, the following
+mailing list have been setup:
+.PP 
+.IP "info-gnu-music@gnu\&.org <info-gnu-music@gnu\&.org>" 
+For information on the GNU Music project, to subscribe: send mail with
+subject "subscribe" to info-gnu-music-request@gnu\&.org <info-gnu-music-request@gnu\&.org>
+.IP "help-gnu-music@gnu\&.org <help-gnu-music@gnu\&.org>" 
+For help with programs from the GNU music project\&.  To subscribe: send
+mail with subject "subscribe" to help-gnu-music-request@gnu\&.org <help-gnu-music-request@gnu\&.org>
+.IP "bug-gnu-music@gnu\&.org <bug-gnu-music@gnu\&.org>" 
+If you have bugreports, you should send them to this list\&.  If you want
+to read all bugreports, you should subscribe to this list\&.  To
+subscribe: send mail with subject "subscribe" to
+bug-gnu-music-request@gnu\&.org <bug-gnu-music-request@gnu\&.org>
+.IP "gnu-music-discuss@gnu\&.org <gnu-music-discuss@gnu\&.org>" 
+For discussions concerning the GNU Music project, to subscribe: send
+mail with subject "subscribe" to
+gnu-music-discuss-request@gnu\&.org <gnu-music-discuss-request@gnu\&.org>
+.PP 
+Announces of new versions will be sent to info-gnu-music and
+gnu-music-discuss\&.
+.PP 
+.SH "REMARKS" 
+.PP 
+GNU LilyPond has no connection with the music package Rosegarden, other
+than the names being similar (:-)
+.PP 
+.SH "HISTORY" 
+.PP 
+(for a  detailed changelog, see \fBNEWS\fP)
+.PP 
+GNU LilyPond\'s roots lie in MPP, a preprocessor to the rather arcane
+MusiXTeX macro package for TeX\&.  A friend of mine, Jan Nieuwenhuizen
+wrote the first 44 versions (0\&.01 to 0\&.44), then his program caught my
+attention, and I was slowly sucked in to the interesting problem of
+easily producing beautifully printed music\&.  I contributed some
+code\&.  We soon realised that MPP\'s design was too fundamentally broken
+to be repaired, so it was decided to rewrite MPP\&.  We debated a lot about
+the requirements to an inputformat (fall 1995)\&.  I sat down and started
+with a parser-first, bottom-up rewrite called mpp95 (which totally
+failed, obviously)\&.
+.PP 
+After long and hard thinking, I came up with an algorithm for the
+horizontal spacing of multiple staffs (april 1996) I coded it (and did
+not test it)\&.  After starting with this fundamental piece, I slowly
+added the stages which come before spacing, and after\&.  A half year
+later, I had a first working version, (october 1996)\&.  I announced
+Patchlevel 0\&.0\&.7 (or 8) to the mutex list after asking some technical
+details on spacing; it was downloaded approximately 4 times\&.  Then I
+got the hang of it, and in the subsequent two months, I coded until it
+had doubled in size (pl 23)\&.
+.PP 
+Most the other history is described in the NEWS file\&.  The first large
+scale release (0\&.1) was done after approximately 78 patchlevels on
+August 1, 1997\&.
+.PP 
+.SH "AUTHOR" 
+.PP 
+Please consult the documentation file \fBAUTHORS\&.txt\fP for more detailed
+information, and small contributions\&. 
+.PP 
+.IP o 
+Han-wen Nienhuys <hanwen@cs\&.uu\&.nl>
+http://www\&.cs\&.uu\&.nl/people/hanwen
+.IP o 
+Jan Nieuwenhuizen <janneke@gnu\&.org>
+http://www\&.xs4all\&.nl/~jantien
diff --git a/Documentation/man/out/ly2dvi.1 b/Documentation/man/out/ly2dvi.1
new file mode 100644 (file)
index 0000000..dd83e90
--- /dev/null
@@ -0,0 +1,168 @@
+.TH "LilyPond" "1" "1998" "The LilyPond package" "Ly2dvi" 
+.PP 
+.PP 
+.SH "NAME" 
+Ly2dvi \- convert mudela to DVI
+.PP 
+.PP 
+.SH "DESCRIPTION" 
+ly2dvi is a shell script which creates input file for LaTeX,
+based on information from the output files from lilypond\&.
+The script handles multiple files\&. If a mudela file name is
+specified lilypond is run to make an output (TeX) file\&.
+.PP 
+One or more LaTeX files are created, based on information found
+in the output (TeX) files, and latex is finally run to create
+one or more DVI files\&.
+.PP 
+.SH "SYNOPSIS" 
+.PP 
+ly2dvi [options] inputfile[\&.ly] [\&.\&.\&.\&.]
+.PP 
+.SH "OPTIONS" 
+.PP 
+.IP "-D,--debug" 
+Set debug mode\&. There are two levels - in level one some debug
+info is written, in level two the command \fBset -x\fP is run, which
+echoes every command in the ly2dvi script\&.
+.IP "-F,--headers=" 
+Name of additional LaTeX headers file\&. This is included in the
+tex file at the end of the headers, last line before \f(CW\ebegin{document}\fP
+.IP "-H,--Heigth=" 
+Set paper heigth (points)\&. Used together with width and LaTeX name of
+papersize in case of papersize unknown to ly2dvi\&.
+.IP "-F,--headers=" 
+Name of additional LaTeX headers file\&. This is included in the
+tex file at the end of the headers, last line before \f(CW\ebegin{document}\fP
+.IP "-K,--keeplilypond" 
+Keep LilyPond output after the run\&.
+.IP "-L,--landscape" 
+Set landscape orientation - portrait is the default\&.
+(\fB-L\fP produces \f(CW\eusepackage[landscape]{article}\fP)
+.IP "-N,--nonumber" 
+Switch off page numbering\&.
+.IP "-O,--orientation=" 
+Set orientation landscape - obsolete, use \fB-L\fP instead\&.
+.IP "-W,--Width=" 
+Set paper width (points)\&. Used together with heigth and LaTeX name of
+papersize in case of papersize unknown to ly2dvi\&.
+.IP "-d,--dependencies" 
+Tell lilypond to make dependencies file\&.
+.IP "-h,--help" 
+Print help\&.
+.IP "-k,--keeply2dvi" 
+Keep the LaTeX file after the run\&.
+.IP "-l,--language=" 
+Specify LaTeX language\&.
+(\fB-l norsk\fP produces \f(CW\eusepackage[norsk]{babel}\fP)\&.
+.IP "-o,--output=" 
+Set output directory\&.
+.IP "-p,--papersize=" 
+Specify papersize\&.
+(\fB-p a4\fP produces \f(CW\eusepackage[a4paper]{article}\fP)
+.IP "-s,--separate" 
+Normally all output files are included into one LaTeX file\&.
+With this switch all files are run separately, to produce one
+DVI file for each\&.
+.PP 
+.SH "Features" 
+.PP 
+ly2dvi responds to several parameters specified in the mudela
+file\&. They are overridden by corresponding command line options\&.
+.PP 
+.IP "language="";" 
+Specify LaTeX language
+.IP "latexheaders="";" 
+Specify additional LaTeX headers file
+.IP "orientation="";" 
+Set orientation\&.
+.IP "paperlinewidth="";" 
+Specify the width (pt, mm or cm) of the printed lines\&.
+.IP "papersize="";" 
+Specify name of papersize\&.
+.PP 
+.SH "Environment" 
+.PP 
+.IP "LILYINCLUDE" 
+Additional directories for input files\&.
+.IP "TMP" 
+Temporary directory name\&. Default is /tmp
+.PP 
+.SH "Files" 
+.PP 
+\fBtitledefs\&.tex\fP is inspected for definitions used to extract
+additional text definitions from the mudela file\&. In the current
+version the following are defined:
+.PP 
+.IP "title" 
+The title of the music\&. Centered on top of the first page\&.
+.IP "subtitle" 
+Subtitle, centered below the title\&.
+.IP "composer" 
+Name of the composer, rightflushed below the subtitle\&.
+.IP "arranger" 
+Name of the arranger, rightflushed below the composer\&.
+.IP "instrument" 
+Name of the instrument, leftflushed at same level as the composer\&.
+.PP 
+\fB/usr/local/share/lilyrc /etc/lilyrc $HOME/\&.lilyrc \&./\&.lilyrc\fP
+are files to set up default running conditions/variables, Bourne shell
+syntax\&. All files are parsed, in the shown sequence\&. The variables are
+overridden by variables in the mudela file, and by command line options\&.
+In the current version the following are allowed:
+.PP 
+.IP "LANGUAGE=" 
+Specify LaTeX language\&.
+.IP "LATEXHF=" 
+Specify additional LaTeX headers file
+.IP "LILYINCLUDE=" 
+Additional directories for input files\&.
+.IP "ORIENTATION=" 
+Set orientation - portrait is the default\&.
+.IP "OUTPUTDIR=" 
+Set output directory\&.
+.IP "PAPERSIZE=" 
+Specify name of papersize\&.
+.IP "PHEIGTH=" 
+Specify paperheight (points - an inch is 72\&.27, a cm is 28\&.453 points)\&.
+.IP "TMP=" 
+Temporary directory name\&.
+.IP "PWIDTH=" 
+Specify paperwidth (points - an inch is 72\&.27, a cm is 28\&.453 points)\&.
+.PP 
+.SH "See Also" 
+.PP 
+lilypond(1), tex(1), latex(1)
+.PP 
+.SH "Bugs" 
+.PP 
+If you have found a bug, you should send a bugreport\&.
+.PP 
+.IP o 
+Send a copy of the input which causes the error\&.
+.IP o 
+Send a description of the platform you use\&.
+.IP o 
+Send a description of the LilyPond and ly2dvi version you use\&.
+.IP o 
+Send a description of the bug itself\&.
+.IP o 
+Send it to bug-gnu-music@gnu\&.org <bug-gnu-music@gnu\&.org> (you don\'t have to subscribe
+to this mailinglist)\&.
+.PP 
+.SH "Remarks" 
+.PP 
+Many papersizes are now supported\&. Information on other sizes
+(LaTeX names, horizontal and vertical sizes) should be mailed to
+the author or to the mailing list\&.
+.PP 
+Supported papersizes are:
+.PP 
+a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, archA, archB, archC, archD,
+archE, b0, b1, b2, b3, b4, b5, flsa, flse, halfletter, ledger, legal,
+letter, note
+.PP 
+.SH "AUTHOR" 
+.PP 
+Jan Arne Fagertun <Jan\&.A\&.Fagertun@energy\&.sintef\&.no>, http://www\&.termo\&.unit\&.no/mtf/people/janaf/
+.PP 
diff --git a/Documentation/man/out/mi2mu.1 b/Documentation/man/out/mi2mu.1
new file mode 100644 (file)
index 0000000..836de8b
--- /dev/null
@@ -0,0 +1,68 @@
+.TH "LilyPond" "1" "1998" "Mi2mu" "The LilyPond package" 
+.PP 
+.PP 
+.PP 
+.SH "NAME" 
+Mi2mu \- convert MIDI to \fBmudela\fP(5)
+.PP 
+.PP 
+.SH "DESCRIPTION" 
+Mi2mu translates a MIDI input file to Mudela (GNU LilyPond source
+format)\&.  Mi2mu is part of the GNU LilyPond music typesetting package\&.
+.PP 
+manpagessynopsis()
+.PP 
+mi2mu [options] midi-file
+.PP 
+.SH "OPTIONS" 
+.PP 
+.IP "-b, --no-quantify," 
+Write exact durations, e\&.g\&.: `a4*385/384\'\&.
+.IP "-D, --debug," 
+Print lots of debugging stuff\&.
+.IP "-h, --help," 
+Show a summary of usage\&.
+.IP "-I, --include=\fBDIR\fP," 
+Add DIR to search path\&.
+.IP "-k, --key=ACC[:MINOR]," 
+Set default key\&.  ACC > 0 sets number of sharps; ACC < 0 sets number 
+of flats\&.  A minor key is indicated by ":1"\&.
+.IP "-n, --no-silly," 
+Assume no plets or double dots, assume smallest (reciprocal) duration 16\&.
+.IP "-o, --output=\fBFILE\fP," 
+Set \fBFILE\fP as default output\&.
+.IP "-p, --no-plets," 
+Assume no plets\&.
+.IP "-q, --quiet," 
+Be quiet\&.
+.IP "-s, --smallest=N," 
+Assume no shorter (reciprocal) durations than N\&.
+.IP "-v, --verbose," 
+Be verbose\&.
+.IP "-w, --warranty," 
+Show the warranty with which mi2mu comes\&. (It comes with \fBNO WARRANTY\fP!)
+.IP "-x, --no-double-dots," 
+Assume no double dotted notes\&.
+.PP 
+.SH "DISCLAIMER" 
+.PP 
+Mi2mu is copyright 1996, 1997 by its authors\&. Mi2mu is distributed 
+as part of GNU LilyPond, under the terms of the GNU General Public
+License\&.  Mi2mu is provided without any warranty what so ever\&.
+Mi2mu may be freely distributed\&.  For further information consult
+the GNU General Public License, from the file \fBCOPYING\fP\&.
+.PP 
+.SH "SEE ALSO" 
+.PP 
+.IP "\fBlilypond\fP(1)" 
+The GNU LilyPond music typesetter\&.
+.IP "mudela-man" 
+On the input format\&. This is a LilyPond-enhanced LaTeX document\&.
+.PP 
+.SH "AUTHOR" 
+.PP 
+Please consult the documentation file \fBAUTHORS\fP for more detailed
+information, and small contributions\&. 
+.PP 
+Jan Nieuwenhuizen <janneke@gnu\&.org>, http://www\&.xs4all\&.nl/~jantien
+.PP 
diff --git a/Documentation/man/out/mudela-book.1 b/Documentation/man/out/mudela-book.1
new file mode 100644 (file)
index 0000000..478df6e
--- /dev/null
@@ -0,0 +1,59 @@
+.TH "LilyPond" "1" "1998" "The LilyPond package" "mudela-book" 
+.PP 
+.PP 
+.PP 
+.SH "NAME" 
+mudela-book \- integrate LaTeX and mudela
+.PP 
+.PP 
+.SH "DESCRIPTION" 
+\fBmudela-book\fP is a script that helps
+integrating mudela and \&.  mudela-book runs LilyPond on
+fragments of mudela in your source file, and includes the results into
+document that can be processed with \&.  The result is a text
+document with formatted music integrated\&.
+.PP 
+If the file contains the ``block\'\'
+.PP 
+
+.DS 
+
+        \ebegin{mudela}
+        CONTENTS
+        \eend{mudela}
+
+.DE 
+
+.PP 
+then LilyPond is run on CONTENTS\&.  mudela-book puts the result back,
+surrounded by \f(CW\epreMudelaExample\fP and \f(CW\epostMudelaExample\fP
+commands\&. The \f(CW\ebegin\fP takes the following options:
+.PP 
+.IP "fragment" 
+mudela-book adds some redtape\&. You
+can substitute voice-contents for CONTENTS in this case\&.
+.IP "verbatim" 
+CONTENTS is copied into the TeX source enclosed in a verbatim block\&.
+.PP 
+.SH "Synopsis" 
+.PP 
+.IP "--outname" 
+The name of  file to output\&. If this option  is not given,
+the output name derived from the input name\&.  The extension \fB\&.doc\fP
+is stripped, and \f(CW\&.mudtex\fP appended\&.
+.IP "--outdir" 
+The directory to output lilypond output and input to\&.
+.IP "--help" 
+print a short help message
+.PP 
+.SH "BUGS" 
+.PP 
+Doesn\'t handle incorrect input sanely\&.   mudela-book is written in
+python, so you have install python\&.
+.PP 
+.SH "AUTHOR" 
+.PP 
+Han-Wen Nienhuys <hanwen@cs\&.uu\&.nl>, http://www\&.cs\&.uu\&.nl/people/hanwen
+.PP 
index 8cde48019ce65673f5886c0711ca890744b58e6d..a441b89d7cbfc9ac9ad451dad22747d9b4464e6d 100644 (file)
@@ -29,8 +29,9 @@ default:
 GENHTMLS = engraving colorado vocabulary computer-notation
 OUTGENHTMLS = $(addprefix $(outdir)/, $(GENHTMLS:%=%.html))
 
-$(outdir)/mudela.dvi: $(outdir)/vocabulary.tex $(outdir)/engraving.bib
-$(outdir)/mudela.html: $(OUTGENHTMLS)
+
+$(outdir)/glossary.dvi: $(outdir)/vocabulary.tex 
+$(outdir)/glossary.html: $(OUTGENHTMLS)
 
 local-WWW: $(HTML_FILES) $(OUTDOC_FILES:.doc=.ps.gz) $(OUTYO_FILES:.yo=.latex) $(OUTYO_FILES:.yo=.ps.gz) $(addprefix $(outdir)/, $(BIB_FILES:.bib=.html)) $(datafiles)
        $(PYTHON) $(step-bindir)/ls-latex.py --package=$(topdir) --title 'LaTeX documents about LilyPond' \
diff --git a/Documentation/tex/glossary.yo b/Documentation/tex/glossary.yo
new file mode 100644 (file)
index 0000000..803c51c
--- /dev/null
@@ -0,0 +1,94 @@
+
+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>)
+
+latexpackage()(a4wide)
+latexlayoutcmds(
+%\usepackage[latin1]{inputenc}
+\input mudela-book
+)
+
+whenlatex(notableofcontents())
+whentexinfo(notableofcontents())
+
+article(Glossary of notation terms)
+      (Han-Wen Nienhuys and Jan Nieuwenhuizen)
+      (nop()PIPETHROUGH(date "+%B %d, %Y")()()nop())
+
+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{vocabulary}
+    }
+))
+
+whenhtml(
+    includeverbatim(DOEXPAND(outdir)/vocabulary.html)
+)
+
+whenlatex(latexcommand(
+    \bibliographystyle{plain}
+    \bibliography{engraving}
+))
+
+
+COMMENT(The bib stuff is somewhere else on the WWW site)
+COMMENT(
+setchapterstring{}
+
+whenhtml{
+    nchapter{Bibliography}
+    includeverbatim{out-www/engraving.html}
+})
+
diff --git a/Documentation/tex/mudela.yo b/Documentation/tex/mudela.yo
deleted file mode 100644 (file)
index 87407df..0000000
+++ /dev/null
@@ -1,2676 +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>)
-
-latexpackage()(a4wide)
-latexlayoutcmds(
-%\usepackage[latin1]{inputenc}
-\input mudela-book
-)
-
-whenlatex(notableofcontents())
-whentexinfo(notableofcontents())
-
-report(Mudela, the Music-Definition Language)
-      (Han-Wen Nienhuys and Jan Nieuwenhuizen)
-      (nop()PIPETHROUGH(date "+%B %d, %Y")()()nop())
-
-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})
-)
-
-chapter(Tutorial)
-
-whenhtml(
-nsubsect(Disclaimer)
-This document is written in url(Yodl)(ftp://pcnov095.win.tue.nl/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().
-)
-
-sect(Introduction)
-label(tutorial:introduction)
-latexcommand(\parindent2pc)
-  
-If you are reading this, you probably are interested in printing
-music.  LilyPond is a program that can print music from a
-specification that you, the user, supply.  Using LilyPond may be a bit
-quaint in the beginning, because you have to give that specification
-using a em(language).  That might not be what you expect if you are
-familiar with graphical interfaces.  But there are some big
-advantages: first, once you master the language, entering music can be
-done quite efficiently.  Secondly, it is possible to explain exactly
-what the meaning of a language is, i.e., the semantics are much
-clearer.  Thirdly, since the program is not interactive, no tradeoffs
-have to be made between processing speed and beauty of the output.
-
-This chapter is a gentle introduction to Mudela, the language that
-instructs LilyPond to typeset music.  We will explain Mudela by
-presenting a series of examples of Mudela input.  The corresponding
-output will be shown on the right or below, just as it was produced by
-LilyPond.
-
-We will assume that you more or less understand the basics of music notation.  
-If you are not familiar with the English terms for music notation, you 
-should consult bind(Appendix)ref(glossary): it contains a glossary 
-of musical terms along with translations in some other languages.
-
-If you want to try the examples given here, you should have look a 
-look at bind(Section)ref(sec:running-lilypond) first.
-
-sect(Music copying, music definition and music entry)
-label(tutorial:copying-vs-def-vs-entry)
-
-If you have copied music before, using LilyPond may seem awkward
-to you in the beginning.  The purpose of LilyPond informally is
-explained by the term `music typesetter'.
-
-This may give the impression that the program is like a drawing tool
-and that it lets you control precisely how the music is formatted.
-This is not the case: not only does the program print musical symbols,
-LilyPond also tries to make esthetic decisions---to be precise, we
-programmed her to do what we find nop(pretty.)footnote(We formed our
-taste by looking at, and reading all about fine music engraving.  Of
-course, our taste is also bound by all the accepted rules of common
-music notation.)  You do not have complete control over what is
-happening.  Usually that is not a big loss, since good engraving is a
-very complex trade. In other words, you don't have control, so you do
-not have to worry about what is happening precisely.
-
-Secondly, we expect you to enter the meaning of the music, not the
-sheet music itself.  The input to LilyPond is a music definition,
-which is something different than notation: notation is a graphical
-system.  Put more concretely: your input to LilyPond should contain
-information like ``a dotted quarter note, pitch nop(d)sups(2).''
-LilyPond will figure out from the musical information that a black
-note head with a stem but without flag, fourth staff line, with dot
-should be printed.
-
-When you are copying music by hand from a printed score, you don't have 
-to know what the score means; you just copy the symbols.  With LilyPond 
-such a thing is not possible.  You have to enter the meaning of the 
-symbols, and this might not always be as easy.  On the other hand, once 
-entered, any piece of music can be played and transposed automatically.
-
-Finally, in some spots we will cheat a bit when it comes to musical
-definition.  Mudela has some entry modes that help to make typing
-Mudela pleasant.  For example, the phrase ``a dotted quarter note,
-pitch nop(d)sups(2)'' translates to the following longhand:
-verb(
-\musicalpitch { 1 2 0 } \duration { 2 1 })
-
-This data is what we consider the musical em(definition).  Mudela
-has a special entry mode where you can conveniently abbreviate this to
-`code(d''4.)'.  There are some features that also make the quotes and
-numbers in `code(d''4.)'  superfluous in some cases.
-
-For those who are curious, the numbers in `code(\musicalpitch { 1 2 0
-})' example mean octave, notename, and accidental respectively.  The
-numbers in `code(\duration { 2 1 })' are the (negative) logarithm of the
-duration (2 is a quarter note, 3 is an eighth note, etc.) and the number
-of augmention dots respectively.
-
-sect(When you know the notes to nop(print)ellipsis())
-
-The basic building block of music is the note.  You can have LilyPond
-print a note by specifying its pitch and duration.  The pitch of the
-central C is written as code(c').  This is in line with musicological
-notation; there this pitch is transcribed as nop(c)sups(1) or c'.  A
-quarter-note duration is written as code(4).  So, to print a quarter
-note whose pitch is central C, you enter the following:
-mudela(fragment,verbatim,center)( c'4 )
-
-
-subsect(Duration)
-
-The duration of a note is specified as a number: a whole note is
-denoted by 1, a half note by 2, a quarter by 4, and so on.  If you
-want to augment a duration with a dot, simply affix a period to the
-number.  Here are some random notes to show how it works.
-
-mudela(fragment,verbatim)(
-  c'1 c'2 c'4 c'8 c'16 c'32 c'64 c'64 c'2. c'8. c'16
-)
-
-subsect(Basic pitches)
-
-The pitch code(c') actually consists of two parts: one part for the
-note name, and one for the octave.  The letter specifies which note
-name to use: note names simply are the letters code(a) to code(g).
-The number of apostrophes specifies the octave to use: the central C
-is denoted by code(c').footnote(By convention, the A above central C
-at concert pitch is the tone that is used to tune instruments.  Its
-frequency is about 440 Hz.)  The C which is an eighth higher (the C in
-the ``two-line octave'') is denoted by code(c''): every octave adds a
-quote.  A note name without quotes designates the pitch below code(c')
-(the C in the ``small octave''). If you want to go down even further,
-commas should be added, e.g., the C in the ``contra octave'' is
-expressed as code(c,,).footnote(The comma is meant to represent a
-sunken apostrophe.)
-
-
-This example demonstrates octaves:
-mudela(fragment,verbatim,center)(
-   c,,4 c,4 c4 c'4 c''4 c'''4
-)
-
-And this example demonstrates notenames:
-mudela(center,fragment,verbatim)(
-  c'4 d'4 e'4 f'4 g'4 a'4 b'4 c''4
-)
-
-A rest can be entered as a note with the special name code(r), e.g.,
-mudela(fragment,verbatim,center)(r4)
-
-This already gives us enough material to make simple songs. In
-bind(Figure)ref(fig:twinkle1) a portion of the traditional song
-``Twinkle Twinkle Little Star'' is shown.
-
-latexcommand(\begin{figure}[h])
-  center(
-mudela(fragment,verbatim)(
-        c''4 c''4 g''4 g''4
-        a''4 a''4 g''2
-)
-    latexcommand(\caption{Twinkle twinkle little star (version 1)})
-    label(fig:twinkle1)
-  )
-latexcommand(\end{figure})
-
-
-subsect(Alterations)
-
-We have so far ignored chromatically altered pitches.  The names `a'
-to `g' for entering pitches are convenient: they are short,
-pronounceable and they resemble the words for pitches in normal
-musical vocabulary.
-
-Enter flats and sharps.  In English there is no standard terse word
-for C sharp or C flat.  For this reason, we implemented a different,
-non-English convention for entering altered pitches: a note is made
-sharp by adding the suffix `--is' to its name, and flat by adding the
-suffix `--es'.  For a double sharp another `--is' suffix is added, for
-flats another `--es' suffix. The names for the alterations of C are
-given in bind(Table)ref(notename-tab).
-
-latexcommand(\begin{table}[h])
-  center(
-    table(2)(ll)(
-      row(cell(english)cell(LilyPond))
-      rowline()
-      row(cell(c double flat)cell(ceses))
-      row(cell(c flat)cell(ces))
-      row(cell(c natural)cell(c))
-      row(cell(c sharp)cell(cis))
-      row(cell(c double sharp)cell(cisis))
-    )
-  )
-  latexcommand(\caption{Default note names})
-  label(notename-tab)
-latexcommand(\end{table})
-
-Variations on this convention are used in a number of germanic
-languages, notably Dutch, German, Swedish, and Norwegian.  To be
-precise, LilyPond actually defaults to Dutch notenames, with
-code(aes), code(aeses), code(ees) and code(eeses) added for
-consistency.
-
-Throughout this document we will continue to use the Dutch names.  To make
-(Dutch) pronunciation easier, the a-flat and e-flat are contracted to
-code(as) and code(es).  Similarly, the a double flat and e double flat are
-contracted to code(ases) and code(eses).
-
-If you are not comfortable with these names, you can make your own.
-Note names for different languages are included with the example
-initialisation files, amongst others English (C sharp is abbreviated
-to code(cs)), Italian, Swedish and Norwegian.  If you want to use
-these names, you should look at bind(Section)ref(subsect:include) for
-information on how to use include files.
-
-sect(Running LilyPond)
-label(sec:running-lilypond)
-
-In the previous section some basic elements of Mudela were presented.
-We didn't want to bore you too much with repetitive details, so we
-left out some red tape that's needed for a  of Mudela in a form that is accepted
-by LilyPond.  To
-be precise, we wrote code(X Y Z), when we really meant
-verb(\score {
-   \melodic { X Y Z }
-   \paper {}
-})
-We will continue to leave out the red tape this, until the time is fit to explain what the
-above it means.
-
-
-Because LilyPond uses a language, it  is a so called em(batch)
-program.
-This means, that you use a
-text editor (such as code(emacs) or code(vi)) to create an input
-file.  When you are done editing your input file, you save it, and you
-run LilyPond on the file.  If Lily finds any errors in your input file
-then nop(she)footnote(We're sure that if computer programs could have
-  gender, LilyPond would be a female computer program.  So we will
-  refer to the program as a she. This gender-bending is not to tease
-  you, dear reader.  We do it in real life as well. In the past two
-  years LilyPond has become sort of a baby daughter to us, keeping us
-  awake at night, but also providing us with lots of joy.  We hope you do
-  not mind our little aberration from the traditions of computer-manual
-  writing.) COMMENT( 
- The name LilyPond is actually sort of a girl's name.  Can you guess which
- one ?)
-will complain.  If everything went well, then she'll generate a file, that
-you can process further to view or print.
-
-Using LilyPond to print or view some music is a four-step procedure.
-To get you started we'll run down the full procedure for you once.
-
-enumerate(
-it()
-Fire up your favourite editor (if you don't
-know any editors, try code(joe silly.ly)),
-and key in the example from bind(Figure)ref(fig:twinkle1), with red tape:
-verb(
-\score {
-        \melodic {
-          c''4 c''4 g''4 g''4
-          a''4 a''4 g''2
-        }
-        \paper {}
-}
-)
-
-Save your file as file(twinkle.ly).footnote(The default extension for Mudela
-files is file(.ly).)
-
-it()
-Run LilyPond on your newly created file: enter code(lilypond twinkle).
-LilyPond will then print all kinds of mumbo jumbo that can safely be
-ignored.  You might see something like this:
-verb(
-GNU LilyPond 0.1.55/FlowerLib 1.1.39
-Parsing ... [/home/hanwen/musix/spacer/init/lily-init.ly[/home/hanwen/
-
-        ... stuff left out here ...
-
-                              ]  Documentation/twinkle.ly]
-Interpreting music ...[1] (time: 0.04 seconds)
-Preprocessing elements... 
-Calculating column positions ... [2]
-Approximated: 1 lines, (with an average of 4.0 columns)
-Time: 0.01 seconds
-warning: Can not solve this casting problem exactly; revert to Word_wrap
-[2]Time: 0.00 seconds
-
-Postprocessing elements...
-TeX output to twinkle.tex ...
-)
-
-All has gone well; there were some warnings but no errors.  The run
-resulted in output, a TeX file called file(twinkle.tex).
-
-file(TeX) is usually spelled TeX().  It is a batch program for
-typesetting text. It was developed by the great programmer and
-scientist Donald Knuth to typeset his famous bookseries em(The Art of
-Computer Programming).  As you can see, TeX() can be adapted to do a
-lot more.  whenlatex(In fact, the document that you are reading now was also
-produced with TeX().) COMMENT(ugh.)
-
-
-it()
-  To do something useful with the output you have to run TeX() on it
-  first.  Run the command code(tex twinkle).  The output should resemble this:
-verb(
-This is TeX, Version 3.14159 (C version 6.1)
-(twinkle.tex
-Babel <v3.6h> and hyphenation patterns for american, dutch, loaded.
-(/home/hanwen/lib/texmf/tex/lilypond/lilyponddefs.tex
-(/home/hanwen/lib/texmf/tex/lilypond/dyndefs.tex)
-(/home/hanwen/lib/texmf/tex/lilypond/fetdefs.tex
-(/home/hanwen/lib/texmf/tex/lilypond/feta20.tex)
-(/home/hanwen/lib/texmf/tex/lilypond/lily-ps-defs.tex))) [1] )
-Output written on twinkle.dvi (1 page, 3084 bytes).
-Transcript written on twinkle.log.
-)
-  The human translation is ``everything went OK, the result is one
-  page long, and I put it in file(twinkle.dvi).''
-
-it()The file(twinkle.dvi) file is a description of how a piece of
-text looks when it is printed.  You can view it, or print it.  If you
-are using a Unix system equipped with X-Windows, then you can issue
-the command file(xdvi twinkle) to view the result.  If this is not the
-case, consult your local TeX() guru on printing and viewing DVI files.
-What is in your window should approximately look like this:
-mudela()(
-\score {
-        \melodic {
-          c''4 c''4 g''4 g''4
-          a''4 a''4 g''2
-        }
-        \paper { linewidth = 13.\cm; }
-}
-)
-
-it()
-If you want to print file(twinkle.dvi), you should invoke the command
-code(dvips twinkle).  Running this command should generate a
-PostScript file called file(twinkle.ps).  This file can be printed on
-any PostScript compatible printer.  You should not use any other
-tools: the output from LilyPond contains fragments of PostScript which
-will not print correctly if you don't use PostScript.  If your printer
-doesn't understand PostScript, you should check out GhostScript, a
-PostScript emulator.
-)
-
-
-
-The four-pass procedure sketched above is a bit clumsy.  Moreover, the
-result is pretty crude: the page does not include prettily printed
-titles and if you are unlucky, the margins don't come out well.  Jan
-Arne Fagertun wrote a tool to take the above steps out of your hands,
-make neat margins and print titling.  The tool is called file(ly2dvi),
-and it should be on your system if you use Lily on a Unix platform.
-If you use file(ly2dvi), then you can do verb(ly2dvi twinkle.ly ) in
-stead of steps 2 and 3.  You will feel the real advantage of using
-file(ly2dvi) when you add titling to the music.  This is something
-that we will discuss in bind(Section)ref(tutorial:titling).
-
-
-COMMENT(This document does not cover all of Mudela.  Due to technical details,
-the precise working of Mudela is coupled to the innards of LilyPond.
-If you really want to know all the details, your best bet would be to
-get the sources to LilyPond and read the parser and scanner source.
-They are in file(lilypond-x.y.z/lily/parser.yy) and
-file(lilypond-x.y.z/lily/lexer.ll).)
-
-
-
-sect(Chords)
-
-Up till now we have only considered music that was rather simple.  All
-the music had notes going in one direction, from left to right, one
-note following the other.  You might be wondering if this is all Lily
-can do, or whether it is possible to stack notes as well (creating
-em(chords)).  Rest assured: we designed LilyPond while keeping in mind
-that she must be able to handle any notation construct that can be
-expressed conveniently.  Of course we did not leave out chords.
-
-In Mudela you can form a chord of several notes by enclosing them in
-pointed parentheses, bind(i.e.)bind(langle())bind(and)rangle().  ASCII
-doesn't really have these delimiters, so Mudela uses the larger-than
-(code(>)) and smaller-than (code(<)) signs instead.  For example, a
-D-major nop(chord)footnote(Recall what was said in the previous
-section about flats and sharps: the word code(fis) means an f sharp.)
-can be described by the following fragment:
-mudela(fragment,verbatim,center)(
-  <d'8  fis'8 a'8 d''8>
-)
-
-  Chords can be entered in the music in the same places that notes
-can.  As an example we give a snippet of ``Twinkle Twinkle Little
-Star'' in chords.  The chords may seem, slightly unconventional, but they
-only serve to show how chords work.  We've aligned the chords
-in the input on their starting beat just to help you reading it.
-This layout does not influence the typesetting result in any way.
-
-mudela(verbatim, fragment)(
-  c''4             c''4              <c''4 g''4>       <c''4 e''4 g''4>
-  <c''4 e''4 a''4> <b'4 d''4 a''4>   <b'2 d''2 g''2>
-  <a'4 d''4 f''4>  <bes'4 d''4 f''4> <bes'4 c''4 e''4> <g'4 c''4 e''4>
-  <e'4 a'4 d''4>   <a4 g'4 cis''4>   <d'2 f'2 d''2>
-)
-
-
-
-sect(Shortcuts for duration)
-
-If you typed the last example into a Mudela file, you will have
-noticed that the input has lots of repetitions.  You will probably
-have made some errors with the right durations and number of
-octavation quotes.
-To save keystrokes and prevent errors Mudela
-has some handy shortcuts.  The simplest is the shortcut for
-durations.  You don't have to type the duration if it
-is the same as the last duration entered.  This saves a considerable
-number of keystrokes, and thus reduces the potential for errors.  The
-previous example can be reduced to verb(
-  c''4          c''            <c'' g''>        <c'' e'' g''>
-  <c'' e'' a''> <b' d'' a''>   <b'2 d'' g''>
-  <a'4 d'' f''> <bes' d'' f''> <bes' c'' e''> <g' c'' e''>
-  <e' a' d''>   <a g' cis''>   <d'2 f' d''>
-)
-
-
-If you entered this, you probably made some little errors with the
-right amount of quotes as well.  To remedy this, mudela has another
-feature called `relative octaves', which reduces the amount of quotes
-needed.  If you want to enter large pieces of music em(now) we
-recommend you make an excursion to
-bind(Section)ref(sec:relativeoctaves) and learn about relative
-octaves.
-
-
-
-sect(Comments)
-
-If you want to make some private notes about the Mudela code that you
-entered, you can do so by inserting comments into your file.  The
-contents of these comments are ignored by LilyPond.  Mudela has two  comment
-styles: line comments and block comments.  The line comment
-is introduced by the percent sign:
-verb(
-  c''4
-  c''4   % shouldn't this be a different pitch?
-)
-
-Block comments are enclosed in code(%{) and code(%}).
-
-verb(
-  c''4
-       %{
-       Ludwig van Bavaria's  original manuscript has an fffff dynamic sign.  
-       Clearly one can see the onset of paranoid schizophrenia in the
-       composer from these subtle nuances in his writings.
-       %}
-  c''4 
-)
-
-
-sect(Adding nuances: articulation and dynamics)
-
-Having just chords and notes does not give you real music.  Real music
-has more liveliness to it: music can have articulation, dynamics
-(louder and softer), etc.  This liveliness has notation, so LilyPond
-can print it.  We'll start out by explaining how to obtain the
-smallest grains of nuance: the articulation of a single note.  Articulation
-is entered by writing a dash and the name of the desired articulation
-mark.  You have to add a backslash in front of the name to distinguish
-it from the name of a note.  mudela(fragment,verbatim)(
-  c''4-\staccato
-  c''4-\tenuto )
-
-Typing a lot of staccato notes in this syntax will get tedious very
-quickly.  Therefore, Mudela has some handy abbreviations for
-articulation marks such as staccato and tenuto.  They are shown in the
-following example:
-
-mudela()(
-\score{ \melodic {
-       \property Voice.textstyle = typewriter
-        c''4-._"c''4-." s4
-        c''4--_"c''4--"  s4
-        c''4-+_"c''4-+" s4
-        c''4-|_"c''4-|" s4
-        c''4->_"c''4->"  s4
-        c''4-^_"c''4-\\^{ }"  s4 }
-       \paper { linewidth = 12.\cm; }})
-
-
-COMMENT(For a full list of supported articulation instructions, refer to the
-chapter on features, bind(Chapter)ref(features).)
-
-Text and digits for fingering can be entered in the same manner: add a
-dash and the text or digit to be printed:
-mudela(fragment,verbatim)(
-  c''4-1 g''4-5 c''-"Sul tasto" )
-Currently, the meaning of the
-syntax `note-dash-digit/articulation/text' is just ``add a superscript to this
-note.''  This is not in line with our goal to em(define) music with
-Mudela.  We hope that this will be fixed in a future version of the
-language.  In the meantime you can abuse this: the super- and
-subscripts can be forced into up or down position respectively by entering an
-a caret (code(^)) or an underscore, code(_) instead of the dash:
-mudela(fragment,verbatim,center)(
-  c'4-^ c'4^^ c'''4-^ c'''4_^
-)
-
-Dynamic markings are another way to add a nuance to a note.  They are
-entered by adding the name for the dynamic sign after the note.  You
-should not enter a dash between the name and the note.footnote(This
-  is inconsistent.  We hope that this will be fixed in a later
-  version of the language.)
-mudela(verbatim,fragment)(
-  c4 \ff c4 \fp c4 c4 \ppp c4 c4 \sfz
-)
-COMMENT(UGH)
-
-sect(Bridging the notes: beams, slurs and ties)
-
-Up till now most of the typesetting concerned simple fixed symbols
-only.  Now we turn to variable symbols: symbols that run from one note
-to another. In LilyPond terminology, such a symbol is called a
-em(spanner).  To print a spanner, you have to attach a marker to the
-note that begins it and to the one that ends it.
-
-
-The first example of such a symbol is the slur.  For the slur, the
-start marker is the opening parenthesis. It won't be a surprise that
-the stopping marker is the closing parenthesis.
-For example:
-mudela(fragment,center,verbatim)( c'4( )c'4 )
-
-otice that the parentheses should be between the notes.footnote(The
-location of the parentheses might be changed in a future version of
-the language.)
-
-It is your job to make sure that each slur that you start also ends.
-If it doesn't end, then Bad Things are likely to happen.  The slur is
-quite flexible: you can nest nop(slurs,)footnote(This is inconsistent when
-compared to the syntax for articulation hints.  This will probably be
-fixed soon.) and you can connect a note with a slur on both the left and the
-right side:
-
-mudela(fragment,verbatim,center)(
-  c'4((   )c''4 )c'4( )g'4 
-)
-
-Another spanner is the beam (see bind(Figure)ref(mud:beam)).  It
-indicates the duration of the connected notes, and thus it acts like an
-extended version of the flag.  Secondly, the pattern of
-left/right-pointing beams hints at the metric structure of the
-measure.
-
-
-latexcommand(\begin{figure}[h])
-  center(
-    mudela(fragment)([c'8 c'8] [c'16 c'16 c'16 c'16] [c'16. c'32 c'32 c'16.] )
-    latexcommand(\caption{Some beams})
-    label(mud:beam)
-  )
-latexcommand(\end{figure})
-
-
-Strictly speaking, a beam is not a musical concept.  The pattern of a
-beam can be derived from the structure of the time signature and the durations
-of the notes. It is merely a device that helps you understand the
-rhythms notated. Unfortunately, LilyPond is not smart enough to insert
-beams into your music on her own. You will have to instruct her by
-marking the starting and stopping point of the beam with `code([)' and
-`code(])' respectively, e.g.
-
-mudela(fragment,verbatim,center)(
-  [g'8 g'8]
-)
-
-LilyPond has code that guesses what the pattern should look like, so
-that you don't have to specify the beaming for complicated
-patterns.footnote(Unfortunately the algorithm used is not foolproof yet:
-  code([c8. c32 c32]) will produce incorrect results.)
-
-Again, it is your responsibility to make sure that you end every beam
-that you start.
-
-A third spanner is similar to the slur: the tie.  The tie looks like a
-slur, but a slur connects whole chords, whereas the tie connects
-note heads.  Tied notes should be played as one long note.
-In analogy with TeX()'s tie (which  ties together words with a
-space), LilyPond's tie is entered as a tilde, ~.  
-mudela(verbatim,center,fragment)(c''1 ~ c''4)
-
-The input convention for the tilde is somewhat peculiar when used in
-conjunction with chords.  Internally, the extra information that is
-represented by the tilde has to be attached to a note (or to a rest,
-for that matter).  For this reason, you can't put the tilde between
-two chords (as in code( <c' g'> ~ <c' g'>)).  The tilde sign must be
-directly after a note of the chords.  It does not matter which
-one. The following example demonstrates this:
-mudela(fragment,verbatim,center)(
-  <c'1 ~  g' es''> <c'4 g' es''> 
-)
-
-sect(Commands)
-label(sec:commands)
-
-Up till now, we only printed notes, and correspondingly only entered
-notes. But notation contains many other constructs, constructs that
-help you with reading those notes.  Examples of such constructs are
-clefs, time signatures, keys etc.
-
-If you look carefully at the example in
-bind(Figure)ref(fig:twinkle1), you will notice that the output
-includes some bar lines and clefs, and that there are no references to
-those in the input.  They were generated automatically.
-
-Not all such hints can be inserted automatically, and you can also
-override some of the settings.  This can be done by inserting various
-commands between the music.  The general form of these commands is
-center(
-  em(keyword) sc(arguments)
-)
-
-em(keyword)s are words that have a special meaning to the parser of
-Mudela.  Because the parser must be able to distinguish the keywords
-from note names, they have to be preceded by a so-called escape
-character, the backslash, `code(\)'.  To separate the arguments from
-any notes that might follow the arguments, you have to end your
-command with a semicolon.  An added benefit of this construction is
-that the commands stand out between your notes, because of the
-backslashes.
-
-So the general form actually is `code(\keyword argument argument ... ;)'
-Let us review these commands:
-
-description(
-dit(code(\clef) var(clefname)) This command sets the current clef for notation,
-  i.e., a clef symbol is printed and the notes following this command
-  are shifted vertically.  The argument is a string, the name of the
-  new clef. The default clef is the treble clef.
-  mudela(fragment,verbatim)(
-    \clef "bass"; c'4
-    \clef "treble"; c'4
-    \clef "alto"; c'4    
-  )
-dit(code(\key) var(pitch)) This command changes the current key signature.  The
-  key signature is printed at the start of every line.  The argument
-  is the name of the corresponding major key.  The key of C-minor can 
-  thus be specified as `code(\key es)'.
-  
-dit(code(\accidentals) var(pitchlist))
-
-This command changes the current key signature.  The signature is
-given in the form of a list of accidentals, which can be useful for
-unconventional keys.  The key of C-minor can be specified as
-`code(\accidentals bes es as)'.   The command `code(\accidentals fis es
-bis)' provides a more exotic example.
-
-
-dit(code(\time) var(numerator)code(/)var(denominator))
-  This command chages the current time signature.  LilyPond uses the
-  time signature to
-  calculate where to place the bars that start a measure.  These bars
-  in turn are the places where a system can be broken into lines.
-
-  The default value for this time signature is common time (4/4).  You
-  can also tell this from the  Twinkle ``Twinkle Little
-Star'' example in bind(Figure)ref(fig:twinkle1).  This
-song actually has a 2/4 time signature, so a metrically more correct
-  version  would start with as follows:
-  mudela(fragment,center,verbatim)(
-    \time 2/4;  c'4 c'  g' g' 
-  )
-
-
-dit(code(\cadenza) var(togglevalue)) When typesetting music without a
-regular meter (such as an ad libitum cadenza), no bar lines should be
-printed.  In LilyPond you can achieve this by issuing the command
-`code(\cadenza 1)': it turns off the automatically
-generated bar lines.
-
-You switch them on again with `code(\cadenza 0)', and then a bar line
-is printed.  LilyPond will act as if you are again at the start of a
-measure.
-
-dit(code(\bar) var(bartype))
-  This command lets you print special bar lines, such as repeats.  You
-  can also use it to allow line breaks when entering cadenzas.  The
-  argument var(bartype) is a string that describes what kind of bar line to print.
-
-mudela(fragment,verbatim)(
-    \bar "|:"; c'4 \bar ":|:";    c'4  \bar ":|";  c'4 \bar "||";
-    c'4 \bar "empty"; c'4 \bar "|.";
-)
-  The command `code(\bar "empty")' does not create any visible bar
-    line, but it does  tells LilyPond to allow a linebreak
-  at that position.
-  
-dit(code(\partial) var(duration)) some music starts with a measure that
-isn't fully filled, a so-called upstep.  The code(\partial) command
-allows you to make
-upsteps. The argument is a duration similar to the duration of a note.
-Example:
-  mudela(fragment,verbatim)(
-    \time 4/4;
-    \partial 4;
-    [d'8 dis'] e' c''4 e'8 c''4 
-  )
-
-  dit(code(\grouping) var(durationslist)) sets the metric structure of the measure.
-    Its effect can best be shown by an example:
-    mudela(fragment,verbatim)(
-        \time 5/16;
-        \grouping 16*3 16*2;
-        [c'8 c'16 c'8]
-        \grouping 16*2 16*3;
-        [c'8 c'16 c'8]
-        \grouping 16*5 ;
-        [c'8 c'16 c'8]
-    )
-
-In practice, you won't be needing this command very often: the
-grouping is switched automatically when you issue a code(\time)
-command.  It is set to a combination of groups
-of 2 and 3 beats, with as many groups of
-3 as possible (in other words: 4/4 is divided in two times two beats
-(2+2), 8/8 in 3+3+2)
-)
-
-The commands that are described above aren't really music, but they
-can be used in the same places as notes.  This makes the grammar of the
-language simpler.  It is possible to put a command into a chord.
-For example, the following two snippets of Mudela produce identical output.
-verb(
-  <c4 e g \time 2/4;>
-  \time 2/4; <c4 e g>
-)
-
-
-
-sect(Complex music: more than one staff)
-label(tutorial:more-staffs)
-
-
-Now we explain how to typeset music that runs in multiple staffs.
-Consider the following---somewhat unrealistic---example:
-
-mudela(fragment)(
- \type GrandStaff <e'4 {\clef bass; g4^""} >
-)
-
-  The music consists of two notes.  Perhaps this is sheet music for a
-piano player, and one note is meant to be played with the left hand,
-and the other with the right hand.  That music would sound the same if
-it were written as a single chord on a single staff, i.e.,
-mudela(fragment)(
-  <g4 e'4>
-)
-
-
-This is another example where we can see that there can be a difference
-between a musical idea, and the way it is expressed in notation.
-
-The Mudela construct for multiple staffs reflects the similarity
-between the two examples: to get multiple staffs in Mudela you enter a
-chord, with an additional instruction to tell LilyPond that the chord
-does not represent notes stacked together, but staffs stacked
-together.
-
-If a piece of music is to be interpreted as a staff, then this can be
-expressed with the code(\type) construct.  The following input says
-``the quarter note with pitch e should be put on a staff.''
-
-verb(
-  \type Staff e'4 
-)
-
-The same can be done for the other note, i.e.,
-
-verb(
-  \type Staff g4 
-)
-
-If you want to stack these staffs, you must create a chord of both:
-
-verb(
-  < \type Staff e'4
-    \type Staff g4 
-  >
-)
-
-This looks reasonable, but the effect of this input is not what you
-might expect (try it!).  When interpreting this chord LilyPond will
-start with the first entry.  She'll look for a (nameless) staff.  Such a
-staff is not found, so it is created.  On this staff the code(e) note
-is put.  When the second code(\type) entry is read, LilyPond will
-start looking for a nameless staff.   The  staff that contains  the
-code(e) is found, and the code(g) is put there as well.
-
-The correct solution is to label both code(\type) constructs with
-different names, for example code(trebleStaff) and code(bassStaff).
-This makes LilyPond distinguish between them, and create two staffs:
-
-mudela(verbatim,fragment)(
-  < \type Staff = trebleStaff e'4
-    \type Staff = bassStaff  g4 
-  >
-)
-
-The names that you choose do not matter just as long as they are
-different.  This is almost right, except for the brace at the left and
-the clef of the second staff.  The bass clef will be taken care of in
-the next chapter. If you want a brace, then you have to tell LilyPond
-that the chord you just formed is to be interpreted as a so-called
-grand staff.  This is also done with the code(\type) command.
-mudela(verbatim,fragment)(
-  \type GrandStaff <
-     \type Staff = treblestaff  e'4 
-     \type Staff = bassstaff  g4 
-  >
-)
-
-sect(Appending instead of stacking: sequential music)
-label(tutorial:voice)
-
-The previous section dealt with a pretty hypothetical situation: sheet
-music with two staffs and each staff containing only one single note.
-In real-life situations staffs contain more than one note.  They
-contain music that has to be played in sequence.  A staff can contain
-a em(voice).  We haven't learned  how to make a voice yet: we need a
-new construct to express this notion of `voice'.
-
-The construct is called em(sequential) music.  A list of musical
-objects (e.g., notes, chords or commands) can be made into sequential
-music by enclosing the list in braces; for example:
-
-mudela(fragment,verbatim,center)(
-  { c'4 c'4 }
-)
-mudela(fragment,verbatim,center)(
-  { <c'4 e'> <e' g'> }
-)
-
-
-We could have called this construct more colloquially `voice', but
-this would cause confusion later on, when a second kind of voice
-enters the scene.  Similar confusion might arise from the word
-`chord', therefore from now on, we will talk about `simultaneous
-music', when we refer to items enclosed in < and >.
-
-
-The notion of a em(new) construct needs some explanation: we have been
-using sequential music all the time, except that it was hidden in the
-red tape in bind(Section)ref(tutorial:introduction).
-
-
-
-If we want to put whole voices onto a staff, then we have to
-substitute sequential music for the single notes in the example from
-the previous section.  A code(\clef) command in the second piece of
-sequential
-music  will also set the clef in
-the bass staff.
-mudela(fragment,verbatim)(
-    \type GrandStaff <
-     \type Staff = treblestaff  { e'4 f'}
-     \type Staff = bassstaff  {\clef "bass"; g a }
-  >
-)
-
-COMMENT(You can nest simultaneous music and chords in any way you want.  If
-you are interested in the entire story, you should consult
-bind(Chapter)ref(chap:features), which has a grammar in
-bind(Section)ref(sec:grammar).)
-
-sect(Notation context)
-
-This section is about translation contexts, a topic of LilyPond that
-is somewhat advanced.  You don't have to understand this to use
-LilyPond to print simple music.  If you don't want to typeset fancy
-polyphonic music or tweak the LilyPond notation engine, you can skip
-the next two sections.
-
-In bind(Section)ref(tutorial:more-staffs) it was explained, that there
-are more ways to notate a simple chord: as a single voice on a single
-staff or in multiple staffs (and we'll soon see, that you can typeset
-it as multiple voices on a  staff).  Obviously the concept of staff is not
-really something musical.  But what is it then?
-
-
-The most simplistic explanation is: a staff is a peculiarity of the
-notation system.  In other words, a staff is a graphic device, a
-special picture of five lines on which one can print note heads.  To
-avoid confusion, we will call this view on the concept of staff
-`staff symbol' from now on.
-
-
-There is more to it than meets the eye and mind.  A staff
-contains---besides a staff symbol--- some more components:
-itemize(
-it()A staff can a have a key signature (printed at the left)
-it()A staff has bar lines
-it()A staff has a clef (printed at the left)
-)
-To explain what a staff really is,   we'll try to print music without
-these components.  If these components aren't printed, it is still
-possible to print music:
-mudela()(\score{
-\melodic \relative c' {  \time 2/4; g'4 c,4 a'4 f4 e c d2 }
-\paper { 
-  linewidth = -1.;
-  Staff = \translator {
-    \type "Line_group_engraver_group";
-
-    defaultclef = violin;
-
-    \consists "Timing_engraver";
-    \consists "Separating_line_group_engraver";
-
-    \accepts "Voice";
-  }
- }
-})
-
-As you can see, one can still make out the general form of the melody
-and the rhythm that is to be played, but the notation is difficult to
-read and the musical information is not complete.  The stress pattern
-in the notes can't be deduced from this output.  For this, we need a
-time signature:
-
-mudela()(
-\score {
-  \melodic \relative c' {  \time 2/4; g'4 c,4 a'4 f4 e c d2 }
-  \paper{
-  linewidth = -1.;
-    Staff = \translator {
-    \type "Line_group_engraver_group";
-    defaultclef = violin;
-    \consists "Time_signature_engraver";
-    \consists "Separating_line_group_engraver";
-    \accepts "Voice";
-  }
- }
-})
-
-Technically speaking you know where the strong and weak beats are, but
-it is difficult to find them quickly.   Bar lines  help you in finding
-the location within the measure of the notes:
-mudela()(
-\score {
-  \melodic \relative c' {  \time 2/4; g'4 c,4 a'4 f4 e c d2 }
-  \paper{
-  linewidth = -1.;
-    Staff = \translator {
-    \type "Line_group_engraver_group";
-    defaultclef = violin;
-    \consists "Bar_engraver";
-    \consists "Time_signature_engraver";
-    \consists "Separating_line_group_engraver";
-    \accepts "Voice";
-  }
- }
-})
-
-We can remedy part of the difficulties with reading pitches by adding a staff
-symbol:
-
-mudela()(\score{
-  \melodic\relative c' { \time 2/4; g'4 c,4
-a'4 f4 e c d2 } \paper {
-  linewidth = -1.;
-  Staff = \translator {
-    \type "Line_group_engraver_group";
-
-    defaultclef = violin;
-    \consists "Bar_engraver";
-    \consists "Time_signature_engraver";
-    \consists "Staff_sym_engraver";
-    \consists "Separating_line_group_engraver";
-
-    \accepts "Voice";
-  }
- }
-})
-
-This makes the output decidedly easier to read, but you still don't
-know what the pitches of the notes above are.  So this is still not
-enough.  But suppose you see the following notation:
-mudela()(\score {
-  \melodic \relative c' {\clef alto;  \time 2/4; g'4 c,4 a'4 f4 e c d2 }
-\paper {
-  linewidth = -1.;
-  Staff = \translator {
-    \type "Line_group_engraver_group";
-
-     defaultclef = violin;
-    \consists "Bar_engraver";
-    \consists "Time_signature_engraver";
-     \consists "Clef_engraver";
-     \consists "Staff_sym_engraver";
-     \consists "Timing_engraver";
-     \consists "Separating_line_group_engraver";
-
-    \accepts "Voice";
-  }
- }
-})
-
-Now you know the pitch of the notes: you look at the start of the line
-and see a clef, with this clef, you can determine the notated pitches.
-You have found the em(context) in which the notation is to be
-interpreted!
-
-So the context determines the relationship between a piece of music
-and its notation: you, the reader, use context to deduce music from
-notation.  Because LilyPond is a notation ``writer'' instead of a
-reader, context works the other way around for Lily: with context a
-piece of music can be converted to notation.
-The components of a staff form context, and context is needed to read
-and write notation.  This motivates the following definition.
-
-quote(
-A bf(notation context) is  a conversion from music to notation.
-)
-
-The example focused mainly on on staffs, but a staff is not the only
-type of notation context.  Notation contexts may be nested: you can
-print polyphonic music by putting multiple `Voice' contexts in one
-`Staff' context.  The arguments of the code(\type) command (Staff,
-GrandStaff) were in fact all names of different contexts.
-The notions of ``current clef'' and ``current position within the
-measure'' are all properties of notation contexts.  Commands like
-code(\clef) and code(\cadenza) change these properties.  
-
-
-The following is a list of the contexts that are supported by
-LilyPond:
-description(
-
-dit(Voice) The code(Voice) context is a context that corresponds to a
-  voice on a staff.  This context handles the conversion of noteheads,
-  dynamic signs, stems, beams, super- and subscripts, slurs, ties and rests
-
-dit(Staff) The code(Staff) context handles clefs, bar lines, keys,
-  accidentals.  A code(Staff) context can contain multiple code(Voice)
-  contexts.
-
-dit(RhythmicStaff) The code(RhythmicStaff) context is like the staff,
-  but much simpler: the notes are printed on one line, and pitches are
-  ignored.  code(RhythmicStaff) can contain code(Voice) contexts.
-
-dit(GrandStaff) A code(GrandStaff) context contains code(Staff)
-  contexts, and it adds a brace to the output at the
-  nop(left.)footnote(This is a major deficiency in the current
-  implementation.    Currently stems,
-  slurs and beams cannot be printed across two staffs.
-In reality, a grand staff is  a hybrid of one big staff and two stacked staffs.)
-  
-  A code(GrandStaff) context can contain multiple
-  code(Staff)s. Typically, it will contain two code(Staff)s, one
-  treble staff, and one bass staff. The bar lines of the contained
-  staffs are connected vertically.
-
-dit(StaffGroup) A code(StaffGroup) context contains code(Staff) or
-  code(Lyrics) contexts, and prints a bracket at the left.  The bar
-  lines in the participating staffs are connected.
-
-dit(Lyrics) As its name suggests, The code(Lyrics) context deals with
-  typesetting lyrics.  This topic will be covered in
-  bind(Section)ref(tutorial:lyrics).
-  
-dit(Score) The code(Score) context is the toplevel context: no context can
-  contain a code(Score) context.  The code(Score) 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.
-  
-  The code(Score) can contain code(Staff), code(StaffGroup), code(Lyrics), code(GrandStaff) and
-  code(RhythmicStaff) contexts.
-
-COMMENT(do ChoireStaff)
-)
-
-
-  Later on, in bind(Section)ref(tutorial:engravers) we will
-explain how you can create your own contexts.
-
-If you are familiar with structured documents (like HTML, SGML or
-LaTeX()), you might see the analogy of a context with a stylesheet: a
-stylesheet is neither presentation nor information, but rather a
-recipe em(how) a specific piece of information should be presented.
-Analogously, a notation context is neither music nor notation, but the
-conversion between the two.  The big difference with text is that in
-music notation the elements provided by context are essential to
-understanding what is notated.
-
-
-
-sect(Polyphonic music (or: Notation context properties))
-
-In the last section we explained that a notation context can have
-properties that influence the conversion from music to notation.  A
-simple example of such a property is the clef: the type of clef partially
-determines the vertical position of note heads in a staff.  Some of
-these properties can be modified by commands such as code(\clef) and
-code(\time).   But there is more:  notation contexts  also have
-properties are settable in a generic fashion.  We will demonstrate
-this feature by printing multiple voices on a staff.
-
-In polyphonic (keyboard) music and orchestral scores often more than
-one voice is printed on one staff.  We'll explain how to achieve this
-effect with LilyPond.  The effect is not unlike the two stacked staffs
-from bind(Section)ref(tutorial:more-staffs), except that we don't want
-to stack staffs but voices.  Thus,  the general template is the following:
-verb(
-  \type Staff <
-    \type Voice = one  ...
-    \type Voice = two  ...
-  >
-)
-
-On the ellipsis there should be music going from left to right, in
-otherr words, there should be sequential music, notes enclosed in
-braces.  Let us try the following simple melodies:
-
-mudela(fragment,verbatim)(
-\type "Staff" <
-  \type "Voice" = "one" { r4 as'4 () as'4 g'4 }
-  \type "Voice" = "two" { g'2 f'4 e'4 }
->)
-
-As you can see the result is not quite perfect.  The notes on the last
-two beats look like plain chords and not like separate voices.  What
-really happened was that the stems of the upper and lower voices were
-printed on top of each other.  If you have tried running this example, you will probably
-have noticed a complaint  about ``too many
-clashing notecolumns''  during the LilyPond run.
-This complaint refers to the overlapping stems.
-
-To remedy this, engravers traditionally make the stems of the upper
-and lower voice point in different directions: the stems of the lower
-voice point down, and the stems of the upper up, as shown in
-bind(Figure)ref(tutorial:multi-voice-fig).
-
-Surely the direction of a single stem is a property of the stem as a
-graphical object.  But the fact that all of the stems in a voice point
-in the same direction is not directly graphical.  Since this is a
-property shared by all the stems in the voice, it is logical to
-consider this property to be a property of the context code(Voice).
-And this is how it's done in LilyPond: the context code(Voice) has an
-attribute whose value is the direction to use
-for stems.  You can change it to `up'
-by issuing the following phrase:footnote(The name code(ydirection) is
-no mistake.  The property also controls the up/down directions of
-super-/subscripts, slurs, ties, etc.)
-
-verb(
-  \property "Voice"."ydirection" = "1"
-)
-
-This command should be read as ``change the property called
-code(ydirection) within the current code(Voice) context to the value
-code(-1).''  For the property code(ydirection) the value code(1) means
-`up', and code(-1) means `down'.   The proper way to code the
-polyphonic example is given in bind(Figure)ref(tutorial:multi-voice-fig).
-
-latexcommand(\begin{figure}[h])
-mudela(fragment,verbatim,center)(
-  \type "Staff" <
-    \type "Voice" =  "one"  {
-      \property Voice.ydirection = "1"
-      r4 as'4 () as'4 g'4 }
-    \type "Voice" =  "two"  {
-      \property Voice.ydirection = "-1"
-      g'2 f'4 e'4 }
-  >
-)
-    latexcommand(\caption{multiple voices})
-    label(tutorial:multi-voice-fig)
-latexcommand(\end{figure})
-
-Other properties can also be set, and they can be within different
-contexts.  In general, you can set a property by specifying
-code(\property) var(contexttype)code(.)var(propertyname) code(=)
-var(value).  Both var(ContextType), var(PropertyName) and var(Value)
-should be strings.
-
-The effect of a property is pretty much hardwired into the
-implementation (and thus subject to change), so we will not deal with
-all the possible properties in detail. Among other characteristics that
-can be set are the layout of slurs and beams.  The initialisation file
-file(property.ly) explains most properties.
-
-We conclude this section with another example of a context property.
-Polyphonic music that has three or four voices can't be printed by
-simply changing the directions of the stems for each voice, obviously.
-Traditionally, some chords are shifted horizontally to print if this many
-voices have to be printed.
-LilyPond can also do this, and the property that controls the
-horizontal shifting is called code(hshift).  The notes in a
-code(Voice) context that has code(hshift) set to a true value (i.e.,
-non-zero or non-empty), will be shifted horizontally in the case of a
-collision.  The following example demonstrates the effect.
-
-mudela(fragment,verbatim)(
-  \type "Staff" <
-    \type "Voice" =  "one"  {
-      \property Voice.ydirection = "1"
-      r4 as'4 () as'4 g'4 }
-    \type "Voice" =  "two"  {
-      \property Voice.ydirection = "1"
-      \property Voice.hshift = 1
-      g'2 f'4 e'4 }
-    \type "Voice" = "three" {
-      \property Voice.ydirection = "-1"
-      [d'8 dis'] [d' cis'] [c' b] c'4
-    }
-  >
-)
-
-sect(Lyrics)
-label(tutorial:lyrics)
-
-Now for something completely different: Lyrics.  Lyrics are also
-considered to be music, although a lyric by itself does not have any
-pitch.  Producing lyrics has two aspects. First, you have to enter the
-text, i.e., the syllables along with their durations.  
-After this, you have to specify how to convert these to graphics.
-
-Lyrics consist of syllables, which are strings together with
-durations.  Previously we only entered note names, so for entering
-lyrics we have to instruct LilyPond that what we enter are not note
-names but words---or rather: strings.  This instruction is the keyword
-code(\lyric).  After entering this keyword you can enter a musical
-construct---sequential music, simultaneous music, code(\type)
-entries, etc.--- but with syllables in stead of pitches.  For example:
-verb( \lyric { 'got8 me on my knees4, Le-8 lie! })
-
-The effect of code(\lyric) can be compared with the effect of the
-doublequote character, code("), for it also changes the lexical
-meaning of spaces and characters.  This mode is another example of a
-handy input feature of the language.
-
-Next comes the conversion to notation.  LilyPond can't (yet) figure
-out that lyrics need different treatment than notes.  As a result, the
-default conversion will try to put the text you entered as note heads
-onto a staff, and this will fail.  This default must be overriden with
-a code(\type) keyword.  Printing syllables of text in a line is done
-by a context called code(Lyrics).  You can select this context with
-the code(\type) keyword.  Here is a simple example:
-
-mudela(fragment,verbatim)(
-       \type Lyrics \lyric { 'got8 me on my knees,4 Le-8 lie! })
-
-The result is technically more or less correct, but without a melody it
-just doesn't work, so let's add a blob of cream:
-mudela(fragment,verbatim)(
-  <
-    \type Staff  { c''8. c''16 bes'8. a'16 g'4 f'8 g'4. }
-    \type Lyrics \lyric { 'got8. me16 on8. my16 knees,4 Le-8 lie!4. }
-  >
-)
-
-The strings that makes up each syllable in the lyrics block are passed
-along to TeX() verbatim, so if you are proficient with TeX() you can
-do various nifty things.  Just keep in mind that a syllable either
-starts with a letter (a character in the range `code(a)' to `code(z)'
-or `code(A)' to `code(Z)'), or it is a string enclosed quotes. It ends
-with either a number for the duration, or a space.  A last feature
-that should be mentioned is the space-lyric: if you want to enter
-a single ``syllable'' that consists of multiple words, i.e., words
-separated by  spaces, you should use an
-underscore instead of a space.  All these tricks are demonstrated in
-the following example:
-
-COMMENT( urg
-\type Lyrics \lyric { 'got_m\textbf{e}4 on8. m$\cal_Y$16 knees,4 Le-8 lie!4.}
-\type Lyrics \lyric { 'got_m{\bf e}4 on8. m$\cal_Y$16 knees,4 Le-8 lie!4.}
-)
-
-mudela(fragment,verbatim)(<
-  \type Staff  { c''8. c''16 bes'8. a'16 g'4 f'8 g'4. }
-  \type Lyrics \lyric { 'got_me4 on8. m$\cal_Y$16 "3s,"4 Le-8 lie!4.}
->
-)
-
-The spacing in the above example is a bit skewed because Lily can't
-tell that the long syllables you entered are not ordinary characters,
-but expand to really small symbols.
-
-
-
-
-COMMENT(Rood is de kleur van geluk.)
-COMMENT(Dat geldt ook voor haar.)
-
-
-sect(Toplevel Mudela)
-
-Now the time has come to unravel the red tape that we have hidden from
-you in the introduction.  Mudela has a hierarchical structure for we
-have seen that sequential and simultaneous music can be nested.
-Mudela also has other `blocks' that can be nested.  The general syntax
-for a block is code(\keyword { ... }).
-
-When you run LilyPond, what happens is that you define music, and
-specify one (or more) conversions to apply to that music, for example
-a conversion to notation.  This is done by putting the definition of
-the music and the definition of the conversion together in a
-code(\score) block, e.g.,
-verb(
-\score {
-        % ... music ...
-        \paper {}
-})
-
-This is almost  the context that should be around all
-of the previous examples.  The precise context reads thus:
-verb(
-\score {
-        \melodic { ... }
-        \paper {}
-})
-On the ellipsis, you entered what shown as the example input.
-You can see that in the
-above example, the code(\melodic { ... }) forms the music, the
-code(\paper {}) is a conversion to paper (notation, that is).  The
-code(\paper) definition is copied from a default definition
-(which is in the initialisation file file(paper16.ly)).
-The paper part also contains
-the definition of the contexts.
-
-The keyword code(\melodic) is analogous to the code(\lyric) keyword.  It
-will switch the tokenizer into a mode that interprets plain words as
-note names.  If it can't recognize the words as a note name, it will
-assume that they are strings.  That is the reason why you can write
-code(\clef bass) in stead of code(\clef "bass"); most of the strings
-in code(\melodic) mode can be written without quotes.
-
-The braces that you see after the code(\melodic) keyword are the
-braces that are around sequential music.  Because of these braces, the
-sequences of notes in our simple examples were sequential (and not
-simultaneous).  As a result the notes were printed from left to right,
-and not stacked.
-
-sect(Identifiers)
-
-
-Now that we are comfortable with the toplevel entries in a mudela
-file, we can investigate some more of the recreations on toplevel, in
-particular em(identifiers).  Generally you can define an identifier by
-entering code(identifierName = ... )
-where there can be a variety of things on the ellipsis.
-
-Here is a (partial) list of what you can abbreviate with identifiers
-at top-level.
-itemize(
-it()The code(\score) block
-it()The code(\paper) block
-it()The code(\midi) block (to be explained in
-  bind(Section)ref(tutorial:sound))
-it()Music (sequential music, simultaneous music etc.)
-it()Durations
-it()Strings
-it()Translators (to be explained in bind(Section)ref(tutorial:engravers))
-it()Integers
-it()Reals  
-)
-
-When you refer
-to the abbreviated entity, you must precede code(identifierName)
-with a backslash, i.e., code(\identifierName).  For example:
-mudela(verbatim)(
-  czerny = \melodic { [c16 g e g] }
-  \score {
-    \melodic \type GrandStaff <
-      { c''2 g''2 }
-      { \clef bass; \czerny \czerny \czerny \czerny}
-    >
-    \paper {
-      linewidth = -1.0;
-      stem_length = 12.0*\internote;
-    }
-  }
-)
-
-
-
-Another interesting feature of this example are the assignments within
-the paper block.  Some blocks, such as code(\paper), have a scope of
-their own.  In the case of the code(\paper) block, these variables
-influence the characteristics of the output.  As is shown, you can
-tune quantities like the stemlength, and enter simple expressions.
-The purpose of the negative linewidth is to prevent the music from
-being justified.  The identifiers that are meaningful are for the
-paper block is strongly implementation dependent, so they will not be
-listed here.  Moreover, since most of the values are predefined to
-sensible defaults, there usually is no need to tune these values.
-
-Recall the properties of a context, that could be set with
-code(\property).  It is a very general mechanism to tune the output of
-the music, that is neatly separated from the real music.
-Unfortunately, it is not convenient to type or read, and the precise
-effect of a setting property isn't always apparent from its
-definition.  To remedy this, we can use an identifier to capture the
-meaning of a code(\property).
-
-mudela(verbatim)(
-stemup = \property Voice.ydirection = "1"
-stemdown = \property Voice.ydirection = "-1"
-shift = \property Voice.hshift = "1"
-\score {
-  \type "Staff" \melodic <
-    \type "Voice" =  "one"  {
-      \stemup
-      r4 as'4 () as'4 g'4 }
-    \type "Voice" =  "two"  {
-      \stemup
-      \shift
-      g'2 f'4 e'4 }
-    \type "Voice" = "three" {
-      \stemdown
-      [d'8 dis'] [d' cis'] [c' b] c'4
-    }
-  >
-  \paper{  linewidth = -1.0\pt; }
-}
-)
-
-Several abbreviations like code(\stemup) are defined in the
-standard initialisation file file(property.ly).  Setting or changing
-context properties can have a similar effect as the commands that were
-discussed in bind(Section)ref(sec:commands).  Don't be fooled by the
-similarity in appearance between a declared property-setting entry
-and a real command.  Real commands are hardcoded into the language
-and they have to be terminated by semicolons.
-
-You can also use identifiers to break up the heavy nesting that can occur
-in the code(\score) block.  Another useful application is
-parametrisation of the music: if you use identifiers in the
-code(\score) block, you can make variations of the music by simply
-redefining those identifiers.  One particular application of this is
-part extraction: by using identifiers and redefining them, one can
-print extracted parts and a full orchestral score from the same
-music definition.
-
-
-
-sect(Sound output)
-label(tutorial:sound)
-
-You get output by combining music with definition a conversion to
-output.  Up till now we have only focused on the graphic output of
-traditional engraving.  But there is no reason why that should be the
-only form of output for music.  LilyPond currently supports one other
-conversion: the conversion from abstract music to sound. You can have
-LilyPond play the music that you entered.  The format that is used
-for this output is MIDI.  
-
-The only information that you need to enter is the
- nop(tempo)footnote(Unfortunately,
-this the only thing that can be tuned at this
-time.  This is a limitation: the tempo of music can vary throughout
-the music.) for the performance.  The syntax for the tempo is
-code(\tempo )var(duration) = var(beatsperminute);), for example:
-verb(
-\score {
-   ...music...
-   \midi { \tempo 4 = 76; }
-}
-)
-
-The most useful purpose of this sound output is to prooflisten your
-files: typing errors (especially if they involve accidentals)  stand
-out when you listen.
-The output was implemented in a very rudimentary manner, so it is
-probably not worth listening to for any other reason.
-
-
-sect(Contexts revisited: engravers)
-label(tutorial:engravers)
-
-As was promised, we will now take a dive into the more wizardrous parts
-of LilyPond: redefining (notation) contexts.  We previously explained
-that a context 
-itemize(
-it()is a conversion from music to notation,
-it()can contain other contexts
-it()handles specific notation constructs
-)
-
-This characterization almost automatically explains what the definition of a
-context should look like:
-itemize(
-it()It should be part of the ``notation output definition,'' i.e., the
-  code(\paper) block
-it()
-  It should contain a specification of what other contexts may be contained
-  in the context we're defining.
-it()
-  It should contain a list of the notation constructs  to be
-  handled.
-)
-
-In practice, the context definition
-looks like this:
-verb(
-\translator
-{
-        \type "Engraver_group_engraver";
-        \accepts "...";
-        \accepts "...";
-        \accepts "...";
-
-        \consists " ... ";
-        \consists " ... ";
-        \consists " ... ";
-
-        propertyname = "value";
-        propertyname = "value";
-
-} )
-
-  This is encoded by the 
-
-The code(\translator) keyword opens the block for translation (or
-context) definition.  The code(\type) keyword explains to Lily that
-the context should be formed by taking an (empty) instance of
-code(Engraver_group_engraver).  The code(Engraver_group_engraver) is a
-C++ class from the source code to Lily.  The code(\accepts) entries
-explain what kind of contexts this context could contain.  If we were
-to define a context for a staff, the definition would typically
-contain code(\accepts "Voice";).
-
-The code(\consists) entries specify which notation constructs should
-be handled. This needs a little explanation: LilyPond contains the
-code for quite a large number of basic building blocks for notation
-generation, and each building block handles only one notation
-construct.  The name of such a building block is `engraver'.  You can
-specify which notation construct a context should handle by specifying
-which engravers should be part of the context.  The code(\consists
-"Foobar") entry really means ``add an instance of code(Foobar) to the
-translation group.''
-
-
-For example if this context should print time signatures, the definition
-should include `code(\consists "Time_signature_engraver";)'.  Again
-code(Time_signature_engraver) is a class from the source code of LilyPond.
-
-
-
-Finally, one can pre-set some properties in a context definition.
-
-As a practical example, we will show you how to typeset polymetric
-music, i.e., music where the meter can differ for each staff.  The
-solution is not very complicated: normally all timing information
-(time signature, rhythmic grouping) is synchronised across each staff.  In
-LilyPond this is expressed by having only one registration for timing
-information for all staffs.  To be precise, there is only one
-code(Timing_engraver), and it is located in the top level context, the
-code(Score) context.
-
-All staffs use the information in the global code(Timing_engraver)
-for generating bar lines and time signatures.  In polymetric music, this timing
-information can be different for every staff, so we should redefine
-the code(Staff) context to include and the code(Score) context to exclude the
-code(Timing_engraver).  
-
-mudela(verbatim)(
-polymetricpaper = \paper {
-  Score = \translator {
-    \type Score_engraver;
-    \consists "Score_priority_engraver";
-    \consists "Priority_horizontal_align_engraver";
-    \consists "Vertical_align_engraver";
-    % \consists "Timing_engraver"; % removed Timing_engraver
-    \accepts "Staff";
-  }
-
-  Staff = \translator {
-    \type "Line_group_engraver_group";
-
-    defaultclef = violin;
-
-    \consists "Bar_engraver";
-    \consists "Clef_engraver";
-    \consists "Key_engraver";
-    \consists "Local_key_engraver";
-    \consists "Time_signature_engraver";
-    \consists "Timing_engraver";  % added Timing_engraver
-    \consists "Staff_sym_engraver";
-    \consists "Separating_line_group_engraver";
-
-    \accepts "Voice";
-  }
-}
-\score {
-  \melodic <
-    \type Staff = one { \time 2/4; c'4 c'4 c'4 c'4 c'4 c'4 }
-    \type Staff = two { \time 3/4; c'4 c'4 c'4 c'4 c'4 c'4 }
-  >
-  \paper { \polymetricpaper
-    linewidth = -1.;
-  }
-}
-)
-
-As you can see, we used the identifier code(polymetricpaper) to break
-up the large score block.  More of these context definitions appear in
-the standard initialisation file file(engraver.ly).
-
-sect(Urtexts and context selection)
-label(tutorial:urtext)
-
-In bind(Section)ref(tutorial:more-staffs), we have shown you how to make
-multiple staffs, and explained that you have to label every staff (or
-more precisely: different contexts), to make sure that new ones are
-created when you need them.  In this section, the real power of this
-mechanism will unveiled.
-
-By naming other contexts that you create, you can reference other contexts
-than the current context from within the music.  For example, from within the music that you
-enter for staff code(One), one could enter a small piece of music,
-and send it to staff code(Two), e.g.,
-mudela(fragment,verbatim)(
-  <
-    \type Staff = one { c''4 \type Staff = two { c4 c4 } c''4 }
-    \type Staff = two { \clef bass; g,4 g,4 g,4 g,4  }    
-  >
-)
-
-
-Another useful application of this feature is making Urtexts.
-em(Urtext) is the German word for `original text'.  The Urtext
-edition of a piece of music, is an edition that reflects the original
-writing of the composer.  Such editions are useful for musicologists,
-and performers that want  to perform authentic interpretations.  However,
-for mere mortals, the Urtext can be quite hard to read.  It might not
-contain fingering and beaming, and typically it is full of footnotes.
-Moreover, common interpretations may have emerged---after the composer
-died.  For this reason, the music that can be had as Urtext usually is also
-available in enhanced and edited editions.
-
-The mechanism of context selection can be used to fabricate an Urtext
-and an edited edition from em(one source).  We will use the first few
-bars of bind(J.)bind(S.)Bach's lovely Cello suite bind(no.)I to
-demonstrate this.  The example makes heavy use of space rests: a space
-rest is a like a rest that doesn't print anything.  It can be used as
-a placeholder, to attach articulation marks to.  It is entered as a
-note with the name code(s).
-
-mudela(verbatim)(
-  bach =  \melodic { [c16 g e' d'] [e' g e' g] }
-  
-  staffStuff = \melodic { \clef bass; \time 4/4; s1 \bar "|."; }
-  
-  slursOne = \melodic { s16( s s s s16 s s )s }
-  slursTwo = \melodic { s16-. s s() s s16() s  s ()s }
-
-  \score{
-    { < \type Voice = celloVoice { \bach \bach }
-        \type Voice = celloVoice { \slursOne \slursOne }
-        \staffStuff
-      >
-      <
-        \type Voice = celloVoice { \bach \bach }
-        \type Voice = celloVoice { \slursTwo \slursTwo }
-        \staffStuff
-      >
-    }
-    \paper {}
-  }
-)
-
- The slurs that you define should be put on the music that is defined
-by the code(\bach) identifier.  By labeling a code(Voice) context, and
-directing both the articulation and the notes to that same code(Voice)
-context, the articulation is put over the right notes.
-
-
-sect(Transposing)
-label(tutorial:more-grammar)
-
-COMMENT(In this section, we will complete the grammar for Music that was
-sketched earlier. )
-One of the things that you can do with music is
-em(transposing) it.  If you want to transpose a piece of music, then
-you should prefix the keyword code(\transpose) along with the pitch
-(relative to the central C) for the transposition.footnote(the
-code(\type Staff) is to make sure that no separate staffs are created
-for the code(\scale) and code(\transpose cis' \scale) part.)
-
-
-mudela(verbatim)(
-scale = \melodic \relative c' { [c8 d e f] }
-\score {
-  \melodic {
-    \type Staff { \scale \transpose cis'  \scale }
-    }
-  \paper { linewidth = -1.0; }
-})
-
-
-sect(Staff switching)
-
-We have seen that contexts can be nested.  This means that they form a
-tree.  It is possible to edit this tree: for example, a code(Voice)
-context can be taken out of a code(Staff) context, and put into
-another.  This has the effect of the voice switching staffs (something
-that often happens in keyboard music).  The syntax for this operation
-with these particular contexts is code(\translator Staff = newStaffName).
-
-The effect is analogous to the first example in section
-ref(tutorial:urtext), but with the code(\translator) construction it
-is possible to split the real music and the commands that determine in
-which staff the music is printed.  For example:
-
-mudela(verbatim)(
-
-% real music
-aVoice = \type Voice = voiceA \melodic { c''4 c4 c4 c''4 }
-bVoice = \type Voice = voiceB \melodic { g,4 g,4 g,4 g,4  }    
-
-% staff switching stuff
-switch = \type Voice = voiceA \melodic { s4 \translator Staff = staffB s4
-                  s4 \translator Staff = staffA s4 }
-
-\score {
-  <
-    \type Staff = staffA < \aVoice \switch >
-    \type Staff = staffB < \bVoice \clef bass; >
-  >
-  \paper { linewidth = -1.; }
-}
-)
-
-Don't try to switch staffs when you are in the middle of a slur or
-beam, though.  It doesn't work yet.
-
-sect(Hairy durations: triplets)
-
-In the previous section we explained an operation that changes the
-pitches of music, transposition.  In this section we will explain an
-operation that modifies the duration of the notes that you enter.
-When notes are part of a triplet, then the real of duration of the
-notes are 2/3 part of what their shape indicates:
-mudela(fragment)(
-\[/3  c'4 c'4 c'4 \]/1
-)
-
-To support this notion, Mudela allows you to modify the duration of a
-note by multiplication or division.  A code(c'4) note that would be in  a
-triplet is written as code(c'4*2/3).  If you sequence a few of these
-notes, you get a triplet.footnote(We added a normal staff in the example to
-show the difference.)
-mudela(fragment,verbatim)(
-<  \type Staff = staffA { c'8*2/3 c'8*2/3 c'8*2/3 c'4}
-   \type Staff = staffB { c''8 c''8 c''4 } >)
-
-LilyPond knows that these notes are no normal eighth notes, but the
-reader doesn't yet.  To help the reader a beam or a bracket with a `3'
-should be printed.  The special beam command `code([2/3)' and the
-matching close beam `code(]1/1)' will take care of that, and
-they also abbreviate the code(*2/3) part.  If you want brackets in
-stead of beams, you can use `code(\[2/3])' and `code(\]1/1)'.
-mudela(fragment,verbatim)(
-< \type Staff = staffA {
-    [2/3 c'8 c'8 c'8 ]1/1
-    \[2/3 c'8 c'8 c'8 \]1/1
-  }
-  \type Staff = staffB { [c''8 c''8 c''8 c''8] }
->)
-
-Other tuplets  can be entered in the same way.
-mudela(fragment,verbatim)(
-< \type Staff = staffA {
-    \time 7/8;
-    [7/6 c'8 c'8 c'8 c'8 c'8 c'8 ]1/1
-  }
-  \type Staff = staffB {
-    \time 7/8;
-    [c''8 c''8 c''8 c''8 c''8 c''8 c''8] } >
-)
-
-For your convenience, code([2/3) can be further abbreviated to code([/3), and
-you can abbreviate code(]1/1) on the closing beam marker to code(]/1).
-
-mudela(fragment,verbatim)(
-< \type Staff = staffA {
-    [/3 c'8 c'8 c'8 ]/1 c'4
-  }
-  \type Staff = staffB { [c''8 c''8] c''4 } >
-)
-
-
-bf(Important) the construct with code([/3) and
-code([/1) is a hack that sets a mode in the parser.  This means that
-verb(id = \melodic { c8 c8 c8 }
-notATriplet =\melodic { [2/3 \id ]1/1 })
-does not produce a triplet.  It will hopefully
-soon be replaced by a construction that mixes more elegantly with the
-grammar for Music.
-
-
-sect(Shortcuts for octaves)
-label(sec:relativeoctaves)
-
-Plain Mudela contains a lot of quotes to get the octaves right.  This
-need for quotes can be reduced: most of the pitch intervals in
-conventional music are small.  Therefore, it makes sense to leave out
-the quotes when the interval is small.  We have built a mode that does
-exactly this.  It is called the relative mode for octaves.  You can
-switch it on by entering code(\relative).  Then LilyPond will
-interpret every note as if they mean the note with the same name
-closest to the previous.  You have to specify the first pitch because
-the first note of a list obviously has no predecessor.  So, you can
-enter a scale without using octavation quotes, e.g.,
-
-mudela(fragment,verbatim)(
-    \relative c' { c d e f g a b c }
-)
-
-For chords, the relative mode works slightly differently.  In a
-sequence of chords, the first note of a chord gives the starting point
-for the next chord.  We can demonstrate this with our twinkle twinkle example
-verb(
-  \relative c' {
-  c4       c            <c g'>    <c e g>
-  <c e a>  <b d a'>     <b2 d g>
-  <a4 d f> <bes d f>    <bes c e> <g c e>
-  <e a d>  <a, g' cis'> <d2 f d'>
-  }
-)
-
-LilyPond converts any music with code(\relative) prepended to absolute
-music immediately when it is read. Internally it is stored it in
-absolute pitches.  Since the tutorial mainly deals with how to specify
-musical information, and not how to enter it conveniently, the
-tutorial doesn't use it.
-
-
-sect(Large pieces)
-label(tutorial:large-pieces)
-
-In our quest for a clean and powerfull music language, we took the effort
-of entering some larger pieces of music as well.  From this we learned
-certain things that lead to direct improvements of Mudela, such as the 
-relative mode.  We also gained some practial experience, that resulted in a 
-compilation of tips that may be of use to you.
-
-Entering a large piece of music will often imply the need to produce a
-conductor's score, as well as individual parts for all instruments.  This
-can most easily be achieved making use of identifiers and including mudela
-files.
-
-subsect(Identifiers)
-
-Briefly introduced before, identifiers are your biggest help in structurising
-a large piece of music.  As an example, we'll consider a string quartet.  
-In short, it will look like this: verb(
-    global = \melodic{ }
-    violinoOne = \melodic \relative c { .. }
-    violinoTwo = \melodic \relative c { .. }
-    viola = \melodic \relative c { .. }
-    violoncello = \melodic \relative c { .. }
-)
-
-The code(\global) part contains everything that is global, i.e., the
-same, for each instrument.  This may include time signature, key, repeat
-signs, different bar types, time signature- and key changes, rehearsal
-marks, etc.
-
-For each instrument, you'll have something vaguely resembling verb(
-    violinoOneStaff = \type Staff = violinoOne <
-       \property Staff.midi_instrument = "violin"
-       \property Staff.instrument = "Violino I"
-       \property Staff.instr = "Vl. I"
-       \global
-       \violinoOne
-    >
-)
-
-
-[Versions, relative mode,
- barchecks, splitting of files]
-
-subsect(Including Mudela files)
-ref(subsect:include)
-
-You can include other Mudela files  with the command code(\include):
-verb(
-\include "paper13.ly"
-\score {
-       ...
-       \paper { \paper_thirteen }
-})
-
-The file is looked for in the  standard search path.
-
-
-subsect(Grouping of staffs)
-
-subsect(Versioning)
-
-sect(Titling)
-label(tutorial:titling)
-
-A piece of sheet music isn't complete without proper opening and
-closing titles.  LilyPond does not have any real support for setting
-text: that is a job best left to TeX().  But you can pass messages to
-TeX() from the input file.   You can  write TeX() macros to handle
-these messages.
-To do this, you add a code(\header) block
-to your input file.  The format is quite simple,
-
-verb(
-\header{
-    "key" =  "value";
-    "key" =  "value";
-    "key" =  "value";
-    % etc.
-})
-
-When  the results of the music typesetting are output, the contents of
-code(\header) are also up into the TeX() file.  Tools like
-code(ly2dvi) can use this information to generate pretty titling for
-your input file. Consult the manual page of code(ly2dvi) for more
-details.
-
-
-The code(\header) block should be at toplevel in mudela, and
-preferably at the top of the file.  If you have an input file  with
-multiple code(\score) blocks, you should add a header to every score,
-describing the different sub parts of the music piece, eg.
-
-
-verb(\header {
-        "composer" = "Ludwig Van Bavaria";
-        "title" = "Symphonie Megalomane";
-    }
-    \score{
-       ... % some music
-       \header { movement = "Mit roher Kraft wild herausfahrend!"; }
-      \paper { }
-    }
-    \score{
-       ... % some more music
-       \header { movement = "Saut\'e comme un oeuf."; }
-      \paper { }
-    }
-)
-
-If you want you can also put the code(\header) block at the top of the
-input file; it will then be put into every output file automatically.
-This will make it clear what the file contains as soon as you open it.
-
-
-
-chapter(Features)
-label(features)
-
-bf(This document is not up to date).  All rendered examples of course
-are current, but the rest probably isn't.  Adjusting the tutorial was
-considered more important than writing the reference manual.  We
-apologize for the inconvenience.
-
-
-This document describes the the GNU LilyPond input format, which is an
-effective language for defining music.  We call this language (rather
-arrogantly) The Musical Definition Language or Mudela, for
-short.footnote(If anybody comes up with a better name, we'd gladly
-  take this. Gourlay already uses Musical Description Language,
-  G-Sharp Score Definition Language.  ISO standard 10743 defines a
-  Standard Music Description Language.  We're not being original here.)
-
-The first aim of Mudela is to define a piece of music, being complete
-from both from a musical typesetting, as from a musical performing
-point of view.
-
-The Musical Definition Language (Mudela), has a logical structure,
-making use of identifiers, that allows for flexible input, and
-definition reuse. See the documentation file file(MANIFESTO), included
-with the LilyPond sources for reasons and design considerations.
-
-The below is included for explanatory purposes only (i.e., for a
-complete and up-to-date definition, see file(lily/parser.yy) and
-file(lily/lexer.ll)).
-
-As a related note, you should take a look at the examples and the init
-files, as this document does not cover every aspect of Mudela yet, and
-may be out of date.footnote(Ok, I am being pessimistic here.  This
-just is a disclaimer.  Docs usually are written after the program
-itself.)  This document intends to give an idea of how it works. It is
-not a guide on how to use it.
-
-sect(Files)
-
-The de-facto extension of Mudela is file(.ly). Files may be included by
-entering code(\include) at the start of a line:
-
-verb(
-\include "a_file.ly"
-)
-
-
-sect(Comments)
-
-Line comments are introduced by a
-code(%).
-Block comments are delimited
-by 
-code(%{)
-and
-code(%}).
-They do not nest.
-
-
-sect(Versions)
-
-Occasionally, small changes in syntax across different versions of
-Mudela might give syntax errors. To warn you about possible
-incompatibilities, you can specify the Mudela version for which the
-inputfile was written,
-verb(
-\version "0.0.50";
-)
-
-A Python-script which tries to convert to newer versions
-(file(convert-mudela)) is included in the LilyPond distribution.
-
-sect(Keywords)
-
-Keywords are preceded by a backslash: code(\). They contain
-alphabetic characters only.
-
-
-sect(Nesting characters)
-
-Mudela uses the brace, `code({)' and `code(})' for most hierarchical
-structures.  For chords the code(<) and the code(>) are used as
-nesting braces.
-
-sect(Constants)
-
-verb(
-"I am a string"
--1.2e3          % a real
-12              % an int
-)
-
-        
-sect(Identifiers)
-
-When assigning identifiers you use
-
-verb(
-string = ...
-)
-
-If you reuse identifiers, then the previous contents will be thrown
-away after the right hand is evaluated, e.g.
-verb(
-bla = \melodic { \bla }
-)
-is legal
-
-When using identifiers they have to be escaped:
-
-verb(
-oboe = \melodic { ... }
-\score{ \melodic { \oboe }}
-)
-
-The left-hand part of the assignment is really a string, so 
-verb(
-"Foo bar 4 2 " = \melodic { .. }
-)
-
-is also a valid assignment (but you would have trouble referencing to it)
-
-
-sect(Hierarchical structures)
-
-The general structure consists of declarations:
-verb(
-IDENTIFIER = \TYPE{
-        <type specific data>
-}
-)
-and instantiations:
-
-verb(
-\TYPE{ <type specific data> }
-)
-
-(Currently, code(\score) is the only type that can be instantiated
-at top level.)
-
-Most instantiations that use an IDENTIFIER are specified as follows:
-
-verb(
-\TYPE{ \IDENTIFIER [...] }
-)
-
-Some exceptions on this rule have been made to prevent inputting
-Mudela becoming tedious
-
-sect(Modes:)
-
-To simplify different aspects of music definition (entering the notes
-and manipulating them) Mudela has a number of different input "modes":
-
-description(
-
-
-dit(Normal mode)
-
-At the start of parsing, Mudela assumes normal mode.
-In Normal mode, a word is looked up in the following order:
-description(
-dit(code(word))    string
-dit(code("string")) string
-dit(code(\word)) keyword, identifier
-)
-In normal mode, a word is assumed to start with an alphabetic
-character, followed by alpha-numeric characters.
-
-dit(Note mode) Note mode is introduced by the keyword
-  code(\melodic).  In Note mode, a word is looked up in the following
-  order:
-description(
-dit(code(word)) notename, string
-dit(code("string")) string
-dit(code(\word)) keyword, identifier
-)
-
-In Note mode a word is considered to have alphabetic characters only,
-so the underscore (_) is invalid.  If you accidently mistype a
-notename, the parser will assume that you are entering a string (and
-it will most likely complain that you should be in code(\lyric) mode to
-do lyrics)
-
-
-dit(Lyric mode) Lyrics mode is introduced by the keyword
-  code(\lyric).  Because of the various control characters that can
-  appear in lyrics, e.g., foreign language accents, the inputting a
-  string containing these has been made very easy.
-
-In Lyrics mode, a word is looked up in the following order:
-description(
-dit(code(word))    string (thus a lyric)
-dit(code("string")) string
-dit(code(\word)) keyword, identifier
-)
-
-In Lyric mode every sequence of non-digit and non-white characters
-starting with an alphabetic character or the _ is considered a word.
-
-verb(
-a&@&@&TSI|{[    % a word
-1THtrhortho     % not a "word"
-Leise DOEXPAND(Fl\)DOEXPAND("u\)ss{}teren meine Sapfe       % 4 words
-_ _ _ _         % 4 words: 4 spaces
-)
-)
-
-These modes are of a lexical nature. Normal and Note mode largely
-resemble each other, save the possibility of entering Reals, 
-meaning of code(_) and the resolution of words
-
-
-
-
-
-Durations are entered as their reciprocal values
-mudela(fragment,verbatim,center)(
-a'1 a'2 a'4 a a'8 a a'16 a'32 a'64
-)
-Notice that you only have to specify the duration when it changes: Lily
-assumes a note has the same duration as the previous one.
-
-Now we can already write a little tune
-mudela(fragment,verbatim,center)(
-c' d' e' c' | c' d' e' c' | e' f' g'2
-)
-As you'll probably have guessed,
-the vertical bar  code(|) may be used to mark
-measures.
-
-In the scale shown above
-we left-out the last c note of the next octave.
-Postfixing the pitch with a quote code(')
-produces a note by one octave higher
-mudela(fragment,verbatim,center)(
-c c' c''
-)
-
-Postfixing the pitch with a comma, code(,)
-produces a note by one octave lower
-mudela(fragment,verbatim,center)(
-a a, a,,
-)
-
-sect(Slurs and Ties)
-
-A tie connects two adjacent note heads
-
-mudela(fragment,verbatim,center)(
-e' ~ e'
-)
-
-Whereas a slur rather connects `chords', 
-and tries to avoid crossing stems
-
-mudela(fragment,verbatim,center)(
-e'( )e'
-)
-
-And of course, such a (legato) slur can span several notes
-mudela(fragment,verbatim,center)(
-c'( d' e' )f'
-)
-
-sect(Beams and Tuplets)
-
-A beam is 
-mudela(fragment,verbatim,center)(
-[a'8 a'] [a'16 a' a' a']
-)
-
-Here's a beamed triplet
-mudela(fragment,verbatim,center)(
-[/3 a'8 a' a']/1
-)
-
-a triplet without a beam
-mudela(fragment,verbatim,center)(
-\[/3 a'4 a'8\]
-)
-
-and a combination
-mudela(fragment,verbatim,center)(
-[/3 a'8 a'16 a'] a'8 \]
-)
-
-Abbreviations
-mudela(fragment,verbatim,center)(
-c'1:16 [:16 e'1 g']
-)
-
-mudela(fragment,verbatim,center)(
-c'4:32 [:16 c'8 d'8]
-)
-
-sect(Notenames)
-
-Lily has predefined sets of notenames
-for various nop(languages)footnote(These 
-are Dutch, English, German, Italian and Swedish.
-Simply include the language specific init file file(language.ly).).
-The default set are the ones we like best are the Dutch notenames.
-
-A sharp is formed by adding code(is)
-mudela(fragment,verbatim,center)(
-cis' dis' eis' fis' gis' ais' bis'
-)
-
-and a flat is formed by adding code(es)
-mudela(fragment,verbatim,center)(
-ces' des' es' fes' ges' as' bes'
-)
-
-With the obvious names for double sharps
-mudela(fragment,verbatim)(
-cisis' disis' eisis' fisis' gisis' aisis' bisis'
-)
-
-and double flats
-mudela(fragment,verbatim)(
-ceses' deses' eses' feses' geses' ases' beses'
-)
-
-
-There are two special `notenames', the rest
-mudela(fragment,verbatim,center)(
-r16 [a' a' a']
-)
-
-and the space
-mudela(fragment,verbatim,center)(
-a'2 s-"diminuendo" | a'
-)
-
-
-sect(Commands)
-
-mudela(fragment,verbatim,center)(
-\clef "bass"; c
-)
-
-and a clef-change
-mudela(fragment,verbatim,center)(
-\clef "treble"; f' e' \clef "alto"; d' c'
-)
-
-mudela(fragment,verbatim,center)(
-\time 3/4; c' g' g' |
-)
-
-mudela(fragment,verbatim,center)(
-\key d;
-g a b cis' d' e' fis' g'
-)
-Note how Mudela allows you to 
-convey a musical message and doesn't force  you to produce a list of typesetting commands.
-If the music has a code(cis), you type a code(cis).
-Depending on the key and context of the note
-Lily will determine what accidentals to typeset.
-
-A reminder accidental can be forced by
-using an exclamation mark code(!)
-on a pitch a reminder accidental
-mudela(fragment,verbatim,center)(
-cis' d' e' cis' | c'! d' e' c' |
-)
-
-mudela(fragment,verbatim)(
-\time 2/4;
-\bar "|:"; c' c' \bar ":|:"; c' c' \bar ":|"; c' c' \bar "|."; 
-)
-
-sect(Chords and Voices)
-
-Here's a simple chord
-mudela(fragment,verbatim,center)(
-<c e g>
-)
-
-here are a few
-mudela(fragment,verbatim,center)(
-<
-        { c'()d'()c' }
-        { e'()f'()e' }
-        { g'()a'()g' }
->
-)
-
-and similarly voices
-mudela(fragment,verbatim)(
-<
-        { \voiceone c'4 g' c' g' }
-        { \voicetwo c2 g2 }
->
-)
-
-
-sect(A complete example)
-COMMENT(%label(se:complete))
-
-A Mudela file needs some red tape
-
-mudela(verbatim)(
-\score{
-        \melodic {
-                c' d' e' c' |
-                c' d' e' c' |
-                e' f' g'2 |
-        }
-}
-)
-
-sect(Lyrics)
-
-Lyrics are entered like notes, with pitches substituted
-by text. 
-
-All syllables are entered separately, separated by whitespace 
-verb(
-Twin-4 kle4 twin-4 kle4 ... 
-)
-
-Two syllables or words that compose a single
-duration entry are bound together using an underscore 
-verb(
-He_could4 not4
-)
-
-
-COMMENT(
-URG
-                        Fr\`e-4 re Ja- que
-                        Fr\`e- re Ja- que
-)
-
-mudela(verbatim,center)(
-\score{
-        < 
-                \melodic  \transpose c''  {
-                        c d e c | c d e c |
-                        e f g'2 | e'4 f g'2
-                        \bar "|.";
-                }
-                \type Lyrics \lyric{ 
-                        DOEXPAND(Fr\)`e-4 re Ja- que
-                        DOEXPAND(Fr\)`e- re Ja- que
-                        Dor- mez vous?2
-                        Dor-4 mez vous?2
-                }
-        >
-}
-)
-
-sect(Composition: forming bigger structures)
-label(sec:grammar)
-
-The computer savy user may be interested in a more formal
-specification.  We can capture what have learned about forming
-sentences in Mudela in a context-free grammar.
-
-latexcommand(\smallskip)
-
-table(2)(lll)(
-        row(cell(em(Music))cell(: em(Note)))
-        row(cell()cell(code(|) em(Rest)))
-        row(cell()cell(code(|) code({) em(MusicList) code(})))
-        row(cell()cell(code(|) code(<) em(MusicList) code(>)))
-        row(cell()cell(code(|) em(Command)))
-        row(cell()cell(code(|) code(\type) em(string) code(=) em(string)  em(Music)))
-        row(cell()cell(;))
-        row(cell(em(MusicList))cell(: em(empty)))
-        row(cell()cell(code(|)  em(MusicList)  em(Music)))
-       row(cell()cell(;))
-)
-
-latexcommand(\smallskip)
-
-
-
-
-
-In mathematics you can form expressions by combining expressions,
-which are ultimately some kind of atom or terminal symbol.  The same
-goes for Mudela: there are some basic building blocks, and by
-combining those you create complex music.
-
-You can combine music in three ways:
-itemize(
-it()If you enclose a sequence of music-elements in braces ( code({)
-    and code(}) ), then you form another kind of music called
-sequential music
-    with those pieces.
-  The duration of sequential composition is the sum of the durations of its elements
-  verb(
-      { c c g g a a g2 }      % twinkle twinkle
-      { { c c g g} { a a g2 } }
-  )
-it()You can stack music by enclosing a sequence of music elements
-    with code(<) and code(>). This is called simultaneous music.  
-    The duration of a simultaneous composition is the union of the durations 
-    of its elements Example:
-    verb(
-        <a4 {cis8 cis8} e'4>      % a-major chord
-    )
-it()You can form music by transposing music:
-    verb(
-    \transpose  
-        d       % from c to the d that's almost one octave down
-                { e4 f4 }       % the horizontal music
-)
-it()verb(\type)
-it()verb(\property)
-it()verb(\translator)
-it()verb(\relative)
-)
-
-Of course you can also combine these three mechanisms.
-verb(
-{ c <c e> <c e g> <c e g \transpose d' dis > }  % 4 increasing chords
-)
-
-
-sect(Durations)
-
-A duration always starts with the duration type (1,2,4 etc), and then
-any optional multipliers/dots.  `Gregrorian' durations can be entered
-as follows
-verb(
-c'\breve
-gis'\longa
-)
-
-
-        
-sect(Time signatures/groupings)
-
-A time signature specification has this form:
-verb(
-\time 3/4 ;
-)
-
-Rhythmic grouping is  a concept closely associated with this. For
-example, in a 5/8 time signature, the counts are grouped 2+3. In Mudela this is
-entered as
-verb(
-\grouping  8*2 8*3 ;
-)
-
-You can start the piece with a partial measure, the command takes a
-duration as an argument
-verb(
-\partial 16*3;
-)
-
-Make the piece start with a upstep 
-lasting 1 3/4 quarter notes.
-
-These commands  constitute `Music', and have a duration of 0.
-
-
-sect(Properties)
-
-By default the same accidentals are valid for all octaves, but
-  this can be changed with the property code(specialaccidentals).
-
-
-The identifier code(\specialkey) sets the property for the Staff.  A
-key with two flats in one octave and three
-  sharps in the next can be declared with verb(\specialkey
-\accidentals bes es fis' cis' gis';)
-
-sect(Music fragments)
-label(tutorial:music-fragments)
-
-Sometimes you only need to print a small fragment of music, perhaps 
-something much like one of the examples in this document.  Back in
-section ref(sec:running-lilypond) we told you that the music you
-enter should be encapsulated in something like:
-verb(
-\score<
-        \melodic\relative c{
-               d
-       }
-       \paper{ }
-       \midi{ }
->
-)
-where the only interesting information is this particular example is verb(
-       d
-)
-The rest of the above example was already nicknamed `red tape'.
-You may easily get bored if you have to provide this same red tape 
-for every fragmenty you nop(try)footnote(Of course, in most cases your
-favourite text editor (TM)
-will help you out.).
-
-Luckily there's a trick around this, and it's called file(.fly) files.
-If you use the extension file(.fly) for Mudela file file(foo),
-LilyPond will embed your file(foo.fly) nop(in)footnote(Or something very 
-similar.  If you want to know exactly, see file(init/init.fly)):
-verb(
-\score<
-        \melodic\relative c{
-               <<foo.ly>>
-       }
-       \paper{ }
-       \midi{ }
-)
-
-Here's how it works.  If you run LilyPond on your file file(bar.ly), you
-may notice that she starts-off by reading quite a number of files before
-she actually reaches your file(bar.ly).  There's no magic going on, Lily
-by default reads an initialisation file (file(init/init.ly)).  In the
-initialisation process a lot of things are defined that you'll need for 
-normal operation, such as notenames and various other mudela shortcuts,
-engraver and perforer definitions, font sizes, musical dimensions and 
-paper sizes.  When you use the extension file(.fly), Lily just starts
-reading another initialisation file (file(init/init.fly)), that includes the 
-red tape for you too.
-
-
-appendix()
-
-chapter(Glossary)
-label(glossary)
-
-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{vocabulary}
-    }
-))
-
-whenhtml(
-    includeverbatim(DOEXPAND(outdir)/vocabulary.html)
-)
-
-whenlatex(latexcommand(
-    \bibliographystyle{plain}
-    \bibliography{engraving}
-))
-
-
-COMMENT(The bib stuff is somewhere else on the WWW site)
-COMMENT(
-setchapterstring{}
-
-whenhtml{
-    nchapter{Bibliography}
-    includeverbatim{out-www/engraving.html}
-})
-
diff --git a/Documentation/tex/refman.yo b/Documentation/tex/refman.yo
new file mode 100644 (file)
index 0000000..cf44f1c
--- /dev/null
@@ -0,0 +1,668 @@
+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>)
+
+latexpackage()(a4wide)
+latexlayoutcmds(
+%\usepackage[latin1]{inputenc}
+\input mudela-book
+)
+
+whenlatex(notableofcontents())
+whentexinfo(notableofcontents())
+
+report(Mudela, reference manual)
+      (Han-Wen Nienhuys and Jan Nieuwenhuizen)
+      (nop()PIPETHROUGH(date "+%B %d, %Y")()()nop())
+
+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})
+)
+
+
+bf(This document is not up to date).  All rendered examples of course
+are current, but the rest probably isn't.  Adjusting the tutorial was
+considered more important than writing the reference manual.  We
+apologize for the inconvenience.
+
+
+This document describes the the GNU LilyPond input format, which is an
+effective language for defining music.  We call this language (rather
+arrogantly) The Musical Definition Language or Mudela, for
+short.footnote(If anybody comes up with a better name, we'd gladly
+  take this. Gourlay already uses Musical Description Language,
+  G-Sharp Score Definition Language.  ISO standard 10743 defines a
+  Standard Music Description Language.  We're not being original here.)
+
+The first aim of Mudela is to define a piece of music, being complete
+from both from a musical typesetting, as from a musical performing
+point of view.
+
+The Musical Definition Language (Mudela), has a logical structure,
+making use of identifiers, that allows for flexible input, and
+definition reuse. See the documentation file file(MANIFESTO), included
+with the LilyPond sources for reasons and design considerations.
+
+The below is included for explanatory purposes only (i.e., for a
+complete and up-to-date definition, see file(lily/parser.yy) and
+file(lily/lexer.ll)).
+
+As a related note, you should take a look at the examples and the init
+files, as this document does not cover every aspect of Mudela yet, and
+may be out of date.footnote(Ok, I am being pessimistic here.  This
+just is a disclaimer.  Docs usually are written after the program
+itself.)  This document intends to give an idea of how it works. It is
+not a guide on how to use it.
+
+sect(Files)
+
+The de-facto extension of Mudela is file(.ly). Files may be included by
+entering code(\include) at the start of a line:
+
+verb(
+\include "a_file.ly"
+)
+
+
+sect(Comments)
+
+Line comments are introduced by a
+code(%).
+Block comments are delimited
+by 
+code(%{)
+and
+code(%}).
+They do not nest.
+
+
+sect(Versions)
+
+Occasionally, small changes in syntax across different versions of
+Mudela might give syntax errors. To warn you about possible
+incompatibilities, you can specify the Mudela version for which the
+inputfile was written,
+verb(
+\version "0.0.50";
+)
+
+A Python-script which tries to convert to newer versions
+(file(convert-mudela)) is included in the LilyPond distribution.
+
+sect(Keywords)
+
+Keywords are preceded by a backslash: code(\). They contain
+alphabetic characters only.
+
+
+sect(Nesting characters)
+
+Mudela uses the brace, `code({)' and `code(})' for most hierarchical
+structures.  For chords the code(<) and the code(>) are used as
+nesting braces.
+
+sect(Constants)
+
+verb(
+"I am a string"
+-1.2e3          % a real
+12              % an int
+)
+
+        
+sect(Identifiers)
+
+When assigning identifiers you use
+
+verb(
+string = ...
+)
+
+If you reuse identifiers, then the previous contents will be thrown
+away after the right hand is evaluated, e.g.
+verb(
+bla = \melodic { \bla }
+)
+is legal
+
+When using identifiers they have to be escaped:
+
+verb(
+oboe = \melodic { ... }
+\score{ \melodic { \oboe }}
+)
+
+The left-hand part of the assignment is really a string, so 
+verb(
+"Foo bar 4 2 " = \melodic { .. }
+)
+
+is also a valid assignment (but you would have trouble referencing to it)
+
+
+sect(Hierarchical structures)
+
+The general structure consists of declarations:
+verb(
+IDENTIFIER = \TYPE{
+        <type specific data>
+}
+)
+and instantiations:
+
+verb(
+\TYPE{ <type specific data> }
+)
+
+(Currently, code(\score) is the only type that can be instantiated
+at top level.)
+
+Most instantiations that use an IDENTIFIER are specified as follows:
+
+verb(
+\TYPE{ \IDENTIFIER [...] }
+)
+
+Some exceptions on this rule have been made to prevent inputting
+Mudela becoming tedious
+
+sect(Modes:)
+
+To simplify different aspects of music definition (entering the notes
+and manipulating them) Mudela has a number of different input "modes":
+
+description(
+
+
+dit(Normal mode)
+
+At the start of parsing, Mudela assumes normal mode.
+In Normal mode, a word is looked up in the following order:
+description(
+dit(code(word))    string
+dit(code("string")) string
+dit(code(\word)) keyword, identifier
+)
+In normal mode, a word is assumed to start with an alphabetic
+character, followed by alpha-numeric characters.
+
+dit(Note mode) Note mode is introduced by the keyword
+  code(\melodic).  In Note mode, a word is looked up in the following
+  order:
+description(
+dit(code(word)) notename, string
+dit(code("string")) string
+dit(code(\word)) keyword, identifier
+)
+
+In Note mode a word is considered to have alphabetic characters only,
+so the underscore (_) is invalid.  If you accidently mistype a
+notename, the parser will assume that you are entering a string (and
+it will most likely complain that you should be in code(\lyric) mode to
+do lyrics)
+
+
+dit(Lyric mode) Lyrics mode is introduced by the keyword
+  code(\lyric).  Because of the various control characters that can
+  appear in lyrics, e.g., foreign language accents, the inputting a
+  string containing these has been made very easy.
+
+In Lyrics mode, a word is looked up in the following order:
+description(
+dit(code(word))    string (thus a lyric)
+dit(code("string")) string
+dit(code(\word)) keyword, identifier
+)
+
+In Lyric mode every sequence of non-digit and non-white characters
+starting with an alphabetic character or the _ is considered a word.
+
+verb(
+a&@&@&TSI|{[    % a word
+1THtrhortho     % not a "word"
+Leise DOEXPAND(Fl\)DOEXPAND("u\)ss{}teren meine Sapfe       % 4 words
+_ _ _ _         % 4 words: 4 spaces
+)
+)
+
+These modes are of a lexical nature. Normal and Note mode largely
+resemble each other, save the possibility of entering Reals, 
+meaning of code(_) and the resolution of words
+
+
+
+
+
+Durations are entered as their reciprocal values
+mudela(fragment,verbatim,center)(
+a'1 a'2 a'4 a a'8 a a'16 a'32 a'64
+)
+Notice that you only have to specify the duration when it changes: Lily
+assumes a note has the same duration as the previous one.
+
+Now we can already write a little tune
+mudela(fragment,verbatim,center)(
+c' d' e' c' | c' d' e' c' | e' f' g'2
+)
+As you'll probably have guessed,
+the vertical bar  code(|) may be used to mark
+measures.
+
+In the scale shown above
+we left-out the last c note of the next octave.
+Postfixing the pitch with a quote code(')
+produces a note by one octave higher
+mudela(fragment,verbatim,center)(
+c c' c''
+)
+
+Postfixing the pitch with a comma, code(,)
+produces a note by one octave lower
+mudela(fragment,verbatim,center)(
+a a, a,,
+)
+
+sect(Slurs and Ties)
+
+A tie connects two adjacent note heads
+
+mudela(fragment,verbatim,center)(
+e' ~ e'
+)
+
+Whereas a slur rather connects `chords', 
+and tries to avoid crossing stems
+
+mudela(fragment,verbatim,center)(
+e'( )e'
+)
+
+And of course, such a (legato) slur can span several notes
+mudela(fragment,verbatim,center)(
+c'( d' e' )f'
+)
+
+sect(Beams and Tuplets)
+
+A beam is 
+mudela(fragment,verbatim,center)(
+[a'8 a'] [a'16 a' a' a']
+)
+
+Here's a beamed triplet
+mudela(fragment,verbatim,center)(
+[/3 a'8 a' a']/1
+)
+
+a triplet without a beam
+mudela(fragment,verbatim,center)(
+\[/3 a'4 a'8\]
+)
+
+and a combination
+mudela(fragment,verbatim,center)(
+[/3 a'8 a'16 a'] a'8 \]
+)
+
+Abbreviations
+mudela(fragment,verbatim,center)(
+c'1:16 [:16 e'1 g']
+)
+
+mudela(fragment,verbatim,center)(
+c'4:32 [:16 c'8 d'8]
+)
+
+sect(Notenames)
+
+Lily has predefined sets of notenames
+for various nop(languages)footnote(These 
+are Dutch, English, German, Italian and Swedish.
+Simply include the language specific init file file(language.ly).).
+The default set are the ones we like best are the Dutch notenames.
+
+A sharp is formed by adding code(is)
+mudela(fragment,verbatim,center)(
+cis' dis' eis' fis' gis' ais' bis'
+)
+
+and a flat is formed by adding code(es)
+mudela(fragment,verbatim,center)(
+ces' des' es' fes' ges' as' bes'
+)
+
+With the obvious names for double sharps
+mudela(fragment,verbatim)(
+cisis' disis' eisis' fisis' gisis' aisis' bisis'
+)
+
+and double flats
+mudela(fragment,verbatim)(
+ceses' deses' eses' feses' geses' ases' beses'
+)
+
+
+There are two special `notenames', the rest
+mudela(fragment,verbatim,center)(
+r16 [a' a' a']
+)
+
+and the space
+mudela(fragment,verbatim,center)(
+a'2 s-"diminuendo" | a'
+)
+
+
+sect(Commands)
+
+mudela(fragment,verbatim,center)(
+\clef "bass"; c
+)
+
+and a clef-change
+mudela(fragment,verbatim,center)(
+\clef "treble"; f' e' \clef "alto"; d' c'
+)
+
+mudela(fragment,verbatim,center)(
+\time 3/4; c' g' g' |
+)
+
+mudela(fragment,verbatim,center)(
+\key d;
+g a b cis' d' e' fis' g'
+)
+Note how Mudela allows you to 
+convey a musical message and doesn't force  you to produce a list of typesetting commands.
+If the music has a code(cis), you type a code(cis).
+Depending on the key and context of the note
+Lily will determine what accidentals to typeset.
+
+A reminder accidental can be forced by
+using an exclamation mark code(!)
+on a pitch a reminder accidental
+mudela(fragment,verbatim,center)(
+cis' d' e' cis' | c'! d' e' c' |
+)
+
+mudela(fragment,verbatim)(
+\time 2/4;
+\bar "|:"; c' c' \bar ":|:"; c' c' \bar ":|"; c' c' \bar "|."; 
+)
+
+sect(Chords and Voices)
+
+Here's a simple chord
+mudela(fragment,verbatim,center)(
+<c e g>
+)
+
+here are a few
+mudela(fragment,verbatim,center)(
+<
+        { c'()d'()c' }
+        { e'()f'()e' }
+        { g'()a'()g' }
+>
+)
+
+and similarly voices
+mudela(fragment,verbatim)(
+<
+        { \voiceone c'4 g' c' g' }
+        { \voicetwo c2 g2 }
+>
+)
+
+
+sect(A complete example)
+COMMENT(%label(se:complete))
+
+A Mudela file needs some red tape
+
+mudela(verbatim)(
+\score{
+        \melodic {
+                c' d' e' c' |
+                c' d' e' c' |
+                e' f' g'2 |
+        }
+}
+)
+
+sect(Lyrics)
+
+Lyrics are entered like notes, with pitches substituted
+by text. 
+
+All syllables are entered separately, separated by whitespace 
+verb(
+Twin-4 kle4 twin-4 kle4 ... 
+)
+
+Two syllables or words that compose a single
+duration entry are bound together using an underscore 
+verb(
+He_could4 not4
+)
+
+
+COMMENT(
+URG
+                        Fr\`e-4 re Ja- que
+                        Fr\`e- re Ja- que
+)
+
+mudela(verbatim,center)(
+\score{
+        < 
+                \melodic  \transpose c''  {
+                        c d e c | c d e c |
+                        e f g'2 | e'4 f g'2
+                        \bar "|.";
+                }
+                \type Lyrics \lyric{ 
+                        DOEXPAND(Fr\)`e-4 re Ja- que
+                        DOEXPAND(Fr\)`e- re Ja- que
+                        Dor- mez vous?2
+                        Dor-4 mez vous?2
+                }
+        >
+}
+)
+
+sect(Composition: forming bigger structures)
+label(sec:grammar)
+
+The computer savy user may be interested in a more formal
+specification.  We can capture what have learned about forming
+sentences in Mudela in a context-free grammar.
+
+latexcommand(\smallskip)
+
+table(2)(lll)(
+        row(cell(em(Music))cell(: em(Note)))
+        row(cell()cell(code(|) em(Rest)))
+        row(cell()cell(code(|) code({) em(MusicList) code(})))
+        row(cell()cell(code(|) code(<) em(MusicList) code(>)))
+        row(cell()cell(code(|) em(Command)))
+        row(cell()cell(code(|) code(\type) em(string) code(=) em(string)  em(Music)))
+        row(cell()cell(;))
+        row(cell(em(MusicList))cell(: em(empty)))
+        row(cell()cell(code(|)  em(MusicList)  em(Music)))
+       row(cell()cell(;))
+)
+
+latexcommand(\smallskip)
+
+
+
+
+
+In mathematics you can form expressions by combining expressions,
+which are ultimately some kind of atom or terminal symbol.  The same
+goes for Mudela: there are some basic building blocks, and by
+combining those you create complex music.
+
+You can combine music in three ways:
+itemize(
+it()If you enclose a sequence of music-elements in braces ( code({)
+    and code(}) ), then you form another kind of music called
+sequential music
+    with those pieces.
+  The duration of sequential composition is the sum of the durations of its elements
+  verb(
+      { c c g g a a g2 }      % twinkle twinkle
+      { { c c g g} { a a g2 } }
+  )
+it()You can stack music by enclosing a sequence of music elements
+    with code(<) and code(>). This is called simultaneous music.  
+    The duration of a simultaneous composition is the union of the durations 
+    of its elements Example:
+    verb(
+        <a4 {cis8 cis8} e'4>      % a-major chord
+    )
+it()You can form music by transposing music:
+    verb(
+    \transpose  
+        d       % from c to the d that's almost one octave down
+                { e4 f4 }       % the horizontal music
+)
+it()verb(\type)
+it()verb(\property)
+it()verb(\translator)
+it()verb(\relative)
+)
+
+Of course you can also combine these three mechanisms.
+verb(
+{ c <c e> <c e g> <c e g \transpose d' dis > }  % 4 increasing chords
+)
+
+
+sect(Durations)
+
+A duration always starts with the duration type (1,2,4 etc), and then
+any optional multipliers/dots.  `Gregrorian' durations can be entered
+as follows
+verb(
+c'\breve
+gis'\longa
+)
+
+
+        
+sect(Time signatures/groupings)
+
+A time signature specification has this form:
+verb(
+\time 3/4 ;
+)
+
+Rhythmic grouping is  a concept closely associated with this. For
+example, in a 5/8 time signature, the counts are grouped 2+3. In Mudela this is
+entered as
+verb(
+\grouping  8*2 8*3 ;
+)
+
+You can start the piece with a partial measure, the command takes a
+duration as an argument
+verb(
+\partial 16*3;
+)
+
+Make the piece start with a upstep 
+lasting 1 3/4 quarter notes.
+
+These commands  constitute `Music', and have a duration of 0.
+
+
+sect(Properties)
+
+By default the same accidentals are valid for all octaves, but
+  this can be changed with the property code(specialaccidentals).
+
+
+The identifier code(\specialkey) sets the property for the Staff.  A
+key with two flats in one octave and three
+  sharps in the next can be declared with verb(\specialkey
+\accidentals bes es fis' cis' gis';)
+
+sect(Music fragments)
+label(tutorial:music-fragments)
+
+Sometimes you only need to print a small fragment of music, perhaps 
+something much like one of the examples in this document.  Back in
+section ref(sec:running-lilypond) we told you that the music you
+enter should be encapsulated in something like:
+verb(
+\score<
+        \melodic\relative c{
+               d
+       }
+       \paper{ }
+       \midi{ }
+>
+)
+where the only interesting information is this particular example is verb(
+       d
+)
+The rest of the above example was already nicknamed `red tape'.
+You may easily get bored if you have to provide this same red tape 
+for every fragmenty you nop(try)footnote(Of course, in most cases your
+favourite text editor (TM)
+will help you out.).
+
+Luckily there's a trick around this, and it's called file(.fly) files.
+If you use the extension file(.fly) for Mudela file file(foo),
+LilyPond will embed your file(foo.fly) nop(in)footnote(Or something very 
+similar.  If you want to know exactly, see file(init/init.fly)):
+verb(
+\score<
+        \melodic\relative c{
+               <<foo.ly>>
+       }
+       \paper{ }
+       \midi{ }
+)
+
+Here's how it works.  If you run LilyPond on your file file(bar.ly), you
+may notice that she starts-off by reading quite a number of files before
+she actually reaches your file(bar.ly).  There's no magic going on, Lily
+by default reads an initialisation file (file(init/init.ly)).  In the
+initialisation process a lot of things are defined that you'll need for 
+normal operation, such as notenames and various other mudela shortcuts,
+engraver and perforer definitions, font sizes, musical dimensions and 
+paper sizes.  When you use the extension file(.fly), Lily just starts
+reading another initialisation file (file(init/init.fly)), that includes the 
+red tape for you too.
+
diff --git a/Documentation/tex/tutorial.yo b/Documentation/tex/tutorial.yo
new file mode 100644 (file)
index 0000000..c7fe410
--- /dev/null
@@ -0,0 +1,1995 @@
+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>)
+
+latexpackage()(a4wide)
+latexlayoutcmds(
+%\usepackage[latin1]{inputenc}
+\input mudela-book
+)
+
+whenlatex(notableofcontents())
+whentexinfo(notableofcontents())
+
+article(Mudela, the Music-Definition Language)
+      (Han-Wen Nienhuys and Jan Nieuwenhuizen)
+      (nop()PIPETHROUGH(date "+%B %d, %Y")()()nop())
+
+COMMENT(
+
+* paragraphs have too much space.
+
+)
+
+
+latexcommand(\def\interexample{})
+latexcommand(\def\preexample{\par})
+latexcommand(\def\postexample{\par\medskip})
+latexcommand(\def\file#1{{code(#1)}})
+
+whenhtml(
+nsubsect(Disclaimer)
+This document is written in url(Yodl)(ftp://pcnov095.win.tue.nl/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().
+)
+
+sect(Introduction)
+label(tutorial:introduction)
+latexcommand(\parindent2pc)
+  
+If you are reading this, you probably are interested in printing
+music.  LilyPond is a program that can print music from a
+specification that you, the user, supply.  Using LilyPond may be a bit
+quaint in the beginning, because you have to give that specification
+using a em(language).  That might not be what you expect if you are
+familiar with graphical interfaces.  But there are some big
+advantages: first, once you master the language, entering music can be
+done quite efficiently.  Secondly, it is possible to explain exactly
+what the meaning of a language is, i.e., the semantics are much
+clearer.  Thirdly, since the program is not interactive, no tradeoffs
+have to be made between processing speed and beauty of the output.
+
+This chapter is a gentle introduction to Mudela, the language that
+instructs LilyPond to typeset music.  We will explain Mudela by
+presenting a series of examples of Mudela input.  The corresponding
+output will be shown on the right or below, just as it was produced by
+LilyPond.
+
+We will assume that you more or less understand the basics of music notation.  
+If you are not familiar with the English terms for music notation, you 
+should consult bind(Appendix)ref(glossary): it contains a glossary 
+of musical terms along with translations in some other languages.
+
+If you want to try the examples given here, you should have look a 
+look at bind(Section)ref(sec:running-lilypond) first.
+
+sect(Music copying, music definition and music entry)
+label(tutorial:copying-vs-def-vs-entry)
+
+If you have copied music before, using LilyPond may seem awkward
+to you in the beginning.  The purpose of LilyPond informally is
+explained by the term `music typesetter'.
+
+This may give the impression that the program is like a drawing tool
+and that it lets you control precisely how the music is formatted.
+This is not the case: not only does the program print musical symbols,
+LilyPond also tries to make esthetic decisions---to be precise, we
+programmed her to do what we find nop(pretty.)footnote(We formed our
+taste by looking at, and reading all about fine music engraving.  Of
+course, our taste is also bound by all the accepted rules of common
+music notation.)  You do not have complete control over what is
+happening.  Usually that is not a big loss, since good engraving is a
+very complex trade. In other words, you don't have control, so you do
+not have to worry about what is happening precisely.
+
+Secondly, we expect you to enter the meaning of the music, not the
+sheet music itself.  The input to LilyPond is a music definition,
+which is something different than notation: notation is a graphical
+system.  Put more concretely: your input to LilyPond should contain
+information like ``a dotted quarter note, pitch nop(d)sups(2).''
+LilyPond will figure out from the musical information that a black
+note head with a stem but without flag, fourth staff line, with dot
+should be printed.
+
+When you are copying music by hand from a printed score, you don't have 
+to know what the score means; you just copy the symbols.  With LilyPond 
+such a thing is not possible.  You have to enter the meaning of the 
+symbols, and this might not always be as easy.  On the other hand, once 
+entered, any piece of music can be played and transposed automatically.
+
+Finally, in some spots we will cheat a bit when it comes to musical
+definition.  Mudela has some entry modes that help to make typing
+Mudela pleasant.  For example, the phrase ``a dotted quarter note,
+pitch nop(d)sups(2)'' translates to the following longhand:
+verb(
+\musicalpitch { 1 2 0 } \duration { 2 1 })
+
+This data is what we consider the musical em(definition).  Mudela
+has a special entry mode where you can conveniently abbreviate this to
+`code(d''4.)'.  There are some features that also make the quotes and
+numbers in `code(d''4.)'  superfluous in some cases.
+
+For those who are curious, the numbers in `code(\musicalpitch { 1 2 0
+})' example mean octave, notename, and accidental respectively.  The
+numbers in `code(\duration { 2 1 })' are the (negative) logarithm of the
+duration (2 is a quarter note, 3 is an eighth note, etc.) and the number
+of augmention dots respectively.
+
+sect(When you know the notes to nop(print)ellipsis())
+
+The basic building block of music is the note.  You can have LilyPond
+print a note by specifying its pitch and duration.  The pitch of the
+central C is written as code(c').  This is in line with musicological
+notation; there this pitch is transcribed as nop(c)sups(1) or c'.  A
+quarter-note duration is written as code(4).  So, to print a quarter
+note whose pitch is central C, you enter the following:
+mudela(fragment,verbatim,center)( c'4 )
+
+
+subsect(Duration)
+
+The duration of a note is specified as a number: a whole note is
+denoted by 1, a half note by 2, a quarter by 4, and so on.  If you
+want to augment a duration with a dot, simply affix a period to the
+number.  Here are some random notes to show how it works.
+
+mudela(fragment,verbatim)(
+  c'1 c'2 c'4 c'8 c'16 c'32 c'64 c'64 c'2. c'8. c'16
+)
+
+subsect(Basic pitches)
+
+The pitch code(c') actually consists of two parts: one part for the
+note name, and one for the octave.  The letter specifies which note
+name to use: note names simply are the letters code(a) to code(g).
+The number of apostrophes specifies the octave to use: the central C
+is denoted by code(c').footnote(By convention, the A above central C
+at concert pitch is the tone that is used to tune instruments.  Its
+frequency is about 440 Hz.)  The C which is an eighth higher (the C in
+the ``two-line octave'') is denoted by code(c''): every octave adds a
+quote.  A note name without quotes designates the pitch below code(c')
+(the C in the ``small octave''). If you want to go down even further,
+commas should be added, e.g., the C in the ``contra octave'' is
+expressed as code(c,,).footnote(The comma is meant to represent a
+sunken apostrophe.)
+
+
+This example demonstrates octaves:
+mudela(fragment,verbatim,center)(
+   c,,4 c,4 c4 c'4 c''4 c'''4
+)
+
+And this example demonstrates notenames:
+mudela(center,fragment,verbatim)(
+  c'4 d'4 e'4 f'4 g'4 a'4 b'4 c''4
+)
+
+A rest can be entered as a note with the special name code(r), e.g.,
+mudela(fragment,verbatim,center)(r4)
+
+This already gives us enough material to make simple songs. In
+bind(Figure)ref(fig:twinkle1) a portion of the traditional song
+``Twinkle Twinkle Little Star'' is shown.
+
+latexcommand(\begin{figure}[h])
+  center(
+mudela(fragment,verbatim)(
+        c''4 c''4 g''4 g''4
+        a''4 a''4 g''2
+)
+    latexcommand(\caption{Twinkle twinkle little star (version 1)})
+    label(fig:twinkle1)
+  )
+latexcommand(\end{figure})
+
+
+subsect(Alterations)
+
+We have so far ignored chromatically altered pitches.  The names `a'
+to `g' for entering pitches are convenient: they are short,
+pronounceable and they resemble the words for pitches in normal
+musical vocabulary.
+
+Enter flats and sharps.  In English there is no standard terse word
+for C sharp or C flat.  For this reason, we implemented a different,
+non-English convention for entering altered pitches: a note is made
+sharp by adding the suffix `--is' to its name, and flat by adding the
+suffix `--es'.  For a double sharp another `--is' suffix is added, for
+flats another `--es' suffix. The names for the alterations of C are
+given in bind(Table)ref(notename-tab).
+
+latexcommand(\begin{table}[h])
+  center(
+    table(2)(ll)(
+      row(cell(english)cell(LilyPond))
+      rowline()
+      row(cell(c double flat)cell(ceses))
+      row(cell(c flat)cell(ces))
+      row(cell(c natural)cell(c))
+      row(cell(c sharp)cell(cis))
+      row(cell(c double sharp)cell(cisis))
+    )
+  )
+  latexcommand(\caption{Default note names})
+  label(notename-tab)
+latexcommand(\end{table})
+
+Variations on this convention are used in a number of germanic
+languages, notably Dutch, German, Swedish, and Norwegian.  To be
+precise, LilyPond actually defaults to Dutch notenames, with
+code(aes), code(aeses), code(ees) and code(eeses) added for
+consistency.
+
+Throughout this document we will continue to use the Dutch names.  To make
+(Dutch) pronunciation easier, the a-flat and e-flat are contracted to
+code(as) and code(es).  Similarly, the a double flat and e double flat are
+contracted to code(ases) and code(eses).
+
+If you are not comfortable with these names, you can make your own.
+Note names for different languages are included with the example
+initialisation files, amongst others English (C sharp is abbreviated
+to code(cs)), Italian, Swedish and Norwegian.  If you want to use
+these names, you should look at bind(Section)ref(subsect:include) for
+information on how to use include files.
+
+sect(Running LilyPond)
+label(sec:running-lilypond)
+
+In the previous section some basic elements of Mudela were presented.
+We didn't want to bore you too much with repetitive details, so we
+left out some red tape that's needed for a  of Mudela in a form that is accepted
+by LilyPond.  To
+be precise, we wrote code(X Y Z), when we really meant
+verb(\score {
+   \melodic { X Y Z }
+   \paper {}
+})
+We will continue to leave out the red tape this, until the time is fit to explain what the
+above it means.
+
+
+Because LilyPond uses a language, it  is a so called em(batch)
+program.
+This means, that you use a
+text editor (such as code(emacs) or code(vi)) to create an input
+file.  When you are done editing your input file, you save it, and you
+run LilyPond on the file.  If Lily finds any errors in your input file
+then nop(she)footnote(We're sure that if computer programs could have
+  gender, LilyPond would be a female computer program.  So we will
+  refer to the program as a she. This gender-bending is not to tease
+  you, dear reader.  We do it in real life as well. In the past two
+  years LilyPond has become sort of a baby daughter to us, keeping us
+  awake at night, but also providing us with lots of joy.  We hope you do
+  not mind our little aberration from the traditions of computer-manual
+  writing.) COMMENT( 
+ The name LilyPond is actually sort of a girl's name.  Can you guess which
+ one ?)
+will complain.  If everything went well, then she'll generate a file, that
+you can process further to view or print.
+
+Using LilyPond to print or view some music is a four-step procedure.
+To get you started we'll run down the full procedure for you once.
+
+enumerate(
+it()
+Fire up your favourite editor (if you don't
+know any editors, try code(joe silly.ly)),
+and key in the example from bind(Figure)ref(fig:twinkle1), with red tape:
+verb(
+\score {
+        \melodic {
+          c''4 c''4 g''4 g''4
+          a''4 a''4 g''2
+        }
+        \paper {}
+}
+)
+
+Save your file as file(twinkle.ly).footnote(The default extension for Mudela
+files is file(.ly).)
+
+it()
+Run LilyPond on your newly created file: enter code(lilypond twinkle).
+LilyPond will then print all kinds of mumbo jumbo that can safely be
+ignored.  You might see something like this:
+verb(
+GNU LilyPond 0.1.55/FlowerLib 1.1.39
+Parsing ... [/home/hanwen/musix/spacer/init/lily-init.ly[/home/hanwen/
+
+        ... stuff left out here ...
+
+                              ]  Documentation/twinkle.ly]
+Interpreting music ...[1] (time: 0.04 seconds)
+Preprocessing elements... 
+Calculating column positions ... [2]
+Approximated: 1 lines, (with an average of 4.0 columns)
+Time: 0.01 seconds
+warning: Can not solve this casting problem exactly; revert to Word_wrap
+[2]Time: 0.00 seconds
+
+Postprocessing elements...
+TeX output to twinkle.tex ...
+)
+
+All has gone well; there were some warnings but no errors.  The run
+resulted in output, a TeX file called file(twinkle.tex).
+
+file(TeX) is usually spelled TeX().  It is a batch program for
+typesetting text. It was developed by the great programmer and
+scientist Donald Knuth to typeset his famous bookseries em(The Art of
+Computer Programming).  As you can see, TeX() can be adapted to do a
+lot more.  whenlatex(In fact, the document that you are reading now was also
+produced with TeX().) COMMENT(ugh.)
+
+
+it()
+  To do something useful with the output you have to run TeX() on it
+  first.  Run the command code(tex twinkle).  The output should resemble this:
+verb(
+This is TeX, Version 3.14159 (C version 6.1)
+(twinkle.tex
+Babel <v3.6h> and hyphenation patterns for american, dutch, loaded.
+(/home/hanwen/lib/texmf/tex/lilypond/lilyponddefs.tex
+(/home/hanwen/lib/texmf/tex/lilypond/dyndefs.tex)
+(/home/hanwen/lib/texmf/tex/lilypond/fetdefs.tex
+(/home/hanwen/lib/texmf/tex/lilypond/feta20.tex)
+(/home/hanwen/lib/texmf/tex/lilypond/lily-ps-defs.tex))) [1] )
+Output written on twinkle.dvi (1 page, 3084 bytes).
+Transcript written on twinkle.log.
+)
+  The human translation is ``everything went OK, the result is one
+  page long, and I put it in file(twinkle.dvi).''
+
+it()The file(twinkle.dvi) file is a description of how a piece of
+text looks when it is printed.  You can view it, or print it.  If you
+are using a Unix system equipped with X-Windows, then you can issue
+the command file(xdvi twinkle) to view the result.  If this is not the
+case, consult your local TeX() guru on printing and viewing DVI files.
+What is in your window should approximately look like this:
+mudela()(
+\score {
+        \melodic {
+          c''4 c''4 g''4 g''4
+          a''4 a''4 g''2
+        }
+        \paper { linewidth = 13.\cm; }
+}
+)
+
+it()
+If you want to print file(twinkle.dvi), you should invoke the command
+code(dvips twinkle).  Running this command should generate a
+PostScript file called file(twinkle.ps).  This file can be printed on
+any PostScript compatible printer.  You should not use any other
+tools: the output from LilyPond contains fragments of PostScript which
+will not print correctly if you don't use PostScript.  If your printer
+doesn't understand PostScript, you should check out GhostScript, a
+PostScript emulator.
+)
+
+
+
+The four-pass procedure sketched above is a bit clumsy.  Moreover, the
+result is pretty crude: the page does not include prettily printed
+titles and if you are unlucky, the margins don't come out well.  Jan
+Arne Fagertun wrote a tool to take the above steps out of your hands,
+make neat margins and print titling.  The tool is called file(ly2dvi),
+and it should be on your system if you use Lily on a Unix platform.
+If you use file(ly2dvi), then you can do verb(ly2dvi twinkle.ly ) in
+stead of steps 2 and 3.  You will feel the real advantage of using
+file(ly2dvi) when you add titling to the music.  This is something
+that we will discuss in bind(Section)ref(tutorial:titling).
+
+
+COMMENT(This document does not cover all of Mudela.  Due to technical details,
+the precise working of Mudela is coupled to the innards of LilyPond.
+If you really want to know all the details, your best bet would be to
+get the sources to LilyPond and read the parser and scanner source.
+They are in file(lilypond-x.y.z/lily/parser.yy) and
+file(lilypond-x.y.z/lily/lexer.ll).)
+
+
+
+sect(Chords)
+
+Up till now we have only considered music that was rather simple.  All
+the music had notes going in one direction, from left to right, one
+note following the other.  You might be wondering if this is all Lily
+can do, or whether it is possible to stack notes as well (creating
+em(chords)).  Rest assured: we designed LilyPond while keeping in mind
+that she must be able to handle any notation construct that can be
+expressed conveniently.  Of course we did not leave out chords.
+
+In Mudela you can form a chord of several notes by enclosing them in
+pointed parentheses, bind(i.e.)bind(langle())bind(and)rangle().  ASCII
+doesn't really have these delimiters, so Mudela uses the larger-than
+(code(>)) and smaller-than (code(<)) signs instead.  For example, a
+D-major nop(chord)footnote(Recall what was said in the previous
+section about flats and sharps: the word code(fis) means an f sharp.)
+can be described by the following fragment:
+mudela(fragment,verbatim,center)(
+  <d'8  fis'8 a'8 d''8>
+)
+
+  Chords can be entered in the music in the same places that notes
+can.  As an example we give a snippet of ``Twinkle Twinkle Little
+Star'' in chords.  The chords may seem, slightly unconventional, but they
+only serve to show how chords work.  We've aligned the chords
+in the input on their starting beat just to help you reading it.
+This layout does not influence the typesetting result in any way.
+
+mudela(verbatim, fragment)(
+  c''4             c''4              <c''4 g''4>       <c''4 e''4 g''4>
+  <c''4 e''4 a''4> <b'4 d''4 a''4>   <b'2 d''2 g''2>
+  <a'4 d''4 f''4>  <bes'4 d''4 f''4> <bes'4 c''4 e''4> <g'4 c''4 e''4>
+  <e'4 a'4 d''4>   <a4 g'4 cis''4>   <d'2 f'2 d''2>
+)
+
+
+
+sect(Shortcuts for duration)
+
+If you typed the last example into a Mudela file, you will have
+noticed that the input has lots of repetitions.  You will probably
+have made some errors with the right durations and number of
+octavation quotes.
+To save keystrokes and prevent errors Mudela
+has some handy shortcuts.  The simplest is the shortcut for
+durations.  You don't have to type the duration if it
+is the same as the last duration entered.  This saves a considerable
+number of keystrokes, and thus reduces the potential for errors.  The
+previous example can be reduced to verb(
+  c''4          c''            <c'' g''>        <c'' e'' g''>
+  <c'' e'' a''> <b' d'' a''>   <b'2 d'' g''>
+  <a'4 d'' f''> <bes' d'' f''> <bes' c'' e''> <g' c'' e''>
+  <e' a' d''>   <a g' cis''>   <d'2 f' d''>
+)
+
+
+If you entered this, you probably made some little errors with the
+right amount of quotes as well.  To remedy this, mudela has another
+feature called `relative octaves', which reduces the amount of quotes
+needed.  If you want to enter large pieces of music em(now) we
+recommend you make an excursion to
+bind(Section)ref(sec:relativeoctaves) and learn about relative
+octaves.
+
+
+
+sect(Comments)
+
+If you want to make some private notes about the Mudela code that you
+entered, you can do so by inserting comments into your file.  The
+contents of these comments are ignored by LilyPond.  Mudela has two  comment
+styles: line comments and block comments.  The line comment
+is introduced by the percent sign:
+verb(
+  c''4
+  c''4   % shouldn't this be a different pitch?
+)
+
+Block comments are enclosed in code(%{) and code(%}).
+
+verb(
+  c''4
+       %{
+       Ludwig van Bavaria's  original manuscript has an fffff dynamic sign.  
+       Clearly one can see the onset of paranoid schizophrenia in the
+       composer from these subtle nuances in his writings.
+       %}
+  c''4 
+)
+
+
+sect(Adding nuances: articulation and dynamics)
+
+Having just chords and notes does not give you real music.  Real music
+has more liveliness to it: music can have articulation, dynamics
+(louder and softer), etc.  This liveliness has notation, so LilyPond
+can print it.  We'll start out by explaining how to obtain the
+smallest grains of nuance: the articulation of a single note.  Articulation
+is entered by writing a dash and the name of the desired articulation
+mark.  You have to add a backslash in front of the name to distinguish
+it from the name of a note.  mudela(fragment,verbatim)(
+  c''4-\staccato
+  c''4-\tenuto )
+
+Typing a lot of staccato notes in this syntax will get tedious very
+quickly.  Therefore, Mudela has some handy abbreviations for
+articulation marks such as staccato and tenuto.  They are shown in the
+following example:
+
+mudela()(
+\score{ \melodic {
+       \property Voice.textstyle = typewriter
+        c''4-._"c''4-." s4
+        c''4--_"c''4--"  s4
+        c''4-+_"c''4-+" s4
+        c''4-|_"c''4-|" s4
+        c''4->_"c''4->"  s4
+        c''4-^_"c''4-\\^{ }"  s4 }
+       \paper { linewidth = 12.\cm; }})
+
+
+
+Text and digits for fingering can be entered in the same manner: add a
+dash and the text or digit to be printed:
+mudela(fragment,verbatim)(
+  c''4-1 g''4-5 c''-"Sul tasto" )
+Currently, the meaning of the
+syntax `note-dash-digit/articulation/text' is just ``add a superscript to this
+note.''  This is not in line with our goal to em(define) music with
+Mudela.  We hope that this will be fixed in a future version of the
+language.  In the meantime you can abuse this: the super- and
+subscripts can be forced into up or down position respectively by entering an
+a caret (code(^)) or an underscore, code(_) instead of the dash:
+mudela(fragment,verbatim,center)(
+  c'4-^ c'4^^ c'''4-^ c'''4_^
+)
+
+Dynamic markings are another way to add a nuance to a note.  They are
+entered by adding the name for the dynamic sign after the note.  You
+should not enter a dash between the name and the note.footnote(This
+  is inconsistent.  We hope that this will be fixed in a later
+  version of the language.)
+mudela(verbatim,fragment)(
+  c4 \ff c4 \fp c4 c4 \ppp c4 c4 \sfz
+)
+COMMENT(UGH)
+
+sect(Bridging the notes: beams, slurs and ties)
+
+Up till now most of the typesetting concerned simple fixed symbols
+only.  Now we turn to variable symbols: symbols that run from one note
+to another. In LilyPond terminology, such a symbol is called a
+em(spanner).  To print a spanner, you have to attach a marker to the
+note that begins it and to the one that ends it.
+
+
+The first example of such a symbol is the slur.  For the slur, the
+start marker is the opening parenthesis. It won't be a surprise that
+the stopping marker is the closing parenthesis.
+For example:
+mudela(fragment,center,verbatim)( c'4( )c'4 )
+
+otice that the parentheses should be between the notes.footnote(The
+location of the parentheses might be changed in a future version of
+the language.)
+
+It is your job to make sure that each slur that you start also ends.
+If it doesn't end, then Bad Things are likely to happen.  The slur is
+quite flexible: you can nest nop(slurs,)footnote(This is inconsistent when
+compared to the syntax for articulation hints.  This will probably be
+fixed soon.) and you can connect a note with a slur on both the left and the
+right side:
+
+mudela(fragment,verbatim,center)(
+  c'4((   )c''4 )c'4( )g'4 
+)
+
+Another spanner is the beam (see bind(Figure)ref(mud:beam)).  It
+indicates the duration of the connected notes, and thus it acts like an
+extended version of the flag.  Secondly, the pattern of
+left/right-pointing beams hints at the metric structure of the
+measure.
+
+
+latexcommand(\begin{figure}[h])
+  center(
+    mudela(fragment)([c'8 c'8] [c'16 c'16 c'16 c'16] [c'16. c'32 c'32 c'16.] )
+    latexcommand(\caption{Some beams})
+    label(mud:beam)
+  )
+latexcommand(\end{figure})
+
+
+Strictly speaking, a beam is not a musical concept.  The pattern of a
+beam can be derived from the structure of the time signature and the durations
+of the notes. It is merely a device that helps you understand the
+rhythms notated. Unfortunately, LilyPond is not smart enough to insert
+beams into your music on her own. You will have to instruct her by
+marking the starting and stopping point of the beam with `code([)' and
+`code(])' respectively, e.g.
+
+mudela(fragment,verbatim,center)(
+  [g'8 g'8]
+)
+
+LilyPond has code that guesses what the pattern should look like, so
+that you don't have to specify the beaming for complicated
+patterns.footnote(Unfortunately the algorithm used is not foolproof yet:
+  code([c8. c32 c32]) will produce incorrect results.)
+
+Again, it is your responsibility to make sure that you end every beam
+that you start.
+
+A third spanner is similar to the slur: the tie.  The tie looks like a
+slur, but a slur connects whole chords, whereas the tie connects
+note heads.  Tied notes should be played as one long note.
+In analogy with TeX()'s tie (which  ties together words with a
+space), LilyPond's tie is entered as a tilde, ~.  
+mudela(verbatim,center,fragment)(c''1 ~ c''4)
+
+The input convention for the tilde is somewhat peculiar when used in
+conjunction with chords.  Internally, the extra information that is
+represented by the tilde has to be attached to a note (or to a rest,
+for that matter).  For this reason, you can't put the tilde between
+two chords (as in code( <c' g'> ~ <c' g'>)).  The tilde sign must be
+directly after a note of the chords.  It does not matter which
+one. The following example demonstrates this:
+mudela(fragment,verbatim,center)(
+  <c'1 ~  g' es''> <c'4 g' es''> 
+)
+
+sect(Commands)
+label(sec:commands)
+
+Up till now, we only printed notes, and correspondingly only entered
+notes. But notation contains many other constructs, constructs that
+help you with reading those notes.  Examples of such constructs are
+clefs, time signatures, keys etc.
+
+If you look carefully at the example in
+bind(Figure)ref(fig:twinkle1), you will notice that the output
+includes some bar lines and clefs, and that there are no references to
+those in the input.  They were generated automatically.
+
+Not all such hints can be inserted automatically, and you can also
+override some of the settings.  This can be done by inserting various
+commands between the music.  The general form of these commands is
+center(
+  em(keyword) sc(arguments)
+)
+
+em(keyword)s are words that have a special meaning to the parser of
+Mudela.  Because the parser must be able to distinguish the keywords
+from note names, they have to be preceded by a so-called escape
+character, the backslash, `code(\)'.  To separate the arguments from
+any notes that might follow the arguments, you have to end your
+command with a semicolon.  An added benefit of this construction is
+that the commands stand out between your notes, because of the
+backslashes.
+
+So the general form actually is `code(\keyword argument argument ... ;)'
+Let us review these commands:
+
+description(
+dit(code(\clef) var(clefname)) This command sets the current clef for notation,
+  i.e., a clef symbol is printed and the notes following this command
+  are shifted vertically.  The argument is a string, the name of the
+  new clef. The default clef is the treble clef.
+  mudela(fragment,verbatim)(
+    \clef "bass"; c'4
+    \clef "treble"; c'4
+    \clef "alto"; c'4    
+  )
+dit(code(\key) var(pitch)) This command changes the current key signature.  The
+  key signature is printed at the start of every line.  The argument
+  is the name of the corresponding major key.  The key of C-minor can 
+  thus be specified as `code(\key es)'.
+  
+dit(code(\accidentals) var(pitchlist))
+
+This command changes the current key signature.  The signature is
+given in the form of a list of accidentals, which can be useful for
+unconventional keys.  The key of C-minor can be specified as
+`code(\accidentals bes es as)'.   The command `code(\accidentals fis es
+bis)' provides a more exotic example.
+
+
+dit(code(\time) var(numerator)code(/)var(denominator))
+  This command chages the current time signature.  LilyPond uses the
+  time signature to
+  calculate where to place the bars that start a measure.  These bars
+  in turn are the places where a system can be broken into lines.
+
+  The default value for this time signature is common time (4/4).  You
+  can also tell this from the  Twinkle ``Twinkle Little
+Star'' example in bind(Figure)ref(fig:twinkle1).  This
+song actually has a 2/4 time signature, so a metrically more correct
+  version  would start with as follows:
+  mudela(fragment,center,verbatim)(
+    \time 2/4;  c'4 c'  g' g' 
+  )
+
+
+dit(code(\cadenza) var(togglevalue)) When typesetting music without a
+regular meter (such as an ad libitum cadenza), no bar lines should be
+printed.  In LilyPond you can achieve this by issuing the command
+`code(\cadenza 1)': it turns off the automatically
+generated bar lines.
+
+You switch them on again with `code(\cadenza 0)', and then a bar line
+is printed.  LilyPond will act as if you are again at the start of a
+measure.
+
+dit(code(\bar) var(bartype))
+  This command lets you print special bar lines, such as repeats.  You
+  can also use it to allow line breaks when entering cadenzas.  The
+  argument var(bartype) is a string that describes what kind of bar line to print.
+
+mudela(fragment,verbatim)(
+    \bar "|:"; c'4 \bar ":|:";    c'4  \bar ":|";  c'4 \bar "||";
+    c'4 \bar "empty"; c'4 \bar "|.";
+)
+  The command `code(\bar "empty")' does not create any visible bar
+    line, but it does  tells LilyPond to allow a linebreak
+  at that position.
+  
+dit(code(\partial) var(duration)) some music starts with a measure that
+isn't fully filled, a so-called upstep.  The code(\partial) command
+allows you to make
+upsteps. The argument is a duration similar to the duration of a note.
+Example:
+  mudela(fragment,verbatim)(
+    \time 4/4;
+    \partial 4;
+    [d'8 dis'] e' c''4 e'8 c''4 
+  )
+
+  dit(code(\grouping) var(durationslist)) sets the metric structure of the measure.
+    Its effect can best be shown by an example:
+    mudela(fragment,verbatim)(
+        \time 5/16;
+        \grouping 16*3 16*2;
+        [c'8 c'16 c'8]
+        \grouping 16*2 16*3;
+        [c'8 c'16 c'8]
+        \grouping 16*5 ;
+        [c'8 c'16 c'8]
+    )
+
+In practice, you won't be needing this command very often: the
+grouping is switched automatically when you issue a code(\time)
+command.  It is set to a combination of groups
+of 2 and 3 beats, with as many groups of
+3 as possible (in other words: 4/4 is divided in two times two beats
+(2+2), 8/8 in 3+3+2)
+)
+
+The commands that are described above aren't really music, but they
+can be used in the same places as notes.  This makes the grammar of the
+language simpler.  It is possible to put a command into a chord.
+For example, the following two snippets of Mudela produce identical output.
+verb(
+  <c4 e g \time 2/4;>
+  \time 2/4; <c4 e g>
+)
+
+
+
+sect(Complex music: more than one staff)
+label(tutorial:more-staffs)
+
+
+Now we explain how to typeset music that runs in multiple staffs.
+Consider the following---somewhat unrealistic---example:
+
+mudela(fragment)(
+ \type GrandStaff <e'4 {\clef bass; g4^""} >
+)
+
+  The music consists of two notes.  Perhaps this is sheet music for a
+piano player, and one note is meant to be played with the left hand,
+and the other with the right hand.  That music would sound the same if
+it were written as a single chord on a single staff, i.e.,
+mudela(fragment)(
+  <g4 e'4>
+)
+
+
+This is another example where we can see that there can be a difference
+between a musical idea, and the way it is expressed in notation.
+
+The Mudela construct for multiple staffs reflects the similarity
+between the two examples: to get multiple staffs in Mudela you enter a
+chord, with an additional instruction to tell LilyPond that the chord
+does not represent notes stacked together, but staffs stacked
+together.
+
+If a piece of music is to be interpreted as a staff, then this can be
+expressed with the code(\type) construct.  The following input says
+``the quarter note with pitch e should be put on a staff.''
+
+verb(
+  \type Staff e'4 
+)
+
+The same can be done for the other note, i.e.,
+
+verb(
+  \type Staff g4 
+)
+
+If you want to stack these staffs, you must create a chord of both:
+
+verb(
+  < \type Staff e'4
+    \type Staff g4 
+  >
+)
+
+This looks reasonable, but the effect of this input is not what you
+might expect (try it!).  When interpreting this chord LilyPond will
+start with the first entry.  She'll look for a (nameless) staff.  Such a
+staff is not found, so it is created.  On this staff the code(e) note
+is put.  When the second code(\type) entry is read, LilyPond will
+start looking for a nameless staff.   The  staff that contains  the
+code(e) is found, and the code(g) is put there as well.
+
+The correct solution is to label both code(\type) constructs with
+different names, for example code(trebleStaff) and code(bassStaff).
+This makes LilyPond distinguish between them, and create two staffs:
+
+mudela(verbatim,fragment)(
+  < \type Staff = trebleStaff e'4
+    \type Staff = bassStaff  g4 
+  >
+)
+
+The names that you choose do not matter just as long as they are
+different.  This is almost right, except for the brace at the left and
+the clef of the second staff.  The bass clef will be taken care of in
+the next section. If you want a brace, then you have to tell LilyPond
+that the chord you just formed is to be interpreted as a so-called
+grand staff.  This is also done with the code(\type) command.
+mudela(verbatim,fragment)(
+  \type GrandStaff <
+     \type Staff = treblestaff  e'4 
+     \type Staff = bassstaff  g4 
+  >
+)
+
+sect(Appending instead of stacking: sequential music)
+label(tutorial:voice)
+
+The previous section dealt with a pretty hypothetical situation: sheet
+music with two staffs and each staff containing only one single note.
+In real-life situations staffs contain more than one note.  They
+contain music that has to be played in sequence.  A staff can contain
+a em(voice).  We haven't learned  how to make a voice yet: we need a
+new construct to express this notion of `voice'.
+
+The construct is called em(sequential) music.  A list of musical
+objects (e.g., notes, chords or commands) can be made into sequential
+music by enclosing the list in braces; for example:
+
+mudela(fragment,verbatim,center)(
+  { c'4 c'4 }
+)
+mudela(fragment,verbatim,center)(
+  { <c'4 e'> <e' g'> }
+)
+
+
+We could have called this construct more colloquially `voice', but
+this would cause confusion later on, when a second kind of voice
+enters the scene.  Similar confusion might arise from the word
+`chord', therefore from now on, we will talk about `simultaneous
+music', when we refer to items enclosed in < and >.
+
+
+The notion of a em(new) construct needs some explanation: we have been
+using sequential music all the time, except that it was hidden in the
+red tape in bind(Section)ref(tutorial:introduction).
+
+
+
+If we want to put whole voices onto a staff, then we have to
+substitute sequential music for the single notes in the example from
+the previous section.  A code(\clef) command in the second piece of
+sequential
+music  will also set the clef in
+the bass staff.
+mudela(fragment,verbatim)(
+    \type GrandStaff <
+     \type Staff = treblestaff  { e'4 f'}
+     \type Staff = bassstaff  {\clef "bass"; g a }
+  >
+)
+
+COMMENT(You can nest simultaneous music and chords in any way you want.  If
+you are interested in the entire story, you should consult
+bind(Chapter)ref(chap:features), which has a grammar in
+bind(Section)ref(sec:grammar).)
+
+sect(Notation context)
+
+This section is about translation contexts, a topic of LilyPond that
+is somewhat advanced.  You don't have to understand this to use
+LilyPond to print simple music.  If you don't want to typeset fancy
+polyphonic music or tweak the LilyPond notation engine, you can skip
+the next two sections.
+
+In bind(Section)ref(tutorial:more-staffs) it was explained, that there
+are more ways to notate a simple chord: as a single voice on a single
+staff or in multiple staffs (and we'll soon see, that you can typeset
+it as multiple voices on a  staff).  Obviously the concept of staff is not
+really something musical.  But what is it then?
+
+
+The most simplistic explanation is: a staff is a peculiarity of the
+notation system.  In other words, a staff is a graphic device, a
+special picture of five lines on which one can print note heads.  To
+avoid confusion, we will call this view on the concept of staff
+`staff symbol' from now on.
+
+
+There is more to it than meets the eye and mind.  A staff
+contains---besides a staff symbol--- some more components:
+itemize(
+it()A staff can a have a key signature (printed at the left)
+it()A staff has bar lines
+it()A staff has a clef (printed at the left)
+)
+To explain what a staff really is,   we'll try to print music without
+these components.  If these components aren't printed, it is still
+possible to print music:
+mudela()(\score{
+\melodic \relative c' {  \time 2/4; g'4 c,4 a'4 f4 e c d2 }
+\paper { 
+  linewidth = -1.;
+  Staff = \translator {
+    \type "Line_group_engraver_group";
+
+    defaultclef = violin;
+
+    \consists "Timing_engraver";
+    \consists "Separating_line_group_engraver";
+
+    \accepts "Voice";
+  }
+ }
+})
+
+As you can see, one can still make out the general form of the melody
+and the rhythm that is to be played, but the notation is difficult to
+read and the musical information is not complete.  The stress pattern
+in the notes can't be deduced from this output.  For this, we need a
+time signature:
+
+mudela()(
+\score {
+  \melodic \relative c' {  \time 2/4; g'4 c,4 a'4 f4 e c d2 }
+  \paper{
+  linewidth = -1.;
+    Staff = \translator {
+    \type "Line_group_engraver_group";
+    defaultclef = violin;
+    \consists "Time_signature_engraver";
+    \consists "Separating_line_group_engraver";
+    \accepts "Voice";
+  }
+ }
+})
+
+Technically speaking you know where the strong and weak beats are, but
+it is difficult to find them quickly.   Bar lines  help you in finding
+the location within the measure of the notes:
+mudela()(
+\score {
+  \melodic \relative c' {  \time 2/4; g'4 c,4 a'4 f4 e c d2 }
+  \paper{
+  linewidth = -1.;
+    Staff = \translator {
+    \type "Line_group_engraver_group";
+    defaultclef = violin;
+    \consists "Bar_engraver";
+    \consists "Time_signature_engraver";
+    \consists "Separating_line_group_engraver";
+    \accepts "Voice";
+  }
+ }
+})
+
+We can remedy part of the difficulties with reading pitches by adding a staff
+symbol:
+
+mudela()(\score{
+  \melodic\relative c' { \time 2/4; g'4 c,4
+a'4 f4 e c d2 } \paper {
+  linewidth = -1.;
+  Staff = \translator {
+    \type "Line_group_engraver_group";
+
+    defaultclef = violin;
+    \consists "Bar_engraver";
+    \consists "Time_signature_engraver";
+    \consists "Staff_sym_engraver";
+    \consists "Separating_line_group_engraver";
+
+    \accepts "Voice";
+  }
+ }
+})
+
+This makes the output decidedly easier to read, but you still don't
+know what the pitches of the notes above are.  So this is still not
+enough.  But suppose you see the following notation:
+mudela()(\score {
+  \melodic \relative c' {\clef alto;  \time 2/4; g'4 c,4 a'4 f4 e c d2 }
+\paper {
+  linewidth = -1.;
+  Staff = \translator {
+    \type "Line_group_engraver_group";
+
+     defaultclef = violin;
+    \consists "Bar_engraver";
+    \consists "Time_signature_engraver";
+     \consists "Clef_engraver";
+     \consists "Staff_sym_engraver";
+     \consists "Timing_engraver";
+     \consists "Separating_line_group_engraver";
+
+    \accepts "Voice";
+  }
+ }
+})
+
+Now you know the pitch of the notes: you look at the start of the line
+and see a clef, with this clef, you can determine the notated pitches.
+You have found the em(context) in which the notation is to be
+interpreted!
+
+So the context determines the relationship between a piece of music
+and its notation: you, the reader, use context to deduce music from
+notation.  Because LilyPond is a notation ``writer'' instead of a
+reader, context works the other way around for Lily: with context a
+piece of music can be converted to notation.
+The components of a staff form context, and context is needed to read
+and write notation.  This motivates the following definition.
+
+quote(
+A bf(notation context) is  a conversion from music to notation.
+)
+
+The example focused mainly on on staffs, but a staff is not the only
+type of notation context.  Notation contexts may be nested: you can
+print polyphonic music by putting multiple `Voice' contexts in one
+`Staff' context.  The arguments of the code(\type) command (Staff,
+GrandStaff) were in fact all names of different contexts.
+The notions of ``current clef'' and ``current position within the
+measure'' are all properties of notation contexts.  Commands like
+code(\clef) and code(\cadenza) change these properties.  
+
+
+The following is a list of the contexts that are supported by
+LilyPond:
+description(
+
+dit(Voice) The code(Voice) context is a context that corresponds to a
+  voice on a staff.  This context handles the conversion of noteheads,
+  dynamic signs, stems, beams, super- and subscripts, slurs, ties and rests
+
+dit(Staff) The code(Staff) context handles clefs, bar lines, keys,
+  accidentals.  A code(Staff) context can contain multiple code(Voice)
+  contexts.
+
+dit(RhythmicStaff) The code(RhythmicStaff) context is like the staff,
+  but much simpler: the notes are printed on one line, and pitches are
+  ignored.  code(RhythmicStaff) can contain code(Voice) contexts.
+
+dit(GrandStaff) A code(GrandStaff) context contains code(Staff)
+  contexts, and it adds a brace to the output at the
+  nop(left.)footnote(This is a major deficiency in the current
+  implementation.    Currently stems,
+  slurs and beams cannot be printed across two staffs.
+In reality, a grand staff is  a hybrid of one big staff and two stacked staffs.)
+  
+  A code(GrandStaff) context can contain multiple
+  code(Staff)s. Typically, it will contain two code(Staff)s, one
+  treble staff, and one bass staff. The bar lines of the contained
+  staffs are connected vertically.
+
+dit(StaffGroup) A code(StaffGroup) context contains code(Staff) or
+  code(Lyrics) contexts, and prints a bracket at the left.  The bar
+  lines in the participating staffs are connected.
+
+dit(Lyrics) As its name suggests, The code(Lyrics) context deals with
+  typesetting lyrics.  This topic will be covered in
+  bind(Section)ref(tutorial:lyrics).
+  
+dit(Score) The code(Score) context is the toplevel context: no context can
+  contain a code(Score) context.  The code(Score) 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.
+  
+  The code(Score) can contain code(Staff), code(StaffGroup), code(Lyrics), code(GrandStaff) and
+  code(RhythmicStaff) contexts.
+
+COMMENT(do ChoireStaff)
+)
+
+
+  Later on, in bind(Section)ref(tutorial:engravers) we will
+explain how you can create your own contexts.
+
+If you are familiar with structured documents (like HTML, SGML or
+LaTeX()), you might see the analogy of a context with a stylesheet: a
+stylesheet is neither presentation nor information, but rather a
+recipe em(how) a specific piece of information should be presented.
+Analogously, a notation context is neither music nor notation, but the
+conversion between the two.  The big difference with text is that in
+music notation the elements provided by context are essential to
+understanding what is notated.
+
+
+
+sect(Polyphonic music (or: Notation context properties))
+
+In the last section we explained that a notation context can have
+properties that influence the conversion from music to notation.  A
+simple example of such a property is the clef: the type of clef partially
+determines the vertical position of note heads in a staff.  Some of
+these properties can be modified by commands such as code(\clef) and
+code(\time).   But there is more:  notation contexts  also have
+properties are settable in a generic fashion.  We will demonstrate
+this feature by printing multiple voices on a staff.
+
+In polyphonic (keyboard) music and orchestral scores often more than
+one voice is printed on one staff.  We'll explain how to achieve this
+effect with LilyPond.  The effect is not unlike the two stacked staffs
+from bind(Section)ref(tutorial:more-staffs), except that we don't want
+to stack staffs but voices.  Thus,  the general template is the following:
+verb(
+  \type Staff <
+    \type Voice = one  ...
+    \type Voice = two  ...
+  >
+)
+
+On the ellipsis there should be music going from left to right, in
+otherr words, there should be sequential music, notes enclosed in
+braces.  Let us try the following simple melodies:
+
+mudela(fragment,verbatim)(
+\type "Staff" <
+  \type "Voice" = "one" { r4 as'4 () as'4 g'4 }
+  \type "Voice" = "two" { g'2 f'4 e'4 }
+>)
+
+As you can see the result is not quite perfect.  The notes on the last
+two beats look like plain chords and not like separate voices.  What
+really happened was that the stems of the upper and lower voices were
+printed on top of each other.  If you have tried running this example, you will probably
+have noticed a complaint  about ``too many
+clashing notecolumns''  during the LilyPond run.
+This complaint refers to the overlapping stems.
+
+To remedy this, engravers traditionally make the stems of the upper
+and lower voice point in different directions: the stems of the lower
+voice point down, and the stems of the upper up, as shown in
+bind(Figure)ref(tutorial:multi-voice-fig).
+
+Surely the direction of a single stem is a property of the stem as a
+graphical object.  But the fact that all of the stems in a voice point
+in the same direction is not directly graphical.  Since this is a
+property shared by all the stems in the voice, it is logical to
+consider this property to be a property of the context code(Voice).
+And this is how it's done in LilyPond: the context code(Voice) has an
+attribute whose value is the direction to use
+for stems.  You can change it to `up'
+by issuing the following phrase:footnote(The name code(ydirection) is
+no mistake.  The property also controls the up/down directions of
+super-/subscripts, slurs, ties, etc.)
+
+verb(
+  \property "Voice"."ydirection" = "1"
+)
+
+This command should be read as ``change the property called
+code(ydirection) within the current code(Voice) context to the value
+code(-1).''  For the property code(ydirection) the value code(1) means
+`up', and code(-1) means `down'.   The proper way to code the
+polyphonic example is given in bind(Figure)ref(tutorial:multi-voice-fig).
+
+latexcommand(\begin{figure}[h])
+mudela(fragment,verbatim,center)(
+  \type "Staff" <
+    \type "Voice" =  "one"  {
+      \property Voice.ydirection = "1"
+      r4 as'4 () as'4 g'4 }
+    \type "Voice" =  "two"  {
+      \property Voice.ydirection = "-1"
+      g'2 f'4 e'4 }
+  >
+)
+    latexcommand(\caption{multiple voices})
+    label(tutorial:multi-voice-fig)
+latexcommand(\end{figure})
+
+Other properties can also be set, and they can be within different
+contexts.  In general, you can set a property by specifying
+code(\property) var(contexttype)code(.)var(propertyname) code(=)
+var(value).  Both var(ContextType), var(PropertyName) and var(Value)
+should be strings.
+
+The effect of a property is pretty much hardwired into the
+implementation (and thus subject to change), so we will not deal with
+all the possible properties in detail. Among other characteristics that
+can be set are the layout of slurs and beams.  The initialisation file
+file(property.ly) explains most properties.
+
+We conclude this section with another example of a context property.
+Polyphonic music that has three or four voices can't be printed by
+simply changing the directions of the stems for each voice, obviously.
+Traditionally, some chords are shifted horizontally to print if this many
+voices have to be printed.
+LilyPond can also do this, and the property that controls the
+horizontal shifting is called code(hshift).  The notes in a
+code(Voice) context that has code(hshift) set to a true value (i.e.,
+non-zero or non-empty), will be shifted horizontally in the case of a
+collision.  The following example demonstrates the effect.
+
+mudela(fragment,verbatim)(
+  \type "Staff" <
+    \type "Voice" =  "one"  {
+      \property Voice.ydirection = "1"
+      r4 as'4 () as'4 g'4 }
+    \type "Voice" =  "two"  {
+      \property Voice.ydirection = "1"
+      \property Voice.hshift = 1
+      g'2 f'4 e'4 }
+    \type "Voice" = "three" {
+      \property Voice.ydirection = "-1"
+      [d'8 dis'] [d' cis'] [c' b] c'4
+    }
+  >
+)
+
+sect(Lyrics)
+label(tutorial:lyrics)
+
+Now for something completely different: Lyrics.  Lyrics are also
+considered to be music, although a lyric by itself does not have any
+pitch.  Producing lyrics has two aspects. First, you have to enter the
+text, i.e., the syllables along with their durations.  
+After this, you have to specify how to convert these to graphics.
+
+Lyrics consist of syllables, which are strings together with
+durations.  Previously we only entered note names, so for entering
+lyrics we have to instruct LilyPond that what we enter are not note
+names but words---or rather: strings.  This instruction is the keyword
+code(\lyric).  After entering this keyword you can enter a musical
+construct---sequential music, simultaneous music, code(\type)
+entries, etc.--- but with syllables in stead of pitches.  For example:
+verb( \lyric { 'got8 me on my knees4, Le-8 lie! })
+
+The effect of code(\lyric) can be compared with the effect of the
+doublequote character, code("), for it also changes the lexical
+meaning of spaces and characters.  This mode is another example of a
+handy input feature of the language.
+
+Next comes the conversion to notation.  LilyPond can't (yet) figure
+out that lyrics need different treatment than notes.  As a result, the
+default conversion will try to put the text you entered as note heads
+onto a staff, and this will fail.  This default must be overriden with
+a code(\type) keyword.  Printing syllables of text in a line is done
+by a context called code(Lyrics).  You can select this context with
+the code(\type) keyword.  Here is a simple example:
+
+mudela(fragment,verbatim)(
+       \type Lyrics \lyric { 'got8 me on my knees,4 Le-8 lie! })
+
+The result is technically more or less correct, but without a melody it
+just doesn't work, so let's add a blob of cream:
+mudela(fragment,verbatim)(
+  <
+    \type Staff  { c''8. c''16 bes'8. a'16 g'4 f'8 g'4. }
+    \type Lyrics \lyric { 'got8. me16 on8. my16 knees,4 Le-8 lie!4. }
+  >
+)
+
+The strings that makes up each syllable in the lyrics block are passed
+along to TeX() verbatim, so if you are proficient with TeX() you can
+do various nifty things.  Just keep in mind that a syllable either
+starts with a letter (a character in the range `code(a)' to `code(z)'
+or `code(A)' to `code(Z)'), or it is a string enclosed quotes. It ends
+with either a number for the duration, or a space.  A last feature
+that should be mentioned is the space-lyric: if you want to enter
+a single ``syllable'' that consists of multiple words, i.e., words
+separated by  spaces, you should use an
+underscore instead of a space.  All these tricks are demonstrated in
+the following example:
+
+COMMENT( urg
+\type Lyrics \lyric { 'got_m\textbf{e}4 on8. m$\cal_Y$16 knees,4 Le-8 lie!4.}
+\type Lyrics \lyric { 'got_m{\bf e}4 on8. m$\cal_Y$16 knees,4 Le-8 lie!4.}
+)
+
+mudela(fragment,verbatim)(<
+  \type Staff  { c''8. c''16 bes'8. a'16 g'4 f'8 g'4. }
+  \type Lyrics \lyric { 'got_me4 on8. m$\cal_Y$16 "3s,"4 Le-8 lie!4.}
+>
+)
+
+The spacing in the above example is a bit skewed because Lily can't
+tell that the long syllables you entered are not ordinary characters,
+but expand to really small symbols.
+
+
+
+
+COMMENT(Rood is de kleur van geluk.)
+COMMENT(Dat geldt ook voor haar.)
+
+
+sect(Toplevel Mudela)
+
+Now the time has come to unravel the red tape that we have hidden from
+you in the introduction.  Mudela has a hierarchical structure for we
+have seen that sequential and simultaneous music can be nested.
+Mudela also has other `blocks' that can be nested.  The general syntax
+for a block is code(\keyword { ... }).
+
+When you run LilyPond, what happens is that you define music, and
+specify one (or more) conversions to apply to that music, for example
+a conversion to notation.  This is done by putting the definition of
+the music and the definition of the conversion together in a
+code(\score) block, e.g.,
+verb(
+\score {
+        % ... music ...
+        \paper {}
+})
+
+This is almost  the context that should be around all
+of the previous examples.  The precise context reads thus:
+verb(
+\score {
+        \melodic { ... }
+        \paper {}
+})
+On the ellipsis, you entered what shown as the example input.
+You can see that in the
+above example, the code(\melodic { ... }) forms the music, the
+code(\paper {}) is a conversion to paper (notation, that is).  The
+code(\paper) definition is copied from a default definition
+(which is in the initialisation file file(paper16.ly)).
+The paper part also contains
+the definition of the contexts.
+
+The keyword code(\melodic) is analogous to the code(\lyric) keyword.  It
+will switch the tokenizer into a mode that interprets plain words as
+note names.  If it can't recognize the words as a note name, it will
+assume that they are strings.  That is the reason why you can write
+code(\clef bass) in stead of code(\clef "bass"); most of the strings
+in code(\melodic) mode can be written without quotes.
+
+The braces that you see after the code(\melodic) keyword are the
+braces that are around sequential music.  Because of these braces, the
+sequences of notes in our simple examples were sequential (and not
+simultaneous).  As a result the notes were printed from left to right,
+and not stacked.
+
+sect(Identifiers)
+
+
+Now that we are comfortable with the toplevel entries in a mudela
+file, we can investigate some more of the recreations on toplevel, in
+particular em(identifiers).  Generally you can define an identifier by
+entering code(identifierName = ... )
+where there can be a variety of things on the ellipsis.
+
+Here is a (partial) list of what you can abbreviate with identifiers
+at top-level.
+itemize(
+it()The code(\score) block
+it()The code(\paper) block
+it()The code(\midi) block (to be explained in
+  bind(Section)ref(tutorial:sound))
+it()Music (sequential music, simultaneous music etc.)
+it()Durations
+it()Strings
+it()Translators (to be explained in bind(Section)ref(tutorial:engravers))
+it()Integers
+it()Reals  
+)
+
+When you refer
+to the abbreviated entity, you must precede code(identifierName)
+with a backslash, i.e., code(\identifierName).  For example:
+mudela(verbatim)(
+  czerny = \melodic { [c16 g e g] }
+  \score {
+    \melodic \type GrandStaff <
+      { c''2 g''2 }
+      { \clef bass; \czerny \czerny \czerny \czerny}
+    >
+    \paper {
+      linewidth = -1.0;
+      stem_length = 12.0*\internote;
+    }
+  }
+)
+
+
+
+Another interesting feature of this example are the assignments within
+the paper block.  Some blocks, such as code(\paper), have a scope of
+their own.  In the case of the code(\paper) block, these variables
+influence the characteristics of the output.  As is shown, you can
+tune quantities like the stemlength, and enter simple expressions.
+The purpose of the negative linewidth is to prevent the music from
+being justified.  The identifiers that are meaningful are for the
+paper block is strongly implementation dependent, so they will not be
+listed here.  Moreover, since most of the values are predefined to
+sensible defaults, there usually is no need to tune these values.
+
+Recall the properties of a context, that could be set with
+code(\property).  It is a very general mechanism to tune the output of
+the music, that is neatly separated from the real music.
+Unfortunately, it is not convenient to type or read, and the precise
+effect of a setting property isn't always apparent from its
+definition.  To remedy this, we can use an identifier to capture the
+meaning of a code(\property).
+
+mudela(verbatim)(
+stemup = \property Voice.ydirection = "1"
+stemdown = \property Voice.ydirection = "-1"
+shift = \property Voice.hshift = "1"
+\score {
+  \type "Staff" \melodic <
+    \type "Voice" =  "one"  {
+      \stemup
+      r4 as'4 () as'4 g'4 }
+    \type "Voice" =  "two"  {
+      \stemup
+      \shift
+      g'2 f'4 e'4 }
+    \type "Voice" = "three" {
+      \stemdown
+      [d'8 dis'] [d' cis'] [c' b] c'4
+    }
+  >
+  \paper{  linewidth = -1.0\pt; }
+}
+)
+
+Several abbreviations like code(\stemup) are defined in the
+standard initialisation file file(property.ly).  Setting or changing
+context properties can have a similar effect as the commands that were
+discussed in bind(Section)ref(sec:commands).  Don't be fooled by the
+similarity in appearance between a declared property-setting entry
+and a real command.  Real commands are hardcoded into the language
+and they have to be terminated by semicolons.
+
+You can also use identifiers to break up the heavy nesting that can occur
+in the code(\score) block.  Another useful application is
+parametrisation of the music: if you use identifiers in the
+code(\score) block, you can make variations of the music by simply
+redefining those identifiers.  One particular application of this is
+part extraction: by using identifiers and redefining them, one can
+print extracted parts and a full orchestral score from the same
+music definition.
+
+
+
+sect(Sound output)
+label(tutorial:sound)
+
+You get output by combining music with definition a conversion to
+output.  Up till now we have only focused on the graphic output of
+traditional engraving.  But there is no reason why that should be the
+only form of output for music.  LilyPond currently supports one other
+conversion: the conversion from abstract music to sound. You can have
+LilyPond play the music that you entered.  The format that is used
+for this output is MIDI.  
+
+The only information that you need to enter is the
+ nop(tempo)footnote(Unfortunately,
+this the only thing that can be tuned at this
+time.  This is a limitation: the tempo of music can vary throughout
+the music.) for the performance.  The syntax for the tempo is
+code(\tempo )var(duration) = var(beatsperminute);), for example:
+verb(
+\score {
+   ...music...
+   \midi { \tempo 4 = 76; }
+}
+)
+
+The most useful purpose of this sound output is to prooflisten your
+files: typing errors (especially if they involve accidentals)  stand
+out when you listen.
+The output was implemented in a very rudimentary manner, so it is
+probably not worth listening to for any other reason.
+
+
+sect(Contexts revisited: engravers)
+label(tutorial:engravers)
+
+As was promised, we will now take a dive into the more wizardrous parts
+of LilyPond: redefining (notation) contexts.  We previously explained
+that a context 
+itemize(
+it()is a conversion from music to notation,
+it()can contain other contexts
+it()handles specific notation constructs
+)
+
+This characterization almost automatically explains what the definition of a
+context should look like:
+itemize(
+it()It should be part of the ``notation output definition,'' i.e., the
+  code(\paper) block
+it()
+  It should contain a specification of what other contexts may be contained
+  in the context we're defining.
+it()
+  It should contain a list of the notation constructs  to be
+  handled.
+)
+
+In practice, the context definition
+looks like this:
+verb(
+\translator
+{
+        \type "Engraver_group_engraver";
+        \accepts "...";
+        \accepts "...";
+        \accepts "...";
+
+        \consists " ... ";
+        \consists " ... ";
+        \consists " ... ";
+
+        propertyname = "value";
+        propertyname = "value";
+
+} )
+
+  This is encoded by the 
+
+The code(\translator) keyword opens the block for translation (or
+context) definition.  The code(\type) keyword explains to Lily that
+the context should be formed by taking an (empty) instance of
+code(Engraver_group_engraver).  The code(Engraver_group_engraver) is a
+C++ class from the source code to Lily.  The code(\accepts) entries
+explain what kind of contexts this context could contain.  If we were
+to define a context for a staff, the definition would typically
+contain code(\accepts "Voice";).
+
+The code(\consists) entries specify which notation constructs should
+be handled. This needs a little explanation: LilyPond contains the
+code for quite a large number of basic building blocks for notation
+generation, and each building block handles only one notation
+construct.  The name of such a building block is `engraver'.  You can
+specify which notation construct a context should handle by specifying
+which engravers should be part of the context.  The code(\consists
+"Foobar") entry really means ``add an instance of code(Foobar) to the
+translation group.''
+
+
+For example if this context should print time signatures, the definition
+should include `code(\consists "Time_signature_engraver";)'.  Again
+code(Time_signature_engraver) is a class from the source code of LilyPond.
+
+
+
+Finally, one can pre-set some properties in a context definition.
+
+As a practical example, we will show you how to typeset polymetric
+music, i.e., music where the meter can differ for each staff.  The
+solution is not very complicated: normally all timing information
+(time signature, rhythmic grouping) is synchronised across each staff.  In
+LilyPond this is expressed by having only one registration for timing
+information for all staffs.  To be precise, there is only one
+code(Timing_engraver), and it is located in the top level context, the
+code(Score) context.
+
+All staffs use the information in the global code(Timing_engraver)
+for generating bar lines and time signatures.  In polymetric music, this timing
+information can be different for every staff, so we should redefine
+the code(Staff) context to include and the code(Score) context to exclude the
+code(Timing_engraver).  
+
+mudela(verbatim)(
+polymetricpaper = \paper {
+  Score = \translator {
+    \type Score_engraver;
+    \consists "Score_priority_engraver";
+    \consists "Priority_horizontal_align_engraver";
+    \consists "Vertical_align_engraver";
+    % \consists "Timing_engraver"; % removed Timing_engraver
+    \accepts "Staff";
+  }
+
+  Staff = \translator {
+    \type "Line_group_engraver_group";
+
+    defaultclef = violin;
+
+    \consists "Bar_engraver";
+    \consists "Clef_engraver";
+    \consists "Key_engraver";
+    \consists "Local_key_engraver";
+    \consists "Time_signature_engraver";
+    \consists "Timing_engraver";  % added Timing_engraver
+    \consists "Staff_sym_engraver";
+    \consists "Separating_line_group_engraver";
+
+    \accepts "Voice";
+  }
+}
+\score {
+  \melodic <
+    \type Staff = one { \time 2/4; c'4 c'4 c'4 c'4 c'4 c'4 }
+    \type Staff = two { \time 3/4; c'4 c'4 c'4 c'4 c'4 c'4 }
+  >
+  \paper { \polymetricpaper
+    linewidth = -1.;
+  }
+}
+)
+
+As you can see, we used the identifier code(polymetricpaper) to break
+up the large score block.  More of these context definitions appear in
+the standard initialisation file file(engraver.ly).
+
+sect(Urtexts and context selection)
+label(tutorial:urtext)
+
+In bind(Section)ref(tutorial:more-staffs), we have shown you how to make
+multiple staffs, and explained that you have to label every staff (or
+more precisely: different contexts), to make sure that new ones are
+created when you need them.  In this section, the real power of this
+mechanism will unveiled.
+
+By naming other contexts that you create, you can reference other contexts
+than the current context from within the music.  For example, from within the music that you
+enter for staff code(One), one could enter a small piece of music,
+and send it to staff code(Two), e.g.,
+mudela(fragment,verbatim)(
+  <
+    \type Staff = one { c''4 \type Staff = two { c4 c4 } c''4 }
+    \type Staff = two { \clef bass; g,4 g,4 g,4 g,4  }    
+  >
+)
+
+
+Another useful application of this feature is making Urtexts.
+em(Urtext) is the German word for `original text'.  The Urtext
+edition of a piece of music, is an edition that reflects the original
+writing of the composer.  Such editions are useful for musicologists,
+and performers that want  to perform authentic interpretations.  However,
+for mere mortals, the Urtext can be quite hard to read.  It might not
+contain fingering and beaming, and typically it is full of footnotes.
+Moreover, common interpretations may have emerged---after the composer
+died.  For this reason, the music that can be had as Urtext usually is also
+available in enhanced and edited editions.
+
+The mechanism of context selection can be used to fabricate an Urtext
+and an edited edition from em(one source).  We will use the first few
+bars of bind(J.)bind(S.)Bach's lovely Cello suite bind(no.)I to
+demonstrate this.  The example makes heavy use of space rests: a space
+rest is a like a rest that doesn't print anything.  It can be used as
+a placeholder, to attach articulation marks to.  It is entered as a
+note with the name code(s).
+
+mudela(verbatim)(
+  bach =  \melodic { [c16 g e' d'] [e' g e' g] }
+  
+  staffStuff = \melodic { \clef bass; \time 4/4; s1 \bar "|."; }
+  
+  slursOne = \melodic { s16( s s s s16 s s )s }
+  slursTwo = \melodic { s16-. s s() s s16() s  s ()s }
+
+  \score{
+    { < \type Voice = celloVoice { \bach \bach }
+        \type Voice = celloVoice { \slursOne \slursOne }
+        \staffStuff
+      >
+      <
+        \type Voice = celloVoice { \bach \bach }
+        \type Voice = celloVoice { \slursTwo \slursTwo }
+        \staffStuff
+      >
+    }
+    \paper {}
+  }
+)
+
+ The slurs that you define should be put on the music that is defined
+by the code(\bach) identifier.  By labeling a code(Voice) context, and
+directing both the articulation and the notes to that same code(Voice)
+context, the articulation is put over the right notes.
+
+
+sect(Transposing)
+label(tutorial:more-grammar)
+
+COMMENT(In this section, we will complete the grammar for Music that was
+sketched earlier. )
+One of the things that you can do with music is
+em(transposing) it.  If you want to transpose a piece of music, then
+you should prefix the keyword code(\transpose) along with the pitch
+(relative to the central C) for the transposition.footnote(the
+code(\type Staff) is to make sure that no separate staffs are created
+for the code(\scale) and code(\transpose cis' \scale) part.)
+
+
+mudela(verbatim)(
+scale = \melodic \relative c' { [c8 d e f] }
+\score {
+  \melodic {
+    \type Staff { \scale \transpose cis'  \scale }
+    }
+  \paper { linewidth = -1.0; }
+})
+
+
+sect(Staff switching)
+
+We have seen that contexts can be nested.  This means that they form a
+tree.  It is possible to edit this tree: for example, a code(Voice)
+context can be taken out of a code(Staff) context, and put into
+another.  This has the effect of the voice switching staffs (something
+that often happens in keyboard music).  The syntax for this operation
+with these particular contexts is code(\translator Staff = newStaffName).
+
+The effect is analogous to the first example in section
+ref(tutorial:urtext), but with the code(\translator) construction it
+is possible to split the real music and the commands that determine in
+which staff the music is printed.  For example:
+
+mudela(verbatim)(
+
+% real music
+aVoice = \type Voice = voiceA \melodic { c''4 c4 c4 c''4 }
+bVoice = \type Voice = voiceB \melodic { g,4 g,4 g,4 g,4  }    
+
+% staff switching stuff
+switch = \type Voice = voiceA \melodic { s4 \translator Staff = staffB s4
+                  s4 \translator Staff = staffA s4 }
+
+\score {
+  <
+    \type Staff = staffA < \aVoice \switch >
+    \type Staff = staffB < \bVoice \clef bass; >
+  >
+  \paper { linewidth = -1.; }
+}
+)
+
+Don't try to switch staffs when you are in the middle of a slur or
+beam, though.  It doesn't work yet.
+
+sect(Hairy durations: triplets)
+
+In the previous section we explained an operation that changes the
+pitches of music, transposition.  In this section we will explain an
+operation that modifies the duration of the notes that you enter.
+When notes are part of a triplet, then the real of duration of the
+notes are 2/3 part of what their shape indicates:
+mudela(fragment)(
+\[/3  c'4 c'4 c'4 \]/1
+)
+
+To support this notion, Mudela allows you to modify the duration of a
+note by multiplication or division.  A code(c'4) note that would be in  a
+triplet is written as code(c'4*2/3).  If you sequence a few of these
+notes, you get a triplet.footnote(We added a normal staff in the example to
+show the difference.)
+mudela(fragment,verbatim)(
+<  \type Staff = staffA { c'8*2/3 c'8*2/3 c'8*2/3 c'4}
+   \type Staff = staffB { c''8 c''8 c''4 } >)
+
+LilyPond knows that these notes are no normal eighth notes, but the
+reader doesn't yet.  To help the reader a beam or a bracket with a `3'
+should be printed.  The special beam command `code([2/3)' and the
+matching close beam `code(]1/1)' will take care of that, and
+they also abbreviate the code(*2/3) part.  If you want brackets in
+stead of beams, you can use `code(\[2/3])' and `code(\]1/1)'.
+mudela(fragment,verbatim)(
+< \type Staff = staffA {
+    [2/3 c'8 c'8 c'8 ]1/1
+    \[2/3 c'8 c'8 c'8 \]1/1
+  }
+  \type Staff = staffB { [c''8 c''8 c''8 c''8] }
+>)
+
+Other tuplets  can be entered in the same way.
+mudela(fragment,verbatim)(
+< \type Staff = staffA {
+    \time 7/8;
+    [7/6 c'8 c'8 c'8 c'8 c'8 c'8 ]1/1
+  }
+  \type Staff = staffB {
+    \time 7/8;
+    [c''8 c''8 c''8 c''8 c''8 c''8 c''8] } >
+)
+
+For your convenience, code([2/3) can be further abbreviated to code([/3), and
+you can abbreviate code(]1/1) on the closing beam marker to code(]/1).
+
+mudela(fragment,verbatim)(
+< \type Staff = staffA {
+    [/3 c'8 c'8 c'8 ]/1 c'4
+  }
+  \type Staff = staffB { [c''8 c''8] c''4 } >
+)
+
+
+bf(Important) the construct with code([/3) and
+code([/1) is a hack that sets a mode in the parser.  This means that
+verb(id = \melodic { c8 c8 c8 }
+notATriplet =\melodic { [2/3 \id ]1/1 })
+does not produce a triplet.  It will hopefully
+soon be replaced by a construction that mixes more elegantly with the
+grammar for Music.
+
+
+sect(Shortcuts for octaves)
+label(sec:relativeoctaves)
+
+Plain Mudela contains a lot of quotes to get the octaves right.  This
+need for quotes can be reduced: most of the pitch intervals in
+conventional music are small.  Therefore, it makes sense to leave out
+the quotes when the interval is small.  We have built a mode that does
+exactly this.  It is called the relative mode for octaves.  You can
+switch it on by entering code(\relative).  Then LilyPond will
+interpret every note as if they mean the note with the same name
+closest to the previous.  You have to specify the first pitch because
+the first note of a list obviously has no predecessor.  So, you can
+enter a scale without using octavation quotes, e.g.,
+
+mudela(fragment,verbatim)(
+    \relative c' { c d e f g a b c }
+)
+
+For chords, the relative mode works slightly differently.  In a
+sequence of chords, the first note of a chord gives the starting point
+for the next chord.  We can demonstrate this with our twinkle twinkle example
+verb(
+  \relative c' {
+  c4       c            <c g'>    <c e g>
+  <c e a>  <b d a'>     <b2 d g>
+  <a4 d f> <bes d f>    <bes c e> <g c e>
+  <e a d>  <a, g' cis'> <d2 f d'>
+  }
+)
+
+LilyPond converts any music with code(\relative) prepended to absolute
+music immediately when it is read. Internally it is stored it in
+absolute pitches.  Since the tutorial mainly deals with how to specify
+musical information, and not how to enter it conveniently, the
+tutorial doesn't use it.
+
+
+sect(Large pieces)
+label(tutorial:large-pieces)
+
+In our quest for a clean and powerfull music language, we took the effort
+of entering some larger pieces of music as well.  From this we learned
+certain things that lead to direct improvements of Mudela, such as the 
+relative mode.  We also gained some practial experience, that resulted in a 
+compilation of tips that may be of use to you.
+
+Entering a large piece of music will often imply the need to produce a
+conductor's score, as well as individual parts for all instruments.  This
+can most easily be achieved making use of identifiers and including mudela
+files.
+
+subsect(Identifiers)
+
+Briefly introduced before, identifiers are your biggest help in structurising
+a large piece of music.  As an example, we'll consider a string quartet.  
+In short, it will look like this: verb(
+    global = \melodic{ }
+    violinoOne = \melodic \relative c { .. }
+    violinoTwo = \melodic \relative c { .. }
+    viola = \melodic \relative c { .. }
+    violoncello = \melodic \relative c { .. }
+)
+
+The code(\global) part contains everything that is global, i.e., the
+same, for each instrument.  This may include time signature, key, repeat
+signs, different bar types, time signature- and key changes, rehearsal
+marks, etc.
+
+For each instrument, you'll have something vaguely resembling verb(
+    violinoOneStaff = \type Staff = violinoOne <
+       \property Staff.midi_instrument = "violin"
+       \property Staff.instrument = "Violino I"
+       \property Staff.instr = "Vl. I"
+       \global
+       \violinoOne
+    >
+)
+
+
+[Versions, relative mode,
+ barchecks, splitting of files]
+
+subsect(Including Mudela files)
+ref(subsect:include)
+
+You can include other Mudela files  with the command code(\include):
+verb(
+\include "paper13.ly"
+\score {
+       ...
+       \paper { \paper_thirteen }
+})
+
+The file is looked for in the  standard search path.
+
+
+subsect(Grouping of staffs)
+
+subsect(Versioning)
+
+sect(Titling)
+label(tutorial:titling)
+
+A piece of sheet music isn't complete without proper opening and
+closing titles.  LilyPond does not have any real support for setting
+text: that is a job best left to TeX().  But you can pass messages to
+TeX() from the input file.   You can  write TeX() macros to handle
+these messages.
+To do this, you add a code(\header) block
+to your input file.  The format is quite simple,
+
+verb(
+\header{
+    "key" =  "value";
+    "key" =  "value";
+    "key" =  "value";
+    % etc.
+})
+
+When  the results of the music typesetting are output, the contents of
+code(\header) are also up into the TeX() file.  Tools like
+code(ly2dvi) can use this information to generate pretty titling for
+your input file. Consult the manual page of code(ly2dvi) for more
+details.
+
+
+The code(\header) block should be at toplevel in mudela, and
+preferably at the top of the file.  If you have an input file  with
+multiple code(\score) blocks, you should add a header to every score,
+describing the different sub parts of the music piece, eg.
+
+
+verb(\header {
+        "composer" = "Ludwig Van Bavaria";
+        "title" = "Symphonie Megalomane";
+    }
+    \score{
+       ... % some music
+       \header { movement = "Mit roher Kraft wild herausfahrend!"; }
+      \paper { }
+    }
+    \score{
+       ... % some more music
+       \header { movement = "Saut\'e comme un oeuf."; }
+      \paper { }
+    }
+)
+
+If you want you can also put the code(\header) block at the top of the
+input file; it will then be put into every output file automatically.
+This will make it clear what the file contains as soon as you open it.
+
+
+
diff --git a/NEWS b/NEWS
index 664e3e0c7b1a39ec2ffb000e65424b16ae5fe0de..a4d321946f7d0bbea083ce5d9603eb7970f9c02c 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,15 @@
+pl 2
+       - bf mudela-book.py
+       - scalar compile stuff
+       - bf install directory
+       - YODL note
+       - GUI faq update
+       - bf ly2dvi
+       - stepmake split:  Po.make
+       - make check target
+       - dist AFMs and manpages
+       - split up mudela.yo in glossary.yo, tutorial.yo and refman.yo
+
 pl 1.jcn2
        - renamed -alto -> viola
        - bf: avant-gardish six preludes
@@ -8,6 +20,14 @@ pl 1.jcn1
        - fake msgfmt
        - make uninstall fixes
 
+pl 1.jbr2 - aclocal.m4,stepmake/aclocal.m4,stepmake/stepmake/Variables.make:
+            Support install target for unix, unix cross compile, and 
+            Windows NT
+
+pl 1.jbr1 - stepmake/stepmake/Executable.make: DOTEXE was missplaced
+          - scripts/convert-mudela.py: program_id should write to stderr
+
+**************
 pl 1
        - mi2mu fix: \key "D"
        - \hoffset
index 2008fc4f8c29743a7c8ac4216c6695fb4561fb80..daeee8366232875f43a920b85711365cf0edb118 100644 (file)
@@ -31,8 +31,8 @@ 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 configure (--enable-tex-dir,
---enable-mf-dir)
+to specify directories for TeX to configure: this is done with
+the options --enable-tex-dir and --enable-mf-dir
 
 4: DOCUMENTATION
 
@@ -45,9 +45,7 @@ and then do this:
 
 You can also simply read the .yo sources.  They are ASCII text.
 The complete documentation is accessible in formatted form at the 
-website
-
-        http://www.cs.uu.nl/people/hanwen/lilypond/index.html
+website http://www.cs.uu.nl/people/hanwen/lilypond/index.html
 
 5: COMMENTS
 
@@ -63,8 +61,7 @@ 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://pcnov095.win.tue.nl/pub/lilypond/ (Europe)
+ftp://pcnov095.win.tue.nl/pub/lilypond/
 
 If you decide to build LilyPond from source, please read the INSTALL.txt
 document first, especially the Windows NT/95 section.
@@ -76,8 +73,7 @@ Linux-Intel unix users.
 
 * If you have installed a previous version, be sure to remove old font
 files, eg
-
-        rm `find /var/lib/texmf/fonts -name 'feta*'`
+rm `find /var/lib/texmf/fonts -name 'feta*'`
 
 a script to do this for you is in bin/cleanfonts.sh
 
diff --git a/TODO b/TODO
index 893aa58eac5524fb9a561ea9ae05c1b42fd18e23..8a13a3860b1444008f7c0639a64624d318ccb504 100644 (file)
--- a/TODO
+++ b/TODO
@@ -6,12 +6,24 @@ done, or is an idea that I want to think about
 
 Most of the items are marked in the code as well, with full explanation. 
 grep for TODO and ugh/ugr/urg
-       * fix plain tex footer line.
 
-      * portable libs for flowerlib/lilylib
+       * fix plain tex footer line.
 
-       * install TeX stuff into tex/generic directory.
+       * portable libs for flowerlib/lilylib
 
+       * install TeX stuff into tex/generic directory.
+
+       * preformatted .info stuff.
+
+       * percussion note heads
+
+       * mi2mu empty staffs.
+
+       * include MIDI list 
+
+       * make separate translation property list.
+
+       * key undo.
 
        * make GNU style webpages.
 
@@ -21,13 +33,6 @@ grep for TODO and ugh/ugr/urg
        the form feta*.ly.  In particular init.ly doesn't get installed.
        I installed the files by hand and then the system seems to work.
 
-       * I things it's more than appropriate for an GNU project to ship Info
-       files (and manpages) with the source package.  The "Standard" tells to
-       do so (ftp://ftp.gnu.org/pub/gnu/standards/standards.text):
-
-
-       * a `make check' target (without installing stuff!)
-
        * midi_instrument -> midiInstrument
 
        * horizontal centering of dynamics 
diff --git a/VERSION b/VERSION
index b79339f1e09fc3fe1bdcea3af542c4dc1077e114..36dc14b269df05f925364fb7c21d9b8365225924 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,8 +1,8 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=0
-PATCH_LEVEL=1
-MY_PATCH_LEVEL=jcn2
+PATCH_LEVEL=2
+MY_PATCH_LEVEL=
 
 # use the above to send patches, always empty for released version:
 # please don't move these comments up; the patch should fail if 
index 5f282f05b1f5a90003d36e224be2d7254db5b599..dbcb4d30d29a0c68a1ed781f3a84257816c0cec3 100644 (file)
@@ -234,13 +234,16 @@ dnl    fi
        LN=cp # hard link does not work under cygnus-nt (yet?)
        ZIP="zip -r -9" #
        DOTEXE=.exe
+        INSTALL="\$(stepdir)/../bin/install-dot-exe.sh -c"
     else
        LN=ln
        ZIP="zip -r -9"
+        INSTALL="\$(stepdir)/../bin/install-sh -c"
     fi
     AC_SUBST(DOTEXE)
     AC_SUBST(ZIP)
     AC_SUBST(LN)
+    AC_SUBST(INSTALL)
 
     AC_STEPMAKE_DATADIR
 ])
@@ -424,6 +427,9 @@ AC_DEFUN(AC_STEPMAKE_YODL, [
        AC_SUBST(YODL2TXT)
        export YODL YODL2HTML YODL2LATEX YODL2MAN YODL2TEXINFO YODL2TXT
     fi
+    if test "x$YODL" = "-echo no yodl"; then
+       AC_STEPMAKE_WARN(Did not find YODL (Yodl is Yet Oneother Document Language, see http://www.cs.uu.nl/~hanwen/yodl))
+    fi    
 ])
 
 dnl should cache result.
index 9aecaf66f248a2f78a10fc6ffd1f1f8ee58abca2..25bfe5945aaafa765240ea9e9e47bf9279339006 100644 (file)
@@ -38,6 +38,7 @@ DEFS = @DEFS@
 DEFINES = @DEFS@ @DEFINES@
 COMPILEINFO = @COMPILEINFO@
 DOTEXE = @DOTEXE@
+INSTALL = @INSTALL@
 BASH = @BASH@
 BISON = @BISON@
 FIND = @FIND@
index 2dd916582db48ceb18bb43beeeb592bded22456c..493ae9c0e39fcd8a72f86894f8d48e289cd3b69a 100755 (executable)
--- a/configure
+++ b/configure
@@ -878,13 +878,16 @@ fi
        LN=cp # hard link does not work under cygnus-nt (yet?)
        ZIP="zip -r -9" #
        DOTEXE=.exe
+        INSTALL="\$(stepdir)/../bin/install-dot-exe.sh -c"
     else
        LN=ln
        ZIP="zip -r -9"
+        INSTALL="\$(stepdir)/../bin/install-sh -c"
     fi
     
     
     
+    
 
     
     if test "$datadir" = "\${prefix}/share"; then
@@ -1002,7 +1005,7 @@ EOF
     # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1006: checking for $ac_word" >&5
+echo "configure:1009: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1031,7 +1034,7 @@ if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1035: checking for $ac_word" >&5
+echo "configure:1038: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1079,7 +1082,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1083: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:1086: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
 
 ac_ext=c
 # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -1089,11 +1092,11 @@ ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS
 cross_compiling=$ac_cv_prog_cc_cross
 
 cat > conftest.$ac_ext <<EOF
-#line 1093 "configure"
+#line 1096 "configure"
 #include "confdefs.h"
 main(){return(0);}
 EOF
-if { (eval echo configure:1097: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1100: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   ac_cv_prog_cc_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -1113,12 +1116,12 @@ if test $ac_cv_prog_cc_works = no; then
   { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1117: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1120: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
 cross_compiling=$ac_cv_prog_cc_cross
 
 echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:1122: checking whether we are using GNU C" >&5
+echo "configure:1125: checking whether we are using GNU C" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1127,7 +1130,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1131: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1134: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gcc=yes
 else
   ac_cv_prog_gcc=no
@@ -1142,7 +1145,7 @@ if test $ac_cv_prog_gcc = yes; then
   ac_save_CFLAGS="$CFLAGS"
   CFLAGS=
   echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1146: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1149: checking whether ${CC-cc} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1199,7 +1202,7 @@ EOF
 fi
 
 echo $ac_n "checking how to run the C++ preprocessor""... $ac_c" 1>&6
-echo "configure:1203: checking how to run the C++ preprocessor" >&5
+echo "configure:1206: checking how to run the C++ preprocessor" >&5
 if test -z "$CXXCPP"; then
 if eval "test \"`echo '$''{'ac_cv_prog_CXXCPP'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -1212,12 +1215,12 @@ ac_link='${CXX-g++} -o conftest $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $L
 cross_compiling=$ac_cv_prog_cxx_cross
   CXXCPP="${CXX-g++} -E"
   cat > conftest.$ac_ext <<EOF
-#line 1216 "configure"
+#line 1219 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1221: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1224: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   :
@@ -1248,7 +1251,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:1252: checking for $ac_word" >&5
+echo "configure:1255: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1279,7 +1282,7 @@ test -n "$CXX" || CXX="gcc"
 
 
 echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1283: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
+echo "configure:1286: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
 
 ac_ext=C
 # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -1289,11 +1292,11 @@ ac_link='${CXX-g++} -o conftest $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $L
 cross_compiling=$ac_cv_prog_cxx_cross
 
 cat > conftest.$ac_ext <<EOF
-#line 1293 "configure"
+#line 1296 "configure"
 #include "confdefs.h"
 main(){return(0);}
 EOF
-if { (eval echo configure:1297: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1300: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   ac_cv_prog_cxx_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -1313,12 +1316,12 @@ if test $ac_cv_prog_cxx_works = no; then
   { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1317: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1320: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6
 cross_compiling=$ac_cv_prog_cxx_cross
 
 echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6
-echo "configure:1322: checking whether we are using GNU C++" >&5
+echo "configure:1325: checking whether we are using GNU C++" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1327,7 +1330,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1331: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1334: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gxx=yes
 else
   ac_cv_prog_gxx=no
@@ -1342,7 +1345,7 @@ if test $ac_cv_prog_gxx = yes; then
   ac_save_CXXFLAGS="$CXXFLAGS"
   CXXFLAGS=
   echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
-echo "configure:1346: checking whether ${CXX-g++} accepts -g" >&5
+echo "configure:1349: checking whether ${CXX-g++} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1372,17 +1375,17 @@ fi
 
     ac_safe=`echo "FlexLexer.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for FlexLexer.h""... $ac_c" 1>&6
-echo "configure:1376: checking for FlexLexer.h" >&5
+echo "configure:1379: checking for FlexLexer.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1381 "configure"
+#line 1384 "configure"
 #include "confdefs.h"
 #include <FlexLexer.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1386: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1389: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -1431,12 +1434,12 @@ fi
 
 
     echo $ac_n "checking whether explicit instantiation is needed""... $ac_c" 1>&6
-echo "configure:1435: checking whether explicit instantiation is needed" >&5
+echo "configure:1438: checking whether explicit instantiation is needed" >&5
 if eval "test \"`echo '$''{'lily_cv_need_explicit_instantiation'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1440 "configure"
+#line 1443 "configure"
 #include "confdefs.h"
 
     template <class T> struct foo { static int baz; };
@@ -1446,7 +1449,7 @@ int main() {
  return foo<int>::baz; 
 ; return 0; }
 EOF
-if { (eval echo configure:1450: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1453: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   lily_cv_need_explicit_instantiation=no
 else
@@ -1473,7 +1476,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:1477: checking for $ac_word" >&5
+echo "configure:1480: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1515,7 +1518,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:1519: checking for $ac_word" >&5
+echo "configure:1522: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_BISON'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1549,7 +1552,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:1553: checking for $ac_word" >&5
+echo "configure:1556: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_FLEX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1616,7 +1619,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:1620: checking for $ac_word" >&5
+echo "configure:1623: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1648,7 +1651,7 @@ test -n "$AR" || AR="error"
     # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1652: checking for $ac_word" >&5
+echo "configure:1655: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1703,7 +1706,7 @@ fi
 
 
     echo $ac_n "checking language""... $ac_c" 1>&6
-echo "configure:1707: checking language" >&5    
+echo "configure:1710: checking language" >&5    
     case "$language" in
       En* | en* | Am* | am* | US* | us*)
            lang=English;;
@@ -1739,7 +1742,7 @@ EOF
 
 
     echo $ac_n "checking for gettext in -lintl""... $ac_c" 1>&6
-echo "configure:1743: checking for gettext in -lintl" >&5
+echo "configure:1746: checking for gettext in -lintl" >&5
 ac_lib_var=`echo intl'_'gettext | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -1747,7 +1750,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lintl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 1751 "configure"
+#line 1754 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -1761,7 +1764,7 @@ int main() {
 gettext()
 ; return 0; }
 EOF
-if { (eval echo configure:1765: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1768: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -1791,12 +1794,12 @@ fi
     for ac_func in gettext
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:1795: checking for $ac_func" >&5
+echo "configure:1798: 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 1800 "configure"
+#line 1803 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -1822,7 +1825,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:1826: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1829: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -1848,12 +1851,13 @@ done
 
 
 
+    # AC_CHECK_PROGS(MSGFMT, msgfmt, -echo no msgfmt)
     for ac_prog in msgfmt
 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:1857: checking for $ac_word" >&5
+echo "configure:1861: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_MSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1880,21 +1884,27 @@ fi
 
 test -n "$MSGFMT" && break
 done
-test -n "$MSGFMT" || MSGFMT="-echo no msgfmt"
+test -n "$MSGFMT" || MSGFMT="\$(SHELL) \$(step-bindir)/fake-msgfmt.sh"
 
     echo $ac_n "checking whether msgfmt accepts -o""... $ac_c" 1>&6
-echo "configure:1887: checking whether msgfmt accepts -o" >&5
+echo "configure:1891: checking whether msgfmt accepts -o" >&5
     msgfmt_output="`msgfmt -o bla 2>&1 | grep usage`"
     if test "$msgfmt_output" = ""; then
        echo "$ac_t""yes" 1>&6
     else
        # urg
-       MSGFMT="touch ; echo "
+       MSGFMT="\$(SHELL) \$(step-bindir)/fake-msgfmt.sh)"
        echo "$ac_t""no" 1>&6
        
     echo "configure: warning: please install msgfmt from GNU gettext" 1>&2
     warn_b=yes
 
+    fi
+    if test ! -n "$MSGFMT"; then
+       
+    echo "configure: warning: please install msgfmt from GNU gettext" 1>&2
+    warn_b=yes
+
     fi
 
 
@@ -1930,7 +1940,7 @@ fi
     
 
     echo $ac_n "checking TeX/MF root dir directory""... $ac_c" 1>&6
-echo "configure:1934: checking TeX/MF root dir directory" >&5    
+echo "configure:1944: checking TeX/MF root dir directory" >&5    
 
     find_root_prefix="$prefix"
     
@@ -1971,7 +1981,7 @@ echo "configure:1934: checking TeX/MF root dir directory" >&5
     
     
     echo $ac_n "checking MF input directory""... $ac_c" 1>&6
-echo "configure:1975: checking MF input directory" >&5    
+echo "configure:1985: checking MF input directory" >&5    
     find_dirdir=`(cd $find_texprefix; 
       $FIND ./ -type d -a -name source -print |sort|head -1|sed 's#^\./##')`
     
@@ -1996,7 +2006,7 @@ echo "configure:1975: checking MF input directory" >&5
     
     
     echo $ac_n "checking TeX input directory""... $ac_c" 1>&6
-echo "configure:2000: checking TeX input directory" >&5    
+echo "configure:2010: checking TeX input directory" >&5    
     find_dirdir=`(cd $find_texprefix; 
       $FIND ./ -type d -a -name tex -print |sort|head -1|sed 's#^\./##')`
     
@@ -2027,7 +2037,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:2031: checking for $ac_word" >&5
+echo "configure:2041: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YODL'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2061,7 +2071,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:2065: checking for $ac_word" >&5
+echo "configure:2075: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YODL2HTML'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2095,7 +2105,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:2099: checking for $ac_word" >&5
+echo "configure:2109: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YODL2LATEX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2128,7 +2138,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:2132: checking for $ac_word" >&5
+echo "configure:2142: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YODL2MAN'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2162,7 +2172,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:2166: checking for $ac_word" >&5
+echo "configure:2176: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YODL2TEXINFO'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2196,7 +2206,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:2200: checking for $ac_word" >&5
+echo "configure:2210: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YODL2TXT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2234,6 +2244,12 @@ test -n "$YODL2TXT" || YODL2TXT="-echo no yodl"
        
        export YODL YODL2HTML YODL2LATEX YODL2MAN YODL2TEXINFO YODL2TXT
     fi
+    if test "x$YODL" = "-echo no yodl"; then
+       
+    echo "configure: warning: Did not find YODL (Yodl is Yet Oneother Document Language, see http://www.cs.uu.nl/~hanwen/yodl)" 1>&2
+    warn_b=yes
+
+    fi    
 
 
 
@@ -2248,7 +2264,7 @@ test -n "$YODL2TXT" || YODL2TXT="-echo no yodl"
 
 
 echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6
-echo "configure:2252: checking for 8-bit clean memcmp" >&5
+echo "configure:2268: 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
@@ -2256,7 +2272,7 @@ else
   ac_cv_func_memcmp_clean=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 2260 "configure"
+#line 2276 "configure"
 #include "confdefs.h"
 #ifdef __cplusplus
 extern "C" void exit(int);
@@ -2269,7 +2285,7 @@ main()
 }
 
 EOF
-if { (eval echo configure:2273: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:2289: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
 then
   ac_cv_func_memcmp_clean=yes
 else
@@ -2287,12 +2303,12 @@ echo "$ac_t""$ac_cv_func_memcmp_clean" 1>&6
 test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.o"
 
 echo $ac_n "checking for vprintf""... $ac_c" 1>&6
-echo "configure:2291: checking for vprintf" >&5
+echo "configure:2307: 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 2296 "configure"
+#line 2312 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char vprintf(); below.  */
@@ -2318,7 +2334,7 @@ vprintf();
 
 ; return 0; }
 EOF
-if { (eval echo configure:2322: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2338: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_func_vprintf=yes"
 else
@@ -2342,12 +2358,12 @@ fi
 
 if test "$ac_cv_func_vprintf" != yes; then
 echo $ac_n "checking for _doprnt""... $ac_c" 1>&6
-echo "configure:2346: checking for _doprnt" >&5
+echo "configure:2362: 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 2351 "configure"
+#line 2367 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char _doprnt(); below.  */
@@ -2373,7 +2389,7 @@ _doprnt();
 
 ; return 0; }
 EOF
-if { (eval echo configure:2377: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2393: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_func__doprnt=yes"
 else
@@ -2400,12 +2416,12 @@ fi
 for ac_func in memmem snprintf vsnprintf gettext
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2404: checking for $ac_func" >&5
+echo "configure:2420: 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 2409 "configure"
+#line 2425 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -2431,7 +2447,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:2435: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2451: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -2470,7 +2486,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:2474: checking for $ac_word" >&5
+echo "configure:2490: 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
@@ -2661,6 +2677,7 @@ s%@PYTHON@%$PYTHON%g
 s%@DOTEXE@%$DOTEXE%g
 s%@ZIP@%$ZIP%g
 s%@LN@%$LN%g
+s%@INSTALL@%$INSTALL%g
 s%@DIR_DATADIR@%$DIR_DATADIR%g
 s%@subdirs@%$subdirs%g
 s%@CC@%$CC%g
index a963a2fb2a4a620af96ac17bf576841b79efadec..8f442d9041caeaf0b4ae05766d9474a14f157612 100644 (file)
@@ -12,7 +12,6 @@
 
 #include "string.hh"
 #include "real.hh"
-#include "matrix.hh"
 
 /// Perl -like scalar type.
 struct Scalar : public String 
@@ -34,8 +33,8 @@ struct Scalar : public String
     urg, these are bit silly; perhaps should make "Print_string" class
     (derive from Scalar?)
    */
-  Scalar (Vector v) { *this = v.str (); }
-  Scalar (Matrix m) { *this = m.str (); }
+  Scalar (Vector const &v);
+  Scalar (Matrix const &m);
 
   /**   perl -like string to bool conversion.
    */
index c1f69eda6002d6ad4caf797d0ff752358997932e..7008880cccb9b84b3d48342c9b0ac2f2d253bd8b 100644 (file)
@@ -10,6 +10,7 @@
 #include <stdio.h>
 #include "scalar.hh"
 #include "rational.hh"
+#include "matrix.hh"
 
 Scalar::Scalar (Rational r)
 {
@@ -72,3 +73,13 @@ Scalar::to_bool () const
     return false;
   return true;
 }
+
+Scalar::Scalar(Matrix const &m)
+{
+  *this = m.str ();
+}
+
+Scalar::Scalar (Vector const &v)
+{
+  *this = v.str ();
+}
index b557d18d4bec4b1279957d963056d4371fa623f2..1919c9e34399e80c430a7fadf244ec09cbd4fdd7 100644 (file)
@@ -12,3 +12,6 @@ flexamples=example-1 example-2
 
 include $(stepdir)/WWW.make
 
+
+local-check: $(addsuffix .dvi, $(addprefix $(outdir)/, $(examples)))
+
index b79339f1e09fc3fe1bdcea3af542c4dc1077e114..36dc14b269df05f925364fb7c21d9b8365225924 100644 (file)
@@ -1,8 +1,8 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=0
-PATCH_LEVEL=1
-MY_PATCH_LEVEL=jcn2
+PATCH_LEVEL=2
+MY_PATCH_LEVEL=
 
 # use the above to send patches, always empty for released version:
 # please don't move these comments up; the patch should fail if 
index faf0dae1c4cfc65862599f7ea89dbea837cd8fec..b0dbaf5611c667eea0e2d1163dfa3908603f71a2 100644 (file)
@@ -26,6 +26,9 @@ Text_def::width (Paper_def * p) const
 {
   Atom a = get_atom (p,CENTER);
 
+  /* TODO: check string for \texcommand
+   */
+
   Real guess_width_f = text_str_.length_i() * a.dim_.x ().length (); // ugh
   Interval i (0, guess_width_f);
   i += - (align_dir_ + 1)* i.center();
index a546effdaa48e4af239364b3099fedc775dd18b4..0ed7c75c4ea5c98a9cb74e4b39be90f55f9c6f35 100644 (file)
@@ -58,5 +58,7 @@
 1.0.0.hwn1
 1.0.0.hwn2
 1.0.1
-1.0.1.jcn1
+1.0.1.jbr1
 1.0.1.jcn2
+1.0.1.jbr2
+1.0.2
index 7bf75efad30603886a28373f106815034941241f..6261f091c45fe7e6d132daa6ab74f4ffec9df9c4 100644 (file)
@@ -1,7 +1,7 @@
 Begin3
 Titel: LilyPond
-Versie: 1.0.1
-Inschrijf datum: 10AUG98
+Versie: 1.0.2
+Inschrijf datum: 13AUG98
 Beschrijving: 
 LilyPond is de muziekzetter van het GNU Project.  Dit programma drukt
 prachtige bladmuziek volgens een muzikaal definitie bestand.  Ook kan
@@ -15,8 +15,8 @@ Auteur: hanwen@stack.nl (Han-Wen Nienhuys)
        janneke@gnu.org (Jan Nieuwenhuizen)
 Onderhouden door: hanwen@cs.ruu.nl (Han-Wen Nienhuys)
 Voornaamste plek: sunsite.unc.edu /pub/Linux/apps
-       610k lilypond-1.0.1.tar.gz 
+       610k lilypond-1.0.2.tar.gz 
 Oorspronkelijke plek: pcnov095.win.tue.nl /pub/lilypond/
-       610k lilypond-1.0.1.tar.gz 
+       610k lilypond-1.0.2.tar.gz 
 Copi-eer voorwaarden: GPL
 End
index 72bc7aa147b98745592c064f96d64e761a3adfe9..43dcdc13b70128ab22721e47fe278aaa0f64c642 100644 (file)
@@ -1,7 +1,7 @@
 Begin3
 Title: LilyPond
-Version: 1.0.1
-Entered-date: 10AUG98
+Version: 1.0.2
+Entered-date: 13AUG98
 Description: 
 LilyPond is the GNU Project music typesetter.  This program can print
 beautiful sheet music from a music definition file.  It can also play
@@ -14,8 +14,8 @@ Author: hanwen@cs.ruu.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
-       730k lilypond-1.0.1.tar.gz 
+       730k lilypond-1.0.2.tar.gz 
 Original-site: pcnov095.win.tue.nl /pub/lilypond/development/
-       730k lilypond-1.0.1.tar.gz 
+       730k lilypond-1.0.2.tar.gz 
 Copying-policy: GPL
 End
index e55a3909fc2401ea2c134dfb6bbb69b5a1b555f6..fbb55227523995f52f24f6210b60af42b8385102 100644 (file)
@@ -1,9 +1,9 @@
 Name: lilypond
-Version: 1.0.1
+Version: 1.0.2
 Release: 1
 Copyright: GPL
 Group: Applications/Publishing
-Source0: pcnov095.win.tue.nl:/pub/lilypond/development/lilypond-1.0.1.tar.gz
+Source0: pcnov095.win.tue.nl:/pub/lilypond/development/lilypond-1.0.2.tar.gz
 Summary: A program for typesetting music.
 URL: http://www.cs.uu.nl/~hanwen/lilypond
 Packager: Han-Wen Nienhuys <hanwen@cs.uu.nl>
index 09ba175731f9800b89a2dbce5f3bfcb1887cfad8..1757826f7097eb567e71332e1cab2a8eeda2022c 100644 (file)
@@ -4,11 +4,11 @@
 #
 
 Name: lilypond-docs
-Version: 1.0.1
+Version: 1.0.2
 Release: 1
 Copyright: GPL
 Group: Applications/Publishing
-Source0: pcnov095.win.tue.nl:/pub/lilypond/development/lilypond-1.0.1.tar.gz
+Source0: pcnov095.win.tue.nl:/pub/lilypond/development/lilypond-1.0.2.tar.gz
 Summary: A program for typesetting music (documentation)
 URL: http://www.cs.uu.nl/~hanwen/lilypond
 Packager: Han-Wen Nienhuys <hanwen@cs.uu.nl>
@@ -29,7 +29,7 @@ a nice font of musical symbols.
 This package contains the documentation in HTML and PS format.
 
 %prep
-%setup  -T -n lilypond-1.0.1 -b0
+%setup  -T -n lilypond-1.0.2 -b0
 %build
 
 #
@@ -42,11 +42,11 @@ make htmldocs
 %install
 
 # ln /home/hanwen/usr/src/lilypond/out/htmldoc.tar.gz out/
-mkdir -p $RPM_BUILD_ROOT/usr/doc/lilypond-1.0.1 
-tar -C $RPM_BUILD_ROOT/usr/doc/lilypond-1.0.1 -xzf out/htmldoc.tar.gz 
+mkdir -p $RPM_BUILD_ROOT/usr/doc/lilypond-1.0.2 
+tar -C $RPM_BUILD_ROOT/usr/doc/lilypond-1.0.2 -xzf out/htmldoc.tar.gz 
 
 %files
 
-%doc /usr/doc/lilypond-1.0.1
+%doc /usr/doc/lilypond-1.0.2
 
 %post
index 42c18fec889c38920159a497a17b2c0c14a14ca1..407ce8ea2769632ae27d07157be24b93255993c9 100644 (file)
@@ -14,7 +14,11 @@ LYTABLES = $(addprefix $(outdir)/, $(FET_FILES:.mf=.ly))
 LOG_FILES = $(addprefix $(outdir)/, $(FET_FILES:.mf=.log))
 TEXTABLES = $(addprefix $(outdir)/, $(FET_FILES:.mf=.tex))
 AFM_FILES = $(addprefix $(outdir)/, $(FET_FILES:.mf=.afm))
+
 ALL_GEN_FILES=$(LYTABLES) $(TEXTABLES) $(LOG_FILES) $(AFM_FILES)
+
+OUT_DIST_FILES += $(AFM_FILES)
+
 default: $(ALL_GEN_FILES)
 
 
diff --git a/mf/out/feta11.afm b/mf/out/feta11.afm
new file mode 100644 (file)
index 0000000..cc61489
--- /dev/null
@@ -0,0 +1,76 @@
+FontName feta
+StartFontMetrics
+StartCharMetrics
+C 0; N rests-0; B 0.00 -1718.75 4125.00 0.00 ;
+C 1; N rests-1; B 0.00 0.00 4125.00 1718.75 ;
+C 2; N rests-0o; B -1718.75 -1718.75 5843.75 275.02 ;
+C 3; N rests-1o; B -1718.75 -275.02 5843.75 1718.75 ;
+C 4; N rests--1; B 0.00 0.00 1650.00 2750.00 ;
+C 5; N rests--2; B 0.00 -2750.00 1650.00 2750.00 ;
+C 6; N rests-2; B 0.00 2062.50 2970.00 9900.02 ;
+C 7; N rests-3; B 0.00 2750.00 3666.66 7814.64 ;
+C 8; N rests-4; B 0.00 0.00 4266.33 7814.64 ;
+C 9; N rests-5; B 0.00 0.00 4813.96 10564.64 ;
+C 10; N rests-6; B 0.00 0.00 5161.70 13314.64 ;
+C 11; N rests-7; B 0.00 0.00 5746.25 16064.64 ;
+C 12; N accidentals-1; B 0.00 -4125.00 3025.02 4125.00 ;
+C 13; N accidentals-0; B 0.00 -4125.00 1833.33 4125.00 ;
+C 14; N accidentals--1; B -330.03 -1375.00 2200.01 5500.00 ;
+C 15; N accidentals--2; B -330.03 -1375.00 3987.49 5500.00 ;
+C 16; N accidentals-2; B 0.00 -1375.00 2750.00 1375.00 ;
+C 17; N dots-dot; B 0.00 -618.74 1237.49 618.74 ;
+C 18; N dots-repeatcolon; B 0.00 -1375.00 1237.49 1375.00 ;
+C 19; N balls--1; B 0.00 -1512.51 5500.00 1512.51 ;
+C 20; N balls--1l; B -1375.00 -275.02 6875.00 275.02 ;
+C 21; N balls--2; B 0.00 -1512.51 5500.00 1512.51 ;
+C 22; N balls--2l; B -1375.00 -275.02 6875.00 275.02 ;
+C 23; N balls-0; B 0.00 -1512.51 5445.07 1512.51 ;
+C 24; N balls-0l; B -1361.27 -275.02 6806.34 275.02 ;
+C 25; N balls-1; B 0.00 -1512.51 3788.07 1512.51 ;
+C 26; N balls-1l; B -947.02 -275.02 4735.09 275.02 ;
+C 27; N balls-2; B 0.00 -1512.51 3632.84 1512.51 ;
+C 28; N balls-2l; B -908.22 -275.02 4541.06 275.02 ;
+C 29; N scripts-ufermata; B -3643.77 -206.27 3643.77 3987.55 ;
+C 30; N scripts-dfermata; B -3643.77 -3987.55 3643.77 206.27 ;
+C 31; N scripts-sforzato; B -2474.99 -1375.00 2474.99 1375.00 ;
+C 32; N scripts-staccato; B -412.54 -412.54 412.54 412.54 ;
+C 33; N scripts-ustaccatissimo; B -550.05 -200.00 550.05 2750.06 ;
+C 34; N scripts-dstaccatissimo; B -550.05 -2750.06 550.05 200.00 ;
+C 35; N scripts-tenuto; B -1650.02 -192.52 1650.02 192.52 ;
+C 36; N scripts-umarcato; B -1375.00 0.00 1375.00 3025.02 ;
+C 37; N scripts-dmarcato; B -1375.00 -3025.02 1375.00 0.00 ;
+C 38; N scripts-open; B -1100.00 -1375.00 1100.00 1375.00 ;
+C 39; N scripts-stopped; B -1512.51 -1512.51 1512.51 1512.51 ;
+C 40; N scripts-upbow; B -1787.50 0.00 1787.50 5720.05 ;
+C 41; N scripts-downbow; B -2062.50 0.00 2062.50 3666.66 ;
+C 42; N scripts-reverseturn; B -3007.81 -1455.89 3007.81 1455.89 ;
+C 43; N scripts-turn; B -3007.81 -1455.89 3007.81 1455.89 ;
+C 44; N scripts-trill; B -2750.00 0.00 2750.00 6187.50 ;
+C 45; N scripts-upedalheel; B -1375.00 -1375.00 1375.00 1833.33 ;
+C 46; N scripts-dpedalheel; B -1375.00 -1833.33 1375.00 1375.00 ;
+C 47; N scripts-upedaltoe; B -1375.00 0.00 1375.00 4125.00 ;
+C 48; N scripts-dpedaltoe; B -1375.00 -4125.00 1375.00 0.00 ;
+C 49; N scripts-flageolet; B -1466.67 -1466.67 1466.67 1466.67 ;
+C 50; N scripts-trilelement; B -1833.33 -1375.00 718.64 1375.00 ;
+C 51; N scripts-prall; B -3109.31 -1375.00 3109.31 1375.00 ;
+C 52; N scripts-mordent; B -3109.31 -1375.00 3109.31 1375.00 ;
+C 53; N scripts-prallprall; B -4385.30 -1375.00 4385.30 1375.00 ;
+C 54; N scripts-prallmordent; B -4385.30 -1375.00 4385.30 1375.00 ;
+C 55; N scripts-upprall; B -4385.30 -1375.00 4385.30 1375.00 ;
+C 56; N scripts-downprall; B -4385.30 -1375.00 4385.30 1375.00 ;
+C 57; N flags-u3; B -137.51 -8428.77 3393.31 137.51 ;
+C 58; N flags-u4; B -137.51 -9803.77 3393.31 137.51 ;
+C 59; N flags-u5; B -137.51 -11866.27 3393.31 137.51 ;
+C 60; N flags-u6; B -137.51 -14616.27 3393.31 137.51 ;
+C 61; N flags-d3; B -137.51 -137.51 3755.11 8016.30 ;
+C 62; N flags-d4; B -137.51 -137.51 3755.11 8428.77 ;
+C 63; N flags-d5; B -137.51 -137.51 3755.11 10766.30 ;
+C 64; N flags-d6; B -137.51 -137.51 3755.11 12141.30 ;
+C 65; N clefs-alto; B -2750.00 -5500.00 10236.10 5500.00 ;
+C 66; N clefs-alto_change; B -2200.01 -4400.02 8188.93 4400.02 ;
+C 67; N clefs-bass; B -1375.00 -6875.00 9900.02 2750.00 ;
+C 68; N clefs-bass_change; B -1100.02 -5500.03 7920.04 2200.01 ;
+C 69; N clefs-violin; B -2396.44 -8250.00 10277.13 13750.00 ;
+C 70; N clefs-violin_change; B -2082.15 -6600.04 8056.75 11000.06 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/mf/out/feta13.afm b/mf/out/feta13.afm
new file mode 100644 (file)
index 0000000..b122ce7
--- /dev/null
@@ -0,0 +1,76 @@
+FontName feta
+StartFontMetrics
+StartCharMetrics
+C 0; N rests-0; B 0.00 -2031.25 4875.00 0.00 ;
+C 1; N rests-1; B 0.00 0.00 4875.00 2031.25 ;
+C 2; N rests-0o; B -2031.25 -2031.25 6906.25 325.03 ;
+C 3; N rests-1o; B -2031.25 -325.03 6906.25 2031.25 ;
+C 4; N rests--1; B 0.00 0.00 1950.00 3250.00 ;
+C 5; N rests--2; B 0.00 -3250.00 1950.00 3250.00 ;
+C 6; N rests-2; B 0.00 2437.50 3510.01 11700.03 ;
+C 7; N rests-3; B 0.00 3250.00 4333.31 9235.49 ;
+C 8; N rests-4; B 0.00 0.00 5042.04 9235.49 ;
+C 9; N rests-5; B 0.00 0.00 5689.25 12485.49 ;
+C 10; N rests-6; B 0.00 0.00 6100.20 15735.49 ;
+C 11; N rests-7; B 0.00 0.00 6791.03 18985.49 ;
+C 12; N accidentals-1; B 0.00 -4875.00 3575.03 4875.00 ;
+C 13; N accidentals-0; B 0.00 -4875.00 2166.67 4875.00 ;
+C 14; N accidentals--1; B -390.03 -1625.00 2600.00 6500.00 ;
+C 15; N accidentals--2; B -390.03 -1625.00 4712.50 6500.00 ;
+C 16; N accidentals-2; B 0.00 -1625.00 3250.00 1625.00 ;
+C 17; N dots-dot; B 0.00 -731.25 1462.50 731.25 ;
+C 18; N dots-repeatcolon; B 0.00 -1625.00 1462.50 1625.00 ;
+C 19; N balls--1; B 0.00 -1787.52 6500.00 1787.52 ;
+C 20; N balls--1l; B -1625.00 -325.03 8125.00 325.03 ;
+C 21; N balls--2; B 0.00 -1787.52 6500.00 1787.52 ;
+C 22; N balls--2l; B -1625.00 -325.03 8125.00 325.03 ;
+C 23; N balls-0; B 0.00 -1787.52 6435.09 1787.52 ;
+C 24; N balls-0l; B -1608.78 -325.03 8043.87 325.03 ;
+C 25; N balls-1; B 0.00 -1787.52 4476.79 1787.52 ;
+C 26; N balls-1l; B -1119.20 -325.03 5596.00 325.03 ;
+C 27; N balls-2; B 0.00 -1787.52 4293.33 1787.52 ;
+C 28; N balls-2l; B -1073.33 -325.03 5366.67 325.03 ;
+C 29; N scripts-ufermata; B -4306.27 -243.77 4306.27 4712.55 ;
+C 30; N scripts-dfermata; B -4306.27 -4712.55 4306.27 243.77 ;
+C 31; N scripts-sforzato; B -2924.99 -1625.00 2924.99 1625.00 ;
+C 32; N scripts-staccato; B -487.55 -487.55 487.55 487.55 ;
+C 33; N scripts-ustaccatissimo; B -650.05 -200.00 650.05 3250.06 ;
+C 34; N scripts-dstaccatissimo; B -650.05 -3250.06 650.05 200.00 ;
+C 35; N scripts-tenuto; B -1950.03 -227.52 1950.03 227.52 ;
+C 36; N scripts-umarcato; B -1625.00 0.00 1625.00 3575.03 ;
+C 37; N scripts-dmarcato; B -1625.00 -3575.03 1625.00 0.00 ;
+C 38; N scripts-open; B -1300.00 -1625.00 1300.00 1625.00 ;
+C 39; N scripts-stopped; B -1787.52 -1787.52 1787.52 1787.52 ;
+C 40; N scripts-upbow; B -2112.50 0.00 2112.50 6760.04 ;
+C 41; N scripts-downbow; B -2437.50 0.00 2437.50 4333.31 ;
+C 42; N scripts-reverseturn; B -3554.69 -1720.60 3554.69 1720.60 ;
+C 43; N scripts-turn; B -3554.69 -1720.60 3554.69 1720.60 ;
+C 44; N scripts-trill; B -3250.00 0.00 3250.00 7312.50 ;
+C 45; N scripts-upedalheel; B -1625.00 -1625.00 1625.00 2166.67 ;
+C 46; N scripts-dpedalheel; B -1625.00 -2166.67 1625.00 1625.00 ;
+C 47; N scripts-upedaltoe; B -1625.00 0.00 1625.00 4875.00 ;
+C 48; N scripts-dpedaltoe; B -1625.00 -4875.00 1625.00 0.00 ;
+C 49; N scripts-flageolet; B -1733.34 -1733.34 1733.34 1733.34 ;
+C 50; N scripts-trilelement; B -2166.67 -1625.00 849.30 1625.00 ;
+C 51; N scripts-prall; B -3674.65 -1625.00 3674.65 1625.00 ;
+C 52; N scripts-mordent; B -3674.65 -1625.00 3674.65 1625.00 ;
+C 53; N scripts-prallprall; B -5182.63 -1625.00 5182.63 1625.00 ;
+C 54; N scripts-prallmordent; B -5182.63 -1625.00 5182.63 1625.00 ;
+C 55; N scripts-upprall; B -5182.63 -1625.00 5182.63 1625.00 ;
+C 56; N scripts-downprall; B -5182.63 -1625.00 5182.63 1625.00 ;
+C 57; N flags-u3; B -162.52 -9961.27 4010.27 162.52 ;
+C 58; N flags-u4; B -162.52 -11586.27 4010.27 162.52 ;
+C 59; N flags-u5; B -162.52 -14023.77 4010.27 162.52 ;
+C 60; N flags-u6; B -162.52 -17273.77 4010.27 162.52 ;
+C 61; N flags-d3; B -162.52 -162.52 4437.84 9473.80 ;
+C 62; N flags-d4; B -162.52 -162.52 4437.84 9961.27 ;
+C 63; N flags-d5; B -162.52 -162.52 4437.84 12723.80 ;
+C 64; N flags-d6; B -162.52 -162.52 4437.84 14348.80 ;
+C 65; N clefs-alto; B -3250.00 -6500.00 12097.24 6500.00 ;
+C 66; N clefs-alto_change; B -2600.00 -5200.01 9677.81 5200.01 ;
+C 67; N clefs-bass; B -1625.00 -8125.00 11700.03 3250.00 ;
+C 68; N clefs-bass_change; B -1300.02 -6500.02 9360.02 2600.00 ;
+C 69; N clefs-violin; B -2832.14 -9750.00 12145.70 16250.00 ;
+C 70; N clefs-violin_change; B -2460.72 -7800.02 9521.58 13000.03 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/mf/out/feta16.afm b/mf/out/feta16.afm
new file mode 100644 (file)
index 0000000..d4f7310
--- /dev/null
@@ -0,0 +1,76 @@
+FontName feta
+StartFontMetrics
+StartCharMetrics
+C 0; N rests-0; B 0.00 -2500.00 6000.00 0.00 ;
+C 1; N rests-1; B 0.00 0.00 6000.00 2500.00 ;
+C 2; N rests-0o; B -2500.00 -2500.00 8500.00 400.02 ;
+C 3; N rests-1o; B -2500.00 -400.02 8500.00 2500.00 ;
+C 4; N rests--1; B 0.00 0.00 2400.00 4000.00 ;
+C 5; N rests--2; B 0.00 -4000.00 2400.00 4000.00 ;
+C 6; N rests-2; B 0.00 3000.00 4320.00 14400.02 ;
+C 7; N rests-3; B 0.00 4000.00 5333.31 11366.73 ;
+C 8; N rests-4; B 0.00 0.00 6205.57 11366.73 ;
+C 9; N rests-5; B 0.00 0.00 7002.14 15366.73 ;
+C 10; N rests-6; B 0.00 0.00 7507.93 19366.73 ;
+C 11; N rests-7; B 0.00 0.00 8358.18 23366.73 ;
+C 12; N accidentals-1; B 0.00 -6000.00 4400.02 6000.00 ;
+C 13; N accidentals-0; B 0.00 -6000.00 2666.67 6000.00 ;
+C 14; N accidentals--1; B -480.03 -2000.00 3200.01 8000.00 ;
+C 15; N accidentals--2; B -480.03 -2000.00 5799.99 8000.00 ;
+C 16; N accidentals-2; B 0.00 -2000.00 4000.00 2000.00 ;
+C 17; N dots-dot; B 0.00 -900.00 1799.99 900.00 ;
+C 18; N dots-repeatcolon; B 0.00 -2000.00 1799.99 2000.00 ;
+C 19; N balls--1; B 0.00 -2200.01 8000.00 2200.01 ;
+C 20; N balls--1l; B -2000.00 -400.02 10000.00 400.02 ;
+C 21; N balls--2; B 0.00 -2200.01 8000.00 2200.01 ;
+C 22; N balls--2l; B -2000.00 -400.02 10000.00 400.02 ;
+C 23; N balls-0; B 0.00 -2200.01 7920.04 2200.01 ;
+C 24; N balls-0l; B -1980.01 -400.02 9900.05 400.02 ;
+C 25; N balls-1; B 0.00 -2200.01 5509.86 2200.01 ;
+C 26; N balls-1l; B -1377.47 -400.02 6887.33 400.02 ;
+C 27; N balls-2; B 0.00 -2200.01 5284.09 2200.01 ;
+C 28; N balls-2l; B -1321.03 -400.02 6605.12 400.02 ;
+C 29; N scripts-ufermata; B -5300.02 -300.02 5300.02 5800.05 ;
+C 30; N scripts-dfermata; B -5300.02 -5800.05 5300.02 300.02 ;
+C 31; N scripts-sforzato; B -3599.98 -2000.00 3599.98 2000.00 ;
+C 32; N scripts-staccato; B -600.04 -600.04 600.04 600.04 ;
+C 33; N scripts-ustaccatissimo; B -800.05 -200.00 800.05 4000.06 ;
+C 34; N scripts-dstaccatissimo; B -800.05 -4000.06 800.05 200.00 ;
+C 35; N scripts-tenuto; B -2400.02 -280.01 2400.02 280.01 ;
+C 36; N scripts-umarcato; B -2000.00 0.00 2000.00 4400.02 ;
+C 37; N scripts-dmarcato; B -2000.00 -4400.02 2000.00 0.00 ;
+C 38; N scripts-open; B -1600.00 -2000.00 1600.00 2000.00 ;
+C 39; N scripts-stopped; B -2200.01 -2200.01 2200.01 2200.01 ;
+C 40; N scripts-upbow; B -2600.00 0.00 2600.00 8320.05 ;
+C 41; N scripts-downbow; B -3000.00 0.00 3000.00 5333.31 ;
+C 42; N scripts-reverseturn; B -4375.00 -2117.65 4375.00 2117.65 ;
+C 43; N scripts-turn; B -4375.00 -2117.65 4375.00 2117.65 ;
+C 44; N scripts-trill; B -4000.00 0.00 4000.00 9000.00 ;
+C 45; N scripts-upedalheel; B -2000.00 -2000.00 2000.00 2666.67 ;
+C 46; N scripts-dpedalheel; B -2000.00 -2666.67 2000.00 2000.00 ;
+C 47; N scripts-upedaltoe; B -2000.00 0.00 2000.00 6000.00 ;
+C 48; N scripts-dpedaltoe; B -2000.00 -6000.00 2000.00 0.00 ;
+C 49; N scripts-flageolet; B -2133.33 -2133.33 2133.33 2133.33 ;
+C 50; N scripts-trilelement; B -2666.67 -2000.00 1045.30 2000.00 ;
+C 51; N scripts-prall; B -4522.66 -2000.00 4522.66 2000.00 ;
+C 52; N scripts-mordent; B -4522.66 -2000.00 4522.66 2000.00 ;
+C 53; N scripts-prallprall; B -6378.65 -2000.00 6378.65 2000.00 ;
+C 54; N scripts-prallmordent; B -6378.65 -2000.00 6378.65 2000.00 ;
+C 55; N scripts-upprall; B -6378.65 -2000.00 6378.65 2000.00 ;
+C 56; N scripts-downprall; B -6378.65 -2000.00 6378.65 2000.00 ;
+C 57; N flags-u3; B -200.01 -12260.03 4935.68 200.01 ;
+C 58; N flags-u4; B -200.01 -14260.03 4935.68 200.01 ;
+C 59; N flags-u5; B -200.01 -17260.03 4935.68 200.01 ;
+C 60; N flags-u6; B -200.01 -21260.03 4935.68 200.01 ;
+C 61; N flags-d3; B -200.01 -200.01 5461.91 11660.05 ;
+C 62; N flags-d4; B -200.01 -200.01 5461.91 12260.03 ;
+C 63; N flags-d5; B -200.01 -200.01 5461.91 15660.05 ;
+C 64; N flags-d6; B -200.01 -200.01 5461.91 17660.05 ;
+C 65; N clefs-alto; B -4000.00 -8000.00 14888.90 8000.00 ;
+C 66; N clefs-alto_change; B -3200.01 -6400.02 11911.18 6400.02 ;
+C 67; N clefs-bass; B -2000.00 -10000.00 14400.02 4000.00 ;
+C 68; N clefs-bass_change; B -1600.04 -8000.03 11520.03 3200.01 ;
+C 69; N clefs-violin; B -3485.72 -12000.00 14948.55 20000.00 ;
+C 70; N clefs-violin_change; B -3028.58 -9600.04 11718.89 16000.06 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/mf/out/feta19.afm b/mf/out/feta19.afm
new file mode 100644 (file)
index 0000000..34cfa44
--- /dev/null
@@ -0,0 +1,76 @@
+FontName feta
+StartFontMetrics
+StartCharMetrics
+C 0; N rests-0; B 0.00 -2968.75 7125.00 0.00 ;
+C 1; N rests-1; B 0.00 0.00 7125.00 2968.75 ;
+C 2; N rests-0o; B -2968.75 -2968.75 10093.75 475.04 ;
+C 3; N rests-1o; B -2968.75 -475.04 10093.75 2968.75 ;
+C 4; N rests--1; B 0.00 0.00 2850.00 4750.00 ;
+C 5; N rests--2; B 0.00 -4750.00 2850.00 4750.00 ;
+C 6; N rests-2; B 0.00 3562.50 5130.00 17100.04 ;
+C 7; N rests-3; B 0.00 4750.00 6333.31 13498.00 ;
+C 8; N rests-4; B 0.00 0.00 7369.11 13498.00 ;
+C 9; N rests-5; B 0.00 0.00 8315.05 18248.00 ;
+C 10; N rests-6; B 0.00 0.00 8915.66 22998.00 ;
+C 11; N rests-7; B 0.00 0.00 9925.34 27748.00 ;
+C 12; N accidentals-1; B 0.00 -7125.00 5225.04 7125.00 ;
+C 13; N accidentals-0; B 0.00 -7125.00 3166.67 7125.00 ;
+C 14; N accidentals--1; B -570.04 -2375.00 3800.02 9500.00 ;
+C 15; N accidentals--2; B -570.04 -2375.00 6887.48 9500.00 ;
+C 16; N accidentals-2; B 0.00 -2375.00 4750.00 2375.00 ;
+C 17; N dots-dot; B 0.00 -1068.74 2137.48 1068.74 ;
+C 18; N dots-repeatcolon; B 0.00 -2375.00 2137.48 2375.00 ;
+C 19; N balls--1; B 0.00 -2612.52 9500.00 2612.52 ;
+C 20; N balls--1l; B -2375.00 -475.04 11875.00 475.04 ;
+C 21; N balls--2; B 0.00 -2612.52 9500.00 2612.52 ;
+C 22; N balls--2l; B -2375.00 -475.04 11875.00 475.04 ;
+C 23; N balls-0; B 0.00 -2612.52 9405.09 2612.52 ;
+C 24; N balls-0l; B -2351.27 -475.04 11756.36 475.04 ;
+C 25; N balls-1; B 0.00 -2612.52 6543.00 2612.52 ;
+C 26; N balls-1l; B -1635.76 -475.04 8178.76 475.04 ;
+C 27; N balls-2; B 0.00 -2612.52 6274.89 2612.52 ;
+C 28; N balls-2l; B -1568.73 -475.04 7843.61 475.04 ;
+C 29; N scripts-ufermata; B -6293.78 -356.28 6293.78 6887.57 ;
+C 30; N scripts-dfermata; B -6293.78 -6887.57 6293.78 356.28 ;
+C 31; N scripts-sforzato; B -4274.98 -2375.00 4274.98 2375.00 ;
+C 32; N scripts-staccato; B -712.55 -712.55 712.55 712.55 ;
+C 33; N scripts-ustaccatissimo; B -950.07 -200.00 950.07 4750.09 ;
+C 34; N scripts-dstaccatissimo; B -950.07 -4750.09 950.07 200.00 ;
+C 35; N scripts-tenuto; B -2850.04 -332.53 2850.04 332.53 ;
+C 36; N scripts-umarcato; B -2375.00 0.00 2375.00 5225.04 ;
+C 37; N scripts-dmarcato; B -2375.00 -5225.04 2375.00 0.00 ;
+C 38; N scripts-open; B -1900.01 -2375.00 1900.01 2375.00 ;
+C 39; N scripts-stopped; B -2612.52 -2612.52 2612.52 2612.52 ;
+C 40; N scripts-upbow; B -3087.51 0.00 3087.51 9880.07 ;
+C 41; N scripts-downbow; B -3562.50 0.00 3562.50 6333.31 ;
+C 42; N scripts-reverseturn; B -5195.31 -2514.71 5195.31 2514.71 ;
+C 43; N scripts-turn; B -5195.31 -2514.71 5195.31 2514.71 ;
+C 44; N scripts-trill; B -4750.00 0.00 4750.00 10687.50 ;
+C 45; N scripts-upedalheel; B -2375.00 -2375.00 2375.00 3166.67 ;
+C 46; N scripts-dpedalheel; B -2375.00 -3166.67 2375.00 2375.00 ;
+C 47; N scripts-upedaltoe; B -2375.00 0.00 2375.00 7125.00 ;
+C 48; N scripts-dpedaltoe; B -2375.00 -7125.00 2375.00 0.00 ;
+C 49; N scripts-flageolet; B -2533.34 -2533.34 2533.34 2533.34 ;
+C 50; N scripts-trilelement; B -3166.67 -2375.00 1241.30 2375.00 ;
+C 51; N scripts-prall; B -5370.65 -2375.00 5370.65 2375.00 ;
+C 52; N scripts-mordent; B -5370.65 -2375.00 5370.65 2375.00 ;
+C 53; N scripts-prallprall; B -7574.63 -2375.00 7574.63 2375.00 ;
+C 54; N scripts-prallmordent; B -7574.63 -2375.00 7574.63 2375.00 ;
+C 55; N scripts-upprall; B -7574.63 -2375.00 7574.63 2375.00 ;
+C 56; N scripts-downprall; B -7574.63 -2375.00 7574.63 2375.00 ;
+C 57; N flags-u3; B -237.52 -14558.78 5861.15 237.52 ;
+C 58; N flags-u4; B -237.52 -16933.78 5861.15 237.52 ;
+C 59; N flags-u5; B -237.52 -20496.28 5861.15 237.52 ;
+C 60; N flags-u6; B -237.52 -25246.28 5861.15 237.52 ;
+C 61; N flags-d3; B -237.52 -237.52 6486.07 13846.31 ;
+C 62; N flags-d4; B -237.52 -237.52 6486.07 14558.78 ;
+C 63; N flags-d5; B -237.52 -237.52 6486.07 18596.31 ;
+C 64; N flags-d6; B -237.52 -237.52 6486.07 20971.31 ;
+C 65; N clefs-alto; B -4750.00 -9500.00 17680.59 9500.00 ;
+C 66; N clefs-alto_change; B -3800.02 -7600.04 14144.50 7600.04 ;
+C 67; N clefs-bass; B -2375.00 -11875.00 17100.04 4750.00 ;
+C 68; N clefs-bass_change; B -1900.04 -9500.05 13680.05 3800.02 ;
+C 69; N clefs-violin; B -4139.30 -14250.00 17751.40 23750.00 ;
+C 70; N clefs-violin_change; B -3596.45 -11400.05 13916.18 19000.09 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/mf/out/feta20.afm b/mf/out/feta20.afm
new file mode 100644 (file)
index 0000000..07717c2
--- /dev/null
@@ -0,0 +1,76 @@
+FontName feta
+StartFontMetrics
+StartCharMetrics
+C 0; N rests-0; B 0.00 -3125.00 7500.00 0.00 ;
+C 1; N rests-1; B 0.00 0.00 7500.00 3125.00 ;
+C 2; N rests-0o; B -3125.00 -3125.00 10625.00 500.03 ;
+C 3; N rests-1o; B -3125.00 -500.03 10625.00 3125.00 ;
+C 4; N rests--1; B 0.00 0.00 3000.00 5000.00 ;
+C 5; N rests--2; B 0.00 -5000.00 3000.00 5000.00 ;
+C 6; N rests-2; B 0.00 3750.00 5400.01 18000.03 ;
+C 7; N rests-3; B 0.00 5000.00 6666.64 14208.42 ;
+C 8; N rests-4; B 0.00 0.00 7756.96 14208.42 ;
+C 9; N rests-5; B 0.00 0.00 8752.69 19208.42 ;
+C 10; N rests-6; B 0.00 0.00 9384.92 24208.42 ;
+C 11; N rests-7; B 0.00 0.00 10447.72 29208.42 ;
+C 12; N accidentals-1; B 0.00 -7500.00 5500.03 7500.00 ;
+C 13; N accidentals-0; B 0.00 -7500.00 3333.33 7500.00 ;
+C 14; N accidentals--1; B -600.04 -2500.00 4000.02 10000.00 ;
+C 15; N accidentals--2; B -600.04 -2500.00 7249.98 10000.00 ;
+C 16; N accidentals-2; B 0.00 -2500.00 5000.00 2500.00 ;
+C 17; N dots-dot; B 0.00 -1125.00 2249.98 1125.00 ;
+C 18; N dots-repeatcolon; B 0.00 -2500.00 2249.98 2500.00 ;
+C 19; N balls--1; B 0.00 -2750.02 10000.00 2750.02 ;
+C 20; N balls--1l; B -2500.00 -500.03 12500.00 500.03 ;
+C 21; N balls--2; B 0.00 -2750.02 10000.00 2750.02 ;
+C 22; N balls--2l; B -2500.00 -500.03 12500.00 500.03 ;
+C 23; N balls-0; B 0.00 -2750.02 9900.09 2750.02 ;
+C 24; N balls-0l; B -2475.02 -500.03 12375.10 500.03 ;
+C 25; N balls-1; B 0.00 -2750.02 6887.33 2750.02 ;
+C 26; N balls-1l; B -1721.83 -500.03 8609.16 500.03 ;
+C 27; N balls-2; B 0.00 -2750.02 6605.15 2750.02 ;
+C 28; N balls-2l; B -1651.29 -500.03 8256.44 500.03 ;
+C 29; N scripts-ufermata; B -6625.03 -375.03 6625.03 7250.06 ;
+C 30; N scripts-dfermata; B -6625.03 -7250.06 6625.03 375.03 ;
+C 31; N scripts-sforzato; B -4499.97 -2500.00 4499.97 2500.00 ;
+C 32; N scripts-staccato; B -750.05 -750.05 750.05 750.05 ;
+C 33; N scripts-ustaccatissimo; B -1000.06 -200.00 1000.06 5000.08 ;
+C 34; N scripts-dstaccatissimo; B -1000.06 -5000.08 1000.06 200.00 ;
+C 35; N scripts-tenuto; B -3000.03 -350.02 3000.03 350.02 ;
+C 36; N scripts-umarcato; B -2500.00 0.00 2500.00 5500.03 ;
+C 37; N scripts-dmarcato; B -2500.00 -5500.03 2500.00 0.00 ;
+C 38; N scripts-open; B -2000.00 -2500.00 2000.00 2500.00 ;
+C 39; N scripts-stopped; B -2750.02 -2750.02 2750.02 2750.02 ;
+C 40; N scripts-upbow; B -3250.02 0.00 3250.02 10400.07 ;
+C 41; N scripts-downbow; B -3750.00 0.00 3750.00 6666.64 ;
+C 42; N scripts-reverseturn; B -5468.75 -2647.06 5468.75 2647.06 ;
+C 43; N scripts-turn; B -5468.75 -2647.06 5468.75 2647.06 ;
+C 44; N scripts-trill; B -5000.00 0.00 5000.00 11250.00 ;
+C 45; N scripts-upedalheel; B -2500.00 -2500.00 2500.00 3333.33 ;
+C 46; N scripts-dpedalheel; B -2500.00 -3333.33 2500.00 2500.00 ;
+C 47; N scripts-upedaltoe; B -2500.00 0.00 2500.00 7500.00 ;
+C 48; N scripts-dpedaltoe; B -2500.00 -7500.00 2500.00 0.00 ;
+C 49; N scripts-flageolet; B -2666.67 -2666.67 2666.67 2666.67 ;
+C 50; N scripts-trilelement; B -3333.33 -2500.00 1306.64 2500.00 ;
+C 51; N scripts-prall; B -5653.30 -2500.00 5653.30 2500.00 ;
+C 52; N scripts-mordent; B -5653.30 -2500.00 5653.30 2500.00 ;
+C 53; N scripts-prallprall; B -7973.28 -2500.00 7973.28 2500.00 ;
+C 54; N scripts-prallmordent; B -7973.28 -2500.00 7973.28 2500.00 ;
+C 55; N scripts-upprall; B -7973.28 -2500.00 7973.28 2500.00 ;
+C 56; N scripts-downprall; B -7973.28 -2500.00 7973.28 2500.00 ;
+C 57; N flags-u3; B -250.02 -15325.03 6169.62 250.02 ;
+C 58; N flags-u4; B -250.02 -17825.03 6169.62 250.02 ;
+C 59; N flags-u5; B -250.02 -21575.03 6169.62 250.02 ;
+C 60; N flags-u6; B -250.02 -26575.03 6169.62 250.02 ;
+C 61; N flags-d3; B -250.02 -250.02 6827.44 14575.06 ;
+C 62; N flags-d4; B -250.02 -250.02 6827.44 15325.03 ;
+C 63; N flags-d5; B -250.02 -250.02 6827.44 19575.06 ;
+C 64; N flags-d6; B -250.02 -250.02 6827.44 22075.06 ;
+C 65; N clefs-alto; B -5000.00 -10000.00 18611.10 10000.00 ;
+C 66; N clefs-alto_change; B -4000.02 -8000.03 14888.92 8000.03 ;
+C 67; N clefs-bass; B -2500.00 -12500.00 18000.03 5000.00 ;
+C 68; N clefs-bass_change; B -2000.05 -10000.05 14400.04 4000.02 ;
+C 69; N clefs-violin; B -4357.15 -15000.00 18685.68 25000.00 ;
+C 70; N clefs-violin_change; B -3785.74 -12000.05 14648.60 20000.08 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/mf/out/feta23.afm b/mf/out/feta23.afm
new file mode 100644 (file)
index 0000000..54d662f
--- /dev/null
@@ -0,0 +1,76 @@
+FontName feta
+StartFontMetrics
+StartCharMetrics
+C 0; N rests-0; B 0.00 -3515.63 8437.50 0.00 ;
+C 1; N rests-1; B 0.00 0.00 8437.50 3515.63 ;
+C 2; N rests-0o; B -3515.63 -3515.63 11953.13 562.53 ;
+C 3; N rests-1o; B -3515.63 -562.53 11953.13 3515.63 ;
+C 4; N rests--1; B 0.00 0.00 3375.00 5625.00 ;
+C 5; N rests--2; B 0.00 -5625.00 3375.00 5625.00 ;
+C 6; N rests-2; B 0.00 4218.75 6075.01 20250.03 ;
+C 7; N rests-3; B 0.00 5625.00 7499.97 15984.47 ;
+C 8; N rests-4; B 0.00 0.00 8726.58 15984.47 ;
+C 9; N rests-5; B 0.00 0.00 9846.77 21609.47 ;
+C 10; N rests-6; B 0.00 0.00 10558.03 27234.47 ;
+C 11; N rests-7; B 0.00 0.00 11753.70 32859.47 ;
+C 12; N accidentals-1; B 0.00 -8437.50 6187.53 8437.50 ;
+C 13; N accidentals-0; B 0.00 -8437.50 3750.00 8437.50 ;
+C 14; N accidentals--1; B -675.03 -2812.50 4500.02 11250.00 ;
+C 15; N accidentals--2; B -675.03 -2812.50 8156.23 11250.00 ;
+C 16; N accidentals-2; B 0.00 -2812.50 5625.00 2812.50 ;
+C 17; N dots-dot; B 0.00 -1265.63 2531.23 1265.63 ;
+C 18; N dots-repeatcolon; B 0.00 -2812.50 2531.23 2812.50 ;
+C 19; N balls--1; B 0.00 -3093.77 11250.00 3093.77 ;
+C 20; N balls--1l; B -2812.50 -562.53 14062.50 562.53 ;
+C 21; N balls--2; B 0.00 -3093.77 11250.00 3093.77 ;
+C 22; N balls--2l; B -2812.50 -562.53 14062.50 562.53 ;
+C 23; N balls-0; B 0.00 -3093.77 11137.57 3093.77 ;
+C 24; N balls-0l; B -2784.40 -562.53 13921.97 562.53 ;
+C 25; N balls-1; B 0.00 -3093.77 7748.26 3093.77 ;
+C 26; N balls-1l; B -1937.07 -562.53 9685.33 562.53 ;
+C 27; N balls-2; B 0.00 -3093.77 7430.80 3093.77 ;
+C 28; N balls-2l; B -1857.70 -562.53 9288.50 562.53 ;
+C 29; N scripts-ufermata; B -7453.16 -421.90 7453.16 8156.31 ;
+C 30; N scripts-dfermata; B -7453.16 -8156.31 7453.16 421.90 ;
+C 31; N scripts-sforzato; B -5062.47 -2812.50 5062.47 2812.50 ;
+C 32; N scripts-staccato; B -843.80 -843.80 843.80 843.80 ;
+C 33; N scripts-ustaccatissimo; B -1125.06 -200.00 1125.06 5625.08 ;
+C 34; N scripts-dstaccatissimo; B -1125.06 -5625.08 1125.06 200.00 ;
+C 35; N scripts-tenuto; B -3375.03 -393.77 3375.03 393.77 ;
+C 36; N scripts-umarcato; B -2812.50 0.00 2812.50 6187.53 ;
+C 37; N scripts-dmarcato; B -2812.50 -6187.53 2812.50 0.00 ;
+C 38; N scripts-open; B -2250.00 -2812.50 2250.00 2812.50 ;
+C 39; N scripts-stopped; B -3093.77 -3093.77 3093.77 3093.77 ;
+C 40; N scripts-upbow; B -3656.27 0.00 3656.27 11700.07 ;
+C 41; N scripts-downbow; B -4218.75 0.00 4218.75 7499.97 ;
+C 42; N scripts-reverseturn; B -6152.34 -2977.94 6152.34 2977.94 ;
+C 43; N scripts-turn; B -6152.34 -2977.94 6152.34 2977.94 ;
+C 44; N scripts-trill; B -5625.00 0.00 5625.00 12656.25 ;
+C 45; N scripts-upedalheel; B -2812.50 -2812.50 2812.50 3750.00 ;
+C 46; N scripts-dpedalheel; B -2812.50 -3750.00 2812.50 2812.50 ;
+C 47; N scripts-upedaltoe; B -2812.50 0.00 2812.50 8437.50 ;
+C 48; N scripts-dpedaltoe; B -2812.50 -8437.50 2812.50 0.00 ;
+C 49; N scripts-flageolet; B -3000.00 -3000.00 3000.00 3000.00 ;
+C 50; N scripts-trilelement; B -3750.00 -2812.50 1469.97 2812.50 ;
+C 51; N scripts-prall; B -6359.99 -2812.50 6359.99 2812.50 ;
+C 52; N scripts-mordent; B -6359.99 -2812.50 6359.99 2812.50 ;
+C 53; N scripts-prallprall; B -8969.97 -2812.50 8969.97 2812.50 ;
+C 54; N scripts-prallmordent; B -8969.97 -2812.50 8969.97 2812.50 ;
+C 55; N scripts-upprall; B -8969.97 -2812.50 8969.97 2812.50 ;
+C 56; N scripts-downprall; B -8969.97 -2812.50 8969.97 2812.50 ;
+C 57; N flags-u3; B -281.27 -17240.65 6940.84 281.27 ;
+C 58; N flags-u4; B -281.27 -20053.15 6940.84 281.27 ;
+C 59; N flags-u5; B -281.27 -24271.90 6940.84 281.27 ;
+C 60; N flags-u6; B -281.27 -29896.90 6940.84 281.27 ;
+C 61; N flags-d3; B -281.27 -281.27 7680.88 16396.93 ;
+C 62; N flags-d4; B -281.27 -281.27 7680.88 17240.65 ;
+C 63; N flags-d5; B -281.27 -281.27 7680.88 22021.93 ;
+C 64; N flags-d6; B -281.27 -281.27 7680.88 24834.43 ;
+C 65; N clefs-alto; B -5625.00 -11250.00 20937.50 11250.00 ;
+C 66; N clefs-alto_change; B -4500.02 -9000.03 16750.08 9000.03 ;
+C 67; N clefs-bass; B -2812.50 -14062.50 20250.03 5625.00 ;
+C 68; N clefs-bass_change; B -2250.05 -11250.05 16200.04 4500.02 ;
+C 69; N clefs-violin; B -4901.80 -16875.00 21021.40 28125.00 ;
+C 70; N clefs-violin_change; B -4258.94 -13500.05 16479.68 22500.08 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/mf/out/feta26.afm b/mf/out/feta26.afm
new file mode 100644 (file)
index 0000000..dc5c64e
--- /dev/null
@@ -0,0 +1,76 @@
+FontName feta
+StartFontMetrics
+StartCharMetrics
+C 0; N rests-0; B 0.00 -4062.50 9750.00 0.00 ;
+C 1; N rests-1; B 0.00 0.00 9750.00 4062.50 ;
+C 2; N rests-0o; B -4062.50 -4062.50 13812.50 650.04 ;
+C 3; N rests-1o; B -4062.50 -650.04 13812.50 4062.50 ;
+C 4; N rests--1; B 0.00 0.00 3900.00 6500.00 ;
+C 5; N rests--2; B 0.00 -6500.00 3900.00 6500.00 ;
+C 6; N rests-2; B 0.00 4875.00 7020.02 23400.04 ;
+C 7; N rests-3; B 0.00 6500.00 8666.64 18470.95 ;
+C 8; N rests-4; B 0.00 0.00 10084.06 18470.95 ;
+C 9; N rests-5; B 0.00 0.00 11378.50 24970.95 ;
+C 10; N rests-6; B 0.00 0.00 12200.41 31470.95 ;
+C 11; N rests-7; B 0.00 0.00 13582.05 37970.95 ;
+C 12; N accidentals-1; B 0.00 -9750.00 7150.04 9750.00 ;
+C 13; N accidentals-0; B 0.00 -9750.00 4333.33 9750.00 ;
+C 14; N accidentals--1; B -780.04 -3250.00 5200.03 13000.00 ;
+C 15; N accidentals--2; B -780.04 -3250.00 9424.99 13000.00 ;
+C 16; N accidentals-2; B 0.00 -3250.00 6500.00 3250.00 ;
+C 17; N dots-dot; B 0.00 -1462.50 2924.99 1462.50 ;
+C 18; N dots-repeatcolon; B 0.00 -3250.00 2924.99 3250.00 ;
+C 19; N balls--1; B 0.00 -3575.03 13000.00 3575.03 ;
+C 20; N balls--1l; B -3250.00 -650.04 16250.00 650.04 ;
+C 21; N balls--2; B 0.00 -3575.03 13000.00 3575.03 ;
+C 22; N balls--2l; B -3250.00 -650.04 16250.00 650.04 ;
+C 23; N balls-0; B 0.00 -3575.03 12870.12 3575.03 ;
+C 24; N balls-0l; B -3217.53 -650.04 16087.65 650.04 ;
+C 25; N balls-1; B 0.00 -3575.03 8953.54 3575.03 ;
+C 26; N balls-1l; B -2238.39 -650.04 11191.93 650.04 ;
+C 27; N balls-2; B 0.00 -3575.03 8586.67 3575.03 ;
+C 28; N balls-2l; B -2146.67 -650.04 10733.34 650.04 ;
+C 29; N scripts-ufermata; B -8612.53 -487.53 8612.53 9425.08 ;
+C 30; N scripts-dfermata; B -8612.53 -9425.08 8612.53 487.53 ;
+C 31; N scripts-sforzato; B -5849.96 -3250.00 5849.96 3250.00 ;
+C 32; N scripts-staccato; B -975.07 -975.07 975.07 975.07 ;
+C 33; N scripts-ustaccatissimo; B -1300.08 -200.00 1300.08 6500.10 ;
+C 34; N scripts-dstaccatissimo; B -1300.08 -6500.10 1300.08 200.00 ;
+C 35; N scripts-tenuto; B -3900.04 -455.03 3900.04 455.03 ;
+C 36; N scripts-umarcato; B -3250.00 0.00 3250.00 7150.04 ;
+C 37; N scripts-dmarcato; B -3250.00 -7150.04 3250.00 0.00 ;
+C 38; N scripts-open; B -2600.00 -3250.00 2600.00 3250.00 ;
+C 39; N scripts-stopped; B -3575.03 -3575.03 3575.03 3575.03 ;
+C 40; N scripts-upbow; B -4225.02 0.00 4225.02 13520.10 ;
+C 41; N scripts-downbow; B -4875.00 0.00 4875.00 8666.64 ;
+C 42; N scripts-reverseturn; B -7109.38 -3441.18 7109.38 3441.18 ;
+C 43; N scripts-turn; B -7109.38 -3441.18 7109.38 3441.18 ;
+C 44; N scripts-trill; B -6500.00 0.00 6500.00 14625.00 ;
+C 45; N scripts-upedalheel; B -3250.00 -3250.00 3250.00 4333.33 ;
+C 46; N scripts-dpedalheel; B -3250.00 -4333.33 3250.00 3250.00 ;
+C 47; N scripts-upedaltoe; B -3250.00 0.00 3250.00 9750.00 ;
+C 48; N scripts-dpedaltoe; B -3250.00 -9750.00 3250.00 0.00 ;
+C 49; N scripts-flageolet; B -3466.67 -3466.67 3466.67 3466.67 ;
+C 50; N scripts-trilelement; B -4333.33 -3250.00 1698.62 3250.00 ;
+C 51; N scripts-prall; B -7349.30 -3250.00 7349.30 3250.00 ;
+C 52; N scripts-mordent; B -7349.30 -3250.00 7349.30 3250.00 ;
+C 53; N scripts-prallprall; B -10365.28 -3250.00 10365.28 3250.00 ;
+C 54; N scripts-prallmordent; B -10365.28 -3250.00 10365.28 3250.00 ;
+C 55; N scripts-upprall; B -10365.28 -3250.00 10365.28 3250.00 ;
+C 56; N scripts-downprall; B -10365.28 -3250.00 10365.28 3250.00 ;
+C 57; N flags-u3; B -325.03 -19922.53 8020.51 325.03 ;
+C 58; N flags-u4; B -325.03 -23172.53 8020.51 325.03 ;
+C 59; N flags-u5; B -325.03 -28047.53 8020.51 325.03 ;
+C 60; N flags-u6; B -325.03 -34547.53 8020.51 325.03 ;
+C 61; N flags-d3; B -325.03 -325.03 8875.67 18947.57 ;
+C 62; N flags-d4; B -325.03 -325.03 8875.67 19922.53 ;
+C 63; N flags-d5; B -325.03 -325.03 8875.67 25447.57 ;
+C 64; N flags-d6; B -325.03 -325.03 8875.67 28697.57 ;
+C 65; N clefs-alto; B -6500.00 -13000.00 24194.44 13000.00 ;
+C 66; N clefs-alto_change; B -5200.03 -10400.05 19355.70 10400.05 ;
+C 67; N clefs-bass; B -3250.00 -16250.00 23400.04 6500.00 ;
+C 68; N clefs-bass_change; B -2600.07 -13000.08 18720.08 5200.03 ;
+C 69; N clefs-violin; B -5664.29 -19500.00 24291.40 32500.00 ;
+C 70; N clefs-violin_change; B -4921.46 -15600.08 19043.21 26000.14 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/mutopia/J.S.Bach/Solo-Cello-Suites/allemande-alto.ly b/mutopia/J.S.Bach/Solo-Cello-Suites/allemande-alto.ly
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/mutopia/J.S.Bach/Solo-Cello-Suites/courante-alto.ly b/mutopia/J.S.Bach/Solo-Cello-Suites/courante-alto.ly
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/mutopia/J.S.Bach/Solo-Cello-Suites/gigue-alto.ly b/mutopia/J.S.Bach/Solo-Cello-Suites/gigue-alto.ly
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/mutopia/J.S.Bach/Solo-Cello-Suites/menuetto-alto.ly b/mutopia/J.S.Bach/Solo-Cello-Suites/menuetto-alto.ly
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/mutopia/J.S.Bach/Solo-Cello-Suites/prelude-alto.ly b/mutopia/J.S.Bach/Solo-Cello-Suites/prelude-alto.ly
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/mutopia/J.S.Bach/Solo-Cello-Suites/sarabande-alto.ly b/mutopia/J.S.Bach/Solo-Cello-Suites/sarabande-alto.ly
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/mutopia/J.S.Bach/Solo-Cello-Suites/scsii-alto.ly b/mutopia/J.S.Bach/Solo-Cello-Suites/scsii-alto.ly
deleted file mode 100644 (file)
index e69de29..0000000
index 64f5e71d681d18b57068bf4817f0aa4582684a7f..185e298a397b9f598a93b4a1dd80f2f346d42299 100644 (file)
@@ -1,10 +1,10 @@
 \header{
 filename =      "standchen.ly";
-title    = "St\"andchen";
-subtitle = "(Serenade)\\\``Leise flehen meine Lieder";
+title    = "St\\\"andchen";
+subtitle = "(Serenade)\\\\``Leise flehen meine Lieder''";
 opus =  "D. 957 No. 4";
-composer =      "Franz Schubert (1797-1828)"
-        "Text by Ludwig Rellstab (1799-1860)";
+composer =      "Franz Schubert (1797-1828)";
+poet=   "Text by Ludwig Rellstab (1799-1860)";
 enteredby =     "JCN";
 copyright =     "public domain";
 } 
@@ -20,9 +20,9 @@ $vocal_verse1 = \melodic\relative c{
        % ugh: treble/bass
 %      \clef treble;
 %      \clef violin;
-       [/3 g''8( )as] g \] c4. g8 |
-       [/3 f8( )g] f \] c'4 f,8 r |
-       g4.-> f8 [/3 f( )es] d \] |
+       [/3 g''8( )as] g \]/1 c4. g8 |
+       [/3 f8( )g] f \]/1 c'4 f,8 r |
+       g4.-> f8 [/3 f( )es] d \]/1 |
        es2 r4 |
        % ugh: a whole should be a measure
        %r1 |
@@ -84,7 +84,7 @@ $lyric_verse1 = \lyric{
        _ _ _ |
 % 11
        \[/3 In4 den8 \] stil-4. len8 |
-       \[/3 Hainr4 her-8 \] nie-4. der8 |
+       \[/3 Hain4 her-8 \] nie-4. der8 |
        Lieb4. chen8 \[/3 komm4 zu8 \] |
        mir!2 _4 |
        _4 _ _ |
@@ -94,8 +94,8 @@ $lyric_verse1 = \lyric{
        Wip-8. fel16 rau-4. schen8 |
        \[/3 In4 des8 \] Mon-4. des8 |
        Licht;2. |
-       _4 _ _ |
-       _4 _ _ |
+       \[/3 In4 des8 \] Mon-4. des8 |
+       Licht;2. |
 % 23 
        Des8. Ver-16 r\"a-4. ters8 |
        feind-8. lich16 Lau-4. schen8 |
@@ -143,10 +143,12 @@ $lyric_through = \lyric{
 % 37
        La\ss8. auch16 dir8. die16 Brust8. be-16 |
        we-4 gen _ |
-       Lieb-4. chen8 h\"o-8. re16 |
+       Lieb-4. chen,8 h\"o-8. re16 |
        mich!2 _4 |
-       Be-8. bend16 harr4 ich8 _8 |
+       Be-4. bend8 \[/3 harr'4 ich8\]/1 |
        dir8. ent-16 ge-4 gen!8 _8 |
+       _2. |
+       _2. |
        \[/3 Komm4 be-8 \] gl\"u4. cke8 |
        mich!2. |
        \[/3 Komm4 be-8 \] gl\"u4. cke8 |
@@ -198,7 +200,7 @@ $treble_verse1 = \melodic\relative c{
        r8 <[e g> <g c> <e g> <g c> <e g]> |
        r8 <[f a c> <a c f> <f a c> <a c f> <f a c]> |
        r8 <[e g c> <g c e> <e g c> <g c e> <e g c]> |
-       <{[/3 f8\f( e f]1/1 a4. )f8 } {\[/3 f' e f \] a4. f8 } > |
+       <{[/3 f8\f( e f]1/1 a4. )f8 } {\[/3 f' e f \]/1 a4. f8 } > |
        <e2 e'> r4 |
 }
 
@@ -243,7 +245,7 @@ $treble_through = \melodic\relative c{
        r8 <[f,\p a c> <a c f> <f a c> <a c f> <f a c]> |
        %70
        r8 <[e g c> <g c e> <e g c> <g c e> <e g c]> |
-       <{[/3 f8\f( e f]1/1 a4. )f8 } {\[/3 f' e f \] a4. f8 } > |
+       <{[/3 f8\f( e f]1/1 a4. )f8 } {\[/3 f' e f \]/1 a4. f8 } > |
        <e'2 e'> r4 |
        <es2 es'> r4 |
        <d2 d'> r4 |
@@ -328,8 +330,8 @@ $bass_through = \melodic\relative c{
        <g8 g'> <[d'' g> <g b> <d g> <g b> <d g]> |
        c,8 <[c' e g> <e g c> <c e g> <e g c> <c e g]> |
 
-       <c,8 c'> <[c' es! g> <es g c> <c es! g> <es g c> <c es! g]> |
-       <f,,8 f'> <[d'' f> <f as!> <d f> <f as!> <d f]> |
+       <c,8 c'> <[c' es! g> <es g c> <c es g> <es g c> <c es g]> |
+       <f,,8 f'> <[d'' f> <f as!> <d f> <f as> <d f]> |
        %75
        <g,,8 g'> <[d'' f> <f g> <d f> <f g> <d f]> |
        c,8 <[c' e> <e g> <c e> <e g> <c e]> |
@@ -422,10 +424,13 @@ $grand_staff = \type GrandStaff<
 >
 
 \score{
+       % Transpose as you like for your voice
+       % Range untransposed is c' to f'' (for tenors and sopranos)
+       % \transpose a gives a' to d''
        <
-               \$vocal_staff
+               { \melodic \transpose a { \$vocal_staff } }
                \$lyric_staff
-               \$grand_staff
+               { \melodic \transpose a { \$grand_staff } }
        >
        \include "score-paper.ly";
        \midi{
index 4872dd69f9f021b796d702e4686f53e9cc2a9ae4..d5a78f9a0b6e5fbc188eab87576598909606d118 100644 (file)
@@ -33,7 +33,7 @@ def program_id ():
        return '%s version %s' %(program_name,  version);
 
 def identify ():
-       sys.stdout.write (program_id () + '\n')
+       sys.stderr.write (program_id () + '\n')
 
 def gulp_file(f):
        try:
index 31d86c250ddaec66031e6a4e3758a60ba6a06d5c..1af0885bd6fcf67442e79f3964248d223113598e 100644 (file)
@@ -618,9 +618,6 @@ if [ "$SOURCEDIR" != "" ]; then
        export TEXINPUTS="$SOURCEDIR/tex:$TEXINPUTS:"
        export MFINPUTS="$SOURCEDIR/mf:$MFINPUTS:"
        export LILYPOND_EXECUTABLE="$SOURCEDIR/lily/out/lilypond"
-
-       set|grep MF
-       set|grep TEXIN
 fi
 
 #
index ce491b816e47380d3d2e9bc82aa003f77c97b1f1..6c4291c227e47baf755fa3cee06ea18affb34a45 100644 (file)
@@ -1,5 +1,4 @@
-
-# python version of mudela-book.  WIP.
+#!@PYTHON@
 
 #  TODO: center option
 
index 5f282f05b1f5a90003d36e224be2d7254db5b599..dbcb4d30d29a0c68a1ed781f3a84257816c0cec3 100644 (file)
@@ -234,13 +234,16 @@ dnl    fi
        LN=cp # hard link does not work under cygnus-nt (yet?)
        ZIP="zip -r -9" #
        DOTEXE=.exe
+        INSTALL="\$(stepdir)/../bin/install-dot-exe.sh -c"
     else
        LN=ln
        ZIP="zip -r -9"
+        INSTALL="\$(stepdir)/../bin/install-sh -c"
     fi
     AC_SUBST(DOTEXE)
     AC_SUBST(ZIP)
     AC_SUBST(LN)
+    AC_SUBST(INSTALL)
 
     AC_STEPMAKE_DATADIR
 ])
@@ -424,6 +427,9 @@ AC_DEFUN(AC_STEPMAKE_YODL, [
        AC_SUBST(YODL2TXT)
        export YODL YODL2HTML YODL2LATEX YODL2MAN YODL2TEXINFO YODL2TXT
     fi
+    if test "x$YODL" = "-echo no yodl"; then
+       AC_STEPMAKE_WARN(Did not find YODL (Yodl is Yet Oneother Document Language, see http://www.cs.uu.nl/~hanwen/yodl))
+    fi    
 ])
 
 dnl should cache result.
index f28f6025e49ada4bccac45da2c16f2115dadc678..d865baa919f1d18c222085a540f1d0c71db14bad 100644 (file)
@@ -30,4 +30,5 @@ fi
 echo Faking Yodl: copying $1 to $OUTPUT
 
 
-cp $1 $OUTPUT
+echo THIS IS A SURROGATE. Please install YODL for a formatted document  > $OUTPUT
+cat $1 >> $OUTPUT
index dfbbebc988e530b1afea9f9dbaabdf35e1bd51e7..2e361e453dea0731ad41f97931a85f39af340333 100644 (file)
@@ -54,7 +54,9 @@ def remove_automatic (dirnames):
        # urg, again?
        from flower import *
        files = files + multiple_find (pats, dirnames)
-
+       dirs = multiple_find (['out'], dirnames)
+       for d in dirs:
+               files = files + multiple_find (['*'], [d])
        for f in files:
                os.remove (f)
 
@@ -86,7 +88,7 @@ def remove_configure (dir):
 
 
 # ugh, how to get rid of .tex files generated by lily?
-pats = ['.dstreamrc', 'configure', '*.diff', '*.diff.gz', '*.lsm', '*.pyc', '*.spec', '*.txt']
+pats = ['configure', '*.diff', '*.diff.gz', '*.pyc',  '*.txt']
 
 header = 'Generated by %s using %s,\
 \nFrom = %s, To = %s\n\
@@ -106,7 +108,7 @@ def makediff (fromdir, todir, patch_name):
        from packagepython import *
 
        remove_automatic ([fromdir, todir])
-
+       
        # ugh
        remove_configure (fromdir)
        remove_configure (todir)
index 23f15f87a256f641df82608879635b5258f7ff38..25bfe5945aaafa765240ea9e9e47bf9279339006 100644 (file)
@@ -4,7 +4,6 @@
 
 package-depth = @package_depth@
 
-INSTALL = @INSTALL@
 USER_CXXFLAGS = @CXXFLAGS@ @CPPFLAGS@
 USER_LDFLAGS = 
 
@@ -39,6 +38,7 @@ DEFS = @DEFS@
 DEFINES = @DEFS@ @DEFINES@
 COMPILEINFO = @COMPILEINFO@
 DOTEXE = @DOTEXE@
+INSTALL = @INSTALL@
 BASH = @BASH@
 BISON = @BISON@
 FIND = @FIND@
index d77a257f2af872bb6a676a0af0319cdf4b54a0da..ee022aefa9f1c36aa24a13a9d1b8c8990646132f 100755 (executable)
@@ -860,13 +860,16 @@ fi
        LN=cp # hard link does not work under cygnus-nt (yet?)
        ZIP="zip -r -9" #
        DOTEXE=.exe
+        INSTALL="\$(stepdir)/../bin/install-dot-exe.sh -c"
     else
        LN=ln
        ZIP="zip -r -9"
+        INSTALL="\$(stepdir)/../bin/install-sh -c"
     fi
     
     
     
+    
 
     
     if test "$datadir" = "\${prefix}/share"; then
@@ -923,7 +926,7 @@ fi
 
 
     echo $ac_n "checking language""... $ac_c" 1>&6
-echo "configure:927: checking language" >&5    
+echo "configure:930: checking language" >&5    
     case "$language" in
       En* | en* | Am* | am* | US* | us*)
            lang=English;;
@@ -955,7 +958,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:959: checking for $ac_word" >&5
+echo "configure:962: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YODL'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -989,7 +992,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:993: checking for $ac_word" >&5
+echo "configure:996: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YODL2HTML'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1023,7 +1026,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:1027: checking for $ac_word" >&5
+echo "configure:1030: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YODL2LATEX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1056,7 +1059,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:1060: checking for $ac_word" >&5
+echo "configure:1063: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YODL2MAN'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1090,7 +1093,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:1094: checking for $ac_word" >&5
+echo "configure:1097: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YODL2TEXINFO'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1124,7 +1127,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:1128: checking for $ac_word" >&5
+echo "configure:1131: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YODL2TXT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1162,6 +1165,12 @@ test -n "$YODL2TXT" || YODL2TXT="-echo no yodl"
        
        export YODL YODL2HTML YODL2LATEX YODL2MAN YODL2TEXINFO YODL2TXT
     fi
+    if test "x$YODL" = "-echo no yodl"; then
+       
+    echo "configure: warning: Did not find YODL (Yodl is Yet Oneother Document Language, see http://www.cs.uu.nl/~hanwen/yodl)" 1>&2
+    warn_b=yes
+
+    fi    
 
 
 # AM_PATH_GTK(1.0.0,,AC_MSG_ERROR([please install proper version of gtk]))
@@ -1172,7 +1181,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:1176: checking for $ac_word" >&5
+echo "configure:1185: 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
@@ -1356,6 +1365,7 @@ s%@PYTHON@%$PYTHON%g
 s%@DOTEXE@%$DOTEXE%g
 s%@ZIP@%$ZIP%g
 s%@LN@%$LN%g
+s%@INSTALL@%$INSTALL%g
 s%@DIR_DATADIR@%$DIR_DATADIR%g
 s%@YODL@%$YODL%g
 s%@YODL2HTML@%$YODL2HTML%g
index 1a8ee9b02ac298fa349da6579ddc12fe25255142..1a29861d7904e6bafc2b2b4d6b1a4336286d0758 100644 (file)
@@ -39,7 +39,7 @@ $(outdir)/$(package).info: check-texinfo-deps $(OUTTEXINFO_FILES)
        $(MAKEINFO) -o $@ $(outdir)/topinfo.texinfo
 
 localinstall: # $(INFO_FILES)
-       $(INSTALL) -d $(infodir)
+       -$(INSTALL) -d $(infodir)
        $(INFOINSTALL)
 localuninstall:
        $(INFOINSTALL)
index 1516ad7eb7c71e1288e18c81c36df77531577911..3feadc553a61cd824c59109c096bf4381d444235 100644 (file)
@@ -18,9 +18,9 @@ localinstall: installexe
 localuninstall: uninstallexe
 
 installexe: all
-       $(INSTALL) -d $(bindir)
+       -$(INSTALL) -d $(bindir)
        $(foreach a, $(EXECUTABLES), \
-               $(INSTALL) -m 755 $(outdir)/$(a) $(bindir)/$(a)$(DOTEXE) && \
+               $(INSTALL) -m 755 $(outdir)/$(a)$(DOTEXE) $(bindir)/$(a)$(DOTEXE) && \
                strip $(bindir)/$(a)$(DOTEXE) && ) true
        $(foreach a, $(SEXECUTABLES), \
                $(INSTALL) -m 755 $(outdir)/$(a) $(bindir) &&) true
index 53b2321dc7acbeac7b50240c0d55a38317ed36dd..b4f2539f8cea25d53ec4b4f6c7707da073ee0ca9 100644 (file)
@@ -3,7 +3,7 @@
 localinstall: localinstall-files
 
 localinstall-files: $(INSTALLATION_OUT_FILES)
-       $(INSTALL) -d $(INSTALLATION_OUT_DIR)
+       -$(INSTALL) -d $(INSTALLATION_OUT_DIR)
        $(foreach i, $(INSTALLATION_OUT_FILES), \
                $(INSTALL) -m 644 $(i) $(INSTALLATION_OUT_DIR) && )true
 
index 96b8ee76b19e109253d357bbe9a3f3c46b37c031..58d10e30cf0e090cac5833694bba1d57b67dd1bb 100644 (file)
@@ -3,7 +3,7 @@
 localinstall: localinstall-files
 
 localinstall-files:
-       $(INSTALL) -d $(INSTALLATION_DIR)
+       -$(INSTALL) -d $(INSTALLATION_DIR)
        $(foreach i,  $(INSTALLATION_FILES),\
                $(INSTALL) -m 644 $(i) $(INSTALLATION_DIR) &&)true
 
index 5186b1d8cd9a3ff89587e8382bfeb26779611e22..0e6206dabf068750695fd925eb29383982e883bd 100644 (file)
@@ -3,7 +3,7 @@
 MANGROFF = $(addprefix $(outdir)/, $(addsuffix .$(SECTION)))
 
 localinstall: $(MANGROFFS)
-       $(INSTALL) -d $(mandir)/man$(SECTION)
+       -$(INSTALL) -d $(mandir)/man$(SECTION)
        $(INSTALL) -m 644 $(MANGROFFS) $(mandir)/man$(SECTION)
 
 
diff --git a/stepmake/stepmake/Po.make b/stepmake/stepmake/Po.make
new file mode 100644 (file)
index 0000000..c5e22d1
--- /dev/null
@@ -0,0 +1,35 @@
+
+
+####
+#### UGH!
+new-po:
+       if test -r $(po-dir); then \
+         rm -f $(po-dir)/$(outdir)/$(package).po; \
+         touch $(po-dir)/$(outdir)/$(package).po; \
+       fi
+
+ifeq ($(strip $(depth)),.)
+po: new-po
+       $(LOOP)
+localpo:
+       @true
+else
+po: localpo
+       $(LOOP)
+ALL_PO_SOURCES = $(ALL_C_SOURCES) $(wildcard $(outdir)/*.hh) $(wildcard $(outdir)/*.cc)
+localpo:
+ifneq ($(strip $(ALL_PO_SOURCES)),)
+       @echo $(ALL_PO_SOURCES)
+       xgettext --c++ --default-domain=$(package) --join \
+        --output-dir=$(po-dir)/$(outdir) --add-comments \
+        --keyword=_ --keyword=_f $(ALL_PO_SOURCES)
+endif
+endif
+
+
+po-update: po
+       $(MAKE) -C $(po-dir) po-update
+
+show-po-changes:
+       $(MAKE) -C $(po-dir) show-po-changes
+
index 43d9877f182e4b12427f1896aaae2aa14b429020..ed386b70e8f8f2628a0ed416655123fc794f7c73 100644 (file)
@@ -24,35 +24,8 @@ maintainerclean:
        $(MAKE) local-maintainerclean
        $(MAKE) local-distclean
 
-new-po:
-       if test -r $(po-dir); then \
-         rm -f $(po-dir)/$(outdir)/$(package).po; \
-         touch $(po-dir)/$(outdir)/$(package).po; \
-       fi
+include $(stepdir)/Po.make
 
-ifeq ($(strip $(depth)),.)
-po: new-po
-       $(LOOP)
-localpo:
-       @true
-else
-po: localpo
-       $(LOOP)
-ALL_PO_SOURCES = $(ALL_C_SOURCES) $(wildcard $(outdir)/*.hh) $(wildcard $(outdir)/*.cc)
-localpo:
-ifneq ($(strip $(ALL_PO_SOURCES)),)
-       @echo $(ALL_PO_SOURCES)
-       xgettext --c++ --default-domain=$(package) --join \
-        --output-dir=$(po-dir)/$(outdir) --add-comments \
-        --keyword=_ --keyword=_f $(ALL_PO_SOURCES)
-endif
-endif
-
-po-update: po
-       $(MAKE) -C $(po-dir) po-update
-
-show-po-changes:
-       $(MAKE) -C $(po-dir) show-po-changes
 
 # configure:
 #
@@ -120,7 +93,8 @@ check-state-vector:
        fi
 
 
-localdist: $(DIST_FILES) $(OUT_DIST_FILES) $(NON_ESSENTIAL_DIST_FILES)
+local-dist: $(DIST_FILES) $(OUT_DIST_FILES) $(NON_ESSENTIAL_DIST_FILES)
+       mkdir $(distdir)/$(localdir)
        $(LN) $(DIST_FILES) $(distdir)/$(localdir)
 
 #UGH UGH . make ifdef doesn't mix with string substitution semantics (late expansion vs. early expansion)
@@ -132,8 +106,7 @@ localdist: $(DIST_FILES) $(OUT_DIST_FILES) $(NON_ESSENTIAL_DIST_FILES)
                mkdir $(distdir)/$(localdir)/out; \
                $(LN) $(OUT_DIST_FILES) $(distdir)/$(localdir)/out; \
        fi
-       $(foreach i, $(SUBDIRS), mkdir $(distdir)/$(localdir)/$(i); \
-           $(MAKE) distdir=../$(distdir) localdir=$(localdir)/$(i) -C $(i) localdist &&) true
+       $(foreach i, $(SUBDIRS), $(MAKE) distdir=../$(distdir) localdir=$(localdir)/$(i) -C $(i) local-dist &&) true
 
 
 
@@ -176,7 +149,7 @@ uninstall: localuninstall
 localuninstall:
 
 installextradoc:
-       $(INSTALL) -d $(prefix)/doc/$(package)
+       -$(INSTALL) -d $(prefix)/doc/$(package)
        $(foreach i, $(EXTRA_DOC_FILES),\
                cp -r $(i) $(prefix)/doc/$(package) &&) true
 
@@ -192,3 +165,8 @@ $(outdir)/dummy.dep:
        -mkdir $(outdir)
        touch $(outdir)/dummy.dep
 
+
+check: local-check
+       $(LOOP)
+
+local-check:
index 52d1256221e995c92bfdefa58f30eb2ef149a65e..00ae42bf779147c47c08560331522c1bebe9b929 100644 (file)
@@ -7,7 +7,7 @@
 DIST_FILES := $(EXTRA_DIST_FILES) 
 #
 
-localdist: configure 
+local-dist: configure 
 
 local-distclean: 
        rm -f config.hh config.make Makefile config.cache \
@@ -46,8 +46,7 @@ WWW-clean:
 
 dist:  check-state-vector
        rm -rf $(distdir)
-       -mkdir $(distdir)
-       $(MAKE) localdist $(distdir)
+       $(MAKE) local-dist $(distdir)
        chmod -R a+r $(distdir)
        chmod  a+x `find $(distdir) -type d -print` 
        (cd ./$(depth)/$(outdir); $(TAR) cf - $(DIST_NAME) | gzip -9 > $(DIST_NAME).tar.gz)
index 59e84b210a1add23103daa3cab6c9079b10e41fa..16b227db458760df480c02f8ecf69e5d3381f0f2 100644 (file)
@@ -43,8 +43,8 @@ doc-dir = $(depth)/Documentation
 make-dir = $(depth)/make
 po-dir = $(depth)/po
 
-# -c is for copying
-INSTALL = $(stepdir)/../bin/install-sh -c
+# -c is for copying (now set in config.make)
+INSTALL = $(stepdir)/../bin/install-sh -c
 
 # user settings:
 #