]> 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>. 
 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>,
 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>, 
 
     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>, 
 
     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
 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.
 
 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?)
 
 
 
 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?)
 
 
 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)))
 
 
 OUTTEXINFO_FILES= $(addprefix $(outdir)/, $(addsuffix .texinfo,$(basename $(YO_FILES) .yo)))
 
-default: $(MANTXT) $(MANGROFF)
+OUT_DIST_FILES += $(MANGROFF)
+
+default: $(MANGROFF)
 
 texinfo: $(OUTTEXINFO_FILES)
 
 
 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))
 
 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' \
 
 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
 pl 1.jcn2
        - renamed -alto -> viola
        - bf: avant-gardish six preludes
@@ -8,6 +20,14 @@ pl 1.jcn1
        - fake msgfmt
        - make uninstall fixes
 
        - 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
 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
 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
 
 
 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 
 
 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
 
 
 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
 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.
 
 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
 
 * 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
 
 
 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
 
 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.
 
 
        * 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.
 
        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 
        * 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
 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 
 
 # 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
        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"
     else
        LN=ln
        ZIP="zip -r -9"
+        INSTALL="\$(stepdir)/../bin/install-sh -c"
     fi
     AC_SUBST(DOTEXE)
     AC_SUBST(ZIP)
     AC_SUBST(LN)
     fi
     AC_SUBST(DOTEXE)
     AC_SUBST(ZIP)
     AC_SUBST(LN)
+    AC_SUBST(INSTALL)
 
     AC_STEPMAKE_DATADIR
 ])
 
     AC_STEPMAKE_DATADIR
 ])
@@ -424,6 +427,9 @@ AC_DEFUN(AC_STEPMAKE_YODL, [
        AC_SUBST(YODL2TXT)
        export YODL YODL2HTML YODL2LATEX YODL2MAN YODL2TEXINFO YODL2TXT
     fi
        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.
 ])
 
 dnl should cache result.
index 9aecaf66f248a2f78a10fc6ffd1f1f8ee58abca2..25bfe5945aaafa765240ea9e9e47bf9279339006 100644 (file)
@@ -38,6 +38,7 @@ DEFS = @DEFS@
 DEFINES = @DEFS@ @DEFINES@
 COMPILEINFO = @COMPILEINFO@
 DOTEXE = @DOTEXE@
 DEFINES = @DEFS@ @DEFINES@
 COMPILEINFO = @COMPILEINFO@
 DOTEXE = @DOTEXE@
+INSTALL = @INSTALL@
 BASH = @BASH@
 BISON = @BISON@
 FIND = @FIND@
 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
        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"
     else
        LN=ln
        ZIP="zip -r -9"
+        INSTALL="\$(stepdir)/../bin/install-sh -c"
     fi
     
     
     
     fi
     
     
     
+    
 
     
     if test "$datadir" = "\${prefix}/share"; then
 
     
     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
     # 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
 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
   # 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
 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
 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.
 
 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
 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
 #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
   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: 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 "$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
 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
   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
   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
   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
 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
 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
 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
 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"
 #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
   :
 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
 # 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
 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 $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.
 
 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
 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
 #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
   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: 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 "$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
 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
   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
   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
   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
 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
 
     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
 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"
 #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*
 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 $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
 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; };
 #include "confdefs.h"
 
     template <class T> struct foo { static int baz; };
@@ -1446,7 +1449,7 @@ int main() {
  return foo<int>::baz; 
 ; return 0; }
 EOF
  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
   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
 # 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
 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
 # 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
 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
 # 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
 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
 # 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
 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
     # 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
 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 $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;;
     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 $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
 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
   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
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -1761,7 +1764,7 @@ int main() {
 gettext()
 ; return 0; }
 EOF
 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
   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
     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
 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.  */
 #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
 
 ; 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
   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
     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
 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" && 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 $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_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
 
        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
 
 
     fi
 
 
@@ -1930,7 +1940,7 @@ fi
     
 
     echo $ac_n "checking TeX/MF root dir directory""... $ac_c" 1>&6
     
 
     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"
     
 
     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 $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#^\./##')`
     
     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 $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#^\./##')`
     
     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
 # 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
 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
 # 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
 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
 # 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
 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
 # 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
 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
 # 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
 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
 # 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
 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
        
        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 $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
 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
   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);
 #include "confdefs.h"
 #ifdef __cplusplus
 extern "C" void exit(int);
@@ -2269,7 +2285,7 @@ main()
 }
 
 EOF
 }
 
 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
 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
 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
 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.  */
 #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
 
 ; 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
   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
 
 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
 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.  */
 #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
 
 ; 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
   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
 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
 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.  */
 #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
 
 ; 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
   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
 # 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
 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%@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
 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 "string.hh"
 #include "real.hh"
-#include "matrix.hh"
 
 /// Perl -like scalar type.
 struct Scalar : public String 
 
 /// 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?)
    */
     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.
    */
 
   /**   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 <stdio.h>
 #include "scalar.hh"
 #include "rational.hh"
+#include "matrix.hh"
 
 Scalar::Scalar (Rational r)
 {
 
 Scalar::Scalar (Rational r)
 {
@@ -72,3 +73,13 @@ Scalar::to_bool () const
     return false;
   return true;
 }
     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
 
 
 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
 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 
 
 # 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);
 
 {
   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();
   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.0.hwn1
 1.0.0.hwn2
 1.0.1
-1.0.1.jcn1
+1.0.1.jbr1
 1.0.1.jcn2
 1.0.1.jcn2
+1.0.1.jbr2
+1.0.2
index 7bf75efad30603886a28373f106815034941241f..6261f091c45fe7e6d132daa6ab74f4ffec9df9c4 100644 (file)
@@ -1,7 +1,7 @@
 Begin3
 Titel: LilyPond
 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
 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
        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/
 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
 Copi-eer voorwaarden: GPL
 End
index 72bc7aa147b98745592c064f96d64e761a3adfe9..43dcdc13b70128ab22721e47fe278aaa0f64c642 100644 (file)
@@ -1,7 +1,7 @@
 Begin3
 Title: LilyPond
 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
 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
        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/
 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
 Copying-policy: GPL
 End
index e55a3909fc2401ea2c134dfb6bbb69b5a1b555f6..fbb55227523995f52f24f6210b60af42b8385102 100644 (file)
@@ -1,9 +1,9 @@
 Name: lilypond
 Name: lilypond
-Version: 1.0.1
+Version: 1.0.2
 Release: 1
 Copyright: GPL
 Group: Applications/Publishing
 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>
 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
 #
 
 Name: lilypond-docs
-Version: 1.0.1
+Version: 1.0.2
 Release: 1
 Copyright: GPL
 Group: Applications/Publishing
 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>
 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
 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
 
 #
 %build
 
 #
@@ -42,11 +42,11 @@ make htmldocs
 %install
 
 # ln /home/hanwen/usr/src/lilypond/out/htmldoc.tar.gz out/
 %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
 
 
 %files
 
-%doc /usr/doc/lilypond-1.0.1
+%doc /usr/doc/lilypond-1.0.2
 
 %post
 
 %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))
 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)
 ALL_GEN_FILES=$(LYTABLES) $(TEXTABLES) $(LOG_FILES) $(AFM_FILES)
+
+OUT_DIST_FILES += $(AFM_FILES)
+
 default: $(ALL_GEN_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";
 \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";
 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";
 } 
 enteredby =     "JCN";
 copyright =     "public domain";
 } 
@@ -20,9 +20,9 @@ $vocal_verse1 = \melodic\relative c{
        % ugh: treble/bass
 %      \clef treble;
 %      \clef violin;
        % 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 |
        es2 r4 |
        % ugh: a whole should be a measure
        %r1 |
@@ -84,7 +84,7 @@ $lyric_verse1 = \lyric{
        _ _ _ |
 % 11
        \[/3 In4 den8 \] stil-4. len8 |
        _ _ _ |
 % 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 _ _ |
        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. |
        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 |
 % 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 _ |
 % 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 |
        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 |
        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 |
        \[/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]> |
        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 |
 }
 
        <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]> |
        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 |
        <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]> |
 
        <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]> |
        %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{
 >
 
 \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
                \$lyric_staff
-               \$grand_staff
+               { \melodic \transpose a { \$grand_staff } }
        >
        \include "score-paper.ly";
        \midi{
        >
        \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 ():
        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:
 
 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"
        export TEXINPUTS="$SOURCEDIR/tex:$TEXINPUTS:"
        export MFINPUTS="$SOURCEDIR/mf:$MFINPUTS:"
        export LILYPOND_EXECUTABLE="$SOURCEDIR/lily/out/lilypond"
-
-       set|grep MF
-       set|grep TEXIN
 fi
 
 #
 fi
 
 #
index ce491b816e47380d3d2e9bc82aa003f77c97b1f1..6c4291c227e47baf755fa3cee06ea18affb34a45 100644 (file)
@@ -1,5 +1,4 @@
-
-# python version of mudela-book.  WIP.
+#!@PYTHON@
 
 #  TODO: center option
 
 
 #  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
        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"
     else
        LN=ln
        ZIP="zip -r -9"
+        INSTALL="\$(stepdir)/../bin/install-sh -c"
     fi
     AC_SUBST(DOTEXE)
     AC_SUBST(ZIP)
     AC_SUBST(LN)
     fi
     AC_SUBST(DOTEXE)
     AC_SUBST(ZIP)
     AC_SUBST(LN)
+    AC_SUBST(INSTALL)
 
     AC_STEPMAKE_DATADIR
 ])
 
     AC_STEPMAKE_DATADIR
 ])
@@ -424,6 +427,9 @@ AC_DEFUN(AC_STEPMAKE_YODL, [
        AC_SUBST(YODL2TXT)
        export YODL YODL2HTML YODL2LATEX YODL2MAN YODL2TEXINFO YODL2TXT
     fi
        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.
 ])
 
 dnl should cache result.
index f28f6025e49ada4bccac45da2c16f2115dadc678..d865baa919f1d18c222085a540f1d0c71db14bad 100644 (file)
@@ -30,4 +30,5 @@ fi
 echo Faking Yodl: copying $1 to $OUTPUT
 
 
 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)
        # 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)
 
        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?
 
 
 # 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\
 
 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])
        from packagepython import *
 
        remove_automatic ([fromdir, todir])
-
+       
        # ugh
        remove_configure (fromdir)
        remove_configure (todir)
        # ugh
        remove_configure (fromdir)
        remove_configure (todir)
index 23f15f87a256f641df82608879635b5258f7ff38..25bfe5945aaafa765240ea9e9e47bf9279339006 100644 (file)
@@ -4,7 +4,6 @@
 
 package-depth = @package_depth@
 
 
 package-depth = @package_depth@
 
-INSTALL = @INSTALL@
 USER_CXXFLAGS = @CXXFLAGS@ @CPPFLAGS@
 USER_LDFLAGS = 
 
 USER_CXXFLAGS = @CXXFLAGS@ @CPPFLAGS@
 USER_LDFLAGS = 
 
@@ -39,6 +38,7 @@ DEFS = @DEFS@
 DEFINES = @DEFS@ @DEFINES@
 COMPILEINFO = @COMPILEINFO@
 DOTEXE = @DOTEXE@
 DEFINES = @DEFS@ @DEFINES@
 COMPILEINFO = @COMPILEINFO@
 DOTEXE = @DOTEXE@
+INSTALL = @INSTALL@
 BASH = @BASH@
 BISON = @BISON@
 FIND = @FIND@
 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
        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"
     else
        LN=ln
        ZIP="zip -r -9"
+        INSTALL="\$(stepdir)/../bin/install-sh -c"
     fi
     
     
     
     fi
     
     
     
+    
 
     
     if test "$datadir" = "\${prefix}/share"; then
 
     
     if test "$datadir" = "\${prefix}/share"; then
@@ -923,7 +926,7 @@ fi
 
 
     echo $ac_n "checking language""... $ac_c" 1>&6
 
 
     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;;
     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
 # 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
 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
 # 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
 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
 # 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
 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
 # 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
 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
 # 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
 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
 # 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
 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
        
        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]))
 
 
 # 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
 # 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
 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%@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
 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)
        $(MAKEINFO) -o $@ $(outdir)/topinfo.texinfo
 
 localinstall: # $(INFO_FILES)
-       $(INSTALL) -d $(infodir)
+       -$(INSTALL) -d $(infodir)
        $(INFOINSTALL)
 localuninstall:
        $(INFOINSTALL)
        $(INFOINSTALL)
 localuninstall:
        $(INFOINSTALL)
index 1516ad7eb7c71e1288e18c81c36df77531577911..3feadc553a61cd824c59109c096bf4381d444235 100644 (file)
@@ -18,9 +18,9 @@ localinstall: installexe
 localuninstall: uninstallexe
 
 installexe: all
 localuninstall: uninstallexe
 
 installexe: all
-       $(INSTALL) -d $(bindir)
+       -$(INSTALL) -d $(bindir)
        $(foreach a, $(EXECUTABLES), \
        $(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
                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)
 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
 
        $(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:
 localinstall: localinstall-files
 
 localinstall-files:
-       $(INSTALL) -d $(INSTALLATION_DIR)
+       -$(INSTALL) -d $(INSTALLATION_DIR)
        $(foreach i,  $(INSTALLATION_FILES),\
                $(INSTALL) -m 644 $(i) $(INSTALLATION_DIR) &&)true
 
        $(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)
 MANGROFF = $(addprefix $(outdir)/, $(addsuffix .$(SECTION)))
 
 localinstall: $(MANGROFFS)
-       $(INSTALL) -d $(mandir)/man$(SECTION)
+       -$(INSTALL) -d $(mandir)/man$(SECTION)
        $(INSTALL) -m 644 $(MANGROFFS) $(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
 
        $(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:
 #
 
 # configure:
 #
@@ -120,7 +93,8 @@ check-state-vector:
        fi
 
 
        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)
        $(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
                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:
 localuninstall:
 
 installextradoc:
-       $(INSTALL) -d $(prefix)/doc/$(package)
+       -$(INSTALL) -d $(prefix)/doc/$(package)
        $(foreach i, $(EXTRA_DOC_FILES),\
                cp -r $(i) $(prefix)/doc/$(package) &&) true
 
        $(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
 
        -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) 
 #
 
 DIST_FILES := $(EXTRA_DIST_FILES) 
 #
 
-localdist: configure 
+local-dist: configure 
 
 local-distclean: 
        rm -f config.hh config.make Makefile config.cache \
 
 local-distclean: 
        rm -f config.hh config.make Makefile config.cache \
@@ -46,8 +46,7 @@ WWW-clean:
 
 dist:  check-state-vector
        rm -rf $(distdir)
 
 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)
        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
 
 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:
 #
 
 # user settings:
 #