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
--- /dev/null
+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/)
+
+
+
--- /dev/null
+.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
subsect(NEWS) label(news)
This is what the version @TOPLEVEL_VERSION@ brings:
+
verb(
top_of_NEWS
)
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
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
)
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()
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())
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 \]
)
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)
)
+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))
}
)
-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)
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
)
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
)
-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
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
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
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").
+
+)
+
+
+
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.
-(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::
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:
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.
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:::::
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:::::
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::::
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::
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::
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:
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
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
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
-
+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,
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.
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
%{
- 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 }
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 }
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 }
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
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]);
#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;
}
| intastint_list int '*' int {
$$->push ($2); $$->push ($4);
}
- ;
+ | intastint_list int {
+ $$->push ($2); $$->push (1);
+ }
+ ;
/*
1.0.5.jcn1
1.0.5.hwn1
1.0.6
+1.0.6.uu1
+1.0.7
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
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
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
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>
--- /dev/null
+# mutopia/J.S.Bach/Petites-Preludes/Makefile
+
+depth = ../../..
+
+
+LOCALSTEPMAKE_TEMPLATES=mutopia
+
+include $(depth)/make/stepmake.make
--- /dev/null
+\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
depth = ../..
-SUBDIRS = Petites-Preludes Solo-Cello-Suites
+SUBDIRS = Petites-Preludes Solo-Cello-Suites Cembalo-Partitas
EXTRA_DIST_FILES=
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";
%{
Tested Features@ multivoice accents lyrics chords piano music
multiple \paper{}s in one \score
+Note: Original key F.
%}
\version "1.0.1";
% 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 |
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 |
}
$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 \] |
c4 r c |
as2. |
g |
- es2 r4 |
+ e2 r4 |
}
$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 _ _ |
_ _ _ |
\[/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. |
% 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_ _
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.
}
\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-.]> |
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]> |
%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
$bass_intro = \melodic\relative c{
\clef bass;
+ \property Voice.dynamicdir=1
+%1
<c,2 c'> r4 |
<as2 as'> r4 |
<f2 f'> r4 |
$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 |
}
$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]> |
}
$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]> |
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> |
}
>
vocals = \melodic{
+ \property Voice.dynamicdir=UP
\skip 4 * 12;
\$vocal_verse1
\skip 4 * 24;
\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
\tempo 4 = 54;
}
}
-
-
-
#!@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
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']:
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
# ------ ----------
]
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:
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')
\\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{}%
\\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 )
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]
'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'):
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)
break
fd.close
-#
-# Set paper size
-#
+ #
+ # setPaperZize
+ #
def setPaperZize(this,size,requester):
+ """
+ Set paper size properties
+ """
+
paperTable = [
# regex width height name
# ----- ----- ------ ----
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':
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':
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:
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;
' -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'
'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"""
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':
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':
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':
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:
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)
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:
'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 ],
}
os.remove(file)
-
-
-
-
-
identify()
Props = Properties()
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()
-
-
-
-
-
-
-
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')
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
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:
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]
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)
exit 1
fi
+if ! make -C Documentation/man doc ; then
+ echo "make -C documentation/man doc failed"
+ exit 1
+fi
+
#
# Post install clean up
#
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