]> git.donarmstrong.com Git - lilypond.git/commitdiff
release: 1.0.7 release/1.0.7
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Mon, 7 Sep 1998 12:08:11 +0000 (14:08 +0200)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Mon, 7 Sep 1998 12:08:11 +0000 (14:08 +0200)
29 files changed:
AUTHORS.txt
Documentation/man/ly2dvi32.yo [new file with mode: 0644]
Documentation/man/out/ly2dvi32.1 [new file with mode: 0644]
Documentation/ntweb/index.yo
Documentation/tex/refman.yo
Documentation/tex/tutorial.yo
Documentation/tex/vocabulary.data
Documentation/topdocs/AUTHORS.yo
Documentation/topdocs/INSTALL.yo
INSTALL.txt
NEWS
TODO
VERSION
init/english.ly
lily/VERSION
lily/line-of-score.cc
lily/my-lily-lexer.cc
lily/parser.yy
make/STATE-VECTOR
make/out/lelievijver.lsm
make/out/lilypond.lsm
make/out/lilypond.spec
mutopia/J.S.Bach/Cembalo-Partitas/GNUmakefile [new file with mode: 0644]
mutopia/J.S.Bach/Cembalo-Partitas/Partita_I_Sinfonia.ly [new file with mode: 0644]
mutopia/J.S.Bach/GNUmakefile
mutopia/standchen.ly
scripts/ly2dvi32.py
scripts/mudela-book.py
stepmake/bin/package-zip32.sh

index 0c8577c4971b6405c9d7fd79f1c01a3eff595824..e8b04ed456f743836609ee2b52ef81543bdebc32 100644 (file)
@@ -6,6 +6,8 @@ Contents
 This file lists authors of GNU LilyPond, and what they wrote.  This
 list is alphabetically ordered.
 
+o Tom Cato Amundsen <tomcato@xoommail.com>,
+    cembalo-partita in mudela.
 o Mats Bengtsson <matsb@s3.kth.se>,
     http://www.s3.kth.se/~matsb
     clef stuff, key stuff, swedish notenames, testing, general
diff --git a/Documentation/man/ly2dvi32.yo b/Documentation/man/ly2dvi32.yo
new file mode 100644 (file)
index 0000000..d970a80
--- /dev/null
@@ -0,0 +1,263 @@
+mailto(daboys@bga.com)
+manpage(LilyPond)
+       (1)
+       (1998)
+       (The LilyPond package)
+       (Ly2dvi32)
+
+metalC(Automatically generated by yodl(1) from ly2dvi32.yo.)
+
+manpagename(Ly2dvi32)(Python utility to convert mudela to DVI)
+
+manpagedescription()
+ly2dvi is a Python 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.
+
+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.
+
+The majority of this utility came from a bourne script written by Jan
+Arne Fagertun name file(ly2dvi). 
+
+manpagesynopsis()
+
+        ly2dvi32 [options] inputfile[.ly] [....]
+
+manpageoptions()
+
+description(
+dit(-D,--debug)
+    Set debug mode. There are two levels - in level one some debug
+    info is written, in level two the command bf(set -x) is run, which
+    echoes every command in the ly2dvi script.
+dit(-F,--headers=)
+    Name of additional LaTeX headers file. This is included in the
+    tex file at the end of the headers, last line before code(\begin{document})
+dit(-H,--Heigth=)
+    Set paper heigth (points). Used together with width and LaTeX name of
+    papersize in case of papersize unknown to ly2dvi.
+dit(-F,--headers=)
+    Name of additional LaTeX headers file. This is included in the
+    tex file at the end of the headers, last line before code(\begin{document})
+dit(-K,--keeplilypond)
+    Keep LilyPond output after the run.
+dit(-L,--landscape)
+    Set landscape orientation - portrait is the default.
+    (bf(-L) produces code(\usepackage[landscape]{article}))
+dit(-N,--nonumber)
+    Switch off page numbering.
+dit(-O,--orientation=)
+    Set orientation landscape - obsolete, use bf(-L) instead.
+dit(-P,--postscript)
+    In addition to the DVI file, also Generate a postsript file.
+dit(-W,--Width=)
+    Set paper width (points). Used together with heigth and LaTeX name of
+    papersize in case of papersize unknown to ly2dvi.
+dit(-d,--dependencies)
+    Tell lilypond to make dependencies file.
+dit(-h,--help)
+    Print help.
+dit(-k,--keeply2dvi)
+    Keep the LaTeX file after the run.
+dit(-l,--language=)
+    Specify LaTeX language.
+    (bf(-l norsk) produces code(\usepackage[norsk]{babel})).
+dit(-o,--output=)
+    Set output directory.
+dit(-p,--papersize=)
+    Specify papersize.
+    (bf(-p a4) produces code(\usepackage[a4paper]{article}))
+dit(-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.
+)
+
+manpagesection(Features)
+
+ly2dvi responds to several parameters specified in the mudela
+file. They are overridden by corresponding command line options.
+
+description(
+dit(language="";)
+    Specify LaTeX language
+dit(latexheaders="";)
+    Specify additional LaTeX headers file
+dit(orientation="";)
+    Set orientation.
+dit(paperlinewidth="";)
+    Specify the width (pt, mm or cm) of the printed lines.
+dit(papersize="";)
+    Specify name of papersize.
+)
+
+manpagesection(Environment)
+
+description(
+dit(LILYPONDPREFIX)
+    Sets the root directory of the LilyPond installation
+dit(LILYINCLUDE)
+    Additional directories for input files.
+dit(TMP)
+    Temporary directory name. Default is /tmp
+)
+
+manpagesection(Files)
+
+file(titledefs.tex) is inspected for definitions used to extract
+additional text definitions from the mudela file. In the current
+version the following are defined:
+
+description(
+dit(title)
+    The title of the music. Centered on top of the first page.
+dit(subtitle)
+    Subtitle, centered below the title.
+dit(poet)
+    Name of the poet, leftflushed below the below subtitle.
+dit(composer)
+    Name of the composer, rightflushed below the subtitle.
+dit(metre)
+    Meter string, leftflushed below the below poet.
+dit(opus)
+    Name of the opus, rightflushed below the below composer.
+dit(arranger)
+    Name of the arranger, rightflushed below the opus.
+dit(instrument)
+    Name of the instrument, centered below the arranger
+dit(piece)
+    Name of the piece, leftflushed below the instrument
+)
+
+file($LILYPONDPREFIX/share/.lilyrc $HOME/.lilyrc ./.lilyrc) are files
+to set up default running conditions.  On Windows OS initialization
+files are named file(_lilyrc). The file syntax is as follows:
+
+verb(VARIABLE-NAME=VALUE) 
+
+Where bf(VARIABLE-NAME) is the name of the variable documented below
+and bf(VALUE) is either a string, a 1, or a 0.  All files are parsed,
+in the shown sequence. In the current version the following are
+allowed:
+
+description(
+dit(DEBUG=value)
+This turns off (default) or on the debug capabilities.  Possible
+values are 0 (off) and 1 (on).
+dit(DEPENDENCIES=value)
+This turns off (default) or on the ability to generate a Makefile
+dependency list.  Possible values are 0 (off) and 1 (on).
+dit(KEEPLILYPOND=value)
+This turns off (default) or on the ability to keep the log file
+associated with the LilyPond job.  Possible values are 0 (off) and 1
+(on).
+dit(KEEPLY2DVI=value)
+This turns off (default) or on the ability to keep the temporary files
+that are generated by the ly2dvi job.  Possible values are 0 (off) and
+1 (on)
+dit(LANGUAGE=value)
+Specify LaTeX language.  Possible value is a valid LaTeX language.
+dit(LATEXHF=value)
+Specify additional LaTeX headers file.  Possible value is a file
+specification. 
+dit(LILYINCLUDE=value)
+Additional directories for input files.  Possible value is a delimited
+directory path list.
+dit(LILYPONDPREFIX=value)
+This defines the LilyPond root directory.  Possible value is a valid
+directory specification to the LilyPond distribution location.
+dit(NONUMBER=value)
+This turns off (default) or on the page numbering capability.
+Possible values are 0 (page numbering enabled) and 1 (page numbering
+disabled). 
+dit(ORIENTATION=value)
+This sets the image orientation.  Possible values are
+portrait (default) and landscape.
+dit(OUTPUTDIR=value)
+This defines the directory where the resultant files will be
+generated.  Possible value is a valid directory specification.
+Default is the current working directory.
+dit(PAPERSIZE=value)
+This defines the papersize the image will be sized to fit.  Possible
+values are a0, a1, a2, a3, a4 (default), a5, a6, a7, a8, a9, a10, b0,
+b1, b2, b3, b4, b5, archA, archB, archC, archD, archE, flsa, flse,
+halfletter, ledger, legal, letter, or note.
+dit(PHEIGHT=value)
+Specify paperheight (points - an inch is 72.27, a cm is 28.453 points).
+dit(POSTSCRIPT=value)
+This turns off (default) or on the capability of additionally
+generating a postscript file.  Possible values are 0 (off) and 1 (on).
+dit(PWIDTH=value)
+Specify paperwidth (points - an inch is 72.27, a cm is 28.453 points).
+dit(SEPARATE=value)
+This turns off (default) or on the capability of generating multiple
+dvi and postscript files from multiple source files.  The default is
+to generate a concatenation of the source files.  Possible values are
+0 (single file) and 1 (separate files).
+dit(TMP=value)
+This defines the emporary directory.  Actually this is not used at the
+present.  Possible value is a valid directory specification that is
+writable to the user.
+)
+
+manpagesection(Initialization Sequence)
+The initialization process reads inputs for several sources.  Below is
+a list of priorities for lowest to hightest proirity.
+
+itemize(
+it() Program's defaults
+it() Values found in LilyPond output file
+it() Environment variables
+it() $LILYPONDPREFIX/share/lilypond/.lilyrc
+it() $HOME/.lilyrc
+it() ./.lilyrc
+it() command line options
+)
+
+Note that this differs slightly from the original bourne shell
+version. 
+
+
+manpagesection(See Also)
+
+lilypond(1), tex(1), latex(1)
+
+manpagesection(Bugs)
+
+If you have found a bug, you should send a bugreport.
+
+itemize(
+it()Send a copy of the input which causes the error.
+it()Send a description of the platform you use.
+it()Send a description of the LilyPond and ly2dvi version you use.
+it()Send a description of the bug itself.
+it()Send it to email(bug-gnu-music@gnu.org) (you don't have to subscribe
+    to this mailinglist).
+)
+
+manpagesection(Remarks)
+
+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.
+
+Supported papersizes are:
+
+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
+
+manpageauthor()
+Python Version author:
+nemail(Jeffrey B. Reed)(daboys@bga.com),
+lurl(http://www.realtime.net/~daboys/lilypond/)
+
+Original bourne shell version author:
+nemail(Jan Arne Fagertun)(Jan.A.Fagertun@energy.sintef.no),
+lurl(http://www.termo.unit.no/mtf/people/janaf/)
+
+
+
diff --git a/Documentation/man/out/ly2dvi32.1 b/Documentation/man/out/ly2dvi32.1
new file mode 100644 (file)
index 0000000..f2f8b0a
--- /dev/null
@@ -0,0 +1,259 @@
+.TH "LilyPond" "1" "1998" "The LilyPond package" "Ly2dvi32" 
+.PP 
+.PP 
+.SH "NAME" 
+Ly2dvi32 \- Python utility to convert mudela to DVI
+.PP 
+.SH "DESCRIPTION" 
+ly2dvi is a Python 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 
+The majority of this utility came from a bourne script written by Jan
+Arne Fagertun name \fBly2dvi\fP\&. 
+.PP 
+.SH "SYNOPSIS" 
+.PP 
+ly2dvi32 [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 "-P,--postscript" 
+In addition to the DVI file, also Generate a postsript file\&.
+.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 "LILYPONDPREFIX" 
+Sets the root directory of the LilyPond installation
+.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 "poet" 
+Name of the poet, leftflushed below the below subtitle\&.
+.IP "composer" 
+Name of the composer, rightflushed below the subtitle\&.
+.IP "metre" 
+Meter string, leftflushed below the below poet\&.
+.IP "opus" 
+Name of the opus, rightflushed below the below composer\&.
+.IP "arranger" 
+Name of the arranger, rightflushed below the opus\&.
+.IP "instrument" 
+Name of the instrument, centered below the arranger
+.IP "piece" 
+Name of the piece, leftflushed below the instrument
+.PP 
+\fB$LILYPONDPREFIX/share/\&.lilyrc $HOME/\&.lilyrc \&./\&.lilyrc\fP are files
+to set up default running conditions\&.  On Windows OS initialization
+files are named \fB_lilyrc\fP\&. The file syntax is as follows:
+.PP 
+
+.DS 
+VARIABLE-NAME=VALUE
+.DE 
+.PP 
+Where \fBVARIABLE-NAME\fP is the name of the variable documented below
+and \fBVALUE\fP is either a string, a 1, or a 0\&.  All files are parsed,
+in the shown sequence\&. In the current version the following are
+allowed:
+.PP 
+.IP "DEBUG=value" 
+This turns off (default) or on the debug capabilities\&.  Possible
+values are 0 (off) and 1 (on)\&.
+.IP "DEPENDENCIES=value" 
+This turns off (default) or on the ability to generate a Makefile
+dependency list\&.  Possible values are 0 (off) and 1 (on)\&.
+.IP "KEEPLILYPOND=value" 
+This turns off (default) or on the ability to keep the log file
+associated with the LilyPond job\&.  Possible values are 0 (off) and 1
+(on)\&.
+.IP "KEEPLY2DVI=value" 
+This turns off (default) or on the ability to keep the temporary files
+that are generated by the ly2dvi job\&.  Possible values are 0 (off) and
+1 (on)
+.IP "LANGUAGE=value" 
+Specify LaTeX language\&.  Possible value is a valid LaTeX language\&.
+.IP "LATEXHF=value" 
+Specify additional LaTeX headers file\&.  Possible value is a file
+specification\&. 
+.IP "LILYINCLUDE=value" 
+Additional directories for input files\&.  Possible value is a delimited
+directory path list\&.
+.IP "LILYPONDPREFIX=value" 
+This defines the LilyPond root directory\&.  Possible value is a valid
+directory specification to the LilyPond distribution location\&.
+.IP "NONUMBER=value" 
+This turns off (default) or on the page numbering capability\&.
+Possible values are 0 (page numbering enabled) and 1 (page numbering
+disabled)\&. 
+.IP "ORIENTATION=value" 
+This sets the image orientation\&.  Possible values are
+portrait (default) and landscape\&.
+.IP "OUTPUTDIR=value" 
+This defines the directory where the resultant files will be
+generated\&.  Possible value is a valid directory specification\&.
+Default is the current working directory\&.
+.IP "PAPERSIZE=value" 
+This defines the papersize the image will be sized to fit\&.  Possible
+values are a0, a1, a2, a3, a4 (default), a5, a6, a7, a8, a9, a10, b0,
+b1, b2, b3, b4, b5, archA, archB, archC, archD, archE, flsa, flse,
+halfletter, ledger, legal, letter, or note\&.
+.IP "PHEIGHT=value" 
+Specify paperheight (points - an inch is 72\&.27, a cm is 28\&.453 points)\&.
+.IP "POSTSCRIPT=value" 
+This turns off (default) or on the capability of additionally
+generating a postscript file\&.  Possible values are 0 (off) and 1 (on)\&.
+.IP "PWIDTH=value" 
+Specify paperwidth (points - an inch is 72\&.27, a cm is 28\&.453 points)\&.
+.IP "SEPARATE=value" 
+This turns off (default) or on the capability of generating multiple
+dvi and postscript files from multiple source files\&.  The default is
+to generate a concatenation of the source files\&.  Possible values are
+0 (single file) and 1 (separate files)\&.
+.IP "TMP=value" 
+This defines the emporary directory\&.  Actually this is not used at the
+present\&.  Possible value is a valid directory specification that is
+writable to the user\&.
+.PP 
+.SH "Initialization Sequence" 
+The initialization process reads inputs for several sources\&.  Below is
+a list of priorities for lowest to hightest proirity\&.
+.PP 
+.IP o 
+Program\'s defaults
+.IP o 
+Values found in LilyPond output file
+.IP o 
+Environment variables
+.IP o 
+$LILYPONDPREFIX/share/lilypond/\&.lilyrc
+.IP o 
+$HOME/\&.lilyrc
+.IP o 
+\&./\&.lilyrc
+.IP o 
+command line options
+.PP 
+Note that this differs slightly from the original bourne shell
+version\&. 
+.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" 
+Python Version author:
+Jeffrey B\&. Reed <daboys@bga\&.com>,
+http://www\&.realtime\&.net/~daboys/lilypond/
+.PP 
+Original bourne shell version author:
+Jan Arne Fagertun <Jan\&.A\&.Fagertun@energy\&.sintef\&.no>,
+http://www\&.termo\&.unit\&.no/mtf/people/janaf/
+.PP 
index a1c3777098e3252e32cbca6a33abf8625f20dca9..bb54acd47df4fae9f718034b8eef4ead009e0ed0 100644 (file)
@@ -18,6 +18,7 @@ clearpage()
 
 subsect(NEWS) label(news)
 This is what the version @TOPLEVEL_VERSION@ brings:
+
 verb(
 top_of_NEWS
 )
@@ -66,10 +67,10 @@ itemize(
   description(
     dit(batch file)
       In a batch file you can add the following entries: nl()
-      bf(set LILYPOND=em(LilyPond-dir)) nl()
-      bf(set path=%path%%LILYPOND%\bin;em(MiKTeX-dir)\miktex\bin) nl()
-      bf(set TEXINPUTS=%LILYPOND%\texmf\tex\lilypond;;) nl()
-      bf(set MFINPUTS=%LILYPOND%\texmf\mf\public\lilypond;;) nl()
+      bf(set LILYPONDPREFIX=em(LilyPond-dir)) nl()
+      bf(set path=%path%;%LILYPONDPREFIX%\bin;em(MiKTeX-dir)\miktex\bin) nl()
+      bf(set TEXINPUTS=%LILYPONDPREFIX%\texmf\tex\lilypond;;) nl()
+      bf(set MFINPUTS=%LILYPONDPREFIX%\texmf\mf\public\lilypond;;) nl()
 COMMENT(    dit(Windows Environment)
       In the Windows environment you can select
       properties menu of the My Computer icon. Click on
@@ -99,6 +100,9 @@ COMMENT(    dit(Windows Environment)
              area of MiKTeX: nl()
              bf(copy cmbx14.mf em(MiKTeX-dir)\fonts\source\public\cm\base)
         )
+       dit(NOTE) 
+       MiKTeX-1.11 localtexmf configurations should use
+        bf(em(localtexmf-dir)) in place of bf(em(MiKTeX-dir)).
       ) nl()
   it()See the link(Running)(running) instructions below
 )
@@ -110,7 +114,7 @@ clearpage()
 subsect(Running LilyPond) label(running)
 
 itemize(
-  it()Take a look at url(angles.ly)(angles.ly)
+  it()Take a look at url(angels.ly)(angels.ly)
   it()Save angles.ly to your local disk
   it()From a Command Prompt run: nl()
   bf(ly2dvi.py angles.ly) nl()
index 9c6aa43a658054f61f4802ae57c01173a98296d5..da3fe6bb3cf90bad1f785e46a999d498fbbe5020 100644 (file)
@@ -16,16 +16,19 @@ in stead <-> instead
 htmlbodyopt(bgcolor)(white)
 htmlcommand(<font color=black>)
 
-latexpackage()(a4wide)
 latexlayoutcmds(
-%\usepackage[latin1]{inputenc}
+\setlength{\topmargin}{-0.25in}
+\setlength{\textheight}{9in}
+\setlength{\textwidth}{5.875in} 
+\setlength{\oddsidemargin}{0.25in}   
+\setlength{\evensidemargin}{0.25in}
 \input mudela-book
 )
 
 whenlatex(notableofcontents())
 whentexinfo(notableofcontents())
 
-report(Mudela, reference manual)
+article(Mudela, reference manual)
       (Han-Wen Nienhuys and Jan Nieuwenhuizen)
       (nop()PIPETHROUGH(date "+%B %d, %Y")()()nop())
 
@@ -87,247 +90,290 @@ 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"
-)
+verb(\include "a_file.ly")
 
 
-sect(Comments)
+sect(Syntax)
 
-Line comments are introduced by a
-code(%).
-Block comments are delimited
+COMMENT(I don't understand the syntax, so  I can't  write  this
+section very well.  --Adrian)
+
+A one line comment is introduced by a 
+code(%) character.  
+Block comments are started 
 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";
-)
+ended by code(%}).
+They cannot be nested.
 
-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"
+Mudela supports three types of constants: strings, reals, and integers. 
+verb("I am a string"
 -1.2e3          % a real
-12              % an int
-)
-
+12              % an integer)
+A string which contains no spaces can be written without the quotes.  
+However, in Note mode, unquoted text can be intepreted as note names
+rather than as a string.  
+
+Pairs of braces `code({)' and `code(})' or pairs of angle brackets 
+`code(<)' and `code(>)' are used to identify the scope
+of contexts and enable the construction of hierarchical structure.
+Items in braces will be treated as serial; items in angle brackets
+will be stacked into chords.  
+Braces are also used to group arguments for certain commands.
         
-sect(Identifiers)
-
-When assigning identifiers you use
-
-verb(
-string = ...
-)
-
+To assign an identifier you use:
+verb(string = ...)
+To use an identifier, you must preceed it with a backslash: code(\).
+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 it)
 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
+verb(bla = \melodic { \bla })
+is legal.
 
-When using identifiers they have to be escaped:
+COMMENT(It's not clear to me what things are allowed on the RHS of 
+an identifier assignment.)
 
-verb(
-oboe = \melodic { ... }
-\score{ \melodic { \oboe }}
-)
+The following words are keywords.  You can define an identifer whose
+name is a keyword, but you will not be able to reference it.
 
-The left-hand part of the assignment is really a string, so 
-verb(
-"Foo bar 4 2 " = \melodic { .. }
-)
+verb(absdynamic  font           time       penalty       spandynamic
+accepts     grouping       midi       property      symboltables
+bar         in             mm         pt            table
+cadenza     include        multi      relative      tempo       
+clear       lyric          header     score         translator  
+clef        key            notenames  script        type        
+cm          keysignature   octave     shape         transpose   
+consists    mark           output     skip          version     
+contains    melodic        partial    staff     
+duration    musicalpitch   paper      spandynamic)
 
-is also a valid assignment (but you would have trouble referencing to it)
+COMMENT( I don't know  the proper  way to make this kind of table in
+yodl.  
 
+Also  note: Lilypond  should  really give an error when  I write
+       lyric = .....  
+Instead, I get the error later, after I try to use my redefinition of
+\lyric.  The cause  is much less clear. )
 
-sect(Hierarchical structures)
+
+subsect(Hierarchical structures)
 
 The general structure consists of declarations:
-verb(
-IDENTIFIER = \TYPE{
+verb(IDENTIFIER = \TYPE{
         <type specific data>
-}
-)
+})
 and instantiations:
 
-verb(
-\TYPE{ <type specific data> }
-)
+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 [...] }
-)
+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":
+COMMENT(As far as I can tell, the last bit is simply a repetition of
+the information on how to use an identifier, so it should be deleted.
 
-description(
+But I'm uncertain about the meaning of \TYPE in the above section.
+Different from \type?  Does it refer to \melodic, \lyric?  In general,
+the use of the word "type" seems to be a source of confusion.
+)
 
 
-dit(Normal mode)
+sect(Modes)
 
-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.
+To simplify different aspects of music definition (entering the notes
+and manipulating them) Mudela has a number of different input "modes".
+In each mode, words are identified on the input.  If code("word") is
+encountered, it is treated as a string.  If code("\word") is
+encountered it is treated as a keyword or as an identifier.  The
+behavior of the modes differs in two ways: different modes treat
+unquoted words different, and different modes have different rules for
+deciding what is a word.  
 
-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(Normal mode)
+At the start of parsing, Mudela is in normal mode.
+In normal mode, a word is an alphabetic character followed by
+alphanumeric characters.  If code(word) is encountered on the input it
+is treated as a string. 
 
+dit(Note mode) Note mode is introduced by the keyword
+code(\melodic).  In Note mode, words can only contain alphabetic
+characters.  If code(word) is encountered, Lilypond first checks for a
+notename of code(word).  If no notename is found, then code(word) is
+treated as a string.  If you mistype a notename, the parser 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
+  string containing these has been made very easy.  Every sequence of
+non-digit and non-white characters starting with an alphabetic
+character or the code(_) is considered a word.  When code("word") is
+encountered it is treated as a lyric (without the quotes).  Likewise,
+when code(word) is encountered, it is treated as a lyric.  The code(_)
+character is converted to a space; it provides a mechanism for
+creating words that contain spaces.  
+verb(a&@&@&TSI|{[    % a word
 1THtrhortho     % not a "word"
 Leise DOEXPAND(Fl\)DOEXPAND("u\)ss{}teren meine Sapfe       % 4 words
 _ _ _ _         % 4 words: 4 spaces
-)
-)
+))
+
+COMMENT(Well, " seems to present some problems.  Also `` seems to be
+problematic.  So the above statement isn't quite right.  Unless these
+characters are considered to be "white")
 
+COMMENT(
 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
 
+What's this about reals?  When can you enter them or not enter them?)
 
 
+sect(Note Description)
 
+subsect(Basic note specification)
+
+A note specification has the form 
+var(pitch)[var(octavespec)][var(duration)].
+The pitch of the note is specified by the note's name.  
+
+Lilypond has predefined note names for various languages.  The default
+names are the Dutch note names.  The notes are specified by the
+letters code(c) through code(b), where code(c) is an octave below
+middle C and the letters span the ocatave above that C.  
+In Dutch, a sharp is formed by adding
+code(is).  A flat is formed by adding code(es).
+Double sharps and double flats are obtained by adding code(isis) or
+code(eses).  
+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).).
+Rests are specified with the note name code(r).  There is also a note
+name code(s) which produces a nonprinting note of the specified
+duration.  
+
+The optional octave specification takes the form of a series of single
+quote 
+code(') characters or a series of comma code(,) characters.  Each
+code(') raises the pitch by one octave; each code(,) lowers the pitch
+by an octave.  
 
-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
+c' d' e' f' g' a' b' c''
 )
-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
+cis' dis' eis' fis' gis' ais' bis'
 )
-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''
+ces' des' es' fes' ges' as' bes'
 )
 
-Postfixing the pitch with a comma, code(,)
-produces a note by one octave lower
 mudela(fragment,verbatim,center)(
-a a, a,,
+cisis' eisis' gisis' aisis' beses'
 )
 
-sect(Slurs and Ties)
+mudela(fragment,verbatim,center)(
+ceses' eses' geses' ases' beses'
+)
 
-A tie connects two adjacent note heads
+Whenever a C-sharp is desired,  you must specify a C-sharp.  Lilypond
+will determine what accidentals to  typeset  depending on the  key and
+context.   
+A reminder accidental can be forced by
+using an exclamation mark code(!)
+on a pitch.
+mudela(fragment,verbatim,center)(
+cis' d' e' cis'  c'! d' e' c' 
+)
 
+
+Durations are entered as their reciprocal values
 mudela(fragment,verbatim,center)(
-e' ~ e'
+a'1 a'2 a'4 a a'8 a a'16 a'32 a'64
+)
+mudela(fragment,verbatim,center)(
+r1 r2 r4 r8 r16 r32
 )
 
-Whereas a slur rather connects `chords', 
-and tries to avoid crossing stems
+If the duration is omitted then it is set equal to the previous
+duration.  If there is no previous duration, then a quarter note is
+assumed.  
+The duration can be followed by a dot code(.) to obtain dotted note
+lengths.  
+mudela(fragment,verbatim,center)(
+a'4. b'4.
+)
 
+In addition, the duration can be followed by a multiplier which is
+introduced with the asterisk code(*) and can be an integer or a
+fraction.  The multiplier changes the duration that Lilypond uses
+internally for the note, but it does not change the symbol that is
+printed.  
 mudela(fragment,verbatim,center)(
-e'( )e'
+c'4*2 c'4*2 d'8*2/3 d'8*2/3
 )
 
-And of course, such a (legato) slur can span several notes
+Extra long notes can be obtained using the code(\breve) and
+code(longa) durations:
 mudela(fragment,verbatim,center)(
-c'( d' e' )f'
+c'\breve gis'\longa
 )
 
-sect(Beams and Tuplets)
 
-A beam is 
+subsect(Beams and Tuplets)
+
+A beam is specified by surrounding the beamed notes with brackets
+code([) and code(]).  
 mudela(fragment,verbatim,center)(
 [a'8 a'] [a'16 a' a' a']
 )
 
-Here's a beamed triplet
+In order to create triplets, you must use a length multiplier after
+the brackets.  An open bracket code([) followed by a fraction
+instructs Lilypond to print a number over the beam, and it also
+starts multiplying all note lengths by the fraction.  The closing
+bracket code(]) should be followed by the fraction code(1/1) in order
+to restore normal note lengths.  To create a triplet without a beam,
+place a backslace code(\) before the opening and closing brackets. 
+
+For example, in an ordinary triplet, the notes have duration 2/3 as
+long as normal. 
 mudela(fragment,verbatim,center)(
-[/3 a'8 a' a']/1
+[2/3 a'8 a' a' ]1/1 \[2/3 b'4 b' b'\]1/1
 )
 
-a triplet without a beam
+There is a shorthand that can be used when you 
+want notes lengths multiplied by 2/n.  
+The 2 can be omitted after the open bracket
+and the first 1 can be omitted after the closing bracket.  
 mudela(fragment,verbatim,center)(
-\[/3 a'4 a'8\]
+[/3 b'8 b' b' ]/1  \[/3 a'4 a'8\]/1
 )
 
-and a combination
+COMMENT(The rest of this section needs to be rewritten.  I don't
+understand what's going on at all here.  The meaning of the lone ] is
+unclear.  And the : syntax is also unclear.  --Adrian)   
+
+Here is a combination
 mudela(fragment,verbatim,center)(
 [/3 a'8 a'16 a'] a'8 \]
 )
@@ -341,82 +387,58 @@ 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.
+subsect(Slurs and Ties)
 
-A sharp is formed by adding code(is)
-mudela(fragment,verbatim,center)(
-cis' dis' eis' fis' gis' ais' bis'
-)
+A tie connects two adjacent note heads
 
-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'
+e' ~ e'
 )
 
+Whereas a slur rather connects `chords', 
+and tries to avoid crossing stems
 
-There are two special `notenames', the rest
 mudela(fragment,verbatim,center)(
-r16 [a' a' a']
+e'( )e'
 )
 
-and the space
+And of course, such a (legato) slur can span several notes
 mudela(fragment,verbatim,center)(
-a'2 s-"diminuendo" | a'
+c'( d' e' )f'
 )
 
 
-sect(Commands)
+sect(Lyrics)
 
-mudela(fragment,verbatim,center)(
-\clef "bass"; c
-)
+Lyrics are entered like notes, with pitches replaced
+by text.  For example code(Twin-4 kle4 twin-4 kle4) enters four
+syllables, each with quarter note duration.  Two words can be bound
+together by an underscore If a single duration   
 
-and a clef-change
-mudela(fragment,verbatim,center)(
-\clef "treble"; f' e' \clef "alto"; d' c'
-)
+In order to instruct Lilypond to write lyrics underneath the
+staff, you must enter the lyrics context with code(\type Lyrics).  
+Lyrics should be entered in lyrics mode which is entered with code(\lyric).
 
-mudela(fragment,verbatim,center)(
-\time 3/4; c' g' g' |
-)
+Two syllables or words that compose a single
+duration entry are bound together using an underscore: 
+code(He_could4 not4).  Here is a full example:
+mudela(verbatim)(\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  }
+  >
+})
 
-mudela(fragment,verbatim,center)(
-\key d;
-g a b cis' d' e' fis' g'
+COMMENT(
+URG
+                        Fr\`e-4 re Ja- que
+                        Fr\`e- re Ja- que
 )
-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)
 
@@ -443,6 +465,38 @@ mudela(fragment,verbatim)(
 )
 
 
+sect(Time)  
+
+Lilypond aligns all musical objects according to the amount of time
+they occupy.  All of these objects have a duration.  When music is
+written in series using braces the duration is the sum of the 
+durations of the elements.  When music is stacked using angle
+brackets, the duration is the maximum of the durations of the
+elements.  
+
+Because Lilypond knows the durations of all musical elements, the time
+signature enables Lilypond to draw bar lines automatically.  The time
+signature is specified with the code(\time) command: code(\time 3/4).
+If no time signature is given, Lilypond assumes 4/4.  The automatic
+generation of bar lines can toggled with the code(\cadenza) command,
+and an incomplete measure at the start of the music can be created
+using the code(\partial) command: code(\partial 8*2;) creates a
+starting measure lasting two eighth notes.
+
+In order to help with error checking, you can insert bar markers in
+your music by typing code(|).  Whenever Lilypond encounters a code(|)
+that doesn't fall at a measure boundary, she prints a warning message.
+
+Rhythmic grouping is  a concept closely associated with this. 
+A default grouping is selected for the chosen time signature.  
+The default consists of combinations of 2 and 3 beats with as many
+groups of 3 as possible, and the groups of 3 coming first.  For
+example, 4/4 is divided into 2+2 and 8/8 is divided into 3+3+2.  This
+default grouping can be changed using the \grouping command which
+takes a list of durations to specify the grouping. 
+
+
+
 sect(A complete example)
 COMMENT(%label(se:complete))
 
@@ -458,46 +512,6 @@ mudela(verbatim)(
 }
 )
 
-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)
@@ -518,15 +532,11 @@ table(2)(lll)(
         row(cell()cell(;))
         row(cell(em(MusicList))cell(: em(empty)))
         row(cell()cell(code(|)  em(MusicList)  em(Music)))
-       row(cell()cell(;))
+        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
@@ -545,7 +555,7 @@ sequential music
   )
 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 
+    The duration of a simultaneous composition is the maximum of the durations 
     of its elements Example:
     verb(
         <a4 {cis8 cis8} e'4>      % a-major chord
@@ -568,44 +578,6 @@ verb(
 )
 
 
-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 key signature is valid for all octaves, but
@@ -623,17 +595,15 @@ 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<
+verb(\score<
         \melodic\relative c{
-               d
-       }
-       \paper{ }
-       \midi{ }
->
-)
+                d
+        }
+        \paper{ }
+        \midi{ }
+>)
 where the only interesting information is this particular example is verb(
-       d
+        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 
@@ -645,17 +615,14 @@ 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<
+verb(\score<
         \melodic\relative c{
-               <<foo.ly>>
-       }
-       \paper{ }
-       \midi{ }
-)
-
+                <<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
+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 
@@ -665,3 +632,167 @@ 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.
 
+
+sect(Commands)
+
+Commands take the form of a keyword followed by a list of arguments
+separated by spaces and terminated by a semicolon: 
+`code(\keyword argument argument ... ;)'
+
+COMMENT(The above is wrong. Many  commands  have the form 
+         \keyword { text }
+       with no semicolon, at least much of the time, and some commands
+have obligatory braces as far as I can tell, which don't contain music.)
+
+description(
+
+dit(code(\absdynamic))
+
+dit(code(\accepts))
+
+dit(code(\bar) var(bartype)) Prints a special bar symbol, or at
+measure boundaries, replaces the regular bar symbol with a special
+symbol.  The argument var(bartype) is a string which specifies the
+kind of bar to print.  Options are code(":|"), code("|:"),
+code(":|:"), code("||"), code("|."),
+code(".|"), or code(".|.").  These produce respectively a right repeat, a left
+repeat, a double repeat, a double bar, a start bar, an end bar, or a
+thick double bar.  If var(bartype) is set to "empty" then nothing is
+printed, but a line break is allowed at that spot.
+
+dit(code(\cadenza) var(togglevalue)) Toggles the automatic generation
+of bar lines.  If var(togglevalue) is 0 then bar line generation is
+turne off.   If var(togglevalue) is  1  then a bar is  immediately
+printed and bar generation is turned  on.
+
+dit(code(\clear))
+
+dit(code(\clef)  var(clefname)) Sets the current clef.   The argument
+is the name of the clef.  Possibilities are code(bass), code(alto),
+and code(treble).  Treble clef is the default.
+
+dit(code(\cm)) Specify a width in centimeters. 
+
+dit(code(\consists))
+
+dit(code(\contains))
+
+dit(code(\duration) { var(length) var(dotcount) }) Specify note
+duration.  The parameter var(length) is the negative logarithm (base
+2) of duration: 1 is a half note, 2 is a quarter note, 3 is an eighth
+note, etc.  The number of dots  after  the  note is given by
+var(dotcount). 
+
+dit(code(\font))
+
+dit(code(\grouping) var(durationlist))  Sets  the  metric structure of
+the measure.  
+COMMENT(elaboration is needed here.)
+
+dit(code(\in)) Specify a width in inches.  
+
+dit(code(\include) var(file)) Include the specified file.
+
+dit(code(\lyric) { var(list) } ) Parse var(list) in lyrics mode.
+
+dit(code(\key) var(pitch)) Change key signature to  that of var(pitch)-major.
+
+dit(code(\keysignature) var(notelist))
+Specify an arbitrary key signature.  The notes from var(notelist) will
+be printed in the key signature in the order that they appear on the list.
+
+dit(code(\mark))
+
+dit(code(\melodic) var(music)) Enter note mode and process the
+specified music. 
+
+dit(code(\musicalpitch) { var(octave) var(note) var(shift) }) Specify
+note pitch.  The octave is specified by an integer, zero for the
+octave containing middle C.  The note is a number from 0 to 7, with 0
+corresponding to C and 7 corresponding to B.  The shift is zero for a
+natural, negative to add flats, or positive to add sharps.
+
+dit(code(\time) var(numerator)code(/)var(denominator)) Change the time
+signature.  The default time signature  is 4/4.  
+
+dit(code(\midi)) Produce musical output.  See code(\tempo) for setting
+the tempo.
+
+dit(code(\mm)) Specify a width in millimeters. 
+
+dit(code(\multi))
+
+dit(code(\header) { var(key1) = var(val1); var(key2) = var(val2); ... })
+Specifies information about the music.  A header should appear at the
+top of the file describing the file's contents.  If a file has
+multiple code(\score) blocks, then a header should appear in
+each score block describing its contents.  Tools like code(ly2dvi) can
+use this information for generating titles.   Some possible key values
+are: title, opus, description, composer, enteredby, and copyright.
+
+dit(code(\notenames) { var(list) }) Define new note names.  
+The argument var(list) is a list of  definitions of  the form
+var(name) = var(pitch),  where var(pitch) is specified with the
+code(\musicalpitch) command.  
+
+dit(code(\octave))
+dit(code(\nop(output)))
+
+dit(code(\partial) var(duration)) Specify that the first measure of
+the music lasts only for the specified duration.
+
+dit(code(\paper) code({) [ code(linewidth = )var(width)code(;) ] code(})) 
+Appears in a score block to indicate that the music should be printed.
+The line width can be set to -1.  in order to prevent justification of
+small fragments of music, or the width can be specified explicitly
+using code(\cm), code(\in), code(\mm), or code(\pt) to specify the
+units.
+
+dit(code(\penalty))
+
+dit(code(\property))
+
+dit(code(\pt)) Specify a width in points. 
+
+dit(code(\relative) var(pitch) var(music)) Processes the specified
+var(music) in relative pitch
+mode.  In this mode, the octave of a pitch note is chosen so that the
+note is closest to the preceeding note.  
+The argument var(pitch) is
+the starting pitch for this comparision.  In the case of chords, the
+first note of a chord is used as the base for the pitches in the next
+chord.  
+
+dit(code(\score)) Start a music definition.
+
+dit(code(\script))
+
+dit(code(\shape))
+
+dit(code(\skip))
+
+dit(code(\staff))
+
+dit(code(\spandynamic))
+dit(code(\symboltables))
+dit(code(\table))
+
+dit(code(\tempo) var(duration) = var(perminute)) Used when creating
+MIDI output to specify the tempo.  For example, 
+`code(\midi { \temp0 4 = 76})' requests output with 76 quarter notes
+per minute.  
+
+dit(code(\translator))
+dit(code(\type))
+
+dit(code(\transpose) var(pitch) var(music)) Transposes the specified
+music.  Middle C is tranposed to var(pitch). 
+
+dit(code(\version) var(string)) Specify the version of Lilypond that
+a file was written for.  The argument is the version number,
+for example code("1.0.4").
+
+)
+
+
+
index 9878ae355045ccbabcb76a1b3dd2225578257eb9..d8fe5152166f6a94747fc5452d3d52e528bdf905 100644 (file)
@@ -715,8 +715,8 @@ signatures, which can be useful for unconventional keys or modes.  The
 key signature is given in the form of a list of notes.  The notes will
 be printed in the key signature in the order that they appear on the list.
 For example, 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
+of C-minor can be specified as `code(\keysignature bes es as)'.  The
+command `code(\keysignature fis es bis)' provides a more exotic
 example.
 
 
index d62f72b912ac567d45d07cf54171fade49dd8b66..12bf4062a29c7c88a94c222386a6f35f61571585 100644 (file)
@@ -1,66 +1,60 @@
-(arbitrary number of bars' rest):bâton de pause:::::
 :comma enharmonique:::::
-:comma pythagoricien:::komma van Pythagoras::
-:comma syntonique:::komma van Didymos, syntonische komma::
 :doigté de pédale:::::
 :doigté:::::
-:fioriture:::cadens:cadenza:
 :indication de pédale:::::
-:mode ecclésiastique:::::
 :pointillés:::::
 A:la:::::
-B:si:::::
-C:do:::C::
-C:ut:::::
-D:ré:::::
-E:mi:::::
-F:fa:::::
-G:sol:::::
 accent:accent:Akzent::accent:accento:
-accident; accidental alteration:altération accidentelle:Vorzeichen::toevallig teken:accidento:
+accidental:altération accidentelle:Vorzeichen::toevallig teken:accidento:
 adjacent keys:tons voisins:::::
 alto:alto:::alt::
-ancient form (diatonic minor scale):forme du mode mineur ancien:::::
+ancient form??? (diatonic minor scale):forme du mode mineur ancien:::::
 appoggiatura:appogiature, ports de voix, notes d'agr\'ement:langer Vorschl\"age:::appogiature:
+arbitrary number of bars' rest):bâton de pause:::::
 arpeggio:arpège, arpègement:Brechungen::gebroken akoord:arpeggio:
 artificial measure:mesure artificielle:::::
 artificial rest:respiration:::::
 ascending interval:intervalle ascendant:::::
 augmented (interval):augmenté (intervalle):::overmatig interval::
+B:si:::::
 backfall, forefall:accent, chute, port de voix:Vorschlag::korte voorslag:appogiature:
+bar line:barre (de mesure):Taktstrich::maatstreep:stanghetta:
 bar; measure:mesure:::maat, maatstreep::
 baritone:bariton:::bariton::
-barline:barre (de mesure):Taktstrich::maatstreep:stanghetta:
 bass clef:clé de fa:F Schl\"ussel::F sleutel, bas sleutel:chiave di basso:
 bass:basse:::bas::
 beam:barre:Balken::waardestreep/balk:barra:
 beat:temps:::tel::
-binary beat:temps binaire:::tweedelige maatsoort::
 brace:accolade:Klammer:::accolada:Symbol at the start of a system that connects staffs.
 brass::::koper (blazers)::
+C clef:clé d'ut:::C sleutel, alt sleutel:chiave di tenore:
+C:do:::C::
+C:ut:::::
 cadence:cadence:::cadens::
+cadenza:fioriture:::cadens:cadenza:
+cent::::::1/1200 of an octave (1/100 of an equally tempered semitone)
 chain of trills:chaîne de trilles:::triller::
 character:caractère:::::
 chevron:chevron:::::
-chord of the dominant ninth:accord de neuvième dominante:::dominant noon akkoord::
-chord of the dominant seventh:accord de septième dominante:::septiem akkoord::
 chord:accord:::akkoord::
 chromatic scale:gamme chromatique:::chromatische toonladder::
 chromatic semitone:demi-ton chromatique:::chromatische halve toon::
 chromatic transposition:transposition chromatique:::::
 chromatic type:genre chromatique:::::
-clef:clef:Schl\"ussel::Sleutel:la chiave (pl. le chiavi):
-clef:clé:::sleutel::
-closing angular bracket:::::decrescendo:
-comma:comma:::::
+church mode, ecclesiastical mode:mode ecclésiastique:::::
+clef:clé:Schl\"ussel::Sleutel:la chiave (pl. le chiavi):
+comma:comma:::::Difference in pitch of a note when the note is derived from a different tuning system.
 compound interval:intervalle composé:::::
 compound measure:mesure composée:::::
 conjunct movement:mouvement conjoint:::::
 consonant interval; consonance:consonance:::consonant::
 contralto:contralto:::::
 contro-time:contre-temps:::::
+crescendo:crescendo::::crescendo:written with an extended opening angular bracket, indicates increasing volume
 cue-notes::Stichnoten::stichnoten::
+D:ré:::::
 dash over/below:pizzicato:::::
+decrescendo:::::decrescendo:written with an extended closing angular bracket, indicates decreasing volume
 degree [of the scale]:degré [de la gamme]:::trap [van de toonladder]::
 descending interval:intervalle descendant:::dalend interval::
 diatonic major scale:gamme diatonique majeure:::diatonische majeur toonladder::
@@ -71,7 +65,10 @@ diatonic:diatonique:::diatonisch::A diatonic scale is a scale consisting of whol
 diminished (interval):diminué (intervalle):::verminderd (interval)::
 disjunct movement:mouvement disjoint:::::
 dissonant interval; dissonance:dissonance:::dissonant interval; dissonant::
-dominant:dominante:::dominant::A tone that  creates tension; usually the fifth degree of the scale.
+dominant ninth chord:accord de neuvième dominante:::dominant noon akkoord::
+dominant seventh chord:accord de septième dominante:::dominant septiem akkoord::
+dominant:dominante:::dominant::A tone that creates tension;the fifth degree of the scale.
+dorian mode::::::Mode obtained by raising the sixth in minor mode.  A Dorian scale can be played from D to D with no sharps or flats.
 dot (augmentation dot) :point:Punkt::punt:punto:
 dot and curved line combined:point et liaison combinés:::::
 dot over/below::::staccato:staccato:
@@ -85,26 +82,26 @@ double sharp:double di
 double trill:trille double:::::
 double triplet:double triolet:::dubbele triool::
 double whole note:::breve:brevis:breve:
+duple meter:temps binaire:::tweedelige maatsoort::
 duplet:duolet:::duool::
 duration:durée:::duur, lengte::
+E:mi:::::
 eighth note:croche::quaver:achtste noot::
 eighth rest:demi-soupir::quaver rest:achtste rust::
 engraving::notenstechen::steken::
-enharmonic intervals:intervalles enharmoniques:::::
-enharmonic notes:notes enharmoniques:::enharmonische noot::
-enharmonic scales:gammes enharmoniques:::::
-enharmonic transposition:transposition enharmonique:::::
-enharmonic type:genre enharmonique:::::
-enharmony:enharmonie:::::
+enharmonic:enharmonique:::enharmonisch::Two notes, intervals, or scales are enharmonic if they have different names but sound the same.  Examples: C sharp and D flat, diminished fourth and major third
+equal temperament:tempérament Ã©gal:::getempereerde stemming::Tuning system in which each semitone is precisely 100 cents.
 essential alteration:altération essentielle:::::
 expression mark:signe d'expressoin:Vortragszeichen::voordrachtsteken:segno d'espressione:
 extension of interval:extension d'intervalle:::::
+F:fa:::::
 fermata:pauses:Fermate::fermate:fermata:Prolonged sound or silence of indefinite duration
 fifth:quinte:::kwint::
 flag, hook, tail, pennant:crochet:F\"anchen::vlaggetje:coda uncinata:
 flat:bémol:Be::mol:bemolle:
 four-bar rest:bâton de pause:::::
 fourth:quarte:::kwart::
+G:sol:::::
 glissando:glissement:Glissando::glissando:glissando:
 graces:petites notes:kurz Vorschl\"age, Manieren (?)::versieringen:appogiature:
 grand staff::::piano systeem::A combination of two staffs with a brace.  Usually used for piano music.
@@ -114,12 +111,13 @@ harmonic cadence:cadence harmonique:::cadens::
 harmonic form (diatonic minor scale):forme harmonique:::::
 harmonic interval:intervalle harmonique:::::
 incomplete measure:mesure incomplète:::::
-interval:intervalle:::interval::
+interval:intervalle:::interval::Difference in pitch between two notes
 inversion of interval:renversement d'intervalle:::inversie::
 irregular contro-time:contre-temps irrégulier:::::
 irregular group:groupe irrégulier:::::
 irregular measure:mesure irrégulière:::::
 irregular syncopation:syncope irrégulière:::onregelmatige syncope::
+just intonation::::::Tuning system in which the notes are obtained by adding and subtracting natural fifths and thirds.
 key signature:armure, armature [de la clé], signes des accidentals:Vorzeichen::toonsoort (voortekens):segni di chiave:
 kind of note:figure de note:::::
 kind of rest:figure de silence:::::
@@ -132,15 +130,14 @@ long appoggiatura:appogiature longue:::::
 lower number:chiffre inférieur:::::
 major (interval):majeur (intervalle):::groot (interval)::
 major mode:mode majeur:::::
-meantone tuning:tempérament mésotonique:::::
-mediant:médiante:::mediant::The sixth degree of a scale
+meantone temperament:tempérament mésotonique:::::Tuning based on a fifth that is 16 cents smaller than the natural fifth.  
+mediant:médiante:::mediant::The third degree of a scale
 melodic cadence:cadence mélodique:::cadens::
 melodic form (diatonic minor scale):forme mélodique:::::
 meter, time:m\`etre:Takt, Metrum::maatsoort::A recurring pattern of stress
 metronome:métronome:::metronoom::
 metronomic indication:indication métronomique:::::
 mezzo-soprano:mezzo-soprano:::::
-middle C clef:clé d'ut:::C sleutel, alt sleutel:chiave di tenore:
 middle C:do central:::centrale C::
 minor (interval):mineur (intervalle):::::
 minor mode:mode mineur:::::
@@ -150,15 +147,15 @@ modulation:modulation:::modulatie::
 mordent:mordant, pinc\'e:Pralltriller, Mordent::mordent:mordente:
 motive:incise:::motief::
 musical ladder:échelle musicale:::::
+mixolydian mode::::::Mode obtained by lowering the seventh in major.  A mixolydian scale can be obtained by playing G to G with no sharps or flats.
 natural sign:bécarre:Aufl\"osungszeichen::herstellingsteken:bequadro:
 ninth::::noon::
 note head::Notenkopf::noot balletje::
 note:note:Note::noot:nota:
-octave line:clé d'octave:::::
 octave line:échelle d'octave:::::
+octave line:clé d'octave:::::
 octave sign:octave:Oktave:::ottava:
 octave:octave:::octaaf::
-opening angular bracket:::::crescendo:
 ornament, embellishment; accessory:agr\'ement, ornement:Verzierungen:::fiorette, fioriture, abbellimenti:
 part::::partij::
 pause:pause:Luftpause::::
@@ -171,6 +168,7 @@ phrase:phrase:::::
 phrasing:phrasé:::::
 pitch pipe; tuning fork:diapason:::stemfluitje; stemvork::
 pitch:hauteur:::toonhoogte::
+Pythagorean comma:comma pythagoricien:::komma van Pythagoras::A sequence of fifths starting on C eventually circles back to C (B sharp), but this B sharp is 24 cents higher than C.  This gap is the Pythagorean comma.  
 quadruplet:quartolet:::kwartool::
 quarter note:noire::crotchet:kwartnoot::
 quarter rest:soupir::crotchet rest:kwart rust::
@@ -210,18 +208,18 @@ staff:port
 stem:queue:Stiel, Hals::stok:asta, gamba:
 strings::::strijkers::
 strong beat:temps fort:::thesis::
-subdominant:sous-dominante:::::
-subtonic:sous-tonique:::::
-superdominant:sus-dominante:::::
-supertonic:sus-tonique:::::
+subdominant:sous-dominante:::::The fourth degree of the scale
+submediant::::::The sixth scale degree
+subtonic:sous-tonique:::::The seventh degree of the scale
+superdominant:sus-dominante:::::The sixth scale degree
+supertonic:sus-tonique:::::The second scale degree
 syncopation; upbeat:syncope:::syncope::
+syntonic comma:comma syntonique:::komma van Didymos, syntonische komma::Difference between the natural third and the third obtained by Pythagorean tuning, euqal to 22 cents. 
 system:syst\`eme:System::systeem:sitema:
-tempered tuning:tempérament Ã©gal:::getempereerde stemming::
 tempo indication:signes de  temps:Zeitmasse, Tempobezeichnung::tempo aanduiding:segno di tempo:
 tempo; movement:mouvement:::::
 tenor:ténor:::::
 tenth::::deciem:decime:
-ternary beat:temps ternaire:::driedelige maatsoort::
 tetrachord:tétracorde:::::
 third:tierce:::terts::
 thirty-second note:triple croche::demisemiquaver:32e noot::
@@ -236,6 +234,7 @@ transposition:transposition:::transpositie::
 treble clef:clé de sol:G Schl\"ussel::G sleutel, viool sleutel:chiave di violino:
 tremolo:tr\'emolo:Tremolo::tremolo:tremolo:
 trill; shake:trille, tremblement, battement (cadence):Triller::triller:trillo:
+triple meter:temps ternaire:::driedelige maatsoort::
 triplet:triolet:::::
 tritone:triton:::::
 turn; gruppetto:bris\'e, groupe, doubl\'e, grupetto:Doppelschlag::dubbelslag:grupetto:
index 74406656fd91af26ca8f902417679ec2d6c1bee3..a1cde6d1e0decbd3c04c352af864ad12566c84b6 100644 (file)
@@ -4,6 +4,8 @@ This file lists authors of GNU LilyPond, and what they wrote.  This
 list is alphabetically ordered.
 
 itemize(
+it()nemail(Tom Cato Amundsen)(tomcato@xoommail.com),
+    cembalo-partita in mudela.
 it()nemail(Mats Bengtsson)(matsb@s3.kth.se),
     lurl(http://www.s3.kth.se/~matsb)
     clef stuff, key stuff, swedish notenames, testing, general
index 60c78c73ecfe0d3df6c2d0c2a15c2360324b3830..c1cee4ed6b850711d349377f1f51a13165ab1ee5 100644 (file)
@@ -74,8 +74,12 @@ it()Texinfo. (version 3.12 or newer)
 
 it()GNU find
 Check out lurl(ftp://ftp.gnu.org)
-or any mirror of this site
+or any mirror of this site.
 
+it()The geometry package for LaTeX is needed to use ly2dvi.  
+    Available at 
+lurl(ftp://ftp.ctan.org/tex-archive/macros/latex/contrib/supported/geometry)
+or at mirror site lurl(ftp://ftp.dante.de)
 
 it() A fast computer (a full page of music typically takes 1 minute on my
     486/133, using the bf(--enable-checking) compile. It's lot slower than
index 537727b2d7e2bc18884f5cc825ea49ebf96f6b48..eea62fb68a7350c77053d9ba2cee78fafc3ee0f2 100644 (file)
@@ -85,7 +85,12 @@ o Texinfo. (version 3.12 or newer)
 
 o GNU find
 Check out ftp://ftp.gnu.org
-or any mirror of this site
+or any mirror of this site.
+
+o The geometry package for LaTeX is needed to use ly2dvi.  
+    Available at 
+ftp://ftp.ctan.org/tex-archive/macros/latex/contrib/supported/geometry
+or at mirror site ftp://ftp.dante.de
 
 o  A fast computer (a full page of music typically takes 1 minute on my
     486/133, using the --enable-checking compile. It's lot slower than
diff --git a/NEWS b/NEWS
index 2fc0ebd08f9de9f05b48412718c10c901dff7971..ccd6913fa859d2dbcd0f1c67987400bf6dfb06a2 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,40 @@
-
+pl 7
+       - refman updates by Adriano Moriano.
+
+
+pl 6.jbr2
+        - scripts/ly2dvi32.py: Fixed bug with lily input including multiple
+          files.  Also, we now stream out lilypond log one line at a time
+          for better feedback.
+
+pl 6.jbr1
+        - scripts/ly2dvi32.py: Added some doco, add postscript option, set
+          MFINPUTS along with TEXINPUTS, modified initialization sequence. 
+          Made some Python style changes per Han-Wen suggestions.
+        - Documentation/man/ly2dvi32.yo: Added a manpage for ly2dvi32.
+        - stepmake/bin/package-zip32.sh: Added doco distribution.  Removed
+          the installation directory after zip operation.  
+        - Documentation/ntweb/index.yo: LILYPOND -> LILYPONDPREFIX and 
+          comments about MiKTeX-1.11.
+
+pl 6.tca1
+       - First movement of Partita II (BWV 826) in 
+         mutopia/J.S.Bach/Cembalo-Partitas. Lilypond output was so
+         beautiful that I'll have to write the rest of the partita.
+
+pl 6.uu2
+       - mudela-book.py --dependencies
+       - more doc fixes (AM)
+       - warn if declaring a keyword.
+       - \grouping 4 2*3; now accepted.
+       - patches to standchen.ly
+
+pl 6.uu1
+
+       - mudela-book handles \input now
+       - vocabulary fixes by Adrian Moriano
+
+********
 pl 6
        - largish rehack:
          * Super_element is now an `abstract' class,
diff --git a/TODO b/TODO
index 7f8f4b5f9c027687e0d317b0334933ae64d4fc6d..69008b66f2a1d763e24e6b3328390ab04b11d0ae 100644 (file)
--- a/TODO
+++ b/TODO
@@ -7,6 +7,9 @@ done, or is an idea that I want to think about
 Most of the items are marked in the code as well, with full explanation. 
 grep for TODO and ugh/ugr/urg
 
+       * fix LOCALE settings, and \def\foo{2,000pt} output
+
+
        * use streambufs to provide IO handling for TeX stream, mudela stream,
 data-file.
 
diff --git a/VERSION b/VERSION
index f2ec42359f7bd1cad545f423bf856833202ad208..027e590313a0e441744df6d82c4a15bc3d7cdb79 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,7 +1,7 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=0
-PATCH_LEVEL=6
+PATCH_LEVEL=7
 MY_PATCH_LEVEL=
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
index 518f5097f18026716759a008cd92c2f85796b0b9..de66eda7d7bdc6479036bdd0d35fe65150b1c87a 100644 (file)
@@ -1,9 +1,45 @@
 %{
- abbreviations of english names for notes
-
- %}
+     English note names spelled out in full, and abbreviated
+     with s for sharp and f for flat.
+%}
 
 \notenames {
+       cflatflat       = \musicalpitch { -1 0 -2 }
+       cflat           = \musicalpitch { -1 0 -1 }
+       c               = \musicalpitch { -1 0 0 }
+       csharp          = \musicalpitch { -1 0 1 }
+       csharpsharp     = \musicalpitch { -1 0 2 }
+       dflatflat       = \musicalpitch { -1 1 -2 }
+       dflat           = \musicalpitch { -1 1 -1 }
+       d               = \musicalpitch { -1 1 0 }
+       dsharp          = \musicalpitch { -1 1 1 }
+       dsharpsharp     = \musicalpitch { -1 1 2 }
+       eflatflat       = \musicalpitch { -1 2 -2 }
+       eflat           = \musicalpitch { -1 2 -1 }
+       e               = \musicalpitch { -1 2 0 }
+       esharp          = \musicalpitch { -1 2 1 }
+       esharpsharp     = \musicalpitch { -1 2 2 }
+       fflatflat       = \musicalpitch { -1 3 -2 }
+       fflat           = \musicalpitch { -1 3 -1 }
+       f               = \musicalpitch { -1 3 0 }
+       fsharp          = \musicalpitch { -1 3 1 }
+       fsharpsharp     = \musicalpitch { -1 3 2 }
+       gflatflat       = \musicalpitch { -1 4 -2 }
+       gflat           = \musicalpitch { -1 4 -1 }
+       g               = \musicalpitch { -1 4 0 }
+       gsharp          = \musicalpitch { -1 4 1 }
+       gsharpsharp     = \musicalpitch { -1 4 2 }
+       aflatflat       = \musicalpitch { -1 5 -2 }
+       aflat           = \musicalpitch { -1 5 -1 }
+       a               = \musicalpitch { -1 5 0 }
+       asharp          = \musicalpitch { -1 5 1 }
+       asharpsharp     = \musicalpitch { -1 5 2 }
+       bflatflat       = \musicalpitch { -1 6 -2 }
+       bflat           = \musicalpitch { -1 6 -1 }
+       b               = \musicalpitch { -1 6 0 }
+       bsharp          = \musicalpitch { -1 6 1 }
+       bsharpsharp     = \musicalpitch { -1 6 2 }
+
        cff     = \musicalpitch { -1 0 -2 }
        cf      = \musicalpitch { -1 0 -1 }
        c       = \musicalpitch { -1 0 0 }
@@ -17,7 +53,7 @@
        eff     = \musicalpitch { -1 2 -2 }
        ef      = \musicalpitch { -1 2 -1 }
        e       = \musicalpitch { -1 2 0 }
-       es      = \musicalpitch { -1 2 1 }
+       es      = \musicalpitch { -1 2 1 }   % es = E-flat in Dutch
        ess     = \musicalpitch { -1 2 2 }
        fff     = \musicalpitch { -1 3 -2 }
        ff      = \musicalpitch { -1 3 -1 }
@@ -32,7 +68,7 @@
        aff     = \musicalpitch { -1 5 -2 }
        af      = \musicalpitch { -1 5 -1 }
        a       = \musicalpitch { -1 5 0 }
-       as      = \musicalpitch { -1 5 1 }
+       as      = \musicalpitch { -1 5 1 }   % as = A-flat in Dutch
        ass     = \musicalpitch { -1 5 2 }
        bff     = \musicalpitch { -1 6 -2 }
        bf      = \musicalpitch { -1 6 -1 }
        %
 
 
+       Cflatflat       = \musicalpitch { -2 0 -2 }
+       Cflat           = \musicalpitch { -2 0 -1 }
+       C               = \musicalpitch { -2 0 0 }
+       Csharp          = \musicalpitch { -2 0 1 }
+       Csharpsharp     = \musicalpitch { -2 0 2 }
+       Dflatflat       = \musicalpitch { -2 1 -2 }
+       Dflat           = \musicalpitch { -2 1 -1 }
+       D               = \musicalpitch { -2 1 0 }
+       Dsharp          = \musicalpitch { -2 1 1 }
+       Dsharpsharp     = \musicalpitch { -2 1 2 }
+       Eflatflat       = \musicalpitch { -2 2 -2 }
+       Eflat           = \musicalpitch { -2 2 -1 }
+       E               = \musicalpitch { -2 2 0 }
+       Esharp          = \musicalpitch { -2 2 1 }
+       Esharpsharp     = \musicalpitch { -2 2 2 }
+       Fflatflat       = \musicalpitch { -2 3 -2 }
+       Fflat           = \musicalpitch { -2 3 -1 }
+       F               = \musicalpitch { -2 3 0 }
+       Fsharp          = \musicalpitch { -2 3 1 }
+       Fsharpsharp     = \musicalpitch { -2 3 2 }
+       Gflatflat       = \musicalpitch { -2 4 -2 }
+       Gflat           = \musicalpitch { -2 4 -1 }
+       G               = \musicalpitch { -2 4 0 }
+       Gsharp          = \musicalpitch { -2 4 1 }
+       Gsharpsharp     = \musicalpitch { -2 4 2 }
+       Aflatflat       = \musicalpitch { -2 5 -2 }
+       Aflat           = \musicalpitch { -2 5 -1 }
+       A               = \musicalpitch { -2 5 0 }
+       Asharp          = \musicalpitch { -2 5 1 }
+       Asharpsharp     = \musicalpitch { -2 5 2 }
+       Bflatflat       = \musicalpitch { -2 6 -2 }
+       Bflat           = \musicalpitch { -2 6 -1 }
+       B               = \musicalpitch { -2 6 0 }
+       Bsharp          = \musicalpitch { -2 6 1 }
+       Bsharpsharp     = \musicalpitch { -2 6 2 }
+
        Cff     = \musicalpitch { -2 0 -2 }
        Cf      = \musicalpitch { -2 0 -1 }
        C       = \musicalpitch { -2 0 0 }
index f2ec42359f7bd1cad545f423bf856833202ad208..027e590313a0e441744df6d82c4a15bc3d7cdb79 100644 (file)
@@ -1,7 +1,7 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=0
-PATCH_LEVEL=6
+PATCH_LEVEL=7
 MY_PATCH_LEVEL=
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
index 6704153d4829d8a7d82e119eb461a585baf36280..23f341dfa7db8b532d24f625c6c22c31c3b5b55c 100644 (file)
@@ -47,14 +47,14 @@ Line_of_score::set_breaking (Array<Column_x_positions> const &breaking, int j) c
   for (int i=0; i < errors.size(); i++)
     errors[i]->error_mark_b_ = true;
 
-  const Line_of_score *line_l=0;
+  Line_of_score *line_l=0;
        
   if (breaking.size() >1) 
     {
       line_l = (Line_of_score*)clone()->access_Spanner ();
     }
   else 
-    line_l =  this;
+    line_l = (Line_of_score*) this;
        
   ((Array<Paper_column*> &)line_l->cols) = curline;
   line_l->set_bounds(LEFT,curline[0]);
index 2931b16517638522fa5ed6cbf80c1cce4be6a08d..869d5527bd81098aca03a036a5649eb9f5e76451 100644 (file)
@@ -121,6 +121,11 @@ My_lily_lexer::set_identifier (String name_str, Identifier* i, bool unique_b)
 #endif
       delete old;
     }
+  if (lookup_keyword (name_str) >= 0)
+    {
+      warning (  _f ("Identifier name is a keyword (`%s')", name_str));
+    }
+  
   (*scope_l_arr_.top ())[name_str] = i;
 }
 
index 86b67fb02d904679674127a96b16f3e5e681ac62..b39eae1ec197cf79541c299680fb3407c96f5458 100644 (file)
@@ -499,7 +499,10 @@ intastint_list:
        | intastint_list int '*' int    {
                $$->push ($2); $$->push ($4);
        }
-       ;
+       | intastint_list int    {
+               $$->push ($2); $$->push (1);
+       }
+       ;       
 
 
 /*
index 74664f1efaa7de90a5d9055e1aa323f97a879004..c042666d02a6205d311d2031a81a9150bfb9a793 100644 (file)
@@ -70,3 +70,5 @@
 1.0.5.jcn1
 1.0.5.hwn1
 1.0.6
+1.0.6.uu1
+1.0.7
index 760a70ff1f6d59f4d5881e06a9da28c1ed7764eb..121a3307ef2801dfdc613037337205db4ce668bb 100644 (file)
@@ -1,15 +1,15 @@
 Begin3
 Titel: LilyPond
-Versie: 1.0.6
-Inschrijf datum: 02SEP98
+Versie: 1.0.7
+Inschrijf datum: 07SEP98
 Beschrijving: @FLAPTEKST@
 Trefwoorden: muziek typezetten midi notatie
 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
-       770k lilypond-1.0.6.tar.gz 
+       770k lilypond-1.0.7.tar.gz 
 Oorspronkelijke plek: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
-       770k lilypond-1.0.6.tar.gz 
+       770k lilypond-1.0.7.tar.gz 
 Copi-eer voorwaarden: GPL
 End
index 6fcad9b7c5e039477e1cd5c832823980c030239a..ed9c2b62e2c77371b403de66d53220c2efe751a4 100644 (file)
@@ -1,7 +1,7 @@
 Begin3
 Title: LilyPond
-Version: 1.0.6
-Entered-date: 02SEP98
+Version: 1.0.7
+Entered-date: 07SEP98
 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
-       770k lilypond-1.0.6.tar.gz 
+       770k lilypond-1.0.7.tar.gz 
 Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
-       770k lilypond-1.0.6.tar.gz 
+       770k lilypond-1.0.7.tar.gz 
 Copying-policy: GPL
 End
index 956495610048cc8e20a66b0620a046891b2644b3..14e6c04c932e4b265949ea21e87f217aed5bf96e 100644 (file)
@@ -1,9 +1,9 @@
 Name: lilypond
-Version: 1.0.6
+Version: 1.0.7
 Release: 1
 Copyright: GPL
 Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.0.6.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.0.7.tar.gz
 Summary: A program for printing sheet music.
 URL: http://www.cs.uu.nl/~hanwen/lilypond
 Packager: Han-Wen Nienhuys <hanwen@cs.uu.nl>
diff --git a/mutopia/J.S.Bach/Cembalo-Partitas/GNUmakefile b/mutopia/J.S.Bach/Cembalo-Partitas/GNUmakefile
new file mode 100644 (file)
index 0000000..68e8793
--- /dev/null
@@ -0,0 +1,8 @@
+# mutopia/J.S.Bach/Petites-Preludes/Makefile
+
+depth = ../../..
+
+
+LOCALSTEPMAKE_TEMPLATES=mutopia
+
+include $(depth)/make/stepmake.make
diff --git a/mutopia/J.S.Bach/Cembalo-Partitas/Partita_I_Sinfonia.ly b/mutopia/J.S.Bach/Cembalo-Partitas/Partita_I_Sinfonia.ly
new file mode 100644 (file)
index 0000000..44d2904
--- /dev/null
@@ -0,0 +1,364 @@
+\header {
+  filename =    "";
+  title =       "Partita II";
+  description = "6 Partite per il clavicembalo, Partita II (c-minor)";
+  opus =        "BWV 826";
+  source =      "Editio Musica Budapest (Urtext)";
+  composer =    "Johann Sebastian Bach (1685-1750)";
+  enteredby =   "Tom Cato Amundsen";
+  copyright =   "Public Domain";
+}
+
+\version "1.0.1";
+\include "a4.ly";
+global = \melodic {
+       \time 4/4;
+       \key es;
+       \skip 1*7;
+       \bar "||";
+       \skip 1*22;
+       \time 3/4;
+       \skip 2.*62;
+       \bar "|.";
+}
+  
+hoyreOpp = \melodic \relative c''  {
+       \stemup
+       es4 r16 [es d. es32] f4 r16 [f16 f. g32] |
+       [as8. as16] [as16 g32 f g16. d32] es4 r16 [g g. as32] |
+%3
+       bes4 r16 [bes,16 bes. c32] [des8. des16] 
+       \type Staff < 
+               { \stemup e4 }
+               { \stemup \property Voice.hshift = 1 [des16 c32 bes c16. g32] }
+       >
+%4
+       f4 \stemboth r16 [f g. as32] \stemup d,4 r16 [d g. es32] |
+       c4 ~ [c32 es des c des16. f32] [b,16. c32 b16. c32] d4 ~ |
+       d2 ~ [d16. g,32 a16. b32] [c16. <b32 g> <c16. a> <d32 b]> |
+       <[es8. c> <es16 c]>
+       \type Staff <
+               { \stemup fis4 }
+               { \stemup \property Voice.hshift = 1 [es16 d32 c d16. a32] }
+       > g2
+}
+
+hoyreNed = \melodic \relative c'' {
+       \clef violin;
+       \stemdown
+       <c4 g> r16 [c b. c32] d4 r16 [d d. es32] |
+       [f8. f16] f8 r <c4 g> r16 [es16 es. f32] |
+       <c4 g' > r16 [g16 g16. as32] [bes8. bes16] bes8 r |
+       <c4 as> r16 s16*3 r16 [f, f. g32] g4 |
+%5
+       r16 [es es. f32] f4 [g16. a32 g16. a32] b4 ~ |
+       [b8. d,16] [f8. as16] [g16. f32 es16. d32] [es16. d32 es16. f32] |
+       g4 <c8 a> r <d2 b>
+}
+
+venstreOpp = \melodic \relative c' {
+       \clef bass;
+       \stemup
+       <c4 g es> r <b as f d> r |
+       r <b f d> <c g es> r |
+       <c g e> r r <c g> |
+       <c as f> r r16 <[as d,><as. d,><g32 d]> <g4 d> |
+%5
+       r16 <[g c,><g. c,><f32 c]> 
+%{     \type Voice <
+               {f4() f}
+               {c4 d}
+       >
+%}
+        <f4-"ikke bue c-d" ~ c><f  d> r16 [f f. g32] |
+       [as8. as16]~ [as g32 f g16 d] <es4 c> r |
+       r <a es c> <g2 d>
+}
+
+venstreNed = \melodic{ \relative c{
+       \stemdown
+       c4 r c r | r c c r | c r r c | c r r16 [c c. bes32] bes4 |
+       r16 [bes bes. as32] as4 g r16 [d' d. es32] |
+       \type Staff <
+               { \stemdown \property Voice.hshift = 1 [f8. f16] [b,8. b16] g4 r | }
+               { \stemdown r4 g}
+       >
+       r g g2  
+}}
+
+andanteEn = \melodic \relative c''{
+       [g16 c32 d es8~] [es16 d32 c es d c b] [c16 g as f] [g c g f] |
+       [es16 c'32 d es d c16] [g' c, as' c,] [b c d b] g16 r16 r8 |
+%10
+       \stemup [g'32 f es d c16 bes~] [bes des8 c16] 
+       [as'32 g f e f8~] [f32 g as g f es d es] |
+       [f es d c bes16 as~] [as c8 bes16] 
+       [g'32 f es d es8~] [es32 f g f es d c b]
+%12
+       \stemboth
+       [c bes as g f16 es'~] [es d32 c es d c b]
+       [c d es f g16 c,~] [c b32 c d c b c] |
+       [as'32 g f e f16 des~] [des c32 des es des c des]
+       [g f es d es16 c~] [c b32 c d c b c]
+%14
+       [f c b a b16 d] [f32 bes, as g as16 c] 
+       [f32 as, g f g8~] [g32 f' g as g16 f] |
+       [g16 b,8 c16~] [c16 bes32 as g f es d] [es g f es f es d es] [d8 c] |
+%16
+       r8 g'~ [g32 as g f g16 as] [bes16 d es8~] [es32 bes es f g16 es] |
+       [des16 c f8~] [f32 c f g as16 f] [es c d8~] [d32 f g as bes as g as] |
+%18
+       [bes32 as g16~] [g32 f e16~] [e32 d c16~] [c32 g' as bes] 
+       [as g f16~] [f32 es des16~] [des32 c bes16] [bes32 f' g as] |
+%19
+       [g f e f bes f e f] [as f e f g f e f] f4~ [f32 es d es f d es f] |
+       [bes,32 d f g as8~] [as32 g f as g f es d] 
+       [es bes es f g8~] [g32 f es g f es d c] |
+%21
+       [c'32( a g )fis es16 d~] [d32 g a bes cis,16 d] ~
+       [d32 fis g a c, es d c] [fis d e fis g a bes c] |
+%22
+       [bes32 a g fis ~ fis16 g~] [g d8 es16~] 
+       [es16 b8 c16~] [c32 bes as g as16 c]
+%23
+       [fis,32 es' d c bes'16. a32] [g8( )fis16.-\prall g32] g4~ 
+       [g32 f g as g f es d ] |
+       [f32 es d c g'8~] [g32 es f g f es d c] [es d c bes g'8~] 
+       [g32 d es f es d c bes] |
+%25
+       [d c bes a g'8~] [g32 c, d es d c bes a] [c bes a g g'8~] 
+       [g32 bes, c d c bes a g] |
+       as4~ [as32 as g as bes as g as] es'4~ [es32 c b c d c b c] |
+       [fis16 es8 d16] [g16 d8 c16] [a'16 c,8 bes16~] [bes32 d c bes g' bes, a g]
+%28
+       [bes'8-\fermata~ bes32 a g f] [g bes a g fis e d c] [bes d c es d g fis e]
+       [d c bes a bes d bes g] |
+       r16 [e'32 fis fis16.-\prall \[2/3 e64 fis g\]1/1 ] 
+       \type Staff <
+               {       \stemup  
+                       [bes,32 a g fis g32 bes16.~] [bes16 c32 bes a bes c a] [fis8. g16] }
+               {       \stemdown s8 g8 ~ g4 d}
+   >
+}        
+andanteTo = \melodic \relative c{
+%8
+       \clef "bass";
+       [c8 c'] [f, g] [es c] [es g] |
+       [c as] [es f] [g g,]
+       \stemdown \translator Staff = treble r16 [f''16 es d] |
+%10
+       [es8 g] [e c] [f as] [f c] | [d f] [d bes] [es g] [es c] |
+       \stemboth \translator Staff = bass
+       [as c] [f as,] [g c] [es g,] | [f as] [g f] [es g] [f es] |
+%14
+       [d f] [as c,] [b d] [g d] | 
+       [es as,] [f g] c,4~ [c16 d32 es f g a b] |
+       [c8 c'] [bes as] [g bes] [g es] |
+       [as c] [as f] [bes as] [g f] |
+       [e g] [c e,] [f as] [f des] |
+       [bes g] [c c,] [f16 g32 as bes c d e] [f8 es] |
+       [d f] [d bes] [g' bes] [es, g] |
+       [a, fis'] [g g,] [d' a'] [c d,] |
+%22
+       [g a] [bes b] [c d] [es c] |
+       [a g] [d' d,] [g a] [b g] |
+       [c es] [c a] [bes d] [bes g] |
+       [a c] [a fis] [g bes] [g es] |
+%26
+       [c16 d32 es f g as bes] [c16 c, c'8~] [c32 c, d es f g as bes][c16 c, c'8~]|
+       [c c,] [bes bes'] [fis d] [g es] |
+       \type Staff <
+               {       \stemup <g4 e> r <d'2 bes g> |
+                       cis4~ [cis8. cis16] [d8 c16 bes] 
+                       \type Staff <   
+                               { \stemup [a bes c8] }
+                               { \stemdown a4 } >
+               | }
+               {       \slurdown \stemdown cis,4 r d2( | )d1 \slurboth }
+       >
+}
+
+allegroEn = \melodic \relative c''{
+%30
+       [g8 g16 a] [b8 c d es] |
+       [f16 es d es] [f8 g as d,] |
+       [f b, d g,] [g'16 f es d] |
+       es8 c'4 [bes16 as] [g f es d] |
+       c4~ [c16 d e f] [g as bes g] |
+       [e8 des'~] [des16 g, as bes] [as g f e] |
+       [f g as8~] [as16 g f es] [d c d f] |
+%37
+       [es f g8~] [g16 f es d] [c b c es] |
+       [d as' d, c] [d es f g] [ f es d c] |
+       [b g' f es] [d f d c] [b d b a] |
+       [g a b c] [d c b c] [d es f d] |
+       [b c d es] [f as g f] [es d c b] |
+       [c d es c] [a8 c] [f, es'] |
+%43
+       [bes16 c d bes] [g8 bes] [es, d'] |
+       [a16 bes c a] [fis8 a] [d, c'] |
+       [g16 a b g] [es g d g] [cis, bes' a g] |
+       [fis e d e] [fis8 g a bes] |
+       [c16 bes a bes] [c8 d] [es a,] |
+       [c fis,] [a d,] [d'16 c bes a]
+%49
+       [bes a g a] [bes8 c d es] | 
+       [f16 es d c] [bes f' c bes] [as f' bes, as] |
+       [g16 f es f] [g8 a b c] | 
+       [d16 c b a] [g d' as g] [f d' g, f] |
+       [es c' g f] [es f g as] [g c g f] | 
+       [es c' g f] [es f g as] [g c g f]
+%55
+       [e bes' g f] [e f g as] [g bes g f] | 
+       [e bes' g f] [e g bes des] [c bes as g]|
+       [as f' c bes] \stemup [as bes c des] [ c f c bes] | 
+       [as f' c bes] \stemboth [as bes c des] [c f c bes] |
+       [a es' c bes] \stemup [a bes c des] [c es c bes] |
+       [a es' c bes] \stemboth [a c es ges] [f es des c] |
+%61
+       [des8 bes c des es des] | 
+       [c as bes c des c] [bes as bes g as bes] |
+       [e,16 d c d] [e8 f g as] | 
+       [bes16 as g as] [bes8 c] [des g,] |
+       [bes e,] [g c,] [c'16 bes as g]
+%67
+       [as g f8~] [f16 as g f] [es d c bes] | 
+       [g' f es8~] [es16 g f es] [d c b c] |
+       [f es d8~] [d16 f es d] [c b a g] | 
+       [es' f g8~] [g f16 es] [d a' b c] |
+       [d c b c] [d g f es] [d c b a] | 
+       g4~ [g16 a b c] [d es f d]
+%73
+       [b8 as'~] [as16 d, es f] [es d c b] | 
+       c4~ [c16 g' des c] [bes es bes as] |
+       [g as bes c] [des8 bes] g'4~ | 
+       [g8 c,16 bes] [as f' bes, as] [g des' g, f] |
+       [e f g as] [bes8 g] [e'.-\prallprall d32 e] |
+%78
+       [f8 f,16 g] [as8 bes c d] | 
+       [es16 d c d] [es8 f g as] |
+       [b,16 g' d c] \stemup [b c d es] [d g d c] | 
+       [b g' d c] [b c d es] [d g d c] |
+       [b f' d c] [b c d es] [d f d c] | 
+       [b f' d c] [b d f as] [g f es d] |
+%84
+       [es f g es] [c g' f es] [d c bes as] | 
+       \stemboth [g as bes8~] [bes16 c bes as] [g f e d] | 
+       [c g' c, bes] [c d e f] [es g c, bes] |
+       [c g' f e] [f c f g] [as bes c d] | [es d c d] [es8 f16 g] [as8 des,] |
+       [f b,] [d g,] [g'16 f es d] | 
+       \type Staff <
+               { \stemup [es8. c16] c4 ~ [b8.-\prall c16] | c2-\fermata }
+               { \stemdown r8 r16 <a16 es> <g2 d> | <g es> }
+       >
+}
+allegroTo = \melodic \relative c'{
+       \clef bass;
+%30
+       \type Staff <
+               { \stemup <b8 g> r r4 r }
+               { \stemdown g,8 r8 r4 r }
+       >
+       r2. | r2. |     
+       \clef treble; r8 [c16 d] [es8 f] [g as] |
+       [bes16 as g as][bes8 c] [des g,]  
+       [bes e,][g c,][c'16 bes as g] | [as8 f g as][bes as] | 
+       [g es f g as g] | [f es f d es f] | [g g,16 a] [b8 c] [d es] |
+       [f16 es d es][f8 g][as d,] |
+       [f b,][d g,][g'16 f es d] | \clef bass;
+       [es d c8~][c16 es d c][bes a g f] |
+%43
+       [d' c bes8~][bes16 d c bes][a g fis g] |
+       [c bes a8~][a16 c bes a][g fis e d] | [bes'8 d][g, bes][e, cis'] |
+       [d8 d,~][d c16 bes][a g fis e] | d4~ [d16 e fis g][a bes c a]
+%48
+       [fis8 es'~][es16 a, bes c][bes a g fis] |
+       g4 r16 [g' as bes][as g f es] | [d8 f][d bes][c d] |
+       [es es,] r16 [es' f g][f es d c] | [b8 d][b g][a b] |
+       [c c,] r16 [d''16 es f][es8 d] | [c c,] r16 [as' bes c][bes8 as] |
+       [g c,] r16 [d' e f][e8 d] | [c c,] r16 [d e f][e8 c]
+%57
+       [f f,] \stemdown \translator Staff = treble r16 [g'' as bes][as8 g] |
+       [f  \stemboth \translator Staff = bass f,] r16 [des'16 es f][es8 des] |
+       [c f,] \stemdown \translator Staff = treble r16 [g' a bes][a8 g] | 
+       [f \stemdown \translator Staff = bass f,] \stemboth r16 [g a bes][a8 f] |
+       [bes16 c des8~][des16 c bes as][g f g bes] |
+%62
+       [as bes c8~][c16 bes as g][f e f as] | 
+       [g des' g, f][g as bes c][bes as g f] | 
+       [c'8 bes16 as][g c bes as][g f e d] |
+       c4~ [c16 d e f][g as bes g] | 
+       [e8 des'~][des16 g, as bes][as g f e] |
+%67
+       [f g as f][d8 f][bes, as'] | 
+       [es16 f g es][c8 es][as, g'] |
+       [d16 es f d][b8 d][g, f'] | 
+       [c16 d es c][as c g c][fis, es' d c] |
+       [b a g a][b8 c d es] | 
+       [f16 es d es][f8 g as d,] |
+%73
+       [f b,][d g,][g'16 f es d] | 
+       [es d c d][es8 f g as] |
+       [bes16 as g f][es bes' f es][des bes' es, des] |
+       [c bes as bes][c8 d e f] | 
+       [g16 f e d][c g' des c][bes g' c, bes] |
+       [as f' as, g][f c' des g,][a es' f b,]
+%79
+       [c f es d][c g' as d,][es b' c f,] | 
+       [g8 g,] \stemdown \translator Staff = treble r16 [a'' b c][b8 a] |
+       [g \translator Staff = bass g,] \translator Staff = treble
+               r16 [es' f g][f8 es] | 
+       [d \stemboth \translator Staff = bass g,] r16 [a b c][b8 a] |
+       [g8 g,] \stemdown \translator Staff = treble r8 [g''16 f][es d c b] |
+       [c8 \stemboth \translator Staff = bass c,16 d][es8 f g as] | 
+       [bes16 as g as][bes8 c des g,] |
+%86
+       [bes e,][g c,][c'16 bes as g] | as4~ [as16 bes as g][f g as f] |
+       [g f es d][c bes as g][f f' e f] | [as f e f][b, f' es d][es g c, es] |
+       [fis,8. fis'16] g4 g, | c,2-\fermata
+}
+a4 = \paper{
+%      linewidth= 80.\mm;
+       Staff = \translator {
+               \type "Engraver_group_engraver";
+               defaultclef = violin;
+               \consists "Bar_engraver";
+               \consists "Clef_engraver";
+               \consists "Key_engraver";
+%              \consists "Meter_engraver";
+               \consists "Local_key_engraver";
+               \consists "Staff_sym_engraver";
+               \consists "Collision_engraver";
+               \consists "Rest_collision_engraver";
+               \consists "Bar_column_engraver";
+               \consists "Bar_number_engraver";
+               \consists "Separating_line_group_engraver";
+%              \consists "Line_group_engraver";
+               \accepts "Voice";
+               \accepts "Staff";
+               \accepts "GrandStaff";
+       }
+}
+\score {
+     \type GrandStaff < 
+      \type Staff = treble < 
+        \global 
+        { \hoyreOpp \andanteEn \allegroEn }
+        \hoyreNed
+      >
+      \type Staff = bass <
+        \global
+        { \venstreOpp \andanteTo \allegroTo }
+       \venstreNed
+      >
+    >
+
+  \paper {
+%      \a4
+%    gourlay_maxmeasures =5.;
+%    castingalgorithm = \Wordwrap;
+
+  }
+}
+
+% EOF
index c5f8a88257f4501c50f4fdd7ffabd836d57981e5..c7e99a35d2deb5ae4d5d7e31e06efe7bd9b02d94 100644 (file)
@@ -2,7 +2,7 @@
 
 depth = ../..
 
-SUBDIRS = Petites-Preludes Solo-Cello-Suites 
+SUBDIRS = Petites-Preludes Solo-Cello-Suites Cembalo-Partitas
 EXTRA_DIST_FILES=
 
 
index ff67a5f0d94d64521520304cd0aaf19bae33db03..1a6f8f5b8c6b972dd05557a272a3a1c65b6fd40f 100644 (file)
@@ -3,6 +3,7 @@ filename =       "standchen.ly";
 title    = "St\\\"andchen";
 subtitle = "(Serenade)\\\\``Leise flehen meine Lieder''";
 opus =  "D. 957 No. 4";
+date = "August 1828";
 composer =      "Franz Schubert (1797-1828)";
 poet=   "Text by Ludwig Rellstab (1799-1860)";
 enteredby =     "JCN";
@@ -12,6 +13,7 @@ copyright =    "public domain";
 %{
  Tested Features@ multivoice accents lyrics chords piano music
 multiple \paper{}s in one \score 
+Note: Original key F.
 %}
 
 \version "1.0.1";
@@ -20,6 +22,7 @@ $vocal_verse1 = \melodic\relative c{
        % ugh: treble/bass
 %      \clef treble;
 %      \clef violin;
+       \property Voice.dynamicdir=1
        [/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 |
@@ -37,10 +40,13 @@ $vocal_verse1 = \melodic\relative c{
        g8. b16 es4. d8 |
        c8. g16 es4. c8 |
        % [/3 as\grace( bes ] )
+%      \tiny  [as'16*1/16 bes16*1/16 ] 
+%      \normalsize \[/3 [as8 g8] as8 \]31/32 c4. as8 |
        [/3 as'8( )g] as \] c4. as8 |
        g2. |
        %[/3 f\grace( g] )
        [/3 f8( )e] f \] as4. f8 |
+       %\tiny \[/3 [f`16*1/16 g16*1/16] \normalsize
        es!2. |
        g8. b16 es4. d8 |
        c8. g16 e4. c8 |
@@ -53,8 +59,9 @@ $vocal_verse1 = \melodic\relative c{
 }
 
 $vocal_through = \melodic\relative c{
-       g''8. g16 b8. b16 d8. d,16 |
-       c'4 b r |
+       \property Voice.dynamicdir=1
+       g''8. g16 b8. b16 d8. d16 |
+       c4 b r |
        g4. b8 d8. c16 |
        b2 r4 |
        e4. d8 [/3 d( )c] b \] |
@@ -71,7 +78,7 @@ $vocal_through = \melodic\relative c{
        c4 r c |
        as2. |
        g |
-       es2 r4 |
+       e2 r4 |
 }
 
 $lyric_verse1 = \lyric{
@@ -85,7 +92,7 @@ $lyric_verse1 = \lyric{
 % 11
        \[/3 In4 den8 \] stil-4. len8 |
        \[/3 Hain4 her-8 \] nie-4. der8 |
-       Lieb4. chen8 \[/3 komm4 zu8 \] |
+       Lieb-4. chen,8 \[/3 komm4 zu8 \] |
        mir!2 _4 |
        _4 _ _ |
        _ _ _ |
@@ -97,7 +104,7 @@ $lyric_verse1 = \lyric{
        \[/3 In4 des8 \] Mon-4. des8 |
        Licht;2. |
 % 23 
-       Des8. Ver-16 r\"a-4. ters8 |
+       Des8. Ver-16 r\"a-4. thers8 |
        feind-8. lich16 Lau-4. schen8 |
        \[/3 F\"urch-4 te8 \] Hol-4. de8 |
        nicht2. |
@@ -109,14 +116,14 @@ $lyric_verse2 = \lyric{
 % 5
        \[/3 H\"orst4 die8 \] Nach-4. ti-8 
        \[/3 gal-4 len8 \] schla-4 gen?8 _8
-       Ach!4. sie8 \[/3 fleh-4 en8 \] 
-       dich2 _4
+       ach!4. sie8 \[/3 fleh-4 en8 \] 
+       dich,2 _4
        _4 _ _ 
        _4_ _
 
 % 11
        \[/3 Mit4 der8 \] T\"o-4. ne8
-       \[/3 s\"u\ss-4 en8 \] Kla-4. gen8
+       \[/3 s\"u-4 "\ss{}en"8 \] Kla-4. gen8
        Fleh-4. en8 \[/3 sie4 f\"ur8 \]
        mich.2 _4
        _4_ _ 
@@ -126,16 +133,16 @@ $lyric_verse2 = \lyric{
        Sie-8. ver-16 stehn4. des8
        Bus-8. ens16 Seh-4. nen8
        \[/3 Ken-4 nen8 \] Lieb-4. es-8 
-       schmerz2.
+       schmerz,2.
        \[/3 Ken-4 nen8 \] Lieb-4. es-8 
-       schmerz2.
+       schmerz.2.
 
 % 23
        R\"uh-8. ren16 mit4. den8 
        Sil-8. ber-16 t\"o-4. nen8
-       \[/3 Jed-4 es8 \] wei-4. che8 
-       Herz.2.
-       \[/3 Jed-4 es8 \] wei-4. che8 
+       \[/3 jed-4 es8 \] wei-4. che8 
+       Herz,2.
+       \[/3 jed-4 es8 \] wei-4. che8 
        Herz.2.
 }
 
@@ -163,7 +170,7 @@ $treble_intro = \melodic\relative c{
        \clef violin;
        % ugh: id like to type this!
        %r8\pp [<g'-. c-.> <c-. es-.> <g-. c-.> <c-. es-.> <g-. c-.>] |
-       r8\pp <[g'-. c-.> <c-. es-.> <g-. c-.> <c-. es-.> <g-. c-.]> |
+       r8^"\bf m\\\"assig"\pp <[g'-. c-.> <c-. es-.> <g-. c-.> <c-. es-.> <g-. c-.]> |
        r8 <[as-. c-.> <c-. es-.> <as-. c-.> <c-. es-.> <as-. c-.]> |
        r8 <[as-. c-.> <c-. d-.> <as-. c-.> <c-. d-.> <as-. c-.]> |
        r8 <[g-. b-.> <b-. d-.> <g-. b-.> <b-. d-.> <g-. b-.]> |
@@ -177,15 +184,15 @@ $treble_verse1 = \melodic\relative c{
        r8 <[f c'> <c' d> <f, c'> <c' d> <f, c']> |
        r8 <[f g b> <g b d> <f g b> <g b d> <f g b]> |
        r8 <[es g c> <g c es> <es g c> <g c es> <es g c]> |
-       <g''4.( b,> <)f8 d> <[/3 f d> <es c> <d b]1/1> |
+       <g''4.( b,> <)f8 d> <[/3 f( d> <es c> <)d b]1/1> |
        %10
        <c2. es> |
        r8 <[g, c> <c es> <g c> <c es> <g c]> |
        r8 <[f c'> <c' d> <f, c'> <c' d> <f, c']> |
-       r8 <[f as bes> <as bes d> <f g bes> <g bes d> <f g bes]> |
+       r8 <[f as bes> <as bes d> <f g bes> <as bes d> <f g bes]> |
        r8 <[es g bes> <g bes es> <es g bes> <g bes es]> 
-       <{ es''( | )bes4. as8}{ c( | )d,4.( )f8 } > 
-       < [/3 f as> <es g> <d f]1/1> |
+       <{ es'~ | d4. ~ f8}{ c'~ | bes4. ~ as8 } > 
+       < [/3 f( as> <es g> <)d f]1/1> |
        %16
        <es2. g> |
        r8 <[f, g> <g b> <f g> <g b> <f g]> |
@@ -194,67 +201,67 @@ $treble_verse1 = \melodic\relative c{
        %20
        r8 <[es g bes> <g bes es> <es g bes> <g bes es> <es g bes]> |
        % [/3 as\grace( bes )
-       [/3 as'8(( g )as]1/1 c4.-> ) as8 |
+       [/3 as'8( g as]1/1 c4.-> ) as8 |
        g2. |
        r8 <[f, g> <g b> <f g> <g b> <f g]> |
        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 \]/1 a4. f8 } > |
-       <e2 e'> r4 |
+       <{[/3 f'8\f( e f]1/1 a4.-> )f8 } {\[/3 f' e f \]/1 a4. f8 } > |
 }
 
-$treble_eentje = \melodic\relative c{
-       <f'2\mf as!(> <[as8.->( c> <)f16 )as]> |
+$treble_eentje = \melodic\relative c'{
+       <e2 e'> <e4 g>|
+       <f2\mf as!(> <[as8.->( c> <)f16 )as]> |
        <e4. g> <[e8-. g-.(> <e-. g-.> <e-. )g-.]> |
        <f4. g> <[b,8-. g'-.(> <d-. g-.> <f-. )g-.]> |
-       <e2 g\pp> <e4 g> |
-       <f2\mf a(> <[a8.( c> <)f16 )a]> |
+       <e2 g> <e4\pp g> |
+       <f2 a(> <[a8. c> <f16 )a]> |
        <e4. g> <[e8-. g-.(> <e-. g-.> <e-. )g-.]> |
        <f4. g> <[b,8-. g'-.(> <d-. g-.> <f-. )g-.]> |
        %60
        <e2. g> |
 }
 
-$treble_through = \melodic\relative c{
+$treble_through = \melodic\relative c'{
+       <e2. e'> |
        %61
        R2. |
-       % lily: 221: warning: Junking request: Span_dynamic_req: the \>
-       <[g'8.\< g'> <g16 g'> <b8. b'> <\! b16\> b'16> <d8. d'> <d16 d']> |
-       % lily: 222: warning: Cant find cresc to end.
+       <[g,8.\< g'> <g16 g'> <b8. b'> <\! b16\> b'16> <d8. d'> <d16 d']> |
        < { c4( )b } { c'4( )b } > \!r |
 % ugh
 %      <g4. g> <b8 b> <[d8.-> d->> c16] |
-       <g4. g'> <b8 b'> [d'8.-> c16] |
+       <g4. g'> <b8 b'> <[ d'8.-> d,-> > c16] |
 % ugh ugh: connecting chords
        %65
-       < { d,2.\f( )a'2} { e2. ~ e2 } { b'2. c,2 }> r4 |
-       < 
+       < { d,2.\f a'2} { e2. ~ e2 } { b'2. c,2 }> r4 |
+       \type Staff 
                {
                        \voiceone 
-                       [a8. b16] c4->( )a8 r |
-                       [a8. b16] c4->( )a8 r |
+                       [a8. b16] c4-> ~ a8 r |
+                       [a8. b16] c4-> ~ a8 r |
                }
                { 
                        \voicetwo 
-                       <d,4\f f> <d2 f> |
-                       <c!4\f es> <c2 es> |
+                       <d,4 f> <d2 f> |
+                       <c!4 es> <c2 es> |
                }
        >
        % 4 bars copied from end verse1
-       r8 <[f,\p a c> <a c f> <f a c> <a c f> <f a c]> |
+       r8 <[f, 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 \]/1 a4. f8 } > |
-       <e'2 e'> r4 |
-       <es2 es'> r4 |
-       <d2 d'> r4 |
+       <{[/3 f'8\f( e f]1/1 a4.-> )f8 } {\[/3 f' e f \]/1 a4. f8 } > |
+       <e2 e'> r4 |
+       <es!2 es'! > r4 |
+       \property Voice . textstyle =  "italic"
+       <d2_"decresc." d'> r4 |
        %75
        <b2 b'> r4 |
        <c2 c'> <e4\pp g> |
 
        % four copied from begin eentje
-       <f2\mf as!(> <[as8.->( c> <)f16 )as]> |
+       <f2 as!(> <[as8.-> c> <f16 )as]> |
        <e4. g> <[e8-. g-.(> <e-. g-.> <e-. )g-.]> |
        <f4. g> <[b,8-. g'-.(> <d-. g-.> <f-. )g-.]> |
        %80
@@ -266,6 +273,8 @@ $treble_through = \melodic\relative c{
 
 $bass_intro = \melodic\relative c{
        \clef bass;
+       \property Voice.dynamicdir=1
+%1
        <c,2 c'> r4 |
        <as2 as'> r4 |
        <f2 f'> r4 |
@@ -274,18 +283,22 @@ $bass_intro = \melodic\relative c{
 
 $bass_verse1 = \melodic\relative c{
 %      \clef bass;
+       \property Voice.dynamicdir=1
+%5
        <c,2 c'> r4 |
        <as2 as'> r4 |
        <g2 g'> r4 |
        <c2 c'> r4 |
        <g8 g'> <[g'' d'> <d' f> <g, d'> <d' f> <g, d']> |
+%10
        <c,,8 c'> <[g'' c> <c es> <g c> <c es> <g c]> |
        <c,,2 c'> r4 |
        <as2 as'> r4 |
        <bes2 bes'> r4 |
        <es,2 es'> r4 |
-       bes'8 <[bes' f'> <f' bes> <bes, f'> <f' bes> <bes, f']> |
-       es,,8 <[bes'' es> <es g> <bes es> <es g> <bes es]> |
+%15
+       bes'8 <[bes' f'> <f' as> <bes, f'> <f' as> <bes, f']> |
+       es,8 <[bes' es> <es g> <bes es> <es g> <bes es]> |
        <g,2 g'> r4 |
        <c2 c'> r4 |
        <as2 as'> r4 |
@@ -301,6 +314,7 @@ $bass_verse1 = \melodic\relative c{
 }
 
 $bass_eentje = \melodic\relative c{
+       \property Voice.dynamicdir=1
        <c,8 c'> <[c' f as!> <f as c> <c f as> <f as c> <c f as]> |
        c,8 <[c' e g> <e g c> <c e g> <e g c> <c e g]> |
        <g,8 g'> <[d'' g> <g b> <d g> <g b> <d g]> |
@@ -312,23 +326,24 @@ $bass_eentje = \melodic\relative c{
 }
 
 $bass_through = \melodic\relative c{
+       \property Voice.dynamicdir=1
        %61
-       <g,8 g'> <[g' b d> <b d f> <g b d> <as!-> b-> d->> <b d, f]> |
-       <g,8 g'> <[g' d'> <d' f> <g, d'> <as-> b'-> d,->> <b d f]> |
+       <g,8^"cresc." g'> <[g' b d> <b d f> <g b d> <as!-> b-> d->> <b d f]> |
+       <g,8 g'> <[g' d'> <d' f> <g, d'> <as-> b-> d->> <b d f]> |
        % copied
-       <g,8 g'> <[g' d'> <d' f> <g, d'> <as-> b'-> d,->> <b d f]> |
+       <g,8 g'> <[g' d'> <d' f> <g, d'> <as-> b-> d->> <b d f]> |
        <g,8 g'> <[g' d' e> <d' f> <g, d'> <gis-> b-> d->> <b d f]> |
        %65
-       <gis,8 gis'> <[d'' e> <e b'> <d e> <e b'> <d e]> |
+       <gis,8 gis'> <[d''\> e> <e b'> <d e> <e b'> <d\! e]> |
        <a,8 a'> <[c' e> <e a> <c e> <e a> <c e]> |
        <a,8 a'> <[a' d f> <d f a> <a d f> <d f a> <a d f]> |
        <a,8 a'> <[a' c e> <c e a> <a c e> <c e a> <a c e]> |
        % 4 bars copied from end verse1
-       <f,2 f'> r4 |
+       <f,2\p f'> r4 |
        %70
        <c'2 c'> r4 |
        <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' 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]> |
@@ -337,11 +352,10 @@ $bass_through = \melodic\relative c{
        c,8 <[c' e> <e g> <c e> <e g> <c e]> |
        c,8 <[c' f> <f as> <c f> <f as> <c f]> |
        c,8 <[c' e> <e g> <c e> <e g> <c e]> |
-       g,8 <[g' d'> <d' f> <g, d'> <d' f> <g, d']> |
-       % copied from two bars back
+       <g,8 g'> <[g' d'> <d' f> <g, d'> <d' f> <g, d']> |
        %80
        c,8 <[c' e> <e g> <c e> <e g> <c e]> |
-       c,8 <[c' e> <e g> <c e> <e g> <c e]> |
+       c,8 <[c' g> <e c> <c g> <e c> <c g]> |
        <c,2._\fermata g' c> |
 }
                
@@ -379,6 +393,7 @@ $lyric_staff = \type Lyrics = lyric<
 >
                
 vocals = \melodic{
+       \property Voice.dynamicdir=UP
        \skip 4 * 12; 
        \$vocal_verse1 
        \skip 4 * 24; 
@@ -426,7 +441,8 @@ $grand_staff = \type GrandStaff<
 \score{
        % Transpose as you like for your voice
        % Range untransposed is c' to f'' (for tenors and sopranos)
-       % \transpose a gives a' to d''
+       % To get original, \transpose d'
+       % \transpose a gives a' to d'' (for basses, who sing an octave down)
        <
                { \melodic \transpose a { \$vocal_staff } }
                \$lyric_staff
@@ -437,6 +453,3 @@ $grand_staff = \type GrandStaff<
                \tempo 4 = 54;
        }
 }
-
-
-
index bd8c549ae3b47db98f1736ab55452c65f68c5387..7f801b7a18c163071ff58cef99734a9a97220ade 100644 (file)
@@ -1,7 +1,20 @@
 #!@PYTHON@
 
+"""
+=======================================================================
+LilyPond to dvi converter
+
+Features include Title information, paper size specification, and image
+orientation.  
+
+Usage: ly2dvi.py [OPTION]... [FILE]...
+Input: LilyPond source or LilyPond generated TeX files
+Output: DVI file
+=======================================================================
+"""
+
 name = 'ly2dvi'
-version = '0.0.2'
+version = '0.0.4'
 
 import sys
 import os
@@ -11,12 +24,42 @@ import string
 import time
 import glob
 
+
 class Input:
+    """
+    This class handles all ly2dvi.py input file methods
+
+    Public methods:
+    
+    __init__()  Constructor
+    open(file)  Open a .ly file or .tex file using lilyinclude path
+    close()     Close current file
+    type()      Determine file type .ly (input) or .tex (output)
+    setVars()   Set title definitions found in .tex (output) file
+    """
+
+    #
+    # Constructors
+    #
 
     def __init__(this):
        this.__fd = None 
 
+    #
+    # open
+    #
     def open(this,file):
+        """
+        open file and set private class variable __fd.  The search
+        sequence is: current directory followed by the directories
+        found in include property list.  Each directory is searched
+        for file, file.ly, and file.fly.
+        
+        input:  file   filename
+        output: void
+        error:  ExitNotFound Exception
+        """
+
         for i in [''] + Props.get('include')[0:]:
             ifile = os.path.join(i,file)
             for j in ['','.ly','.fly']:
@@ -28,21 +71,57 @@ class Input:
                     pass
         sys.exit('ExitNotFound', file)
 
+
+    #
+    # close
+    #
     def close(this):
+        """
+        close file object __fd
+        
+        input:  void
+        output: void
+        error:  None
+        """
         this.__fd.close()
 
+
+    #
+    # type
+    #
     def type(this):
+        """
+        Determine input file type.  LilyPond source is 'input' type
+        and LilyPond generated TeX file is 'output' type
+
+        input:  void
+        output: 'input' | 'output'
+        error:  None
+        """
+
         firstline = this.__fd.readline()
         this.__fd.seek(0)
         if  re.match('% Creator: GNU LilyPond [0-9]+[.0-9]+',firstline ):
             return 'output'
         else:
             return 'source'
-#
-# Scan file for variable settings
-#
+
+
+    #
+    # setVars
+    #
     def setVars(this): 
-       """Scan source file for variable settings"""
+        """
+        Search for properties in the current input file and set the
+        appropriate values.  The supported properties names are in
+        local variable varTable along with the property list
+        titledefs.
+
+        input:  void
+        output: None
+        error:  None
+        """
+
         varTable = [
             #   regexp              set method
             #   ------              ----------
@@ -56,9 +135,7 @@ class Input:
             ]
 
         titles={}
-        line='prime the pump' # ugh
-        while line:
-            line=this.__fd.readline()
+        for line in this.__fd.readlines():
             m=re.match('\\\\def\\\\mudela([\w]+){(.*)}',line)
             if m:
                 for var in varTable:
@@ -72,18 +149,77 @@ class Input:
         Props.setTitles(titles,'file')
         this.__fd.seek(0)
 
-class TeXOutput:
+\f
 
+class TeXOutput:
+    """
+    This class handles all ly2dvi.py output file methods
+
+    private methods:
+     __mudelaDefs(opt)  Send title info to output file
+
+    Public methods:
+    __init__()  Constructor
+    write(str)  Write a string to output file 
+    start(file) Start the latex file
+    next()      Process next output file
+    end()       Finish latex file and run latex 
+    """
+
+    #
+    # constructor
+    #
     def __init__(this):
        this.__fd = None 
        this.__base = ''
        this.__outfile = ''
 
+    #
+    # __medelaDefs
+    #
+    def __mudelaDefs(this,opt):
+        """
+        Write titles to output
+
+        input:  opt   Supports header and subheader output
+        output: None
+        error:  None
+        """
+
+        titles = Props.get('titles')
+        for key in titles.keys():
+            this.write('%s\\mudela%s{%s}%%\n' % (opt,key,titles[key]))
+
+    #
+    # write
+    #
     def write(this,str):
+        """
+        Write str to current output file
+
+        input:  str  String to write
+        output: None
+        error:  None
+        """
+        
         this.__fd.write(str)
 
+    #
+    # start
+    #
     def start(this,file):
-        """Start the latex file"""
+        """
+        Start LaTeX file.  Calculates the horizontal and vertical
+        margin using pagewidth, pageheight, linewidth, and textheight.
+        Creates temporary output filename and opens it for write.
+        Sends the LaTeX header information to output.  Lastly sends
+        the title information to output.
+
+        input:  file  output file name 
+        output: None
+        error:  None
+        """
+
         now=time.asctime(time.localtime(time.time()))
         linewidth = Props.get('linewidth')
         textheight = Props.get('textheight')
@@ -137,7 +273,20 @@ class TeXOutput:
 \\makelilytitle
 """) 
 
+    #
+    # next
+    #
     def next(this):
+        """
+        Write LaTeX subheader information to support more than one
+        score in a document.  Lastly send current title information to
+        output.
+
+        input:  None
+        output: None
+        error:  None
+        """
+
         this.write("""\
 \\def\\theopus{}%
 \\def\\thepiece{}%
@@ -151,12 +300,19 @@ class TeXOutput:
 \\makelilypiecetitle
 """)
 
-    def __mudelaDefs(this,opt):
-        titles = Props.get('titles')
-        for key in titles.keys():
-            this.write('%s\\mudela%s{%s}%%\n' % (opt,key,titles[key]))
 
+    #
+    # end
+    #
     def end(this):
+        """
+        Close output file and run latex on it.
+
+        input:  None
+        output: None
+        error:  ExitBadLatex Exception
+        """
+
         outfile=this.__base + '.dvi'
         if Props.get('output') != '':
             outfile = os.path.join(Props.get('output'), outfile )
@@ -177,43 +333,57 @@ class TeXOutput:
         if os.path.isfile(outfile):
             os.remove(outfile)
         os.rename(this.__base + '.' + str(os.getpid()) + '.dvi', outfile)
+        sys.stderr.write( '\n' + program_id() + ': dvi file name is %s\n\n'
+                   % (outfile))
+
+        if Props.get('postscript'):
+            psoutfile=this.__base + '.ps'
+            if Props.get('output') != '':
+                psoutfile = os.path.join(Props.get('output'), psoutfile )
+            stat = os.system('dvips -o %s %s 2>&1' % (psoutfile,outfile))
+            if stat:
+                sys.exit('ExitBadPostscript')
+            
 
-class Properties:
-
-    def __set(this,var,value,requester):
-        if this.__overrideTable[requester] < this.__data[var][1]:
-            return 0
-        else:
-            this.__data[var] = [value, this.__overrideTable[requester]]
-
-    def get(this,var):
-        if var == 'include' or var == 'lilyOutputFiles':
-            return this.__data[var][0][0:]  # return a copy not a ref
-        else:
-            return this.__data[var][0]
+\f
 
-    def get_texfile_path (this, var):
-           path =''
-           cmd =('kpsewhich tex %s 2>&1' % var)
-           pipe = os.popen (cmd, 'r')
-           path = pipe.readline ()[:-1] # chop off \n
-           if pipe.close():
-                   path = os.path.join(this.get('root'), 'texmf', 'tex', 'lilypond', var)
+class Properties:
+    """
+    This class handles all ly2dvi.py property manipulation
 
-           fd = open(path, 'r')
-            return fd
+    Public methods:
+    
+    __init__()  Constructor
+    set<property> methods
+    """
 
     def __init__(this):
+
+        #
+        # Following is the order of priority for property assignment.  The
+        # list is organized from lowest to highest priority.  Each
+        # assignment is overridden by the next requester in the list.
+        #
+        # Requester     Description
+        # ---------     -----------
+        # init          Initial default values
+        # file          The values found in the lilypond generated TeX files
+        # environment   Envrionment variables LILYINCLUDE, LILYPONDPREFIX
+        # rcfile        $LILYPONDPREFIX/share/lilypond/.lilyrc
+        # rcfile        $HOME/.lilyrc
+        # rcfile        ./.lilyrc
+        # commandline   command line arguments
+        # 
         this.__overrideTable = {
             'init'        : 0,
-            'environment' : 1,
-            'rcfile'      : 2,
-            'file'        : 3,
+            'file'        : 1,
+            'environment' : 2,
+            'rcfile'      : 3,
             'commandline' : 4,
             'program'     : 5
             }
 
-        this.__roverrideTable = {} # reverse lookup
+        this.__roverrideTable = {} # reverse lookup used for debug
         for i in this.__overrideTable.items():
             this.__roverrideTable[i[1]]=i[0]
         
@@ -240,20 +410,35 @@ class Properties:
             'titledefs'    :  [[], this.__overrideTable['init']],
             'titles'       :  [{}, this.__overrideTable['init']],
             'lilyOutputFiles' :  [[], this.__overrideTable['init']],
+            'postscript'   :  [0, this.__overrideTable['init']],
             }
 
+        #
+        # Try to set root and HOME first before calling rcfile
+        #
+        if os.environ.has_key('LILYPONDPREFIX'):
+            this.setRoot(os.environ['LILYPONDPREFIX'], 'environment')
+        else:
+            p=os.path.split(sys.argv[0])
+            p=os.path.split(p[0])
+            this.setRoot(p[0],'init')
+
+        if not os.environ.has_key('HOME'):
+            if os.environ.has_key('HOMEDRIVE') and \
+                 os.environ.has_key('HOMEPATH'):
+                os.environ['HOME'] = os.environ['HOMEDRIVE'] + \
+                                     os.environ['HOMEPATH']
+            else:
+                os.environ['HOME'] = os.curdir
+
+        this.rcfile() # Read initialization file(s)
+
         if os.environ.has_key('LILYINCLUDE'):
             tmp=this.get('include')
             for s in string.split(os.environ['LILYINCLUDE'],os.pathsep):
                 tmp.append(s)
             this.__set('include', tmp, 'environment')    
 
-        if os.environ.has_key('LILYPOND'):
-            this.__set('root',os.environ['LILYPOND'], 'environment')
-        else:
-            p=os.path.split(sys.argv[0])
-            p=os.path.split(p[0])
-            this.__set('root',p[0],'init')
 
         t=''
        if os.environ.has_key ('TEXINPUTS'):
@@ -261,59 +446,117 @@ class Properties:
         os.environ['TEXINPUTS'] = os.path.join(this.get('root'), 'texmf',
                                               'tex', 'lilypond' ) + t
 
+        t=''
+       if os.environ.has_key ('MFINPUTS'):
+               t = os.pathsep + os.environ['MFINPUTS']
+        os.environ['MFINPUTS'] = os.path.join(this.get('root'), 'texmf',
+                                              'mf', 'public', 'lilypond' ) + t
+
         if os.environ.has_key('TMP'):
             this.__set('tmp',os.environ['TMP'],'environment')
 
-        if not os.environ.has_key('HOME'):
-            if os.environ.has_key('HOMEDRIVE') and \
-                 os.environ.has_key('HOMEPATH'):
-                os.environ['HOME'] = os.environ['HOMEDRIVE'] + \
-                                     os.environ['HOMEPATH']
-            else:
-                os.environ['HOME'] = os.curdir
         
-
-       fd =this.get_texfile_path ('titledefs.tex')
+       fd=this.get_texfile_path ('titledefs.tex')
         mudefs=[]    
-       line='prime the pump' # ugh
-        while line:
-            line=fd.readline()
+
+        for line in fd.readlines():
             m=re.match('\\\\newcommand\*{\\\\mudela([\w]+)}',line)
             if m:
                 mudefs.append(m.group(1))
        fd.close
         this.__set('titledefs', mudefs, 'init')
 
-#
-# Read rc file
-#
+    #
+    # __set
+    #
+    def __set(this,var,value,requester):
+        """
+        All of the set methods call this to set a property.  If the value
+        was last set by a requestor of lesser priority the new value is
+        assigned, else the old value has priority and is unchanged.
+        """
+
+        if this.__overrideTable[requester] < this.__data[var][1]:
+            return 0
+        else:
+            this.__data[var] = [value, this.__overrideTable[requester]]
+
+    #
+    # get
+    #
+    def get(this,var):
+        """
+        All of the get methods call this to get a property value.  List
+        variable types are return by value to facilitate an append operation.
+        """
+
+        if var == 'include' or var == 'lilyOutputFiles':
+            return this.__data[var][0][0:]  # return a copy not a ref
+        else:
+            return this.__data[var][0]
+
+    #
+    # get_texfile_path
+    #
+    def get_texfile_path (this, var):
+        """
+        locate and open titledefs.tex file
+        """
+
+        path =''
+        cmd =('kpsewhich tex %s 2>&1' % var)
+        pipe = os.popen (cmd, 'r')
+        path = pipe.readline ()[:-1] # chop off \n
+        if pipe.close():
+            path = os.path.join(this.get('root'), 'texmf', 'tex',
+                                'lilypond', var)
+       fd = open(path, 'r')
+        return fd
+
+
+    #
+    # Read rc file
+    #
     def rcfile(this):
-       """Read RCfile"""
+       """
+        Read initialization file(s)
+        """
         varTable = [
             #   name              set method
             #   ----              ----------
-            ( 'LILYPOND',       this.setInclude ),
+            ( 'DEBUG',          this.setDebug ),
+            ( 'DEPENDENCIES',   this.setDependencies ),
+            ( 'KEEPLILYPOND',   this.setKeeplilypond ),
+            ( 'KEEPLY2DVI',     this.setKeeply2dvi ),
             ( 'LANGUAGE',       this.setLanguage ),
             ( 'LATEXHF',        this.setHeader ),
+            ( 'LILYINCLUDE',    this.setInclude ),
+            ( 'LILYPONDPREFIX', this.setRoot ),
+            ( 'NONUMBER',       this.setNonumber ),
             ( 'ORIENTATION',    this.setOrientation ),
             ( 'OUTPUTDIR',      this.setOutput ),
             ( 'PAPERSIZE',      this.setPaperZize ),
             ( 'PHEIGHT',        this.setTextHeight ),
-            ( 'TMP',            this.setTmp ),
+            ( 'POSTSCRIPT',     this.setPostscript ),
             ( 'PWIDTH',         this.setLineWidth ),
+            ( 'SEPARATE',       this.setSeparate ),
+            ( 'TMP',            this.setTmp ),
             ]
 
+        if ( os.name == 'posix' ):
+            dotFilename='.lilyrc'
+        else: # Windows apps like edit choke on .lilyrc
+            dotFilename='_lilyrc'
+
        for d in [os.path.join(this.get('root'),'share','lilypond'), \
                   os.environ['HOME'], os.curdir ]:
-           file=os.path.join(d,'.lilyrc')
+           file=os.path.join(d,dotFilename)
            try:
                fd = open( file, 'r' )
            except:
                continue
            
-           line='prime the pump' # ugh
-           while line:
-               line=fd.readline()
+            for line in fd.readlines():
                if re.match('#.*',line):
                    continue
                m=re.search('([\w]+)=(.*)',line)
@@ -324,10 +567,14 @@ class Properties:
                             break
            fd.close
 
-#
-# Set paper size
-#
+    #
+    # setPaperZize
+    #
     def setPaperZize(this,size,requester):
+        """
+        Set paper size properties
+        """
+
         paperTable = [
             # regex          width    height      name
             # -----          -----    ------      ----
@@ -373,10 +620,14 @@ class Properties:
         if not found:
             sys.exit('ExitBadPaper',size)
 
-#
-# set Text Height
-#
+    #
+    # setTextHeight
+    #
     def setTextHeight(this,size,requester):
+        """
+        Set textheight property
+        """
+
        m=re.match('([0-9][.0-9]*)(cm|mm|pt|$)',size)
        if m:
            if m.group(2) == 'cm':
@@ -393,10 +644,15 @@ class Properties:
                sys.exit('ExitBadHeight', m.group(2))
        else:           
            sys.exit('ExitBadHeight', size)
-#
-# set Text Width
-#
+
+    #
+    # setLineWidth
+    #
     def setLineWidth(this,size,requester):
+        """
+        Set linewidth propery
+        """
+
        m=re.match('([0-9][.0-9]*)(cm|mm|pt|$)',size)
        if m:
            if m.group(2) == 'cm':
@@ -413,130 +669,204 @@ class Properties:
                sys.exit('ExitBadWidth', m.group(2))
        else:           
            sys.exit('ExitBadWidth', size)
-#
-# Set Orientation
-#
+
+    #
+    # setOrientation
+    #
     def setOrientation(this,orient,requester):
+        """
+        Set orientation property
+        """
+
        if orient == 'landscape' or orient == 'portrait':
            this.__set('orientation', orient, requester )
        else:
            sys.exit('ExitBadOrient', orient)
-#
-# Set Language
-#
+
+    #
+    # setLanguage
+    #
     def setLanguage(this,lang,requester):
+        """
+        Set language property
+        """
+
        this.__set('language', '\\usepackage[%s]{babel}' % (lang), requester )
-#
-# Append Include
-#
+
+    #
+    # setInclude
+    #
     def setInclude(this,inc, requester):
+        """
+        Append an include path
+        """
+
         tmp = this.get('include')
         tmp.append(inc)
         this.__set('include', tmp, requester )
-#
-# Set debug flag
-#
-    def setDebug(this,requester):
-       this.__set('debug',1,requester)
 
-#
-# Clear debug flag
-#
-    def clearDebug(this, requester):
-       this.__set('debug',0,requester)
-#
-# Set Keeplilypond flag
-#
-    def setKeeplilypond(this, requester):      
-       this.__set('keeplilypond',1,requester)
-
-#
-# Clear Keeplilypond flag
-#
-    def clearKeeplilypond(this, requester):    
-       this.__set('keeplilypond',0,requester)
+    #
+    # setDebug
+    #
+    def setDebug(this,value,requester):
+        """
+        Set or Clear debug flag
+        """
 
-#
-# Set Keeply2dvi flag
-#
-    def setKeeply2dvi(this, requester):        
-       this.__set('keeply2dvi',1,requester)
-#
-# Clear Keeply2dvi flag
-#
-    def clearKeeply2dvi(this, requester):      
-       this.__set('keeply2dvi',0,requester)
-#
-# Set No page number flag
-#
-    def setNonumber(this, requester):  
-       this.__set('pagenumber','\\pagestyle{empty}',requester)
-
-#
-# Clear No page number flag
-#
-    def clearNonumber(this, requester):        
-       this.__set('pagenumber','%',requester)
-#
-# Set separate flag
-#
-    def setSeparate(this, requester):  
-       this.__set('separate',1,requester)
-
-#
-# Clear separate flag
-#
-    def clearSeparate(this, requester):        
-       this.__set('separate',0,requester)
+        if int(value) == 1:
+            this.__set('debug',1,requester)
+        else:
+            this.__set('debug',0,requester)
+
+    #
+    # setKeeplilypond
+    #
+    def setKeeplilypond(this, value, requester):       
+        """
+        Set or Clear keeplilypond flag
+        """
+
+        if int(value) == 1:
+            this.__set('keeplilypond',1,requester)
+        else:
+            this.__set('keeplilypond',0,requester)
+
+    #
+    # setKeeply2dvi
+    #
+    def setKeeply2dvi(this, value, requester): 
+        """
+        Set or Clear keeply2dvi flag
+        """
+
+        if int(value) == 1:
+            this.__set('keeply2dvi',1,requester)
+        else:
+            this.__set('keeply2dvi',0,requester)
+
+    #
+    # setNonumber 
+    #
+    def setNonumber(this, value, requester):   
+        """
+        Set nonumber flag
+        """
+
+        if int(value) == 1:
+            this.__set('pagenumber',1,requester)
+        else:
+            this.__set('pagenumber',0,requester)
+
+    #
+    # setSeparate
+    #
+    def setSeparate(this, value, requester):   
+        """
+        Set or Clear separate flag
+        """
+
+        if int(value) == 1:
+            this.__set('separate',1,requester)
+        else:
+            this.__set('separate',0,requester)
 
-#
-# Set output directory name
-#
+    #
+    # Set output directory name
+    #
     def setOutput(this,out,requester):
        this.__set('output',out,requester)
 
-#
-# Set latex header name
-#
+    #
+    # Set latex header name
+    #
     def setHeader(this,head, requester):
        this.__set('header',head,requester)
-#
-# Set Dependencies flag to generate makefile dependencies
-#
+
+    #
+    # Set or Clear Dependencies flag to generate makefile dependencies
+    #
     def setDependencies(this, requester):      
-       this.__set('dependencies',1,requester)
+        """
+        Set or Clear dependencies flag
+        """
 
-#
-# Clear Dependencies flag
-#
-    def clearDependencies(this, requester):    
-       this.__set('dependencies',0,requester)
-#
-# Set tmp directory
-#
+        if int(value) == 1:
+            this.__set('dependencies',1,requester)
+        else:
+            this.__set('dependencies',0,requester)
+
+    #
+    # Set tmp directory
+    #
     def setTmp(this,dir, requester):   
        this.__set('tmp',dir,requester)
-#
-# Set mudela source file name
-#
+
+    #
+    # Set mudela source file name
+    #
     def setFilename(this,file, requester):     
        this.__set('filename',file,requester)
-#
-# Set title commands
-#
+
+    #
+    # Set title commands
+    #
     def setTitles(this,titles, requester):     
        this.__set('titles',titles,requester)
 
-    def addLilyOutputFiles(this,file,requester):
+    #
+    # Set title commands
+    #
+    def addLilyOutputFiles(this,filelist,requester):
+        """
+        Add a to the lily output list
+        """
+
         tmp = this.get('lilyOutputFiles')
-        tmp.append(file)
+        tmp = tmp + filelist
         this.__set('lilyOutputFiles',tmp,requester)
 
+    #
+    # Set/Clear postscript flag
+    #
+    def setPostscript(this,value,requester):
+        """
+        Set postscript flag
+        """
+
+        if int(value) == 1:
+            this.__set('postscript',1,requester)
+        else:
+            this.__set('postscript',0,requester)
+
+    #
+    # Set root
+    #
+    def setRoot(this,path, requester): 
+        """
+        Set lilypond root directory
+        """
+
+        os.environ['LILYPONDPREFIX'] = path
+       this.__set('root',path,requester)
+
+    #
+    # printProps
+    #
     def printProps(this):
+        """
+        Print properties
+        """
+        
         for key in this.__data.keys():
             print "%s <%s>:<%s>" % (key,this.get(key),
                                     this.__roverrideTable[this.__data[key][1]])
 
+\f
+
+#
+# Misc functions
+#
+
 def getLilyopts():
     inc = ''   
     if len(Props.get('include')) > 0: 
@@ -564,11 +894,16 @@ def writeLilylog(contents):
         fd.close()
 
 def getTeXFile(contents):
-    m = re.search('^TeX output to (.+)\.tex', contents,re.M)
-    if m:
-        return ( m.group(1)+'.tex' )
-    else:
+    texfiles=[]
+    for line in string.split(contents,'\n'):
+        m = re.search('^TeX output to (.+)\.\.\.', line)
+        if m:
+            texfiles.append(m.group(1))
+
+    if texfiles == []:
         sys.exit('ExitNoTeXName')
+    else:
+        return texfiles
 
 def program_id ():
     return name + ' ' + version;
@@ -598,6 +933,7 @@ def help ():
         '  -L,--landscape       set landscape orientation\n'
         '  -N,--nonumber        switch off page numbering\n'
         '  -O,--orientation=    set orientation (obsolete - use -L instead)\n'
+        '  -P,--postscript      generate postscript file\n'
         '  -W,--Width=          set paper width (points) (see manual page)\n'
         '  -d,--dependencies    tell lilypond make a dependencies file\n'
         '  -h,--help            this help text\n'
@@ -610,6 +946,11 @@ def help ():
         'files may be (a mix of) input to or output from lilypond(1)\n'
         )
 
+\f
+
+#
+# main
+#
 
 def main():
     """Generate dvi files from lilypond source/output"""
@@ -618,19 +959,19 @@ def main():
     outfile = TeXOutput()
     texInputFiles=[]
 
-    Props.rcfile()
     (options, files) = getopt.getopt (sys.argv[1:],
-                                      'DF:H:I:KLNW:dhkl:o:p:s',
+                                      'DF:H:I:KLNPW:dhkl:o:p:s',
                                       ['debug', 'headers=', 'Height=',
                                        'include=', 'keeplilypond', 'landscape',
                                        'nonumber', 'Width=', 'dependencies',
                                        'help', 'keeply2dvi', 'language=',
-                                       'output=', 'papersize=', 'separate'])
+                                       'output=', 'papersize=', 'separate',
+                                       'postscript'])
     for opt in options:
         o = opt[0]
         a = opt[1]
         if o == '--debug' or o == '-D':
-           Props.setDebug('commandline')
+           Props.setDebug(1,'commandline')
         elif o == '--headers' or o == '-F':
            Props.setHeader(a,'commandline')
         elif o == '--include' or o == '-I':
@@ -638,7 +979,7 @@ def main():
         elif o == '--Height' or o == '-H':
            Props.setTextHeight(a,'commandline')
         elif o == '--keeplilypond' or o == '-K':
-           Props.setKeeplilypond('commandline')
+           Props.setKeeplilypond(1,'commandline')
         elif o == '--landscape' or o == '-L':
            Props.setOrientation('landscape','commandline')
         elif o == '--nonumber' or o == '-N':
@@ -646,12 +987,12 @@ def main():
         elif o == '--Width' or o == '-W':
            Props.setLineWidth(a,'commandline')
         elif o == '--dependencies' or o == '-d':
-           Props.setDependencies('commandline')
+           Props.setDependencies(1,'commandline')
         elif o == '--help' or o == '-h':
             help()
             return 0
         elif o == '--keeply2dvi' or o == '-k':
-           Props.setKeeply2dvi('commandline')
+           Props.setKeeply2dvi(1,'commandline')
         elif o == '--language' or o == '-l':
            Props.setLanguage(a,'commandline')
         elif o == '--output' or o == '-o':
@@ -659,7 +1000,9 @@ def main():
         elif o == '--papersize' or o == '-p':
            Props.setPaperZize(a,'commandline')
         elif o == '--separate' or o == '-s':
-           Props.setSeparate('commandline')
+           Props.setSeparate(1,'commandline')
+        elif o == '--postscript' or o == '-P':
+           Props.setPostscript(1,'commandline')
 
     if len(files):
         for file in files:
@@ -669,15 +1012,19 @@ def main():
             if type == 'source':
                 cmd = 'lilypond %s %s 2>&1' % (getLilyopts(), file)
                 fd = os.popen( cmd , 'r' )
-                log = fd.read()
+                log = ''
+                line=fd.readline()
+                while line:
+                    log = log + line
+                    sys.stderr.write( line )
+                    line=fd.readline()
                 stat = fd.close()
-                print log
                 if stat:
                     sys.exit('ExitBadLily', cmd )
-                texFile=getTeXFile(log)
+                texFiles=getTeXFile(log)
                 writeLilylog(log)
-                Props.addLilyOutputFiles(texFile,'program')
-                texInputFiles.append(texFile)
+                Props.addLilyOutputFiles(texFiles,'program')
+                texInputFiles = texInputFiles + texFiles
             else:
                 texInputFiles.append(file)
 
@@ -686,7 +1033,8 @@ def main():
             infile.open(file)
             infile.setVars() # first pass set variables
             infile.close()
-#            Props.printProps()
+            if Props.get('debug'):
+                Props.printProps()
             if firstfile:
                 outfile.start(file)
             else:
@@ -719,6 +1067,7 @@ ExitTable = {
     'ExitNoTeXName'        : ['hmm, I could not find an output file name', 9 ],
     'ExitBadLily'          : ['Lilypond failed', 10 ],
     'ExitBadLatex'         : ['Latex failed', 11 ],
+    'ExitBadPostscript'    : ['Postscript failed', 12 ],
     'ExitUnknown'          : ['Unknown Exit Code', 20 ],
     }
 
@@ -734,11 +1083,6 @@ def cleanup():
             os.remove(file)
 
 
-
-
-
-
-
 identify()
 Props = Properties()
 
@@ -759,14 +1103,9 @@ except SystemExit, errno:
         sys.stderr.write( '%s: %s: %s\n' % (name, msg[0], errno.args[1]))
     else:
         sys.stderr.write( '%s %s\n' % (name, msg[0]))
+    if Props.get('debug'):
+        Props.printProps()
     cleanup()
     sys.exit(msg[1])
 else:
     cleanup()
-
-    
-
-                                   
-
-
-
index ce491b816e47380d3d2e9bc82aa003f77c97b1f1..6540542663db1564883ed07d3646ab73e67538b8 100644 (file)
@@ -109,7 +109,6 @@ class Tex_output:
                self.file = open (self.output_fn , 'w')
                self.verbatim = 0               
        def open_mudela (self, basename):
-
                self.mudela_basename =basename
                if self.verbatim:
                        self.file.write ('\\begin{verbatim}\n')
@@ -140,17 +139,42 @@ begin_mudela_opts_re = regex.compile ('^ *\\\\begin{mudela}\[\(.*\)\]')
 end_mudela_re = regex.compile ('^ *\\\\end{mudela}')
 section_re = regex.compile ('\\\\section')
 chapter_re = regex.compile ('\\\\chapter')
-
+input_re = regex.compile ('^\\\\input[ \t\n]+\\(.*\\)$')
 
 class Tex_input:
-       def __init__ (self, name, outname):
+       def __init__ (self,name):
+               if regex.search ('\\.[^/\\\\]+',name) == -1:
+                       name = name + '.tex'
+               print 'opening %s' % name
+               self.filename = name
                self.infile = open (name)
+               
+       def get_lines (self):
+               lines = self.infile.readlines ()
+               (retlines, retdeps) = ([],[self.filename])
+               for line in lines:
+                       if input_re.search (line) <> -1:
+                               t = Tex_input (input_re.group (1))
+                               ls =t.get_lines ()
+                               retlines = retlines + ls[0]
+                               retdeps = retdeps + ls[1]
+                       else:
+                               retlines.append (line)
+
+               return (retlines, retdeps)
+
+class Main_tex_input(Tex_input):
+       def __init__ (self, name, outname):
+               
+               Tex_input.__init__ (self, name) # ugh
+
                self.outname = outname
                self.chapter = 0
                self.section = 0
                self.fine_count =0
                self.mudtex = Tex_output (self.outname)
                self.mudela = None
+               self.deps = []
        def set_sections (self, l):
                if section_re.search (l) <> -1:
                        self.section = self.section + 1
@@ -164,8 +188,9 @@ class Tex_input:
 
        def gen_basename (self):
                return '%s/%s-%d.%d.%d' % (outdir, self.outname,self.chapter,self.section,self.fine_count)
+
        def do_it(self):
-               lines = self.infile.readlines ()
+               (lines, self.deps) = self.get_lines ()
                for line in lines:
                        if begin_mudela_re.search (line) <> -1:
                                if begin_mudela_opts_re.search (line) <> -1:
@@ -222,7 +247,9 @@ sys.stderr.write ('This is %s version %s\n' % ('mudela-book', program_version))
 
 outname = ''
 (options, files) = getopt.getopt(
-       sys.argv[1:], 'hd:o:', [ 'outdir=', 'outname=', 'help'])
+       sys.argv[1:], 'hd:o:', [ 'outdir=', 'outname=', 'help', 'dependencies'])
+
+do_deps = 0
 for opt in options:
        o = opt[0]
        a = opt[1]
@@ -232,15 +259,26 @@ for opt in options:
                outdir = a
        if o == '--help' or o == '-h':
                help ()
+       if o == '--dependencies':
+               do_deps = 1
+
+def write_deps (fn, out,  deps):
+       f = open (outdir + fn, 'w')
+       f.write ('%s: %s\n'% (outdir + out + '.dvi', reduce (lambda x,y: x + ' '+ y, deps)))
+       f.close ()
 
 
 for f in files:
-    my_outname = outname
-    if not my_outname:
-       my_outname = regsub.sub ('\\(.*\\)\\.doc', '\\1', f)
+       my_outname = outname
+       if not my_outname:
+               my_outname = regsub.sub ('\\(.*\\)\\.doc', '\\1', f)
 
-    inp = Tex_input (f, my_outname)
-    inp.do_it ()
-       
+       my_depname = my_outname + '.dep'
+
+       inp = Main_tex_input (f, my_outname)
+       inp.do_it ()
+
+       if do_deps:
+               write_deps (my_depname, my_outname, inp.deps)
 
 
index 401749e5757f3edf0b45cd49c5c62bdf247d6f8b..0c2556ca511e7e28478aa05c71cd53c6e9a3dde4 100644 (file)
@@ -55,6 +55,11 @@ if ! make install ; then
     exit 1
 fi
 
+if ! make -C Documentation/man doc ; then
+    echo "make -C documentation/man doc failed"
+    exit 1
+fi
+
 #
 # Post install clean up
 #
@@ -64,12 +69,26 @@ if [ ! -e $CYGWIN_LIB ]; then
     exit 1
 fi
 
-cd $distdir/bin
-cp $CYGWIN_LIB .
-mv ly2dvi32 ly2dvi.py
+#
+# copy cygwin lib into bin
+#
+cp $CYGWIN_LIB $distdir/bin
+
+#
+# Rename ly2dvi32 to ly2dvi.py
+#
+mv $distdir/bin/ly2dvi32 $distdir/bin/ly2dvi.py
+
+#
+# copy man documentation to doc directory
+#
+mkdir $distdir/doc
+cp Documentation/man/out/*.txt $distdir/doc
+mv $distdir/doc/ly2dvi32.txt $distdir/doc/ly2dvi_py.txt
 cd $distdir/..
 $ZIP_CMD $ZIP_FILE $name
 echo "Wrote $ZIP_FILE"
+rm -rf $name
 exit 0