From 0cf97b5cdceecbba937f43ac827f4065aad5001e Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Mon, 11 Oct 1999 11:47:55 +0200 Subject: [PATCH] release: 1.2.13 --- BUGS | 116 -- CHANGES | 20 +- Documentation/GNUmakefile | 3 +- Documentation/bibliography/GNUmakefile | 4 +- .../bibliography/computer-notation.bib | 2 +- Documentation/faq.texi | 75 +- Documentation/index.texi | 47 +- Documentation/metadoc/GNUmakefile | 55 +- .../{user => metadoc}/regression-test.tely | 0 Documentation/metadoc/test.tely | 24 - Documentation/programs.texi | 279 --- Documentation/topdocs/GNUmakefile | 1 - Documentation/topdocs/INSTALL.texi | 164 +- Documentation/topdocs/README.texi | 64 +- Documentation/topdocs/index.tely | 9 +- Documentation/user/GNUmakefile | 7 +- Documentation/user/bugs.itexi | 24 + Documentation/user/convert-mudela.itexi | 36 + .../user/{glossary.texi => glossary.itexi} | 2 + Documentation/user/invoking.itexi | 101 ++ Documentation/user/lilypond.tely | 128 ++ Documentation/user/moreinfo.itexi | 35 + Documentation/user/properties.itely | 546 ++++++ .../user/{mudela.tely => refman.itely} | 1571 +---------------- Documentation/user/tutorial.itely | 900 ++++++++++ INSTALL.txt | 139 +- README.txt | 31 +- TODO | 7 +- VERSION | 4 +- input/test/staff-size.ly | 4 +- input/test/stem-tremolo.ly | 3 - lily/auto-change-iterator.cc | 4 +- lily/engraver.cc | 7 - lily/include/score-element.hh | 8 - lily/include/word-wrap.hh | 20 - lily/lily-guile.cc | 3 - lily/paper-score.cc | 31 +- lily/repeat-engraver.cc | 13 +- lily/score-element.cc | 59 - lily/word-wrap.cc | 128 -- ly/params.ly | 17 +- make/generic-vars.make | 2 +- make/mudela-rules.make | 12 +- make/out/lilypond.lsm | 8 +- make/out/lilypond.spec | 4 +- make/toplevel.make.in | 9 +- mutopia/F.Schubert/standchen.ly | 14 +- mutopia/N.W.Gade/score.ly | 8 +- scripts/abc2ly.py | 3 +- scripts/mudela-book.py | 185 +- stepmake/bin/ls-latex.py | 111 +- stepmake/stepmake/documentation-vars.make | 2 + stepmake/stepmake/texinfo-rules.make | 1 - .../stepmake/yolily-toplevel-targets.make | 3 +- 54 files changed, 2378 insertions(+), 2675 deletions(-) delete mode 100644 BUGS rename Documentation/{user => metadoc}/regression-test.tely (100%) delete mode 100644 Documentation/metadoc/test.tely create mode 100644 Documentation/user/bugs.itexi create mode 100644 Documentation/user/convert-mudela.itexi rename Documentation/user/{glossary.texi => glossary.itexi} (99%) create mode 100644 Documentation/user/invoking.itexi create mode 100644 Documentation/user/lilypond.tely create mode 100644 Documentation/user/moreinfo.itexi create mode 100644 Documentation/user/properties.itely rename Documentation/user/{mudela.tely => refman.itely} (61%) create mode 100644 Documentation/user/tutorial.itely delete mode 100644 lily/include/word-wrap.hh delete mode 100644 lily/word-wrap.cc diff --git a/BUGS b/BUGS deleted file mode 100644 index 15ed372b4d..0000000000 --- a/BUGS +++ /dev/null @@ -1,116 +0,0 @@ - -This documents serious bugs - -Send bug reports to bug-gnu-music@gnu.org. For help and questions use -help-gnu-music@gnu.org and gnu-music-discuss@gnu.org. Please consult -the faq before mailing your problems. - - - -******** - -[LinuxPPC-R5, egcs-1.1.2-12c] - -Serious egcs-1.1.2-12c (stock LinuxPPC R5) bug on ppc: - - *dest++ = *src++; - -Bug report filed, fixed in egcs-1.1.2-12f or gcc-2.95-0a. -Although we've currently got a workaround in place, the compiler -is buggy; you should upgrade: - - ftp://dev.linuxppc.org/users/fsirl/R5/RPMS/ppc/ - - -[LinuxPPC-R4, egcs-1.0.2] - -All compiling with -O2 is suspect, in particular guile-1.3, and -Lily herself will break. - - -[Linux i386] - -A binary RPM of Guile 1.3 has been distributed from the LilyPond ftp -site. This binary was made in RedHat 5.x, and it will fail if this -RPM is used with RedHat 6.x. - - -[GUILE 1.3.2] - -Guile 1.3.2 is buggy in several respects. Do not use it for LilyPond. - - -[Sparc64/Solaris 2.6, make-3.77] - -GNU make-3.77 is buggy on this platform, upgrade to 3.78.1 or newer. - - -[Sparc64/Solaris 2.6, ld] - -Not yet resolved. - - -[AIX 4.3 ld] - -The following is from the gcc install/SPECIFIC file. - - Some versions of the AIX binder (linker) can fail with a relocation - overflow severe error when the -bbigtoc option is used to link - GCC-produced object files into an executable that overflows the TOC. -A - fix for APAR IX75823 (OVERFLOW DURING LINK WHEN USING GCC AND - -BBIGTOC) is available from IBM Customer Support and from its - [27]service.boulder.ibm.com website as PTF U455193. - - Binutils does not support AIX 4.3 (at least through release 2.9). GNU - as and GNU ld will not work properly and one should not configure GCC - to use those GNU utilities. Use the native AIX tools which do - interoperate with GCC. - -add -Wl,-bbigtoc to USER_LDFLAGS, ie: - - LDFLAGS='-Wl,-bbigtoc' ./configure - - -[All platforms] - -Some bugs may be captured in input/bugs/*y - -[Linux i386, RedHat 5.2 with updates to 6.0] - -Compiling with - - configure --disable-checking --enable-printing --disable-optimise --disable-debugging - -results in core dumps, during parsing of init files. Cause unknown. -Solution: use - - --enable-checking and --enable-optimize - -[Linux libg++ 2.7] - -LilyPond occasionally crashes while parsing the initialisation files. -This is a very obscure bug, and usually entering the commandline -differently "fixes" it. - - lilypond input.ly - -and - - lilypond -I. ./input.ly - -makes a difference - -Typical stacktrace: - - SIGSEGV - __libc_malloc (bytes=16384) - ?? () - yyFlexLexer::yy_create_buffer () - Includable_lexer::new_input (this=0x8209a00, s={strh_ = { - : - -This behaviour has been observed with machines that have old libg++ -versions (LinuxPPC feb '98, RedHat 4.x). - - diff --git a/CHANGES b/CHANGES index 8d88e61cef..8acd8145cb 100644 --- a/CHANGES +++ b/CHANGES @@ -1,10 +1,22 @@ -pl 12.jcn2 - - smobs +12.jcn1 + - auto-knees, input/test/auto-knee.ly +pl 12.rrr2 + - voltaSpannerDuration may be a rational + - .ly files corrected, Voice.dynamicDir to Voice.dynamicDirection -pl 12.jcn1 - - auto-knees, input/test/auto-knee.ly +pl 12.rrr1 + - key (K:) with clef, bug fix for abc2ly + - voltaSpannerDuration code added to lilypond +pl 12.hwn1 + - junked wordwrap + - bf: use position (not pitch) for autochange + - mudela-book fixes: --dependencies, --dep-prefix + - mudela.tely more updates. Now absorbed LilyPond manpage. + - BUGS now in INSTALL.texi + +******* pl 11.uu1 - changed debug init code. diff --git a/Documentation/GNUmakefile b/Documentation/GNUmakefile index 74083082de..d900ff88fc 100644 --- a/Documentation/GNUmakefile +++ b/Documentation/GNUmakefile @@ -6,7 +6,7 @@ NAME = documentation SUBDIRS= user metadoc bibliography pictures topdocs ntweb STEPMAKE_TEMPLATES=documentation texinfo -README_TOP_FILES=NEWS DEDICATION TODO AIMS +README_TOP_FILES=NEWS DEDICATION TODO AIMS CHANGES INFO_FILES = $(wildcard $(outdir)/$(package).info*) EXTRA_DIST_FILES = COPYRIGHT @@ -24,3 +24,4 @@ local-WWW: copy-for-me copy-for-me: $(foreach a, $(README_TOP_FILES),cp ../$(a) $(outdir)/$(a).txt && ) true + diff --git a/Documentation/bibliography/GNUmakefile b/Documentation/bibliography/GNUmakefile index 094ec07522..899251880a 100644 --- a/Documentation/bibliography/GNUmakefile +++ b/Documentation/bibliography/GNUmakefile @@ -53,8 +53,8 @@ $(outdir)/%.tex: %.data $(depth)/VERSION local-WWW: $(HTML_FILES) $(OUTTEX_FILES:.tex=.ps.gz) $(OUTYO_FILES:.yo=.latex) $(OUTYO_FILES:.yo=.ps.gz) $(addprefix $(outdir)/, $(BIB_FILES:.bib=.html)) $(datafiles) - $(PYTHON) $(step-bindir)/ls-latex.py --title 'LaTeX documents about design and implementation of LilyPond' \ - $(YO_FILES) $(OUTYO_FILES:.yo=.latex) $(BIB_FILES) $(DOC_FILES) $(TEX_FILES)\ + $(PYTHON) $(step-bindir)/ls-latex.py --title 'References on Music Notation' \ + $(YO_FILES) $(OUTYO_FILES:.yo=.latex) $(BIB_FILES) $(DOC_FILES) $(TEX_FILES) \ | sed "s!$(outdir)/!!g" > $(outdir)/index.html $(outdir)/%.bib: %.bib diff --git a/Documentation/bibliography/computer-notation.bib b/Documentation/bibliography/computer-notation.bib index faf176c99c..72ce9c38aa 100644 --- a/Documentation/bibliography/computer-notation.bib +++ b/Documentation/bibliography/computer-notation.bib @@ -6,7 +6,7 @@ @String{CitH = {Computing and the Humanities}} @String{CMJ = {Computer Music Journal}} -@TechRep=ort{roush88, +@TechReport{roush88, note = {Rules on formatting music formulated for use in computers. Mainly distilled from [Ross] HWN}, year = {1988}, title = {Music Formatting Guidelines}, diff --git a/Documentation/faq.texi b/Documentation/faq.texi index 87e7693c78..5a7fce5510 100644 --- a/Documentation/faq.texi +++ b/Documentation/faq.texi @@ -134,13 +134,8 @@ should be documented, please do so and send in a patch. @node Language- mudela, Do you support -, Documentation, FAQ - GNU LilyPond FAQs @section Language: mudela -@subsubsection Why can't you type @code{#c} in stead of @code{cis} ? - -We think that @code{#c} looks as if you are entering the symbols to -print (which you are not; remember, you're entering the musical -content in Mudela) - -@subsubsection Why do I have to type the accidentals to the note if I specified them? +@subsubsection Why do I have to type the accidentals to the note if I +specified them in the keysignature? Take this example @example @@ -150,16 +145,8 @@ Take this example @end example Independently of how it was written and what the current key was, you -would say that you are playing and reading "two C-sharp" notes. We -have tried to make the language somewhat context-free. Of course -sheet music is not context-free. Unfortunately, sheet music is also 2 -dimensional, and ASCII is not. - -Technically it would be feasible to have the Interpreting phase do -tricky things to add (or leave out) the accidentals, but we think that -it is impractical: it hampers the readability and portability of your -source, since you need LilyPond to fill in the details and actually -make sense of it. +would say that you are playing and reading "two C-sharp" notes, so you +have to enter C-sharp twice. @subsubsection What is @code{cis} anyway @@ -548,6 +535,8 @@ subsubsection(How does copyright for sheet music work? Can I enter and spread my Silas S. Brown : +@quotation + There are several aspects to sheet music copyright: 1. The music itself - copyright for the composer's life plus 70 years (so @@ -594,33 +583,45 @@ restrictions imposed on you. References - best one I know is the UK-based Performing Right Society, @uref{http://www.prs.co.uk/} (especially "membership") and their links to other international equivalents. +@end quotation -@email{wl@@gnu.org} writes: +Werner Lemberg @email{wl@@gnu.org} writes: @quotation - I realise that typesetting can be copyright - this is the reason I - can't buy a book of Bach's Urtexts (for example), photocopy parts - of it and give them away. -@end quotation -Sorry, but you can (at least in Austria or Germany, but not in -France)! Typesetting an Urtext edition isn't copyrighted -- -typesetting is a handcraft, not an art. What's copyrighted in an -Urtext edition is the editor's comment or the revision remarks, -cadenzas added by the editor, etc. +Typesetting [at least in Austria or Germany, but not in France] [..] +isn't copyrighted -- typesetting is a handcraft, not an +art. + +What's copyrighted in an Urtext edition is the editor's comment or +the revision remarks, cadenzas added by the editor, etc. + +Urtext editions per se are @emph{not} copyrighted -- if you print +exactly what the composer has written, how can there some copyright be +added? Copyrighted are usually only the `Critical notes', the foreword, +and the cadenzas some editors have added. + +This means that the `Photocopying forbidden' sign in many scores is not +always correct for e.g. J.S. Bach -- you are allowed to copy the pages +which don't contain editorial stuff which is probably copyrighted. + +A very unfortunate situation for the publishers. + +@end quotation + Glen Prideaux, @email{glenprideaux@@MailAndNews.com}: +@quotation One has to be careful. In Australia typesetting IS covered by copyright, but only for 25 years (as opposed to 50 years from the death of the author/composer/artist for virtually any other copyright). If the typesetting originates in a country that does not protect typesetting then there may indeed be no copyright protection available to control the use of mudela files. +@end quotation - - -Juergen Reuter : +Juergen Reuter @email{reuterj@@ira.uka.de} [More information can be had at: ] @@ -643,20 +644,6 @@ See @uref{http://www.geocities.com/Vienna/Studio/1714/harpsichord.html} for a summary of copyright relative to old music, also for the expert forum for such subsubsections. -Werner Lemberg : - -This is not correct. Urtext editions per se are @emph{not} copyrighted --- if you print exactly what the composer has written, how can there -some copyright be added? Copyrighted are usually only the `Critical -notes', the foreword, and the cadenzas some editors have added. - -This means that the `Photocopying forbidden' sign in many scores is -not always correct for e.g. J.S. Bach -- you are allowed to copy the -pages which don't contain editorial stuff which is probably -copyrighted. - -A very unfortunate situation for the publishers. - @node Windows32, Top, Copyright, FAQ - GNU LilyPond FAQs @section Windows32 diff --git a/Documentation/index.texi b/Documentation/index.texi index c4fa876e17..4061cb4960 100644 --- a/Documentation/index.texi +++ b/Documentation/index.texi @@ -7,46 +7,47 @@ @unnumberedsubsec Introduction -@itemize @bullet -@item @uref{DEDICATION.html,DEDICATION} -@item @uref{faq.html,FAQs} -@item @uref{../topdocs/out-www/README.html,The README} -@item @uref{../topdocs/out-www/INSTALL.html,The installation instructions} +@itemize +@item @uref{../topdocs/out-www/README.html, README} +@item @uref{../topdocs/out-www/INSTALL.html, Installation Instructions} +@item @uref{../topdocs/out-www/AUTHORS.html,The Authors} @end itemize -@unnumberedsubsec Why: Background Information -@itemize @bullet -@item @uref{AIMS.txt,Why?} -@item @uref{../pictures/out-www/lelieblond.png,The logo} large size -@item @uref{../pictures/out-www/lelie_logo.png,The logo} medium size -@end itemize -@unnumberedsubsec Documentation: manuals + +@unnumberedsubsec Documentation @itemize @bullet -@item @uref{../tex/out-www/index.html,User documentation} +@item @uref{faq.html,FAQs} +@item @uref{programs.html,`Manual pages'} +@item @uref{../user/out-www/index.html,User documentation} @item @uref{../metadoc/out-www/index.html,Hacker documentation} -@item @uref{../out-www/programs.html,`Manual pages'} @item @uref{../bibliography/out-www/,Bibliography} -@item @uref{../tex/out-www/glossary.html,Musical vocabulary} @end itemize -@unnumberedsubsec The program + +@unnumberedsubsec Miscellaneous blurbs + @itemize @bullet -@item @uref{TODO.txt,The TODO list} -@item @uref{CHANGES.txt,The Change log} -@item @uref{../topdocs/out-www/AUTHORS.html,The Authors} -@item @uref{../topdocs/out-www/PATCHES.html,Sending and applying Patches} +@item @uref{TODO.txt, TODO list} +@item @uref{CHANGES.txt,Change log} +@item @uref{DEDICATION.html,DEDICATION} +@item @uref{AIMS.txt,Why?} @end itemize + @unnumberedsubsec Links @itemize @bullet -@item @uref{../tex/out-www/index.html,Papers, books and online-resources on music typesetting} -@item @uref{../tex/out-www/index.html,Other packages for printing music} -@item @uref{links.html,bf(download) LilyPond and other interesting links} +@item @uref{links.html,@strong{download} LilyPond and other interesting links} +@end itemize + +@unnumberedsubsec Logo: +@itemize +@item @uref{../pictures/out-www/lelieblond.png, logo} in large size +@item @uref{../pictures/out-www/lelie_logo.png, logo} in medium size @end itemize @bye diff --git a/Documentation/metadoc/GNUmakefile b/Documentation/metadoc/GNUmakefile index bd940faee7..25b42eea53 100644 --- a/Documentation/metadoc/GNUmakefile +++ b/Documentation/metadoc/GNUmakefile @@ -2,21 +2,15 @@ depth=../.. -DATA_FILES = $(wildcard *.data) -datafiles = $(addprefix $(outdir)/,$(DATA_FILES:.data=.html)) TEX_FILES = $(wildcard *.tex) DOC_FILES = $(wildcard *.doc) - DVI_FILES = $(addprefix $(outdir)/,$(DOC_FILES:.doc=.dvi) $(TELY_FILES:.tely=.dvi)) -OUT_BIB_FILES = $(addprefix $(outdir)/, $(BIB_FILES)) - OUTTEX_FILES = $(addprefix $(outdir)/, $(TEX_FILES)) OUTDOC_FILES = $(addprefix $(outdir)/, $(DOC_FILES)) -EL_FILES = $(wildcard *.el) -BIB_FILES= $(wildcard *.bib) -EXTRA_DIST_FILES= $(BIB_FILES) $(DOC_FILES) $(DATA_FILES) $(EL_FILES) $(TEX_FILES) $(wildcard *.sty) -HTML_FILES = $(addprefix $(outdir)/, $(TELY_FILES:.tely=.html)) + +EXTRA_DIST_FILES= $(DOC_FILES) $(TEX_FILES) $(wildcard *.sty) +HTML_FILES = $(addprefix $(outdir)/, $(TEXI_FILES:.texi=.html) $(TELY_FILES:.tely=.html)) PS_FILES = $(DVI_FILES:.dvi=.ps) STEPMAKE_TEMPLATES=tex documentation texinfo @@ -25,11 +19,6 @@ LOCALSTEPMAKE_TEMPLATES=lilypond mudela export BIBINPUTS:=$(shell pwd)//$(PATHSEP)$(BIBINPUTS) include $(depth)/make/stepmake.make - - - - - dvi: $(DVI_FILES) ps: $(PS_FILES) @@ -37,39 +26,11 @@ ps: $(PS_FILES) # urg default: -GENHTMLS = engraving colorado computer-notation -OUTGENHTMLS = $(addprefix $(outdir)/, $(GENHTMLS:%=%.html)) - -#urg should generalise and move Lilypond -> StepMake -# URG. Lilypond specific. Move out. -$(outdir)/%.html: %.data $(depth)/VERSION - $(PYTHON) $(step-bindir)/table-to-html.py --columns=7 --linesep=' ' --package=$(topdir) -o $@ $< - $(footify) $@ - -$(outdir)/%.tex: %.data $(depth)/VERSION - $(PYTHON) $(step-bindir)/table-to-html.py --columns=7 --linesep=' ' --package=$(topdir) -o $@ --latex $< - +localclean: + rm -f fonts.aux fonts.log feta*.tfm feta*.*pk -local-WWW-donotdoit: $(HTML_FILES) $(OUTTEX_FILES:.doc=.ps.gz) $(addprefix $(outdir)/, $(BIB_FILES:.bib=.html)) $(datafiles) ps - $(PYTHON) $(step-bindir)/ls-latex.py --title 'LaTeX documents about design and implementation of LilyPond' \ - $(TELY_FILES) $(BIB_FILES) $(DOC_FILES) $(TEX_FILES)\ +local-WWW: $(HTML_FILES) + $(PYTHON) $(step-bindir)/ls-latex.py --title 'Hacker documentation' \ + $(DOC_FILES) $(TEXI_FILES) $(TELY_FILES) \ | sed "s!$(outdir)/!!g" > $(outdir)/index.html - $(footify) $(outdir)/index.html - -$(outdir)/%.bib: %.bib - ln -f $< $@ - -# ignore result since bib2html is nonstandard. Errors would halt the RPM build.j -$(outdir)/%.html: %.bib - -bib2html $< $@ - $(footify) $@ - -# Yeah right: -# make -k out/mudela.dvi => cp -f out/vocabulary.tex out/mudela.dvi - -#out/%: $(outdir)/% -# cp -f $< $@ - -locamlclean: - rm -f fonts.aux fonts.log feta*.tfm feta*.*pk diff --git a/Documentation/user/regression-test.tely b/Documentation/metadoc/regression-test.tely similarity index 100% rename from Documentation/user/regression-test.tely rename to Documentation/metadoc/regression-test.tely diff --git a/Documentation/metadoc/test.tely b/Documentation/metadoc/test.tely deleted file mode 100644 index e22d3c3541..0000000000 --- a/Documentation/metadoc/test.tely +++ /dev/null @@ -1,24 +0,0 @@ -\input texinfo @c -*-texinfo-*- -@setfilename foo -@settitle foo - -@c @node Top -@c @top - -@menu -* foo:: bar -@end menu - -@node foo -@section foo - -@mudela[verbatim, intertext="produces this music:"] -\include "paper16.ly" -\score{ - \notes\relative c'{ - a b c - } -} -@end mudela - -@bye diff --git a/Documentation/programs.texi b/Documentation/programs.texi index 171627631e..6bd3b069c4 100644 --- a/Documentation/programs.texi +++ b/Documentation/programs.texi @@ -7,7 +7,6 @@ @menu * Programs:: Your Softs- * convert-mudela:: convert-mudela to newer versions -* LilyPond:: the GNU Music Typesetter * Ly2dvi:: Python utility to convert mudela to DVI * midi2ly:: convert MIDI to -mudela- @end menu @@ -24,284 +23,6 @@ - -@node convert-mudela, convert-mudela DESCRIPTION, Programs, Top -@menu -* convert-mudela DESCRIPTION:: convert-mudela DESCRIPTION -* convert-mudela SYNOPSIS:: convert-mudela SYNOPSIS -* convert-mudela OPTIONS:: convert-mudela OPTIONS -* convert-mudela BUGS:: convert-mudela BUGS -* convert-mudela Authors:: convert-mudela Authors -@end menu -@chapter convert-mudela - -convert-mudela sequentially applies different mudela-conversions to -upgrade a Mudela input file. - -@node convert-mudela DESCRIPTION, convert-mudela SYNOPSIS, convert-mudela, convert-mudela -@section DESCRIPTION - -Upgrade a Mudela input file from FROM_PATCHLEVEL to TO_PATCHLEVEL. -If no files are given, the standard input and output are used. - -@node convert-mudela SYNOPSIS, convert-mudela OPTIONS, convert-mudela DESCRIPTION, convert-mudela -@section SYNOPSIS - - convert-mudela [options] [files] - -@node convert-mudela OPTIONS, convert-mudela BUGS, convert-mudela SYNOPSIS, convert-mudela -@section OPTIONS -@table @samp -@item --output - The output file to write. -@item --edit - Do an inline edit of the input file. override @code{--output} -@item --show-rules - shows all known conversions, and exit -@item --from=FROM_PATCHLEVEL - Set the level to convert from. If this is not set, convert-mudela will - guess this, on the basis of @code{\version} strings in the file -@item --to=TO_PATCHLEVEL - Set the goal version of the conversion. It defaults to the latest - available version. -@end table - -@node convert-mudela BUGS, convert-mudela Authors, convert-mudela OPTIONS, convert-mudela -@section BUGS - -Not all language changes are handled. Multiple output options won't -work. - -convert-mudela is written in python, so you have install -@uref{http://www.python.org,python}. - -@node convert-mudela Authors, LilyPond, convert-mudela BUGS, convert-mudela -@section Authors - -@email{hanwen@@cs.uu.nl, Han-Wen Nienhuys}, @uref{http://www.cs.uu.nl/people/hanwen} - - - - - - - - -@node LilyPond, LilyPond SYNOPSIS, convert-mudela Authors, Top -@menu -* LilyPond SYNOPSIS:: LilyPond SYNOPSIS -* LilyPond DESCRIPTION:: LilyPond DESCRIPTION -* LilyPond OPTIONS:: LilyPond OPTIONS -* LilyPond FEATURES:: LilyPond FEATURES -* LilyPond DISCLAIMER:: LilyPond DISCLAIMER -* LilyPond PROBLEMS:: LilyPond PROBLEMS -* LilyPond FILES:: LilyPond FILES -* LilyPond environment:: LilyPond environment -* LilyPond BUGS:: LilyPond BUGS -* LilyPond SEE ALSO:: LilyPond SEE ALSO -* LilyPond REMARKS:: LilyPond REMARKS -* LilyPond Authors:: LilyPond Authors -@end menu -@chapter LilyPond - -@cindex LilyPond - -@node LilyPond SYNOPSIS, LilyPond DESCRIPTION, LilyPond, LilyPond -@section SYNOPSIS - @strong{lilypond} [OPTION]... [MUDELA-FILE]... - -@node LilyPond DESCRIPTION, LilyPond OPTIONS, LilyPond SYNOPSIS, LilyPond -@section DESCRIPTION - -LilyPond is a music typesetter. It produces beautiful sheet music -using a high level description file as input. LilyPond is part of -the GNU Project. - - -@node LilyPond OPTIONS, LilyPond FEATURES, LilyPond DESCRIPTION, LilyPond -@section OPTIONS -@table @samp -@item -f,--format= - Output format for sheet music. Choices are tex (for TeX - output), ps (for PostScript) and scm (for GUILE) -@item -I,--include= - add @file{FILE} to the search path for input files. -@item -m,--midi - Disable TeX output. If you have a \midi definition, it will do the - midi output only. -@item -M,--dependencies - Also output rules to be included in Makefile. -@item -d,--debug - Turn debugging info on. GNU LilyPond reads the file @file{.dstreamrc}, - which lists what functions and classes may produce copious debugging - output. -@item -s,--safe - Disallow untrusted @code{\include} directives, backslashes in TeX -code and named output. -@item -t,--test - Switch on any experimental features. Not for general public use. -@item -w,--warranty - Show the warranty with which GNU LilyPond comes. (It comes with - @strong{NO WARRANTY}!) -@item -o,--output=FILE - Set the default output file to @file{FILE}. -@item -h,--help - Show a summary of usage. -@item -i,--init=FILE - Set init file to @file{FILE} (default: @file{init.ly}). -@item --include, -I=DIRECTORY - Add @file{DIRECTORY} to the search path for input files. -@item --ignore-version, -V - Make the incompatible mudela version warning non-fatal. -@end table - -@node LilyPond FEATURES, LilyPond DISCLAIMER, LilyPond OPTIONS, LilyPond -@section FEATURES - -This is an overview of the features that GNU LilyPond supports. For -details on how to use them, you should consult the Mudela tutorial, -which is included with the package. - -@itemize @bullet -@item ASCII script input, with identifiers (for music reuse), - customizable notenames, customisable fontset. -@item MIDI output lets you check if you have entered the correct notes. -@item MIDI to Mudela conversion through the mi2mu program. -@item Multiple staffs in one score. Each staff can have different time signatures. -@item Beams, slurs, ties, chords, super/subscripts (accents and text) - triplets, general n-plet (triplet, quadruplets, etc.), lyrics, - transposition, dynamics (both absolute and hairpin style). -@item Multiple voices within one staff; beams optionally shared - between voices. Up to four voices is handled cleanly. -@item Multiple scores within one input file. Each score is output to - a different file. -@item Clef changes, meter changes, cadenza-mode, key changes, repeat bars. -@end itemize - -@node LilyPond DISCLAIMER, LilyPond PROBLEMS, LilyPond FEATURES, LilyPond -@section DISCLAIMER - -GNU LilyPond is copyright 1996-1999 by its authors. GNU LilyPond is -distributed under the terms of the GNU General Public License. GNU LilyPond -is provided without any warranty what so ever. -GNU LilyPond may be freely distributed. For further information consult -the GNU General Public License, from the file @file{COPYING}. - -@node LilyPond PROBLEMS, LilyPond FILES, LilyPond DISCLAIMER, LilyPond -@section PROBLEMS - -There is an extensive list of todoes and bugs. See the file -@file{TODO} distributed with the sources. If you have a problem you -should try to find out - -@itemize @bullet -@item If the bug has been fixed in a newer release. -@item If the bug has been found earlier, consult @file{TODO} and @file{BUGS}. -@end itemize - -If you have found a bug, then we would appreciate it if you sent a -bugreport. - -@itemize @bullet -@item Send a copy of the input which causes the error. -@item Send a description of the platform you use. -@item Send a description of the LilyPond version you use - (with compile/configure options please). -@item Send a description of the bug itself. -@item Send it to @email{bug-gnu-music@@gnu.org}; you don't have to be subscribed - to this mailinglist. -@end itemize - -@node LilyPond FILES, LilyPond environment, LilyPond PROBLEMS, LilyPond -@section FILES -@table @samp -@item @file{init.ly} - The initialisation file with symbol tables etc. It - includes files from the directory - @file{PREFIX/share/lilypond/ly/}. (@file{PREFIX} typically is @file{/usr/local} -)@end table - -@node LilyPond environment, LilyPond BUGS, LilyPond FILES, LilyPond -@section environment - -@table @samp -@item LILYINCLUDE - additional directories for finding lilypond data. The - format is like the format of @file{PATH}. -@item LILYPREFIX - [FIXME] -@item LANG - selects the language for the warning messages of LilyPond. -@end table - -@node LilyPond BUGS, LilyPond SEE ALSO, LilyPond environment, LilyPond -@section BUGS - -Lots of them. See @file{TODO} and @file{BUGS} - -@node LilyPond SEE ALSO, LilyPond REMARKS, LilyPond BUGS, LilyPond -@section SEE ALSO - -LilyPond comes with various other documentation files. They are -included in the source package. - -A further source for information is the website, which can be found at -@uref{http://www.lilypond.org/}. The website contains on-line versions -of the documentation - -GNU LilyPond is updated very frequently, the latest version is always -available at: @uref{ftp://ftp.cs.uu.nl/pub/GNU/LilyPond}. This FTP -site is mirrored at a number of sites; consult the project web pages -for information about mirrors. - -For programs which are part of the GNU music project, the following -mailing list have been setup: - -@table @samp -@item @email{info-gnu-music@@gnu.org} - For information on the GNU Music project, to subscribe: send mail with - subject "subscribe" to @email{info-gnu-music-request@@gnu.org} -@item @email{help-gnu-music@@gnu.org} - For help with programs from the GNU music project. To subscribe: send - mail with subject "subscribe" to @email{help-gnu-music-request@@gnu.org} -@item @email{bug-gnu-music@@gnu.org} - If you have bugreports, you should send them to this list. If you want - to read all bugreports, you should subscribe to this list. To - subscribe: send mail with subject "subscribe" to - @email{bug-gnu-music-request@@gnu.org} -@item @email{gnu-music-discuss@@gnu.org} - For discussions concerning the GNU Music project, to subscribe: send - mail with subject "subscribe" to - @email{gnu-music-discuss-request@@gnu.org} -@end table - -Announces of new versions will be sent to info-gnu-music and -gnu-music-discuss. - -@node LilyPond REMARKS, LilyPond Authors, LilyPond SEE ALSO, LilyPond -@section REMARKS - -GNU LilyPond has no connection with the music package Rosegarden, other -than the names being similar :-) - -@node LilyPond Authors, Ly2dvi, LilyPond REMARKS, LilyPond -@section Authors - -@cindex Author - -@itemize @bullet -@item @email{hanwen@@cs.uu.nl, Han-Wen Nienhuys} - @uref{http://www.cs.uu.nl/people/hanwen} -@item @email{janneke@@gnu.org, Jan Nieuwenhuizen} - @uref{http://www.xs4all.nl/~jantien} -@end itemize - -Please consult the documentation file @file{AUTHORS} for more detailed -information, and small contributions. - - - - @node Ly2dvi, Ly2dvi DESCRIPTION, LilyPond Authors, Top @menu * Ly2dvi DESCRIPTION:: Ly2dvi DESCRIPTION diff --git a/Documentation/topdocs/GNUmakefile b/Documentation/topdocs/GNUmakefile index d59c175603..f9ad1459d3 100644 --- a/Documentation/topdocs/GNUmakefile +++ b/Documentation/topdocs/GNUmakefile @@ -1,6 +1,5 @@ depth = ../.. -BLURBS=BLURB COPERTINA FLAPTEKST STEPMAKE_TEMPLATES=documentation tex texinfo yolily-topdoc LOCALSTEPMAKE_TEMPLATES=lilypond mudela diff --git a/Documentation/topdocs/INSTALL.texi b/Documentation/topdocs/INSTALL.texi index 47e2a0277a..aedec6a853 100644 --- a/Documentation/topdocs/INSTALL.texi +++ b/Documentation/topdocs/INSTALL.texi @@ -10,8 +10,6 @@ @section Abstract -TODO: document xdeltas - This document explains what you need to install LilyPond, and what you should do. If you are going to compile and install LilyPond often, e.g. when doing development, you might want to check out the @@ -28,6 +26,17 @@ document for mirror sites. @emph{If you upgrade by patching do remember to rerun autoconf after applying the patch}. +If you do not want to download the entire archive for each version, the +safest method for upgrading is to use @file{xdelta}, see +@uref{ftp://ftp.xcf.berkeley.edu/pub/xdelta/} + +The following command produces @file{lilypond-1.1.55.tar.gz} from +@file{lilypond-1.1.54} identical (up to compression dates) to the .55 on +the FTP site. +@example + xdelta patch lilypond-1.1.54-1.1.55.xd lilypond-1.1.54.tar.gz +@end example + @section Prerequisites For compilation you need: @@ -41,14 +50,15 @@ Solaris. compile if you use debugging information. If you are short on disk-space run configure with @code{--disable-debugging}. +@item Although we recommend to use Unix, LilyPond is known to run on Windows NT/95/98 as well. See Section Windows NT/95,es. -@item EGCS 1.1 or newer. Check out @uref{ ftp://ftp.gnu.org/pub/gcc/, ftp://ftp.gnu.org/pub/gcc/} +@item EGCS 1.1 or newer. Check out @uref{ftp://ftp.gnu.org/pub/gcc/}. @item Python 1.5, Check out -@uref{ftp://ftp.python.org,ftp://ftp.python.org} or @uref{ftp://ftp.cwi.nl/pub/python,ftp://ftp.cwi.nl/pub/python}. +@uref{ftp://ftp.python.org} or @uref{ftp://ftp.cwi.nl/pub/python}. @item GUILE 1.3, check out @uref{http://www.gnu.org/software/guile/guile.html,http://www.gnu.org/software/guile/guile.html}. @@ -159,9 +169,6 @@ hypertextified bibliography. @end itemize -You also have to install @file{buildscripts/out/ps-to-gifs} in a -directory that is in the path. - @section configuring and compiling to install GNU LilyPond, simply type: @@ -176,17 +183,19 @@ to install GNU LilyPond, simply type: @end example This will install a number of files, something close to: -@example +@example /usr/local/man/man1/mi2mu.1 /usr/local/man/man1/convert-mudela.1 /usr/local/man/man1/mudela-book.1 /usr/local/man/man1/lilypond.1 /usr/local/bin/lilypond /usr/local/bin/mi2mu + /usr/local/bin/convert-mudela + /usr/local/bin/mudela-book + /usr/local/bin/abc2ly /usr/local/share/lilypond/* /usr/local/share/locale/@{it,nl@}/LC_MESSAGES/lilypond.mo - @end example @@ -296,15 +305,6 @@ If you are doing an upgrade, please remember to remove obsolete @file{.pk} and @file{.tfm} files of the fonts. A script has been provided to do the work for you, see @file{bin/clean-fonts.sh}. -@unnumberedsec CAVEATS - - -@itemize @bullet -@item The -O2 option triggers bugs on various platforms (PowerPC, Alpha). - If you experience problems, you should first try turning off - this. -@item On PPC you need at least EGCS-1.1.2f. -@end itemize @section Redhat linux @@ -346,11 +346,131 @@ A Debian package is also available; contact Anthony Fok Separate instructions on building for W32 are available; See file README-W32, included with the sources. -@section Bugs +@section Problems + + +For help and questions use @email{help-gnu-music@@gnu.org} and +@email{gnu-music-discuss@@gnu.org}. Please consult the faq before +mailing your problems. + +If you find bugs, please send bug reports to +@email{bug-gnu-music@@gnu.org}. + +Known bugs that are LilyPond's fault are listed in @file{TODO}, or +demonstrated in @file{input/bugs/}. + +Known bugs that are not LilyPond's fault are documented here. + +@unnumbered All platforms +@table @bullet +@item GUILE 1.3.2 +Guile 1.3.2 is buggy in several respects. Do not use it for LilyPond. +@end table + +@unnumbered LinuxPPC Bugs: + +@table @bullet +@item R5, egcs-1.1.2-12c +Egcs-1.1.2-12c (stock LinuxPPC R5) has a serious bug, upgrade to +fixed in egcs-1.1.2-12f or gcc-2.95-0a, @uref{ftp://dev.linuxppc.org/users/fsirl/R5/RPMS/ppc/} + +@item R4, egcs-1.0.2 +All compiling with @code{-O2} is suspect, in particular guile-1.3, and +Lily herself will break. +@end table + + + +@unnumbered Linux-i386 + +@table @bullet +@item SuSE6.2 and similar platforms (glibc 2.1, libstdc++ 2.9.0) + +Lily will crash during parsing (which suggests a C++ library +incompatibility). Precise cause, precise platform description or +solution are not known. + +Note that this only happens on some computers with the said platform. + +@item GUILE +A binary RPM of Guile 1.3 has been distributed from the LilyPond ftp +site. This binary was made in RedHat 5.x, and it will fail if this +RPM is used with RedHat 6.x. + + +@item libg++ 2.7 + +LilyPond occasionally crashes while parsing the initialisation files. +This is a very obscure bug, and usually entering the commandline +differently "fixes" it. + +@example + lilypond input.ly +@end example + +and +@example + lilypond -I. ./input.ly +@end example +makes a difference + +Typical stacktrace: +@example + SIGSEGV + __libc_malloc (bytes=16384) + ?? () + yyFlexLexer::yy_create_buffer () + Includable_lexer::new_input (this=0x8209a00, s=@{strh_ = @{ +@end example + +This behaviour has been observed with machines that have old libg++ +versions (LinuxPPC feb '98, RedHat 4.x). +@end table + + + + +@unnumbered Solaris: + +@table @bullet +@item Sparc64/Solaris 2.6, GNU make-3.77 + +GNU make-3.77 is buggy on this platform, upgrade to 3.78.1 or newer. + + +@item Sparc64/Solaris 2.6, ld + +Not yet resolved. +@end table + + +@unnumbered AIX + +@table @bullet +@item AIX 4.3 ld + +The following is from the gcc install/SPECIFIC file. +@quotation + Some versions of the AIX binder (linker) can fail with a relocation + overflow severe error when the -bbigtoc option is used to link + GCC-produced object files into an executable that overflows the TOC. A + fix for APAR IX75823 (OVERFLOW DURING LINK WHEN USING GCC AND + -BBIGTOC) is available from IBM Customer Support and from its + 27service.boulder.ibm.com website as PTF U455193. + + Binutils does not support AIX 4.3 (at least through release 2.9). GNU + as and GNU ld will not work properly and one should not configure GCC + to use those GNU utilities. Use the native AIX tools which do + interoperate with GCC. +@end quotation + +add -Wl,-bbigtoc to USER_LDFLAGS, ie: +@example + LDFLAGS='-Wl,-bbigtoc' ./configure +@end example + +@end table -Send bug reports to bug-gnu-music@@gnu.org. For help and questions use -help-gnu-music@@gnu.org and gnu-music-discuss@@gnu.org. Please consult -the faq before mailing your problems. @section Authors diff --git a/Documentation/topdocs/README.texi b/Documentation/topdocs/README.texi index 91b663fd48..a6b9c70cb9 100644 --- a/Documentation/topdocs/README.texi +++ b/Documentation/topdocs/README.texi @@ -1,28 +1,9 @@ \input texinfo @c -*-texinfo-*- @setfilename README.info @settitle This is the toplevel README to LilyPond - -@node Top, , cdrom distributions, (dir) +@node Top, , , @top -@menu -* This is the toplevel README to LilyPond::This is the toplevel README to LilyPond -@end menu - - - -@node This is the toplevel README to LilyPond, versioning, , Top -@menu -* versioning:: versioning -* requirements:: requirements -* installation:: installation -* documentation:: documentation -* comments:: comments -* windows 32:: windows 32 -* caveats:: caveats -* bugs:: bugs -* cdrom distributions:: cdrom distributions -@end menu @chapter This is the toplevel README to LilyPond @@ -30,8 +11,7 @@ LilyPond is a music typesetter. It produces beautiful sheet music using a high level description file as input. LilyPond is part of the GNU Project. -@node versioning, requirements, This is the toplevel README to LilyPond, This is the toplevel README to LilyPond -@section versioning +@section Versioning LilyPond uses a versioning scheme similar to the Linux kernel. In a version "x.y.z", an even second number 'y' denotes a stable version. @@ -39,8 +19,7 @@ For development versions 'y' is odd. For using straightforward score production, please use the latest stable version. Development versions may not produce good or nice scores. -@node requirements, installation, versioning, This is the toplevel README to LilyPond -@section requirements +@section Requirements For the compilation and running of LilyPond you need some additional packages. Please refer to the installation instructions. @@ -48,14 +27,12 @@ packages. Please refer to the installation instructions. NOTE: If you downloaded a binary (.rpm or a W95/NT .zip file), then you don't have to compile LilyPond. -@node installation, documentation, requirements, This is the toplevel README to LilyPond -@section installation +@section Installation For your convenience, a formatted copy of the INSTALL instructions are in the toplevel directory, as INSTALL.txt -@node documentation, comments, installation, This is the toplevel README to LilyPond -@section documentation +@section Documentation The real documentation is the directory Documentation/ @@ -80,8 +57,7 @@ using @example @end itemize -@node comments, windows 32, documentation, This is the toplevel README to LilyPond -@section comments +@section Comments LilyPond is a long way from finished and polished. We do appreciate criticism, comments, bugreports, patches, etc. @@ -91,10 +67,10 @@ criticism, comments, bugreports, patches, etc. @end example -and @emph{not} to us personally. See @file{Documentation/links.yo} for more info. +and @emph{not} to us personally. See @file{Documentation/mail.texi} for +more info. -@node windows 32, caveats, comments, This is the toplevel README to LilyPond -@section windows 32 +@section Windows 32 If you have received this file as part of a DOS/Window32 distribution (@file{LilyPond-*.zip}), then it is advisable to also download the @@ -104,28 +80,24 @@ source package, since it might contain more documentation If you decide to build LilyPond from source, please read the INSTALL.txt document first, especially the Windows NT/95 section. -@node caveats, bugs, windows 32, This is the toplevel README to LilyPond -@section caveats - -* Please read the file BUGS for some ugly bugs. +@section Caveats -* If you have installed a previous version, be sure to remove old font -files, eg +If you have installed a previous version, be sure to remove old font +files, eg., @example rm `find /var/lib/texmf/fonts -name 'feta*'` @end example a script to do this for you is in @file{buildscripts/clean-fonts.sh} -@node bugs, cdrom distributions, caveats, This is the toplevel README to LilyPond -@section bugs +@section Bugs -Send bug reports to @email{bug-gnu-music@@gnu.org}. For help and questions use - @email{help-gnu-music@@gnu.org} and @email{gnu-music-discuss@@gnu.org}. -Please consult the faq before mailing your problems. +Send bug reports to @email{bug-gnu-music@@gnu.org}. For help and +questions use @email{help-gnu-music@@gnu.org} and +@email{gnu-music-discuss@@gnu.org}. Please consult the FAQ and +installation instructions before mailing your problems. -@node cdrom distributions, Top, bugs, This is the toplevel README to LilyPond -@section cdrom distributions +@section CDROM distributions if you have received LilyPond on a cdrom, chances are that development has moved a some patchlevels up. Please check the latest version of diff --git a/Documentation/topdocs/index.tely b/Documentation/topdocs/index.tely index 766b43c25a..973f35c707 100644 --- a/Documentation/topdocs/index.tely +++ b/Documentation/topdocs/index.tely @@ -43,16 +43,13 @@ simple pieces, tests and bugs. MIDI, PNG, PostScript, and Source. LilyPond handling real music. MIDI, view PNG, PostScript, and Source. @end itemize -@unnumberedsec Documentation +@unnumberedsec More information @itemize @bullet -@item @uref{Documentation/tex/out-www/tutorial.html,Tutorial} -@item @uref{Documentation/out-www/faq.html,FAQ} +@item @uref{Documentation/out-www/index.html, Documentation} @item @uref{Documentation/out-www/mail.html,Mailing Lists} -@item @uref{Documentation/out-www/index.html,All of the LilyPond documentation} -@item @uref{./docxx/index.html,The DOC++ documentation of the C++ sources.} -@item @uref{Documentation/topdocs/out-www/INSTALL.html,The installation instructions} +@item @uref{./docxx/index.html,Source code documentation} @end itemize @unnumberedsec Sites diff --git a/Documentation/user/GNUmakefile b/Documentation/user/GNUmakefile index 10ddca981f..24cc5c5cc4 100644 --- a/Documentation/user/GNUmakefile +++ b/Documentation/user/GNUmakefile @@ -9,7 +9,8 @@ DOC_FILES = $(wildcard *.doc) DVI_FILES = $(addprefix $(outdir)/,$(DOC_FILES:.doc=.dvi) $(TELY_FILES:.tely=.dvi)) -EXTRA_DIST_FILES= $(DOC_FILES) $(DATA_FILES) +EXTRA_DIST_FILES= $(DOC_FILES) $(DATA_FILES) $(wildcard *.itexi *.itely) + HTML_FILES = $(addprefix $(outdir)/, $(TELY_FILES:.tely=.html)) PS_FILES = $(DVI_FILES:.dvi=.ps) $(OUTDOC_FILES:.doc=.ps) $(OUTTEX_FILES:.tex=.ps) @@ -32,7 +33,7 @@ GENHTMLS = engraving colorado glossary computer-notation OUTGENHTMLS = $(addprefix $(outdir)/, $(GENHTMLS:%=%.html)) local-WWW: $(HTML_FILES) $(datafiles) $(PS_GZ_FILES) - $(PYTHON) $(step-bindir)/ls-latex.py --title 'User documentation about LilyPond' \ + $(PYTHON) $(step-bindir)/ls-latex.py --title 'User documentation' \ $(DOC_FILES) $(TEX_FILES) $(TELY_FILES) \ | sed "s!$(outdir)/!!g" > $(outdir)/index.html $(footify) $(outdir)/index.html @@ -41,4 +42,4 @@ $(outdir)/%.bib: %.bib ln -f $< $@ localclean: - rm -f fonts.aux fonts.log feta*.tfm feta*.*pk + rm -f fonts.aux fonts.log feta*.tfm feta*.*pk diff --git a/Documentation/user/bugs.itexi b/Documentation/user/bugs.itexi new file mode 100644 index 0000000000..51513a24f7 --- /dev/null +++ b/Documentation/user/bugs.itexi @@ -0,0 +1,24 @@ +@node Reporting Bugs, , , Top +@section Bug reports + +There is an extensive list of todoes and bugs. See the file +@file{TODO} distributed with the sources. If you have a problem you +please try to find out + +@itemize @bullet +@item If the bug has been fixed in a newer release. +@item If the bug has been found earlier, consult @file{TODO} and @file{BUGS}. +@end itemize + +If you have really found a bug, then we would appreciate it if you +sent a bugreport. + +@itemize @bullet +@item Send a copy of the input which causes the error. +@item Send a description of the platform you use. +@item Send a description of the LilyPond version you use + (with compile/configure options please). +@item Send a description of the bug itself. +@item Send it to @email{bug-gnu-music@@gnu.org}; you don't have to be subscribed + to this mailinglist. +@end itemize diff --git a/Documentation/user/convert-mudela.itexi b/Documentation/user/convert-mudela.itexi new file mode 100644 index 0000000000..02b13d8f45 --- /dev/null +++ b/Documentation/user/convert-mudela.itexi @@ -0,0 +1,36 @@ +@node convert-mudela, , ,Top +@chapter convert-mudela +@code{convert-mudela} sequentially applies different +mudela-conversions to upgrade a Mudela input file. It uses +@code{\version} statements in the file to detect the old version +number. + +@example + convert-mudela [options] [files] +@end example + +@section Options +@table @samp +@item --output + The output file to write. +@item --edit + Do an inline edit of the input file. override @code{--output} +@item --show-rules + shows all known conversions, and exit +@item --from=@var{FROM_PATCHLEVEL} + Set the level to convert from. If this is not set, convert-mudela will + guess this, on the basis of @code{\version} strings in the file +@item --to=@var{TO_PATCHLEVEL} + Set the goal version of the conversion. It defaults to the latest + available version. +@end table + +Not all language changes are handled. Multiple output options won't +work. + +convert-mudela is written in python, so you have install +@uref{http://www.python.org,python}. It was written by +@email{hanwen@@cs.uu.nl, Han-Wen Nienhuys}. + + + diff --git a/Documentation/user/glossary.texi b/Documentation/user/glossary.itexi similarity index 99% rename from Documentation/user/glossary.texi rename to Documentation/user/glossary.itexi index f58c2e69a2..fca076a4ab 100644 --- a/Documentation/user/glossary.texi +++ b/Documentation/user/glossary.itexi @@ -1,3 +1,5 @@ +@node Glossary, , , Top +@chapter Glossary This is a list of musical terms, along with explanations and translations. It is not complete, so additions are welcome. diff --git a/Documentation/user/invoking.itexi b/Documentation/user/invoking.itexi new file mode 100644 index 0000000000..f6d5f1d08a --- /dev/null +++ b/Documentation/user/invoking.itexi @@ -0,0 +1,101 @@ + +@node Invoking LilyPond, , , Top +@chapter Invoking LilyPond +@cindex Invoking LilyPond + + +@example + @strong{lilypond} [OPTION]... [MUDELA-FILE]... +@end example + +@section Options + +@table @samp +@item -f,--format= + Output format for sheet music. Choices are tex (for TeX + output), ps (for PostScript) and scm (for GUILE) +@item -I,--include= + add @file{FILE} to the search path for input files. +@item -m,--midi + Disable TeX output. If you have a \midi definition, it will do the + midi output only. +@item -M,--dependencies + Also output rules to be included in Makefile. +@item -d,--debug + Turn debugging info on. GNU LilyPond reads the file @file{.dstreamrc}, + which lists what functions and classes may produce copious debugging + output. +@item -s,--safe + Disallow untrusted @code{\include} directives, backslashes in TeX +code and named output. +@item -t,--test + Switch on any experimental features. Not for general public use. +@item -w,--warranty + Show the warranty with which GNU LilyPond comes. (It comes with + @strong{NO WARRANTY}!) +@item -o,--output=FILE + Set the default output file to @file{FILE}. +@item -h,--help + Show a summary of usage. +@item -i,--init=FILE + Set init file to @file{FILE} (default: @file{init.ly}). +@item --include, -I=DIRECTORY + Add @file{DIRECTORY} to the search path for input files. +@item --ignore-version, -V + Make the incompatible mudela version warning non-fatal. +@end table + + + +When invoked with a filename that has no extension, LilyPond will try +adding `@file{.ly}' as an extension first, then `@file{.fly}' and +finally `@file{.sly}' extension. If the filename ends with +`@file{.fly}', LilyPond processes the file as music using +`@file{init.fly}'. In this case, LilyPond does something like: + +@quotation + +@example +\score @{ + \notes\relative c @{ +1 \input "yourfile.fly" + @} + \paper@{@} + \midi@{@} +@} +@end example + +@end quotation + +The result of `@file{.sly}' is similar except that a single unjustified +line is produced. + +If you invoke LilyPond with a file `@file{foo.}@var{ext}' that doesn't +have the `@file{.ly}' extension, then LilyPond will look for a file +called `@file{init.}@var{ext}' and process this file. The file +`@file{init.}@var{ext}' must contain the @code{\maininput} keyword or +LilyPond will not read the user specified file. + +When LilyPond processes @file{filename.ly} it will produce +@file{filename.tex} as output. If @file{filename.ly} contains a second +@code{\paper} keyword, then LilyPond will produce @file{filename-1.tex} +as well. Subsequent @code{\paper} keywords will produce sequentially +numbered file names. Several files can be specified; they will each +be processed independently.@footnote{Not entirely true: The status of +GUILE is kept.} + + + +@section Environment variables + +@table @samp +@item LILYINCLUDE + additional directories for finding lilypond data. The + format is like the format of @file{PATH}. +@item LILYPREFIX + [FIXME] +@item LANG + selects the language for the warning messages of LilyPond. +@end table + + diff --git a/Documentation/user/lilypond.tely b/Documentation/user/lilypond.tely new file mode 100644 index 0000000000..1567ec748e --- /dev/null +++ b/Documentation/user/lilypond.tely @@ -0,0 +1,128 @@ +\input texinfo @c -*-texinfo-*- +@setfilename lilypond.info +@settitle LilyPond Reference Manual + + + +@titlepage +@title LilyPond +@subtitle The GNU Project Typesetter +@author Han-Wen Nienhuys, Jan Nieuwenhuizen and Adrian Mariano + + Copyright @copyright 1999 by the authors + +@vskip 0pt plus 1filll + +Permission is granted to make and distribute verbatim +copies of this manual provided the copyright notice and +this permission notice are preserved on all copies. + +Permission is granted to copy and distribute modified +versions of this manual under the conditions for +verbatim copying, provided also that the sections +entitled ``Copying'' and ``GNU General Public License'' +are included exactly as in the original, and provided +that the entire resulting derived work is distributed +under the terms of a permission notice identical to this +one. + +Permission is granted to copy and distribute +translations of this manual into another language, +under the above conditions for modified versions, +except that this permission notice may be stated in a +translation approved by the Free Software Foundation. + +@end titlepage + +@ifinfo +This file documents GNU LilyPond. + +Copyright 1999 Han-Wen Nienhuys, Jan Nieuwenhuizen and Adrian Mariano + +Permission is granted to make and distribute verbatim +copies of this manual provided the copyright notice and +this permission notice are preserved on all copies. + +@ignore +Permission is granted to process this file through TeX +and print the results, provided the printed document +carries a copying permission notice identical to this +one except for the removal of this paragraph (this +paragraph not being relevant to the printed manual). + +@end ignore + +Permission is granted to copy and distribute modified +versions of this manual under the conditions for +verbatim copying, provided also that the sections +entitled ``Copying'' and ``GNU General Public License'' +are included exactly as in the original, and provided +that the entire resulting derived work is distributed +under the terms of a permission notice identical to this +one. + +Permission is granted to copy and distribute +translations of this manual into another language, +under the above conditions for modified versions, +except that this permission notice may be stated in a +translation approved by the Free Software Foundation. + +@end ifinfo + +@ignore +Should add disclaimer, abstract + +"GNU LilyPond has no connection with the music package Rosegarden, other +than the names being similar :-)" + + + +@end ignore + +@contents + +@node Top, , , (dir) +@top +@menu +* Tutorial:: a tutorial introduction to lilypond. +* Invoking LilyPond:: Operation. +* Reporting Bugs:: Where to report bugs. +* Reference Manual:: Reference Manual. +* Glossary:: A dictionary of musical terms. +* More information:: Where to turn to for more help. +* convert-mudela:: Upgrading input files. +* Index:: Unified index. +@end menu + +@macro keyindex {word} +@cindex \word\ + +@end macro + +@macro indexcode {word} +@cindex \word\ + +@end macro + + +@mbinclude tutorial.itely + + +@include invoking.itexi + +@include bugs.itexi + +@mbinclude refman.itely + +@include glossary.itexi + +@include moreinfo.itexi + +@include convert-mudela.itexi + +@node Index, , , Top +@unnumbered Index + +@printindex cp + +@bye diff --git a/Documentation/user/moreinfo.itexi b/Documentation/user/moreinfo.itexi new file mode 100644 index 0000000000..826a3d15fb --- /dev/null +++ b/Documentation/user/moreinfo.itexi @@ -0,0 +1,35 @@ +@node More information, , , Top +@section Resources + +A further source for information is the website, which can be found at +@uref{http://www.lilypond.org/}. The website contains on-line +versions of the documentation + +GNU LilyPond is updated very frequently, the latest version is always +available at: @uref{ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/}. This FTP +site is mirrored at a number of sites; consult the project web pages +for information about mirrors. + +For programs which are part of the GNU music project, the following +mailing list have been setup: + +@table @samp +@item @email{info-gnu-music@@gnu.org} + For information on the GNU Music project, to subscribe: send mail with + subject "subscribe" to @email{info-gnu-music-request@@gnu.org} +@item @email{help-gnu-music@@gnu.org} + For help with programs from the GNU music project. To subscribe: send + mail with subject "subscribe" to @email{help-gnu-music-request@@gnu.org} +@item @email{bug-gnu-music@@gnu.org} + If you have bugreports, you should send them to this list. If you want + to read all bugreports, you should subscribe to this list. To + subscribe: send mail with subject "subscribe" to + @email{bug-gnu-music-request@@gnu.org} +@item @email{gnu-music-discuss@@gnu.org} + For discussions concerning the GNU Music project, to subscribe: send + mail with subject "subscribe" to + @email{gnu-music-discuss-request@@gnu.org} +@end table + +Announces of new versions will be sent to info-gnu-music and +gnu-music-discuss. diff --git a/Documentation/user/properties.itely b/Documentation/user/properties.itely new file mode 100644 index 0000000000..c750b3af9c --- /dev/null +++ b/Documentation/user/properties.itely @@ -0,0 +1,546 @@ +@node Properties, , , Top + +@cindex properties!Lyrics + +@table @samp + @item @code{textStyle}@indexcode{textStyle} + Set the font for lyrics. The available font choices are + @code{roman}, @code{italic}, @code{bold}, @code{large}, @code{Large}, + @code{typewriter}, and @code{finger}. The @code{finger} font can + only display numbers. Note also that you must be careful when + using @code{\property} in Lyrics mode, because of the way strings + are parsed. Either put quotes around the arguments to + @code{\property} or be sure to leave a space on both sides of the + dot. +@end table + + +@cindex properties!Thread + +@table @samp + @item @code{noteheadStyle}@indexcode{noteheadStyle} + Selects type of note head. Choices are @code{cross}, + @code{diamond}, @code{harmonic}, @code{transparent}, and @code{""}. + They are shown in that order below. + + @mudela[center] + + \score { + \notes { + \property Staff.barNonAuto = 1 + \property Voice.noteHeadStyle = cross + a' + \property Voice.noteHeadStyle = diamond + a' + \property Voice.noteHeadStyle = harmonic + a' + \property Voice.noteHeadStyle = transparent + a' + \property Voice.noteHeadStyle = "" + a' + } + \paper { + linewidth = -1.; + } + } + +@end mudela +@end table + +@subsubheading Grace properties + +@cindex properties!Grace + + +@table @samp + @item @code{stemStyle}@indexcode{stemStyle} + By default set to @code{"grace"} meaning that all unbeamed + notes with flags are typeset with a slash through the flag. + Setting to @code{""} gives standard flags. +@end table + + +@subsubheading Voice properties + +@cindex properties!Voice + +@table @samp + @item @code{abbrev}@indexcode{abbrev} + Set length for tremolo to be used if no length is explicitly + specified. + + @item @code{articulationScriptPadding}@indexcode{articulationScriptPadding} + + Determines the extra space added between articulation marks, such + as staccato, tenuto, trill, up/down bow or fermata, and the + closest staff line or note. + + @item @code{articulationScriptVerticalDirection} + @indexcode{articulationScriptVerticalDirection} + Determines the location of articulation marks. Set to @code{\up} + to print marks above the staff; set to @code{\down} to print marks + below the staff. This property does not override explicit + directions marked with `@code{^}' or `@code{_}' in the mudela file. + + @item @code{noAutoBeaming}@indexcode{beamAuto} + If set to 1 then beams are not generated automatically. + + @item @code{beamAutoEnd}@indexcode{beamAutoEnd} + Specifies when automatically generated beams can end. See + section XREF-autobeam [FIXME]. + + @item @code{beamAutoBegin}@indexcode{beamAutoBegin} + Specifies when automatically generated beams can start. See + section XREF-autobeam [FIXME]. + + @item @code{beamquantisation}@indexcode{beamquantisation} + Set to @code{\none} for no quantization. Set to @code{\normal} to + quantize position and slope. Set to @code{\traditional} to avoid + wedges. These three settings are available via + @code{\beamposfree}@keyindex{beamposfree}, + @code{\beamposnormal}@keyindex{beamposnormal}, and + @code{\beampostraditional}@keyindex{beampostraditional}. + + @item @code{beamslopedamping}@indexcode{beamslopedamping} + Set to @code{\none} for undamped beams. Set to @code{\normal} for + damped beams. Set to @code{\infinity} for beams with zero slope. + The identifiers + @code{\beamslopeproportional}@keyindex{beamslopeproportional}, + @code{\beamslopedamped}@keyindex{beamslopedamped}, and + @code{\beamslopezero}@keyindex{beamslopezero} each set the + corresponding value. + + @item @code{dynamicDirection}@indexcode{dynamicDirection} + Determines location of dynamic marks. Set to @code{\up} to print + marks above the staff; set to @code{\down} to print marks below + the staff. + + @item @code{dynamicStyle}@indexcode{dynamicStyle} + Set the text style for dynamics. + + @item @code{fontSize}@indexcode{fontSize} + Can be used to select smaller font sizes for music. The normal + font size is 0, and the two smaller sizes are -1 + and -2. + + @item @code{forceHorizontalShift}@indexcode{forceHorizontalShift} + Force horizontal shift for collision resolution. It overrides + automatic collision resolution. The value is the shift amount + expressed in @code{note_width}, as set in the paper section. + +[FIXME: this should be moved] + +Lilypond always arranges note heads on alternate sides of a stem (that +is, within a single voice) as necessary to prevent collisions (note head +overlaps). For up stems, the upper note of a colliding pair is placed +on the right side of the stem, the lower on the left. For down stems, +the algorithm works in reverse. + +Lily also attempts to prevent collisions of note heads in different +voices. A situation where chords of two or more voices are played +simultaneously within one staff. + +By default, if only two voices (and both have opposite stem directions) +are in this 'collision group', the notes both are shifted by @code{0.5 +\quartwidth} if there are unisons or seconds between the voices. + +If there are more than two voices in a collision group, shifting is +inactive by default, since in this case, there are multiple chords with +the same stem direction. By distinguish between those chords, LilyPond +can do collision resolution in these cases as well. + +Distinguishing between voices with the same stem direction, is done by +setting the property @code{Voice.horizontalNoteShift}. It must be set +to a different integer for each voice. Then, all note heads in collision +groups (not just unisons and seconds) will be offset, one voice relative +another. The following fragment of sheet music shows how shifting is +done, with values of @code{horizontalNoteShift} printed over and under +the notes. In this case the chords are just simple notes. + +@c URG : mudela book bug. +@mudela[singleline] +\score { + \notes \context Staff < + \context Voice = VA { \stemup f''4^"0" } + \context Voice = VB {\stemup + \property Voice.horizontalNoteShift = 1 d''4^" 1" } + \context Voice = VC { \stemup \property +Voice.horizontalNoteShift = 2 b'4^" 2" } + \context Voice = VD { \stemdown \property +Voice.horizontalNoteShift = 1 g'4_"1 " } + \context Voice = VE { \stemdown e'4_"0" } + > +} +@end mudela + +If you are not satisfied with the collision resolution of LilyPond, you +can override the horizontal shift value of the chord of one Voice, by +setting @code{forceHorizontalShift}. This sets the amount shift, +measured in black note head widths. + +To take complete control of note position shifts in complex passages, +you have set things up for normal collisions and override all shifts by +setting @code{forceHorizontalShift} to zero everywhere +@example +\property Voice.horizontalNoteShift = +\property Voice.forceHorizontalShift = "0.0" +@end example + +Then you can set the force property to a suitable value before each note +that really needs it (unisons and seconds), and reset it to 0.0 after +the note. + + @item @code{horizontalNoteShift}@indexcode{horizontalNoteShift} + Enable LilyPond to shift notes horizontally if they collide with + other notes. This is useful when typesetting many voices on one + staff. The identifier @code{\shift}@keyindex{shift} is defined to + enable this. Traditionally, the outer chords (the upmost and + downmost voices), should have no @code{horizontalNoteShift}. + + @item @code{markScriptPadding}@indexcode{markScriptPadding} + Determines the extra space added between the mark and the closest + staff line or note. + + @item @code{markDirection}@indexcode{markDirection} + Determines if marks should be printed above or below the staff. + Set to @code{\up} to print marks above the staff; set to + @code{\down} to print marks below the staff. + + @item @code{midiInstrument}@indexcode{midiInstrument} + Sets the instrument for MIDI output. If this property is not set + then LilyPond will use the @code{instrument} property. This must + be set to one of the strings on the list of MIDI instruments that + appears in section XREF-midilist [FIXME]. If you use a string which + is not listed, LilyPond will silently substitute piano. + + @item @code{oldTieBehavior}@indexcode{oldTieBehavior} + Set to 1 in order to get old tie behavior where ties would + connect unequal pitches. This property is deprecated, and its + use is not recommended. + + @item @code{restStyle}@indexcode{restStyle} + Change the layout of rests shorter than quarter notes. + Currently, the standard layout @code{""} and mensural notation + @code{"mensural"} are available. Mensural rests of duration + 32 or shorter are not available. + + @item @code{scriptHorizontal}@indexcode{scriptHorizontal} + Put scripts left or right of note heads. Support for this is + limited. Accidentals will collide with scripts. + + @item @code{slurVerticalDirection}@indexcode{slurVerticalDirection} + Set to @code{\free} for free choice of slur direction, set to + @code{\up} to force slurs up, set to @code{\down} to force slurs + down. The shorthands @code{\slurup}@keyindex{slurup}, + @code{\slurdown}@keyindex{slurdown}, and + @code{\slurboth}@keyindex{slurboth} are available. + + @item @code{slurDash}@indexcode{slurDash} + Set to 0 for normal slurs, 1 for dotted slurs, and a + larger value for dashed slurs. Identifiers + @code{\slurnormal}@keyindex{slurnormal} and + @code{\slurdotted}@keyindex{slurdotted} are predefined to set the + first two settings. + +@item @code{stemLength}@indexcode{stemLength} + Set length of stems. Unit is `@code{interline}/2', so + @code{stemLength} defaults to 7. + + @item @code{stemLeftBeamCount}@indexcode{stemLeftBeamCount} + Specify the number of beams to draw on the left side of the next + note. Overrides automatic beaming. The value is only used once, + and then it is erased. + + @item @code{stemRightBeamCount}@indexcode{stemRightBeamCount} + Specify the number of beams to draw on the right side of the next + note. Overrides automatic beaming. The value is only used once, + and then it is erased. + @item @code{tieVerticalDirection}@indexcode{tieVerticalDirection} + Set to @code{\free} for free choice of tie direction, set to + @code{\up} to force ties up, set to @code{\down} to force ties + down. + + @item @code{transposing}@indexcode{transposing} + Transpose the MIDI output. Set this property to the number of + half-steps to transpose by. + + + @item @code{textEmptyDimension}@indexcode{textEmptyDimension} + If set to 1 then text placed above or below the staff is + assumed to have zero width. + + @item @code{textStyle}@indexcode{textStyle} + Set the text style for superscripts and subscripts. See above + for list of text styles. + + @item @code{textScriptPadding}@indexcode{textScriptPadding} + Determines the extra space added between superscripted resp. + subscripted text and the closest staff line or note. + + @item @code{verticalDirection}@indexcode{verticalDirection} + Determines the direction of stems, subscripts, beams, slurs, and + ties. Set to @code{\down} to force them down, @code{\up} to force + them up, or @code{\free} to let LilyPond decide. This can be used + to distinguish between voices on the same staff. The + @code{\stemdown}@keyindex{stemdown}, @code{\stemup}@keyindex{stemup}, + and @code{\stemboth}@keyindex{stemboth} identifiers set this + property. + + + @item @code{tupletDirection}@indexcode{tupletDirection} + Determines the direction of triplets and other tuplets. Set to + @code{\down} to force them below the staff, @code{\up} to force + them above, or @code{\free} to let LilyPond decide. + + @item @code{tupletVisibility}@indexcode{tupletVisibility} + Determines whether tuplets of notes are labelled. Setting + to 0 shows nothing; setting to 1 shows a number; + setting to 2 shows a number and a bracket if there is no + beam; setting to 3 shows a number, and if there is no beam + it adds a bracket; setting to 4 shows both a number and a + bracket unconditionally. + +@end table + +@subsubheading Staff properties + +@cindex properties!Staff + +@table @samp + + @item @code{barNonAuto}@indexcode{barNonAuto} + If set to 1 then bar lines will not be printed + automatically; they must be explicitly created with @code{\bar} + keywords. Unlike with the @code{\cadenza} keyword, measures are + still counted. Bar generation will resume according to that + count if this property is set to zero. + + @item @code{barNumberDirection}@indexcode{barNumberDirection} + Set to @code{\up} or @code{\down} to put bar numbers above or below + the staff. + + @item @code{barNumberHangOnClef}@indexcode{barNumberHangOnClef} + Set to 1 to cause bar numbers to appear above or below the + clef instead of on the bar line. This property is deprecated. + Do not use. + + @item @code{barNumberScriptPadding}@indexcode{barNumberScriptPadding} + Sets extra space between the bar number and the bar it labels. + + @item @code{barSize}@indexcode{barSize} + Specify the height of the bar lines if it should be different + than the staff height. + + @item @code{barAtLineStart}@indexcode{barAtLineStart} + Set to 1 to produce a bar line after the clef at the start + of each line (but not at the beginning of the music). + + @item @code{clefStyle}@indexcode{clefStyle} + Determines how clefs are typeset. If set to @code{transparent}, + the clefs are not printed at all, if set to + @code{fullSizeChanges}, clef changes in the middle of a line are + typeset with a full size clef. By default, clef changes are + typeset in smaller size. + + @item @code{createKeyOnClefChange}@indexcode{createKeyOnClefChange} + Set to a nonempty string if you want key signatures to be printed + when the clef changes. Set to the empty string if you do not + want key signatures printed. + + @item @code{createInitdefaultClef}@indexcode{createInitdefaultClef} + Specify whether clefs are created on default? (Doesn't seem to + do anything.) + + @item @code{defaultClef}@indexcode{defaultClef} + Determines the default clef. See @code{\clef} keyword. + + @item @code{markHangOnClef}@indexcode{markHangOnClef} + Set to 1 to cause marks to appear by clefs instead of by bar + lines. Deprecated, use is not recommended. + + @item @code{marginDirection}@indexcode{marginDirection} + Set to @code{\left} or @code{\right} to specify location of + marginal scripts. + + @item @code{marginScriptPadding}@indexcode{marginScriptPadding} + Specify extra space for marginal scripts. + + @item @code{forgetAccidentals}@indexcode{forgetAccidentals} + Causes accidentals to be printed at every note instead of + remembered for the duration of a measure. + + @item @code{noResetKey}@indexcode{noResetKey} + Do not reset the key at the start of a measure. Accidentals will + be printed only once and are in effect until overridden, possibly + many measures later. + + @item @code{staffLineLeading}@indexcode{staffLineLeading} + Specifies the distance (in points) between lines of the staff. + + @item @code{numberOfStaffLines}@indexcode{numberOfStaffLines} + Specifies the number of staff lines. The default is 5. + + @item @code{postBreakPadding}@indexcode{postBreakPadding} + Extra space in points to be added after the clef, time signature + and key signature on the staff. Deprecated, do not use. + + @item @code{noVoltaBraces}@indexcode{noVoltaBraces} + Set to true to suppress the printing of brackets over alternate + endings specified by the command @code{\alternative}. + + @item @code{numberOfStaffLines}@indexcode{numberOfStaffLines} + Sets the number of lines that the staff has. + + @item @code{barAlways}@indexcode{barAlways} + If set to 1 a bar line is drawn after each note. + + @item @code{defaultBarType}@indexcode{defaultBarType} + Sets the default type of bar line. See Section XREF-barlines [FIXME] + for a list of available bar types. + + @item @code{instrument}, @code{instr} + @indexcode{instrument}@indexcode{instr} + If @code{Staff_margin_engraver} +@cindex Staff_margin_engraver + is + added to the Staff translator, then the @code{instrument} property + is used to label the first line of the staff and the @code{instr} + property is used to label subsequent lines. If the + @code{midiInstrument} property is not set, then @code{instrument} + is used to determine the instrument for MIDI output. + + @item @code{keyOctaviation}@indexcode{keyOctaviation} + If set to 1, then keys are the same in all octaves. If set + to 0 then the key signature for different octaves can be + different and is specified independently: + + @example + \keysignature bes fis' + @end example + + The default value is 1. Can be set to zero with + @code{\specialkey} or reset to 1 with @code{\normalkey}. + + @item @code{timeSignatureStyle}@indexcode{timeSignatureStyle} + Changes the default two-digit layout for time signatures. The + following values are recognized: + + @table @samp + @item @code{C}@indexcode{C} + 4/4 and 2/2 are typeset as C and struck C, respectively. All + other time signatures are written with two digits. + + @item @code{old}@indexcode{old} + 2/2, 3/2, 2/4, 3/4, 4/4, 6/4, 9/4, 4/8, 6/8 and 9/8 are + typeset with old-style mensuration marks. All other time + signatures are written with two digits. + + @item @code{1}@indexcode{1} + All time signatures are typeset with a single + digit, e.g. 3/2 is written as 3. + + @item @indexcode{CM/N}@code{C}@var{M}@code{/}@var{N}, + @indexcode{oldM/N}@code{old}@var{M}@code{/}@var{N} or + @code{old6/8alt}@indexcode{old6/8alt} + Tells LilyPond to use a specific symbol as time signature. + @end table + + The different time signature characters are shown below with its + names: + + @mudela[center] + + \score { + \notes\relative c'' { + \property Voice.textStyle = typewriter + \property Staff.timeSignatureStyle = "C2/2" + \time 2/2; a2^"C2/2" a2 + \property Staff.timeSignatureStyle = "C4/4" + \time 2/2; a2^"C4/4" a2 + \property Staff.timeSignatureStyle = "old2/2" + \time 2/2; a2^"old2/2" a2 + \property Staff.timeSignatureStyle = "old3/2" + \time 2/2; a2^"old3/2" a2 + \property Staff.timeSignatureStyle = "old2/4" + \time 2/2; a2^"old2/4" a2 + \property Staff.timeSignatureStyle = "old4/4" + \time 2/2; a2^"old4/4" a2 + \property Staff.timeSignatureStyle = "old6/4" + \time 2/2; a2^"old6/4" a2 + \property Staff.timeSignatureStyle = "old9/4" + \time 2/2; a2^"old9/4" a2 + \property Staff.timeSignatureStyle = "old4/8" + \time 2/2; a2^"old4/8" a2 + \property Staff.timeSignatureStyle = "old6/8" + \time 2/2; a2^"old6/8" a2 + \property Staff.timeSignatureStyle = "old6/8alt" + \time 2/2; a2^"old6/8alt" a2 + \property Staff.timeSignatureStyle = "old9/8" + \time 2/2; a2^"old9/8" a2 + } + \paper { + linewidth = 4.5 \in; + } + } + +@end mudela + + @item @code{voltaSpannerDuration}@indexcode{voltaSpannerDuration} + Set to an integer to control the size of the brackets printed by + @code{\alternative}. The integer specifies the number of whole + notes duration to use for the brackets. It is rounded to the + nearest measure. This can be used to shrink the length of + brackets in the situation where one alternative is very large. + It may have odd effects if the specified duration is longer than + the music given in an @code{\alternative}. +@end table + + +@cindex properties!GrandStaff + +@table @samp + @item @code{alignmentReference}@indexcode{alignmentReference} + Set to @code{\center} for vertical alignment reference point to be + in the center of the vertical group. Set to @code{\up} to put the + reference point at the top of the group. + + @item @code{maxVerticalAlign}@indexcode{maxVerticalAlign} + Set the maximum vertical distance between staffs. + + @item @code{minVerticalAlign}@indexcode{minVerticalAlign} + Set the minimum vertical distance between staffs. +@end table + + +@cindex properties!Score + +@table @samp + @item @code{skipBars}@indexcode{skipBars} + Set to 1 to skip the empty bars that are produced by + multimeasure notes and rests. These bars will not appear on the + printed output. Set to zero (the default) to expand multimeasure + notes and rests into their full length, printing the appropriate + number of empty bars so that synchronization with other voices is + preserved. + + @quotation + +@mudela[fragment,verbatim,center] +r1 r1*3 R1*3\property Score.skipBars=1 r1*3 R1*3 + +@end mudela + @end quotation + +@end table + + +@cindex properties!ChordNamesVoice + +@table @samp + @item @code{chordInversion}@indexcode{chordInversion} + Determines whether LilyPond should look for chord inversions when + translating from notes to chord names. Set to 1 to find + inversions. The default is 0 which does not look for + inversions. +@end table + diff --git a/Documentation/user/mudela.tely b/Documentation/user/refman.itely similarity index 61% rename from Documentation/user/mudela.tely rename to Documentation/user/refman.itely index ca4f316001..786cbc2f6d 100644 --- a/Documentation/user/mudela.tely +++ b/Documentation/user/refman.itely @@ -1,926 +1,3 @@ -\input texinfo @c -*-texinfo-*- -@setfilename mudela.info -@settitle Reference Manual - -@node Top, , , (dir) -@top -@menu -* Tutorial:: a tutorial introduction to lilypond -* Reference Manual:: Reference Manual -* Glossary:: A dictionary of musical terms. -@end menu - -@macro keyindex {word} -@cindex \word\ - -@end macro - -@macro indexcode {word} -@cindex \word\ - -@end macro - -@node Tutorial, , , Top -@menu -* Introduction:: Introduction -* The first tune:: The first tune -* Lyrics and chords:: Lyrics and chords -* Piano music:: Piano music -* end of tutorial:: The end -@end menu -@chapter Tutorial - -@node Introduction, , , Tutorial -@section Introduction - - -LilyPond prints music from a specification that you, the user, supply. -You have to give that specification using a @emph{language}. This -document is a gentle introduction to that language, which is called -Mudela, an acronym of Music Definition Language. - -This tutorial will demonstrate how to use Mudela by presenting -examples of input along with resulting output. We will use English -terms for notation. In case you are not familiar with those, you may -consult the glossary that is distributed with LilyPond. - -The examples discussed are included in the distribution, in the -subdirectory @file{input/tutorial/}. It is recommended that you -experiment with writing Mudela input yourself, to get a feel for -how LilyPond behaves. - -@node The first tune, , , Tutorial -@section The first tune - - -To demonstrate what LilyPond input looks like, we start off with a -full fledged, yet simple example. It is a convoluted version -of the famous menuet in J. S. Bach's @emph{Klavierbuechlein}. - -@mudela[verbatim] -% lines preceded by a percent are comments. -\include "paper16.ly" -\score { - \notes - \relative c'' \sequential{ - \time 3/4; - \key g; - - \repeat "volta" 2 { - d4 g,8 a b c d4 g, g | - e'4 c8 d e fis g4 g, g | - c4 d8()c b a( )b4 c8 b a g | - a4 [b8 a] [g fis] g2. | - } - - b'4 g8 a b g - a4 d,8 e fis d | - g4 e8 fis g d cis4 b8 cis a4 | - a8-. b-. cis-. d-. e-. fis-. - g4 fis e | - fis a, r8 cis8 - d2.-\fermata - \bar "|."; - } - \paper { - % standard settings are too wide for a book - linewidth = 14.0 \cm; - } -} -@end mudela - -Enter it (or copy it, the filename is @file{menuet.ly}), compile it -with LilyPond and view the output. Details of this procedure may vary -from system to system. To create the output, one would issue the -command `@code{ly2dvi menuet}'. @file{ly2dvi} is a program that does -the job of running LilyPond and TeX, handling of titles and -adjusting of page margins. - -If all goes well, the file @file{menuet.dvi} will be created. -To view this output, issue the command `@code{xdvi menuet}'. - -Now that we are familiar with the procedure of producing output, we -will analyse the input, line by line. -@ignore -Let's try to redo this -@example - - % lines preceded by a percent are comments. - -@end example -The percent sign, `@code{%}', introduces a line comment. If you want to -make larger comments, you can use block comments. These are delimited -by `@code{%@{}' and `@code{%@}}' -@end ignore -@multitable @columnfractions .60 .39 -@item -@noindent -@c @example urg: no tt font -@c @exdent % lines preceded by a percent are comments. -@exdent @code{% lines preceded by a percent are comments.} -@c @end example -@tab -The percent sign, `@code{%}', introduces a line comment. If you -want to make larger comments, you can use block comments. These -are delimited by `@code{%@{}' and `@code{%@}}' -@end multitable -@example - - \input "paper16.ly" - -@end example -By default, LilyPond will use definitions for a 20 -point@footnote{A point is the standard measure of length for -printing. One point is 1/72.27 inch.} high staff. We want smaller -output (16 point staff height), so we must import the settings for -that size, which is done.@example - - \score @{ - -@end example - A mudela file combines music with directions for outputting that -music. The music is combined with the output directions by putting -them into a @code{\score} block. -@example - - \notes - -@end example - This makes LilyPond ready for accepting notes. -@example - - \relative c'' - -@end example - As we will see, pitches are combinations of octave, note name and -chromatic alteration. In this scheme, the octave is indicated by -using raised quotes (`@code{'}') and ``lowered'' quotes (commas: -`@code{,}'). The central C is denoted by @code{c'}. The C one octave -higher is @code{c''}. One and two octaves below the central C is -denoted by @code{c} and @code{c,} respectively. - -For pitches in a long piece you might have to type many quotes. To -remedy this, LilyPond has a ``relative'' octave entry mode. In this -mode, octaves of notes without quotes are chosen such that a note is -as close as possible (graphically, on the staff) to the the preceding -note. If you add a high-quote an extra octave is added. The lowered -quote (a comma) will subtract an extra octave. Because the first note -has no predecessor, you have to give the (absolute) pitch of the note -to start with.@example - - \sequential @{ - -@end example - What follows is sequential music, i.e., -notes that are to be played and printed after each other.@example - - \time 3/4; - -@end example - This command changes the time signature of the current piece: a 3/4 -sign is printed. This command is also used to generate bar lines in -the right spots.@example - - \key g; - -@end example - This command changes the current key to G-major. Although this -command comes after the @code{\time} command, in the output, the key -signature comes before the time signature: LilyPond knows about music -typesetting conventions. @example - - \repeat "volta" 2 - -@end example - This command tells LilyPond that the following piece of music must -be played twice; @code{"volta"} volta brackets should be used for -alternatives---if there were any. -@example - - @{ - -@end example -The subject of the repeat is again sequential music. Since -@code{\sequential} is such a common construct, a shorthand is provided: -just leave off @code{\sequential}, and the result is the same. @example - - d4 - -@end example - This is a note with pitch @code{d} (determined up to octaves). The -relative music was started with a @code{c''}, so the real pitch of this -note is @code{d''}. The @code{4} designates the duration of the note -(it is a quarter note). @example - - a b - -@end example -These are notes with pitch @code{a} and @code{b}. Because their -duration is the same as the @code{g}, there is no need to enter the -duration (You may enter it anyway, eg. @code{a4 b4}) @example - - d4 g, g | - -@end example - Three more notes. The `@code{|}' character is a `barcheck'. When -processing the music, LilyPond will verify that barchecks are found at -the start of a measure. This can help you track down errors. - - So far, no notes were chromatically altered. Here is the first one -that is: @code{fis}. Mudela by default uses Dutch note names, and -``Fis'' is the Dutch note name for ``F sharp''. However, there is no -sharp sign in the output. The program keeps track of key signatures, -and will only print accidentals if they are needed. -@example - - c8 d e fis - -@end example -LilyPond guesses were beams can be added to eighth and shorter notes. -In this case, a beam over 4 eighths is added. -@example - - c4 d8( )c b a( )b4 c8 b a g | - -@end example - The next line shows how to make a slur: -the beginning and ending note of the slur is marked with an opening and -closing parenthesis respectively. In the line shown above this is -done for two slurs. Slur markers (parentheses) are between -the notes.@example - - a4 [b8 a] [g fis] - -@end example -Automatic beaming can be overridden by inserting beam marks -(brackets). Brackets are put around notes you want beamed.@example - - g2. | - -@end example -A duration with augmentation dot is notated -with the duration number followed by a period.@example - - @} - -@end example - This ends the sequential music to be repeated. LilyPond will typeset -a repeat bar. @example - - cis'4 b8 cis a4 | - -@end example - This line shows that Lily will print an accidental if that is -needed: the first C sharp will be printed with an accidental, the -second one without. @example - - a8-. b-. cis-. d-. e-. fis-. - -@end example -You can enter articulation signs either in a verbose form using a -shorthand. Here we demonstrate the shorthand: it is formed by a dash -and the the character for the articulation to use, e.g. `@code{-.}' for -staccato as shown above. @example - - fis a, r8 cis8 - -@end example - -Rests are denoted by the special notename `@code{r}'. You can also enter -an invisible rest by using the special notename `@code{s}'. -@example - - d2.-\fermata - -@end example - All articulations have a verbose form, like @code{\fermata}. The -command `@code{\fermata}' is not part of the core of the language (most -of the other discussed elements are), but it is a shorthand for a more -complicated description of a fermata. @code{\fermata} names that -description and is therefore called an @emph{identifier}. @example - - @} - -@end example - -Here the music ends. -@example - - \paper @{ - linewidth = 14.0\cm; - @} - -@end example -This specifies a conversion from music to notation output. Most of -the details of this conversions (font sizes, dimensions, etc.) have -been taken care of, but to fit the output in this document, it has -to be smaller. We do this by setting the line width to 14 centimeters -(approximately 6 inches). -@example - - @} - -@end example -The last brace ends the @code{\score} block. - -There are two things to note here. The format contains musical -concepts like pitches and durations, instead of symbols and positions: -the input format tries to capture the meaning of @emph{music}, and not -notation. Therefore Second, the format tries to be @emph{context-free}: -a note will sound the same regardless of the current time signature, -the key, etc. - -The purpose of LilyPond is explained informally by the term `music -typesetter'. This is not a fully correct name: not only does the -program print musical symbols, it also makes esthetic decisions. All -symbols and their placement is @emph{generated} from a high-level musical -description. In other words, LilyPond would be best -described by `music compiler' or `music to notation compiler'. - -@node Lyrics and chords, , , Tutorial -@section Lyrics and chords - -In this section we show how to typeset a song of unknown -origin.@footnote{The author would welcome information about the origin -of this song.}. - -@example -\header @{ - title = "The river is flowing"; - composer = "Traditional (?)"; -@} -\include "paper16.ly" -melody = \notes \relative c' @{ - \partial 8; - g8 | - c4 c8 d [es () d] c4 | f4 f8 g [es() d] c g | - c4 c8 d [es () d] c4 | d4 es8 d c4. - \bar "|."; -@} - -text = \lyrics @{ - The ri -- ver is flo- __ wing, flo -- wing and gro -- wing, the - ri -- ver is flo -- wing down to the sea. -@} - -accompaniment =\chords @{ - r8 - c2-3- f-3-.7 d-min es4 c8-min r8 - c2-min f-min7 g-7^3.5 c-min @} - -\score @{ - \simultaneous @{ -% \accompaniment - \context ChordNames \accompaniment - - \addlyrics - \context Staff = mel @{ - \property Staff.noAutoBeaming = "1" - \property Staff.automaticMelismata = "1" - \melody - @} - \context Lyrics \text - @} - \midi @{ @} - \paper @{ linewidth = 10.0\cm; @} -@} -@end example - - -The result would look this@footnote{The titling and font size shown -may differ, since the titling in this document is not generated by -@file{ly2dvi}.}. - -@center @strong{The river is flowing} -@center Traditional - -@mudela[center] -\header { - title = "The river is flowing"; - composer = "Traditional (?)"; -} -\include "paper16.ly" -melody = \notes \relative c' { - \partial 8; - g8 | - c4 c8 d [es () d] c4 | f4 f8 g [es() d] c g | - c4 c8 d [es () d] c4 | d4 es8 d c4. - \bar "|."; -} - -text = \lyrics { - The ri -- ver is flo- __ wing, flo -- wing and gro -- wing, the - ri -- ver is flo -- wing down to the sea. -} - -accompaniment =\chords { - r8 - c2-3- f-3-.7 d-min es4 c8-min r8 - c2-min f-min7 g-7^3.5 c-min } - -\score { - \simultaneous { -% \accompaniment - \context ChordNames \accompaniment - - \addlyrics - \context Staff = mel { - \property Staff.noAutoBeaming = "1" - \property Staff.automaticMelismata = "1" - \melody - } - \context Lyrics \text - } - \midi { } - \paper { linewidth = 10.0\cm; } -} -@end mudela - -Again, we will dissect the file line by line.@example - - \header @{ - -@end example -Information about the music you are about to typeset goes into a -@code{\header} block. The information in this block is not used by -LilyPond, but it is included in the output. @file{ly2dvi} uses this -information to print titles above the music. -@example - - title = "The river is flowing"; - composer = "Traditional (?)"; -@end example -the @code{\header} block contains assignments. An assignment starts -with a string. (which is unquoted, in this case). Then comes the -equal sign `@code{=}'. After the equal sign comes the expression you -want to store. In this case, you want to put in strings. The -information has to be quoted here, because it contains spaces. The -assignment is finished with a semicolon.@example - - \include "paper16.ly" - -@end example -Smaller size for inclusion in a book.@example - - melody = \notes \relative c' @{ - -@end example -The structure of the file will be the same as the previous one, a -@code{\score} block with music in it. To keep things readable, we will -give names to the different parts of music, and use the names to -construct the music within the score block. - -@example - - \partial 8; - -@end example - -The piece starts with an anacrusis of one eighth. @example - - c4 c8 d [es () d] c4 | f4 f8 g [es() d] c g | - c4 c8 d [es () d] c4 | d4 es8 d c4. - \bar "|."; - -@end example -We use explicit beaming. Since this is a song, we will turn automatic -beams off, and use explicit beaming where needed.@example - - @} - -@end example -This ends the definition of @code{melody}. Note that there are no -semicolons after assignments at top level.@example - - text = \lyrics @{ - -@end example -Another identifier assignment. This one is for the lyrics. -Lyrics are formed by syllables that have duration, and not by -notes. To make LilyPond parse words as syllables, switch it into -lyrics mode with @code{\lyrics}. Again, the brace after @code{\lyrics} -is a shorthand for @code{\sequential @{}. @example - - The4 ri -- ver is flo- __ wing, flo -- wing and gro -- wing, the - ri- ver is flo- __ wing down to the sea. - @} - -@end example -The syllables themselves are separated by spaces. You can get syllable -extenders by entering `@code{__}', and centered hyphens with -`@code{-}@code{-}'. We enter the syllables as if they are all quarter notes -in length (hence the @code{4}), and use a feature to align the -syllables to the music (which obviously isn't all quarter notes.) -@example - - accompaniment =\chords @{ - -@end example -We'll put chords over the music. There is a special mode (analogous -to @code{\lyrics} and @code{\notes} mode) where you can give the names -of the chords you want, instead of the notes comprising the chord. -@example - - r8 - -@end example -There is no accompaniment during the anacrusis.@example - - c2-3- f-3-.7 - -@end example -A chord is started by the tonic of the chord. The -first one lasts a half note. An unadorned note creates a major -triad, while a minor triad is wanted. @code{3-} modifies the third to -be small. @code{7} modifies (adds) a seventh, which is small by default -to create the @code{f a c es} chord. Multiple modifiers must be -separated by a dot.@example - - d-min es4 c8-min r8 - -@end example -Some modifiers have predefined names, eg. @code{min} is the same as -@code{3-}, so @code{d-min} is a minor @code{d} chord.@example - - c2-min f-min7 g-7^3.5 c-min @} - -@end example -A named modifier @code{min} and a normal modifier @code{7} do not have -to be separated by a dot. Tones from a chord are removed with chord -subtractions. Subtractions are started with a caret, and they are -also separated by dots. In this example, @code{g-7^3.5} produces a -minor seventh. The brace ends the sequential music. @example - - \score @{ - \simultaneous @{ - -@end example -We assemble the music in the @code{\score} block. Melody, lyrics and -accompaniment have to sound at the same time, so they should be -@code{\simultaneous}.@example - - %\accompaniment - -@end example -Chord mode generates notes grouped in @code{\simultaneous} music. If -you remove the comment sign, you can see the chords in normal -notation: they will be printed as note heads on a separate -staff. @example - - \context ChordNames \accompaniment - -@end example -Normally, the notes that you enter are transformed into note heads. -The note heads alone make no sense, they need surrounding information: -a key signature, a clef, staff lines, etc. They need @emph{context}. In -LilyPond, these symbols are created by objects called `interpretation -context'. Interpretation contexts only exist during a run of -LilyPond. Interpretation contexts that are for printing music (as -opposed to playing music) are called `notation context'. - -By default, LilyPond will create a Staff contexts for you. If you -would remove the @code{%} sign in the previous line, you can see that -mechanism in action. - -We don't want default contexts here, because we want names, not note -heads. An interpretation context can also created upon explicit -request. The keyword for such a request is @code{\context}. It takes -two arguments. The first is the name of a interpretation context. -The name is a string, it can be quoted with double quotes). The -second argument is the music that should be interpreted in this -context. For the previous line, we could have written @code{\context -Staff \accompaniment}, and get the same effect.@example - - \addlyrics - -@end example -The lyrics need to be aligned with the melody. This is done by -combining both with @code{\addlyrics}. @code{\addlyrics} takes two -pieces of music (usually a melody and lyrics, in that order) and -aligns the syllables of the second piece under the notes of the -first piece. If you would reverse the order, the notes would be -aligned on the lyrics, which is not very useful. (Besides, it looks -silly.)@example - - \context Staff = mel @{ - -@end example -This is the argument of @code{\addlyrics}. We instantiate a -@code{Staff} context explicitly: should you chose to remove comment -before the ``note heads'' version of the accompaniment, the -accompaniment will be on a nameless staff. The melody has to be on a -different staff as the accompaniment. This is accomplished by giving -the melody staff a different name.@example - - \property Staff.noAutoBeaming = "1" - -@end example -An interpretation context has variables that tune its behaviour. One -of the variables is @code{noAutoBeaming}. If set and non-zero (i.e., -true) LilyPond will not try to put automatic beaming on the current -staff.@example - - \property Staff.automaticMelismata = "1" - -@end example -Similarly, we don't want to print a syllable when there is -a slur. This sets up the Staff context to signal slurs while -@code{\addlyrics} is processed. @example - - \melody - @} - -@end example -Finally, we put the melody on the current staff. Note that the -@code{\property} directives and @code{\melody} are grouped in sequential -music, so the property settings are done before the melody is -processed. @example - - \context Lyrics \text - -@end example -The second argument of @code{\addlyrics} is the text. The text also -should not land on a Staff, but on a interpretation context for -syllables, extenders, hyphens etc. This context is called -Lyrics.@example - - @} - -@end example -This ends @code{\simultaneous}.@example - - \midi @{ @} - -@end example -This makes the music go to a MIDI file. MIDI is great for -checking music you enter. You listen to the MIDI file: if you hear -something unexpected, it's probably a typing error. @code{\midi} is an -`output definition', a declaration that specifies how to output music -analogous to @code{\paper @{ @}}.@example - - \paper @{ linewidth = 10.0\cm; @} - -@end example -We also want notation output. The linewidth is short so the piece -will be set in two lines. @example - - @} - -@end example -End the score block. - -@node Piano music, , , Tutorial -@section Piano music - -Our third subject is a piece piano music. The fragment in the input -file is a piano reduction of the G major Sinfonia by Giovanni Battista -Sammartini. It was composed around 1740. - -@mudela[verbatim] - -\include "paper16.ly"; - -viola = \notes \relative c' \context Voice = viola { - - \property Voice.verticalDirection = \down g'8. b,16 - s1 s2. r4 - g -} - -oboes = \notes \relative c'' \context Voice = oboe { - \stemup s4 g8. b,16 c8 r - \grace \times 2/3 { } - < - { \times 2/3 { a8 g c } \! c2 } - \context Voice = oboeTwo { - \stemdown - \grace { - \property Grace.verticalDirection = \down - [f,16 g] } - f8 e e2 - } > - \stemboth - \grace <)b8. d8.-\trill> | - [ < )f8. a>] <)b,8 d> r [ ] r | - [ < )e8. g>] -} - -hoomPah = \notes \transpose c' { - c8 \translator Staff = top \stemdown - c'8 \translator Staff = bottom \stemup } - -hoomPahHoomPah = { [\hoomPah \hoomPah] } - -bassvoices = \notes \relative c' { - c4 g8. b,16 - \hoomPahHoomPah \hoomPahHoomPah \hoomPahHoomPah \hoomPahHoomPah - \stemdown [c8 c'8] r4 - r4 - < {\stemup r2 } - \context Voice = reallyLow {\stemdown g2 ~ | g4 c8 } > -} - -\score { - \context PianoStaff \notes < - \context Staff = top < \time 2/2; - \context Voice = viola \viola - \oboes - > - \context Staff = bottom < \time 2/2; \clef bass; - \bassvoices - > - > - \midi { } - \paper { - indent = 0.0; - linewidth = 15.0 \cm; } -} -@end mudela - -If it looks like incomprehensible gibberish to you@dots{} Then you are -right. The author has doctored this example to have as many quirks in -one system as possible.@example -viola = \notes \relative c' \context Voice = viola @{ -@end example -In this example, you can see multiple parts on a staff. Each part is -associated with one notation context. This notation context handles -stems and dynamics (among others). The name of this context is -@code{Voice}. For each part we have to make sure that there is -precisely one Voice context@footnote{If @code{\context} would not -have been specified explicitly, three @code{Voice} contexts would be -created: one for each note in the first chord.}.@example - -@end example -@code{<} and @code{>} are short hands for @code{\simultaneous @{} and -@code{@}}. So the expression enclosed in @code{<} and @code{>} is a -chord. @code{\f} places a forte symbol under the chord.@example -\property Voice.verticalDirection = \down -@end example -@code{verticalDirection} is a property of the voice context. It -controls the directions of stems, articulations marks and other -symbols. - If @code{verticalDirection} is set to @code{\down} -(identifier for the integer -1) the stems go down, -@code{\up} (identifier for the integer 1) makes the stems go up.@example - g'8. b,16 -@end example -Relative octaves work a little differently with chords. The starting -point for the note following a chord is the first note of the chord. So -the @code{g} gets an octave up quote: it is a fifth above the starting -note of the previous chord (the central C). - -@example -s1 s2. r4 -@end example -@code{s} is a `spacer' rest. It does not print anything, but it does -have the duration of a rest. @example -oboes = \notes \relative c'' \context Voice = oboe @{ -@end example -Now comes a part for two oboes. They play homophonically, so we -print the notes as one voice that makes chords. Again, we insure that -these notes are indeed processed by precisely one context with -@code{\context}.@example -\stemup s4 g8. b,16 c8 r -@end example -@code{\stemup} is an identifier reference. It is shorthand for -@code{\property Voice.verticalDirection = \up}. If possible, you -should use predefined identifiers like these for setting properties. -Your input will be less dependent upon the implementation of LilyPond. -@example -\grace < )d4 f> -@end example -@code{\grace} introduces grace notes. It takes one argument, in this -case a chord. The slur started on the @code{e} of the chord -will be attached to the next note.@footnote{LilyPond will squirm -about unended Slurs. In this case, you can ignore the warning}. -@example -\times 2/3 -@end example -Tuplets are made with the @code{\times} keyword. It takes two -arguments: a fraction and a piece of music. The duration of the -second argument is multiplied by the first argument. Triplets make -notes occupy 2/3 of their notated duration, so in this case the -fraction is 2/3. @example -@{ @} -@end example -The piece of music to be `tripletted' is sequential music containing -three notes. On the first chord (the @code{d}), a crescendo is started -with @code{\<}.@example -< -@end example -At this point, the homophonic music splits into two rhythmically -different parts. We can't use a sequence of chords to enter this, so -we make a `chord' of sequences to do it. We start with the upper -voice, which continues with upward stems: @example - @{ \times 2/3 @{ a8 g c @} \! c2 @} -@end example -The crescendo is ended at the half note by the escaped exclamation -mark `@code{\!}'. @example -\context Voice = oboeTwo @{ -\stemdown -@end example -We can't share stems with the other voice, so we have to create a new -@code{Voice} context. We give it the name @code{oboeTwo} to distinguish -it from the other context. Stems go down in this voice. @example -\grace @{ -@end example -When a grace section is processed, a @code{Grace} context is -created. This context acts like a miniature score of its own. It has -its own time bookkeeping, and you can make notes, beams, slurs -etc. Here fiddle with a property and make a beam. The argument of -@code{\grace} is sequential music.@example -\property Grace.verticalDirection = \down -[f,16 g] @} -@end example -Normally, grace notes are always stem up, but in this case, the upper -voice interferes. We set the stems down here. - -As far as relative mode is concerned, the previous note is the -@code{c'''2} of the upper voice, so we have to go an octave down for -the @code{f}. -@example - - f8 e e2 -@} > -@end example -This ends the two-part section. @example -\stemboth -\grace <)b8. d8.-\trill> | -@end example -@code{\stemboth} ends the forced stem directions. From here, stems are -positioned as if it were single part music. - -The bass has a little hoom-pah melody to demonstrate parts switching -between staffs. Since it is repetitive, we use identifiers:@example -hoomPah = \notes \transpose c' @{ -@end example -Transposing can be done with @code{\transpose}. It takes two -arguments; the first specifies what central C should be transposed to. -The second is the to-be-transposed music. As you can see, in this -case, the transposition is a no-op. Central C is transposed to -central C. - -The purpose of this no-op is circumventing relative mode. Relative -mode can not be used in conjunction with transposition, so relative -mode will leave the contents of @code{\hoomPah} alone. We can use it -without having to worry about getting the motive in a wrong -octave@footnote{@code{hoomPah = \relative @dots{}} would be more -intuitive to use, but that would not let me plug @code{\transpose} -:-).}.@example -c8 \translator Staff = top \stemdown -@end example -We assume that the first note will be put in the lower staff. After -that note we switch to the upper staff with @code{\translator}. To be -precise, this @code{\translator} entry switches the current voice to a -@code{Staff} named @code{top}. So we have to name the upper staff -`@code{top}'. Stem directions are set to avoid interfering with the -oboe voices. @example -c'8 \translator Staff = bottom \stemup @} -@end example -Then a note is put on the upper staff, and we switch again. We have -to name the lower staff `@code{bottom}'. @example -hoomPahHoomPah = @{ [\hoomPah \hoomPah] @} -@end example -Put two of these fragments in sequence, and beam them.@example -bassvoices = \notes \relative c' @{ -c4 g8. b,16 -\hoomPahHoomPah \hoomPahHoomPah \hoomPahHoomPah -\hoomPahHoomPah -@end example -Entering the bass part is easy: the hoomPahHoomPah variable is -referenced four times.@example -\context Voice = reallyLow @{\stemdown g2 ~ | g4 c8 @} > -@end example -After skipping some lines, we see @code{~}. This mark makes ties.@example -\context PianoStaff -@end example -For piano music, a special context is needed to get cross staff -beaming right. It is called @code{PianoStaff}.@example -\context Staff = bottom < \time 2/2; \clef bass; -@end example -The bottom staff must have a different clef.@example -indent = 0.0; -@end example -To make some more room on the line, the first (in this case the only) -line is not indented. The line still looks is very cramped, but that is due -to the format of this tutorial. - -This example shows a lot of features, but the organisation isn't -perfect. For example, it would be less confusing to use a chord -containing sequential music than a sequence of chords for the oboe -parts. - -[TODO: demonstrate Hara-Kiri with scores and part extraction.] - -@node end of tutorial, , , Tutorial -@section The end - -That's all folks. From here, you can either try fiddling with input -files, or you can read the reference manual. - - - - @node Reference Manual, , , Top @@ -929,37 +6,33 @@ files, or you can read the reference manual. * Top level:: Top level * notenames:: notenames * Lexical conventions:: Lexical conventions -* notelang:: notelang +* Other languages:: notelang * modes:: modes * Types:: Types * Music expressions:: Music expressions * Atomic music expressions:: Atomic music expressions -* atomicmusic:: atomicmusic -* notedesc:: notedesc +* Note specification:: notedesc * barlines:: barlines -* manualbeam:: manualbeam +* Manual beams:: Manual beam * tremolo:: tremolo * Compound music expressions:: Compound music expressions -* compoundmusic:: compoundmusic * relative:: relative -* sec-repeats:: sec-repeats +* Repeats:: Repeats * transpose:: transpose * Ambiguities:: Ambiguities * Notation conversion specifics:: Notation conversion specifics * autobeam:: autobeam * lyricprint:: lyricprint * Notation Contexts:: Notation Contexts -* contextselection:: contextselection +* Properties:: Changing formatting * Notation output definitions:: Notation output definitions -* output:: output * paper:: paper -* papervars:: papervars +* Paper variables:: papervars * contextdefs:: contextdefs * engravers:: engravers * Sound output:: Sound output * midilist:: midilist * Pre-defined Identifiers:: Pre-defined Identifiers -* Running LilyPond:: Running LilyPond @end menu @chapter Reference Manual @@ -1234,7 +307,7 @@ This is used to detect invalid input, and to aid @cindex other languages -@node notelang, , , Reference Manual +@node Other languages, , , Reference Manual Note name definitions have been provided in various languages. Simply include the language specific init file. For example: @@ -1465,7 +538,7 @@ discussed in subsection XREF-compoundmusic [FIXME]. @node Atomic music expressions, , , Reference Manual @section Atomic music expressions -@node atomicmusic, , , Reference Manual + @@ -1505,7 +578,7 @@ In Note, Chord, and Lyrics mode, durations may be designated by numbers and dots. See Section XREF-notelang [FIXME] for details. -@node notedesc, , , Reference Manual +@node Note specification, , , Reference Manual @cindex note specification @@ -1934,7 +1007,7 @@ this has the same effect as the space rest `@code{s}'. @cindex beams -@node manualbeam, , , Reference Manual +@node Manual beams, , , Reference Manual A beam is specified by surrounding the beamed notes with brackets `@code{[}@indexcode{[}' and `@code{]}@indexcode{]}'. @@ -2215,8 +1288,6 @@ no last value. @cindex compound music expressions -@node compoundmusic, , , Reference Manual - Music expressions are compound data structures. You can nest music expressions any way you like. This simple example shows how three chords can be expressed in two different ways: @@ -2229,14 +1300,12 @@ chords can be expressed in two different ways: } @end mudela - - @cindex context selection +@keyindex{context} @example - - \context@keyindex{context} - @var{contexttype} [@code{=} @var{contextname}] @var{musicexpr} + \context + @var{contexttype} [= @var{contextname}] @var{musicexpr} @end example Interpret @var{musicexpr} within a context of type @var{contexttype}. @@ -2563,7 +1632,7 @@ error, since there will be no main note to attach the grace notes to. @cindex repeats -@node sec-repeats, , , Reference Manual +@node Repeats, , , Reference Manual In order to specify repeats, use the @code{\repeat}@keyindex{repeat} keyword. Since repeats look and sound differently when played or @@ -3061,8 +2130,6 @@ contexts is needed that will accept notes. The default for this is a these contexts results in the staff being printed. -@node contextselection, , , Reference Manual - @cindex context You can also create contexts manually, and you probably have to do so @@ -3270,552 +2337,7 @@ currently search the source code for calls to @code{get_property}. The rest of the section is devoted to an (incomplete) overview of available properties. - -@cindex properties!Lyrics - -@table @samp - @item @code{textStyle}@indexcode{textStyle} - Set the font for lyrics. The available font choices are - @code{roman}, @code{italic}, @code{bold}, @code{large}, @code{Large}, - @code{typewriter}, and @code{finger}. The @code{finger} font can - only display numbers. Note also that you must be careful when - using @code{\property} in Lyrics mode, because of the way strings - are parsed. Either put quotes around the arguments to - @code{\property} or be sure to leave a space on both sides of the - dot. -@end table - - -@cindex properties!Thread - -@table @samp - @item @code{noteheadStyle}@indexcode{noteheadStyle} - Selects type of note head. Choices are @code{cross}, - @code{diamond}, @code{harmonic}, @code{transparent}, and @code{""}. - They are shown in that order below. - - @mudela[center] - - \score { - \notes { - \property Staff.barNonAuto = 1 - \property Voice.noteHeadStyle = cross - a' - \property Voice.noteHeadStyle = diamond - a' - \property Voice.noteHeadStyle = harmonic - a' - \property Voice.noteHeadStyle = transparent - a' - \property Voice.noteHeadStyle = "" - a' - } - \paper { - linewidth = -1.; - } - } - -@end mudela -@end table - -@subsubheading Grace properties - -@cindex properties!Grace - - -@table @samp - @item @code{stemStyle}@indexcode{stemStyle} - By default set to @code{"grace"} meaning that all unbeamed - notes with flags are typeset with a slash through the flag. - Setting to @code{""} gives standard flags. -@end table - - -@subsubheading Voice properties - -@cindex properties!Voice - -@table @samp - @item @code{abbrev}@indexcode{abbrev} - Set length for tremolo to be used if no length is explicitly - specified. - - @item @code{articulationScriptPadding}@indexcode{articulationScriptPadding} - - Determines the extra space added between articulation marks, such - as staccato, tenuto, trill, up/down bow or fermata, and the - closest staff line or note. - - @item @code{articulationScriptVerticalDirection} - @indexcode{articulationScriptVerticalDirection} - Determines the location of articulation marks. Set to @code{\up} - to print marks above the staff; set to @code{\down} to print marks - below the staff. This property does not override explicit - directions marked with `@code{^}' or `@code{_}' in the mudela file. - - @item @code{noAutoBeaming}@indexcode{beamAuto} - If set to 1 then beams are not generated automatically. - - @item @code{beamAutoEnd}@indexcode{beamAutoEnd} - Specifies when automatically generated beams can end. See - section XREF-autobeam [FIXME]. - - @item @code{beamAutoBegin}@indexcode{beamAutoBegin} - Specifies when automatically generated beams can start. See - section XREF-autobeam [FIXME]. - - @item @code{beamquantisation}@indexcode{beamquantisation} - Set to @code{\none} for no quantization. Set to @code{\normal} to - quantize position and slope. Set to @code{\traditional} to avoid - wedges. These three settings are available via - @code{\beamposfree}@keyindex{beamposfree}, - @code{\beamposnormal}@keyindex{beamposnormal}, and - @code{\beampostraditional}@keyindex{beampostraditional}. - - @item @code{beamslopedamping}@indexcode{beamslopedamping} - Set to @code{\none} for undamped beams. Set to @code{\normal} for - damped beams. Set to @code{\infinity} for beams with zero slope. - The identifiers - @code{\beamslopeproportional}@keyindex{beamslopeproportional}, - @code{\beamslopedamped}@keyindex{beamslopedamped}, and - @code{\beamslopezero}@keyindex{beamslopezero} each set the - corresponding value. - - @item @code{dynamicDirection}@indexcode{dynamicDirection} - Determines location of dynamic marks. Set to @code{\up} to print - marks above the staff; set to @code{\down} to print marks below - the staff. - - @item @code{dynamicStyle}@indexcode{dynamicStyle} - Set the text style for dynamics. - - @item @code{fontSize}@indexcode{fontSize} - Can be used to select smaller font sizes for music. The normal - font size is 0, and the two smaller sizes are -1 - and -2. - - @item @code{forceHorizontalShift}@indexcode{forceHorizontalShift} - Force horizontal shift for collision resolution. It overrides - automatic collision resolution. The value is the shift amount - expressed in @code{note_width}, as set in the paper section. - -[FIXME: this should be moved] - -Lilypond always arranges note heads on alternate sides of a stem (that -is, within a single voice) as necessary to prevent collisions (note head -overlaps). For up stems, the upper note of a colliding pair is placed -on the right side of the stem, the lower on the left. For down stems, -the algorithm works in reverse. - -Lily also attempts to prevent collisions of note heads in different -voices. A situation where chords of two or more voices are played -simultaneously within one staff. - -By default, if only two voices (and both have opposite stem directions) -are in this 'collision group', the notes both are shifted by @code{0.5 -\quartwidth} if there are unisons or seconds between the voices. - -If there are more than two voices in a collision group, shifting is -inactive by default, since in this case, there are multiple chords with -the same stem direction. By distinguish between those chords, LilyPond -can do collision resolution in these cases as well. - -Distinguishing between voices with the same stem direction, is done by -setting the property @code{Voice.horizontalNoteShift}. It must be set -to a different integer for each voice. Then, all note heads in collision -groups (not just unisons and seconds) will be offset, one voice relative -another. The following fragment of sheet music shows how shifting is -done, with values of @code{horizontalNoteShift} printed over and under -the notes. In this case the chords are just simple notes. - -@c URG : mudela book bug. -@mudela[singleline] -\score { - \notes \context Staff < - \context Voice = VA { \stemup f''4^"0" } - \context Voice = VB {\stemup - \property Voice.horizontalNoteShift = 1 d''4^" 1" } - \context Voice = VC { \stemup \property -Voice.horizontalNoteShift = 2 b'4^" 2" } - \context Voice = VD { \stemdown \property -Voice.horizontalNoteShift = 1 g'4_"1 " } - \context Voice = VE { \stemdown e'4_"0" } - > -} -@end mudela - -If you are not satisfied with the collision resolution of LilyPond, you -can override the horizontal shift value of the chord of one Voice, by -setting @code{forceHorizontalShift}. This sets the amount shift, -measured in black note head widths. - -To take complete control of note position shifts in complex passages, -you have set things up for normal collisions and override all shifts by -setting @code{forceHorizontalShift} to zero everywhere -@example -\property Voice.horizontalNoteShift = -\property Voice.forceHorizontalShift = "0.0" -@end example - -Then you can set the force property to a suitable value before each note -that really needs it (unisons and seconds), and reset it to 0.0 after -the note. - - @item @code{horizontalNoteShift}@indexcode{horizontalNoteShift} - Enable LilyPond to shift notes horizontally if they collide with - other notes. This is useful when typesetting many voices on one - staff. The identifier @code{\shift}@keyindex{shift} is defined to - enable this. Traditionally, the outer chords (the upmost and - downmost voices), should have no @code{horizontalNoteShift}. - - @item @code{markScriptPadding}@indexcode{markScriptPadding} - Determines the extra space added between the mark and the closest - staff line or note. - - @item @code{markDirection}@indexcode{markDirection} - Determines if marks should be printed above or below the staff. - Set to @code{\up} to print marks above the staff; set to - @code{\down} to print marks below the staff. - - @item @code{midiInstrument}@indexcode{midiInstrument} - Sets the instrument for MIDI output. If this property is not set - then LilyPond will use the @code{instrument} property. This must - be set to one of the strings on the list of MIDI instruments that - appears in section XREF-midilist [FIXME]. If you use a string which - is not listed, LilyPond will silently substitute piano. - - @item @code{oldTieBehavior}@indexcode{oldTieBehavior} - Set to 1 in order to get old tie behavior where ties would - connect unequal pitches. This property is deprecated, and its - use is not recommended. - - @item @code{restStyle}@indexcode{restStyle} - Change the layout of rests shorter than quarter notes. - Currently, the standard layout @code{""} and mensural notation - @code{"mensural"} are available. Mensural rests of duration - 32 or shorter are not available. - - @item @code{scriptHorizontal}@indexcode{scriptHorizontal} - Put scripts left or right of note heads. Support for this is - limited. Accidentals will collide with scripts. - - @item @code{slurVerticalDirection}@indexcode{slurVerticalDirection} - Set to @code{\free} for free choice of slur direction, set to - @code{\up} to force slurs up, set to @code{\down} to force slurs - down. The shorthands @code{\slurup}@keyindex{slurup}, - @code{\slurdown}@keyindex{slurdown}, and - @code{\slurboth}@keyindex{slurboth} are available. - - @item @code{slurDash}@indexcode{slurDash} - Set to 0 for normal slurs, 1 for dotted slurs, and a - larger value for dashed slurs. Identifiers - @code{\slurnormal}@keyindex{slurnormal} and - @code{\slurdotted}@keyindex{slurdotted} are predefined to set the - first two settings. - -@item @code{stemLength}@indexcode{stemLength} - Set length of stems. Unit is `@code{interline}/2', so - @code{stemLength} defaults to 7. - - @item @code{stemLeftBeamCount}@indexcode{stemLeftBeamCount} - Specify the number of beams to draw on the left side of the next - note. Overrides automatic beaming. The value is only used once, - and then it is erased. - - @item @code{stemRightBeamCount}@indexcode{stemRightBeamCount} - Specify the number of beams to draw on the right side of the next - note. Overrides automatic beaming. The value is only used once, - and then it is erased. - @item @code{tieVerticalDirection}@indexcode{tieVerticalDirection} - Set to @code{\free} for free choice of tie direction, set to - @code{\up} to force ties up, set to @code{\down} to force ties - down. - - @item @code{transposing}@indexcode{transposing} - Transpose the MIDI output. Set this property to the number of - half-steps to transpose by. - - - @item @code{textEmptyDimension}@indexcode{textEmptyDimension} - If set to 1 then text placed above or below the staff is - assumed to have zero width. - - @item @code{textStyle}@indexcode{textStyle} - Set the text style for superscripts and subscripts. See above - for list of text styles. - - @item @code{textScriptPadding}@indexcode{textScriptPadding} - Determines the extra space added between superscripted resp. - subscripted text and the closest staff line or note. - - @item @code{verticalDirection}@indexcode{verticalDirection} - Determines the direction of stems, subscripts, beams, slurs, and - ties. Set to @code{\down} to force them down, @code{\up} to force - them up, or @code{\free} to let LilyPond decide. This can be used - to distinguish between voices on the same staff. The - @code{\stemdown}@keyindex{stemdown}, @code{\stemup}@keyindex{stemup}, - and @code{\stemboth}@keyindex{stemboth} identifiers set this - property. - - - @item @code{tupletDirection}@indexcode{tupletDirection} - Determines the direction of triplets and other tuplets. Set to - @code{\down} to force them below the staff, @code{\up} to force - them above, or @code{\free} to let LilyPond decide. - - @item @code{tupletVisibility}@indexcode{tupletVisibility} - Determines whether tuplets of notes are labelled. Setting - to 0 shows nothing; setting to 1 shows a number; - setting to 2 shows a number and a bracket if there is no - beam; setting to 3 shows a number, and if there is no beam - it adds a bracket; setting to 4 shows both a number and a - bracket unconditionally. - -@end table - -@subsubheading Staff properties - -@cindex properties!Staff - -@table @samp - - @item @code{barNonAuto}@indexcode{barNonAuto} - If set to 1 then bar lines will not be printed - automatically; they must be explicitly created with @code{\bar} - keywords. Unlike with the @code{\cadenza} keyword, measures are - still counted. Bar generation will resume according to that - count if this property is set to zero. - - @item @code{barNumberDirection}@indexcode{barNumberDirection} - Set to @code{\up} or @code{\down} to put bar numbers above or below - the staff. - - @item @code{barNumberHangOnClef}@indexcode{barNumberHangOnClef} - Set to 1 to cause bar numbers to appear above or below the - clef instead of on the bar line. This property is deprecated. - Do not use. - - @item @code{barNumberScriptPadding}@indexcode{barNumberScriptPadding} - Sets extra space between the bar number and the bar it labels. - - @item @code{barSize}@indexcode{barSize} - Specify the height of the bar lines if it should be different - than the staff height. - - @item @code{barAtLineStart}@indexcode{barAtLineStart} - Set to 1 to produce a bar line after the clef at the start - of each line (but not at the beginning of the music). - - @item @code{clefStyle}@indexcode{clefStyle} - Determines how clefs are typeset. If set to @code{transparent}, - the clefs are not printed at all, if set to - @code{fullSizeChanges}, clef changes in the middle of a line are - typeset with a full size clef. By default, clef changes are - typeset in smaller size. - - @item @code{createKeyOnClefChange}@indexcode{createKeyOnClefChange} - Set to a nonempty string if you want key signatures to be printed - when the clef changes. Set to the empty string if you do not - want key signatures printed. - - @item @code{createInitdefaultClef}@indexcode{createInitdefaultClef} - Specify whether clefs are created on default? (Doesn't seem to - do anything.) - - @item @code{defaultClef}@indexcode{defaultClef} - Determines the default clef. See @code{\clef} keyword. - - @item @code{markHangOnClef}@indexcode{markHangOnClef} - Set to 1 to cause marks to appear by clefs instead of by bar - lines. Deprecated, use is not recommended. - - @item @code{marginDirection}@indexcode{marginDirection} - Set to @code{\left} or @code{\right} to specify location of - marginal scripts. - - @item @code{marginScriptPadding}@indexcode{marginScriptPadding} - Specify extra space for marginal scripts. - - @item @code{forgetAccidentals}@indexcode{forgetAccidentals} - Causes accidentals to be printed at every note instead of - remembered for the duration of a measure. - - @item @code{noResetKey}@indexcode{noResetKey} - Do not reset the key at the start of a measure. Accidentals will - be printed only once and are in effect until overridden, possibly - many measures later. - - @item @code{staffLineLeading}@indexcode{staffLineLeading} - Specifies the distance (in points) between lines of the staff. - - @item @code{numberOfStaffLines}@indexcode{numberOfStaffLines} - Specifies the number of staff lines. The default is 5. - - @item @code{postBreakPadding}@indexcode{postBreakPadding} - Extra space in points to be added after the clef, time signature - and key signature on the staff. Deprecated, do not use. - - @item @code{noVoltaBraces}@indexcode{noVoltaBraces} - Set to true to suppress the printing of brackets over alternate - endings specified by the command @code{\alternative}. - - @item @code{numberOfStaffLines}@indexcode{numberOfStaffLines} - Sets the number of lines that the staff has. - - @item @code{barAlways}@indexcode{barAlways} - If set to 1 a bar line is drawn after each note. - - @item @code{defaultBarType}@indexcode{defaultBarType} - Sets the default type of bar line. See Section XREF-barlines [FIXME] - for a list of available bar types. - - @item @code{instrument}, @code{instr} - @indexcode{instrument}@indexcode{instr} - If @code{Staff_margin_engraver} -@cindex Staff_margin_engraver - is - added to the Staff translator, then the @code{instrument} property - is used to label the first line of the staff and the @code{instr} - property is used to label subsequent lines. If the - @code{midiInstrument} property is not set, then @code{instrument} - is used to determine the instrument for MIDI output. - - @item @code{keyOctaviation}@indexcode{keyOctaviation} - If set to 1, then keys are the same in all octaves. If set - to 0 then the key signature for different octaves can be - different and is specified independently: - - @example - \keysignature bes fis' - @end example - - The default value is 1. Can be set to zero with - @code{\specialkey} or reset to 1 with @code{\normalkey}. - - @item @code{timeSignatureStyle}@indexcode{timeSignatureStyle} - Changes the default two-digit layout for time signatures. The - following values are recognized: - - @table @samp - @item @code{C}@indexcode{C} - 4/4 and 2/2 are typeset as C and struck C, respectively. All - other time signatures are written with two digits. - - @item @code{old}@indexcode{old} - 2/2, 3/2, 2/4, 3/4, 4/4, 6/4, 9/4, 4/8, 6/8 and 9/8 are - typeset with old-style mensuration marks. All other time - signatures are written with two digits. - - @item @code{1}@indexcode{1} - All time signatures are typeset with a single - digit, e.g. 3/2 is written as 3. - - @item @indexcode{CM/N}@code{C}@var{M}@code{/}@var{N}, - @indexcode{oldM/N}@code{old}@var{M}@code{/}@var{N} or - @code{old6/8alt}@indexcode{old6/8alt} - Tells LilyPond to use a specific symbol as time signature. - @end table - - The different time signature characters are shown below with its - names: - - @mudela[center] - - \score { - \notes\relative c'' { - \property Voice.textStyle = typewriter - \property Staff.timeSignatureStyle = "C2/2" - \time 2/2; a2^"C2/2" a2 - \property Staff.timeSignatureStyle = "C4/4" - \time 2/2; a2^"C4/4" a2 - \property Staff.timeSignatureStyle = "old2/2" - \time 2/2; a2^"old2/2" a2 - \property Staff.timeSignatureStyle = "old3/2" - \time 2/2; a2^"old3/2" a2 - \property Staff.timeSignatureStyle = "old2/4" - \time 2/2; a2^"old2/4" a2 - \property Staff.timeSignatureStyle = "old4/4" - \time 2/2; a2^"old4/4" a2 - \property Staff.timeSignatureStyle = "old6/4" - \time 2/2; a2^"old6/4" a2 - \property Staff.timeSignatureStyle = "old9/4" - \time 2/2; a2^"old9/4" a2 - \property Staff.timeSignatureStyle = "old4/8" - \time 2/2; a2^"old4/8" a2 - \property Staff.timeSignatureStyle = "old6/8" - \time 2/2; a2^"old6/8" a2 - \property Staff.timeSignatureStyle = "old6/8alt" - \time 2/2; a2^"old6/8alt" a2 - \property Staff.timeSignatureStyle = "old9/8" - \time 2/2; a2^"old9/8" a2 - } - \paper { - linewidth = 4.5 \in; - } - } - -@end mudela - - @item @code{voltaSpannerDuration}@indexcode{voltaSpannerDuration} - Set to an integer to control the size of the brackets printed by - @code{\alternative}. The integer specifies the number of whole - notes duration to use for the brackets. It is rounded to the - nearest measure. This can be used to shrink the length of - brackets in the situation where one alternative is very large. - It may have odd effects if the specified duration is longer than - the music given in an @code{\alternative}. -@end table - - -@cindex properties!GrandStaff - -@table @samp - @item @code{alignmentReference}@indexcode{alignmentReference} - Set to @code{\center} for vertical alignment reference point to be - in the center of the vertical group. Set to @code{\up} to put the - reference point at the top of the group. - - @item @code{maxVerticalAlign}@indexcode{maxVerticalAlign} - Set the maximum vertical distance between staffs. - - @item @code{minVerticalAlign}@indexcode{minVerticalAlign} - Set the minimum vertical distance between staffs. -@end table - - -@cindex properties!Score - -@table @samp - @item @code{skipBars}@indexcode{skipBars} - Set to 1 to skip the empty bars that are produced by - multimeasure notes and rests. These bars will not appear on the - printed output. Set to zero (the default) to expand multimeasure - notes and rests into their full length, printing the appropriate - number of empty bars so that synchronization with other voices is - preserved. - - @quotation - -@mudela[fragment,verbatim,center] -r1 r1*3 R1*3\property Score.skipBars=1 r1*3 R1*3 - -@end mudela - @end quotation - -@end table - - -@cindex properties!ChordNamesVoice - -@table @samp - @item @code{chordInversion}@indexcode{chordInversion} - Determines whether LilyPond should look for chord inversions when - translating from notes to chord names. Set to 1 to find - inversions. The default is 0 which does not look for - inversions. -@end table - - +@mbinclude properties.itely @node Notation output definitions, , , Reference Manual @section Notation output definitions @@ -3904,7 +2426,7 @@ select. @cindex paper variables -@node papervars, , , Reference Manual +@node Paper variables, , , Reference Manual There is a large number of paper variables that are used to control details of the layout. These variables control the defaults for the @@ -3938,14 +2460,6 @@ Nevertheless, here are some variables you may want to use or change: @item @code{rulethickness}@indexcode{rulethickness} Determines the thickness of staff and bar lines. - - @item @code{castingalgorithm}@indexcode{castingalgorithm} - The algorithm to use for breaking lines. Choices are - @code{\Gourlay}@keyindex{Gourlay} for a TeX-like dynamic - programming algorithm, and @code{\Wordwrap}@keyindex{Wordwrap} for - a simple algorithm. Gourlay breaking looks much better, but - takes a lot more resources. Wordwrap leaves loosely spaced lines - at the end. @end table @@ -4460,56 +2974,3 @@ provide shorthands for some settings. Most of them are in Used for setting various direction properties. Is equal to 1. @end table - - - -@node Running LilyPond, , , Reference Manual -@section Running LilyPond - -@cindex running LilyPond - - -When invoked with a filename that has no extension, LilyPond will try -adding `@file{.ly}' as an extension first, then `@file{.fly}' and -finally `@file{.sly}' extension. If the filename ends with -`@file{.fly}', LilyPond processes the file as music using -`@file{init.fly}'. In this case, LilyPond does something like: - -@quotation - -@example -\score @{ - \notes\relative c @{ - \input "yourfile.fly" - @} - \paper@{@} - \midi@{@} -@} -@end example - -@end quotation - -The result of `@file{.sly}' is similar except that a single unjustified -line is produced. - -If you invoke LilyPond with a file `@file{foo.}@var{ext}' that doesn't -have the `@file{.ly}' extension, then LilyPond will look for a file -called `@file{init.}@var{ext}' and process this file. The file -`@file{init.}@var{ext}' must contain the @code{\maininput} keyword or -LilyPond will not read the user specified file. - -When LilyPond processes @file{filename.ly} it will produce -@file{filename.tex} as output. If @file{filename.ly} contains a second -@code{\paper} keyword, then LilyPond will produce @file{filename-1.tex} -as well. Subsequent @code{\paper} keywords will produce sequentially -numbered file names. Several files can be specified; they will each -be processed independently.@footnote{Not entirely true: The status of -GUILE is kept.} - -@node Glossary, , , Top -@chapter Glossary - -@include glossary.texi - - -@bye diff --git a/Documentation/user/tutorial.itely b/Documentation/user/tutorial.itely new file mode 100644 index 0000000000..35b5dc0cae --- /dev/null +++ b/Documentation/user/tutorial.itely @@ -0,0 +1,900 @@ + +@chapter Tutorial + + +@node Tutorial, , , Top +@menu +* Introduction:: Introduction +* The first tune:: The first tune +* Lyrics and chords:: Lyrics and chords +* Piano music:: Piano music +* end of tutorial:: The end +@end menu + +@node Introduction, , , Tutorial +@section Introduction + + +LilyPond prints music from a specification that you, the user, supply. +You have to give that specification using a @emph{language}. This +document is a gentle introduction to that language, which is called +Mudela, an acronym of Music Definition Language. + +This tutorial will demonstrate how to use Mudela by presenting +examples of input along with resulting output. We will use English +terms for notation. In case you are not familiar with those, you may +consult the glossary that is distributed with LilyPond. + +The examples discussed are included in the distribution, in the +subdirectory @file{input/tutorial/}. It is recommended that you +experiment with writing Mudela input yourself, to get a feel for +how LilyPond behaves. + +@node The first tune, , , Tutorial +@section The first tune + + +To demonstrate what LilyPond input looks like, we start off with a +full fledged, yet simple example. It is a convoluted version +of the famous menuet in J. S. Bach's @emph{Klavierbuechlein}. + +@mudela[verbatim] +% lines preceded by a percent are comments. +\include "paper16.ly" +\score { + \notes + \relative c'' \sequential{ + \time 3/4; + \key g; + + \repeat "volta" 2 { + d4 g,8 a b c d4 g, g | + e'4 c8 d e fis g4 g, g | + c4 d8()c b a( )b4 c8 b a g | + a4 [b8 a] [g fis] g2. | + } + + b'4 g8 a b g + a4 d,8 e fis d | + g4 e8 fis g d cis4 b8 cis a4 | + a8-. b-. cis-. d-. e-. fis-. + g4 fis e | + fis a, r8 cis8 + d2.-\fermata + \bar "|."; + } + \paper { + % standard settings are too wide for a book + linewidth = 14.0 \cm; + } +} +@end mudela + +Enter it (or copy it, the filename is @file{menuet.ly}), compile it +with LilyPond and view the output. Details of this procedure may vary +from system to system. To create the output, one would issue the +command `@code{ly2dvi menuet}'. @file{ly2dvi} is a program that does +the job of running LilyPond and TeX, handling of titles and +adjusting of page margins. + +If all goes well, the file @file{menuet.dvi} will be created. +To view this output, issue the command `@code{xdvi menuet}'. + +Now that we are familiar with the procedure of producing output, we +will analyse the input, line by line. +@ignore +Let's try to redo this +@example + + % lines preceded by a percent are comments. + +@end example +The percent sign, `@code{%}', introduces a line comment. If you want to +make larger comments, you can use block comments. These are delimited +by `@code{%@{}' and `@code{%@}}' +@end ignore +@multitable @columnfractions .60 .39 +@item +@noindent +@c @example urg: no tt font +@c @exdent % lines preceded by a percent are comments. +@exdent @code{% lines preceded by a percent are comments.} +@c @end example +@tab +The percent sign, `@code{%}', introduces a line comment. If you +want to make larger comments, you can use block comments. These +are delimited by `@code{%@{}' and `@code{%@}}' +@end multitable +@example + + \input "paper16.ly" + +@end example +By default, LilyPond will use definitions for a 20 +point@footnote{A point is the standard measure of length for +printing. One point is 1/72.27 inch.} high staff. We want smaller +output (16 point staff height), so we must import the settings for +that size, which is done.@example + + \score @{ + +@end example + A mudela file combines music with directions for outputting that +music. The music is combined with the output directions by putting +them into a @code{\score} block. +@example + + \notes + +@end example + This makes LilyPond ready for accepting notes. +@example + + \relative c'' + +@end example + As we will see, pitches are combinations of octave, note name and +chromatic alteration. In this scheme, the octave is indicated by +using raised quotes (`@code{'}') and ``lowered'' quotes (commas: +`@code{,}'). The central C is denoted by @code{c'}. The C one octave +higher is @code{c''}. One and two octaves below the central C is +denoted by @code{c} and @code{c,} respectively. + +For pitches in a long piece you might have to type many quotes. To +remedy this, LilyPond has a ``relative'' octave entry mode. In this +mode, octaves of notes without quotes are chosen such that a note is +as close as possible (graphically, on the staff) to the the preceding +note. If you add a high-quote an extra octave is added. The lowered +quote (a comma) will subtract an extra octave. Because the first note +has no predecessor, you have to give the (absolute) pitch of the note +to start with.@example + + \sequential @{ + +@end example + What follows is sequential music, i.e., +notes that are to be played and printed after each other.@example + + \time 3/4; + +@end example + This command changes the time signature of the current piece: a 3/4 +sign is printed. This command is also used to generate bar lines in +the right spots.@example + + \key g; + +@end example + This command changes the current key to G-major. Although this +command comes after the @code{\time} command, in the output, the key +signature comes before the time signature: LilyPond knows about music +typesetting conventions. @example + + \repeat "volta" 2 + +@end example + This command tells LilyPond that the following piece of music must +be played twice; @code{"volta"} volta brackets should be used for +alternatives---if there were any. +@example + + @{ + +@end example +The subject of the repeat is again sequential music. Since +@code{\sequential} is such a common construct, a shorthand is provided: +just leave off @code{\sequential}, and the result is the same. @example + + d4 + +@end example + This is a note with pitch @code{d} (determined up to octaves). The +relative music was started with a @code{c''}, so the real pitch of this +note is @code{d''}. The @code{4} designates the duration of the note +(it is a quarter note). @example + + a b + +@end example +These are notes with pitch @code{a} and @code{b}. Because their +duration is the same as the @code{g}, there is no need to enter the +duration (You may enter it anyway, eg. @code{a4 b4}) @example + + d4 g, g | + +@end example + Three more notes. The `@code{|}' character is a `barcheck'. When +processing the music, LilyPond will verify that barchecks are found at +the start of a measure. This can help you track down errors. + + So far, no notes were chromatically altered. Here is the first one +that is: @code{fis}. Mudela by default uses Dutch note names, and +``Fis'' is the Dutch note name for ``F sharp''. However, there is no +sharp sign in the output. The program keeps track of key signatures, +and will only print accidentals if they are needed. +@example + + c8 d e fis + +@end example +LilyPond guesses were beams can be added to eighth and shorter notes. +In this case, a beam over 4 eighths is added. +@example + + c4 d8( )c b a( )b4 c8 b a g | + +@end example + The next line shows how to make a slur: +the beginning and ending note of the slur is marked with an opening and +closing parenthesis respectively. In the line shown above this is +done for two slurs. Slur markers (parentheses) are between +the notes.@example + + a4 [b8 a] [g fis] + +@end example +Automatic beaming can be overridden by inserting beam marks +(brackets). Brackets are put around notes you want beamed.@example + + g2. | + +@end example +A duration with augmentation dot is notated +with the duration number followed by a period.@example + + @} + +@end example + This ends the sequential music to be repeated. LilyPond will typeset +a repeat bar. @example + + cis'4 b8 cis a4 | + +@end example + This line shows that Lily will print an accidental if that is +needed: the first C sharp will be printed with an accidental, the +second one without. @example + + a8-. b-. cis-. d-. e-. fis-. + +@end example +You can enter articulation signs either in a verbose form using a +shorthand. Here we demonstrate the shorthand: it is formed by a dash +and the the character for the articulation to use, e.g. `@code{-.}' for +staccato as shown above. @example + + fis a, r8 cis8 + +@end example + +Rests are denoted by the special notename `@code{r}'. You can also enter +an invisible rest by using the special notename `@code{s}'. +@example + + d2.-\fermata + +@end example + All articulations have a verbose form, like @code{\fermata}. The +command `@code{\fermata}' is not part of the core of the language (most +of the other discussed elements are), but it is a shorthand for a more +complicated description of a fermata. @code{\fermata} names that +description and is therefore called an @emph{identifier}. @example + + @} + +@end example + +Here the music ends. +@example + + \paper @{ + linewidth = 14.0\cm; + @} + +@end example +This specifies a conversion from music to notation output. Most of +the details of this conversions (font sizes, dimensions, etc.) have +been taken care of, but to fit the output in this document, it has +to be smaller. We do this by setting the line width to 14 centimeters +(approximately 6 inches). +@example + + @} + +@end example +The last brace ends the @code{\score} block. + +There are two things to note here. The format contains musical +concepts like pitches and durations, instead of symbols and positions: +the input format tries to capture the meaning of @emph{music}, and not +notation. Therefore Second, the format tries to be @emph{context-free}: +a note will sound the same regardless of the current time signature, +the key, etc. + +The purpose of LilyPond is explained informally by the term `music +typesetter'. This is not a fully correct name: not only does the +program print musical symbols, it also makes esthetic decisions. All +symbols and their placement is @emph{generated} from a high-level musical +description. In other words, LilyPond would be best +described by `music compiler' or `music to notation compiler'. + +@node Lyrics and chords, , , Tutorial +@section Lyrics and chords + +In this section we show how to typeset a song of unknown +origin.@footnote{The author would welcome information about the origin +of this song.}. + +@example +\header @{ + title = "The river is flowing"; + composer = "Traditional (?)"; +@} +\include "paper16.ly" +melody = \notes \relative c' @{ + \partial 8; + g8 | + c4 c8 d [es () d] c4 | f4 f8 g [es() d] c g | + c4 c8 d [es () d] c4 | d4 es8 d c4. + \bar "|."; +@} + +text = \lyrics @{ + The ri -- ver is flo- __ wing, flo -- wing and gro -- wing, the + ri -- ver is flo -- wing down to the sea. +@} + +accompaniment =\chords @{ + r8 + c2-3- f-3-.7 d-min es4 c8-min r8 + c2-min f-min7 g-7^3.5 c-min @} + +\score @{ + \simultaneous @{ +% \accompaniment + \context ChordNames \accompaniment + + \addlyrics + \context Staff = mel @{ + \property Staff.noAutoBeaming = "1" + \property Staff.automaticMelismata = "1" + \melody + @} + \context Lyrics \text + @} + \midi @{ @} + \paper @{ linewidth = 10.0\cm; @} +@} +@end example + + +The result would look this@footnote{The titling and font size shown +may differ, since the titling in this document is not generated by +@file{ly2dvi}.}. + +@center @strong{The river is flowing} +@center Traditional + +@mudela[center] +\header { + title = "The river is flowing"; + composer = "Traditional (?)"; +} +\include "paper16.ly" +melody = \notes \relative c' { + \partial 8; + g8 | + c4 c8 d [es () d] c4 | f4 f8 g [es() d] c g | + c4 c8 d [es () d] c4 | d4 es8 d c4. + \bar "|."; +} + +text = \lyrics { + The ri -- ver is flo- __ wing, flo -- wing and gro -- wing, the + ri -- ver is flo -- wing down to the sea. +} + +accompaniment =\chords { + r8 + c2-3- f-3-.7 d-min es4 c8-min r8 + c2-min f-min7 g-7^3.5 c-min } + +\score { + \simultaneous { +% \accompaniment + \context ChordNames \accompaniment + + \addlyrics + \context Staff = mel { + \property Staff.noAutoBeaming = "1" + \property Staff.automaticMelismata = "1" + \melody + } + \context Lyrics \text + } + \midi { } + \paper { linewidth = 10.0\cm; } +} +@end mudela + +Again, we will dissect the file line by line.@example + + \header @{ + +@end example +Information about the music you are about to typeset goes into a +@code{\header} block. The information in this block is not used by +LilyPond, but it is included in the output. @file{ly2dvi} uses this +information to print titles above the music. +@example + + title = "The river is flowing"; + composer = "Traditional (?)"; +@end example +the @code{\header} block contains assignments. An assignment starts +with a string. (which is unquoted, in this case). Then comes the +equal sign `@code{=}'. After the equal sign comes the expression you +want to store. In this case, you want to put in strings. The +information has to be quoted here, because it contains spaces. The +assignment is finished with a semicolon.@example + + \include "paper16.ly" + +@end example +Smaller size for inclusion in a book.@example + + melody = \notes \relative c' @{ + +@end example +The structure of the file will be the same as the previous one, a +@code{\score} block with music in it. To keep things readable, we will +give names to the different parts of music, and use the names to +construct the music within the score block. + +@example + + \partial 8; + +@end example + +The piece starts with an anacrusis of one eighth. @example + + c4 c8 d [es () d] c4 | f4 f8 g [es() d] c g | + c4 c8 d [es () d] c4 | d4 es8 d c4. + \bar "|."; + +@end example +We use explicit beaming. Since this is a song, we will turn automatic +beams off, and use explicit beaming where needed.@example + + @} + +@end example +This ends the definition of @code{melody}. Note that there are no +semicolons after assignments at top level.@example + + text = \lyrics @{ + +@end example +Another identifier assignment. This one is for the lyrics. +Lyrics are formed by syllables that have duration, and not by +notes. To make LilyPond parse words as syllables, switch it into +lyrics mode with @code{\lyrics}. Again, the brace after @code{\lyrics} +is a shorthand for @code{\sequential @{}. @example + + The4 ri -- ver is flo- __ wing, flo -- wing and gro -- wing, the + ri- ver is flo- __ wing down to the sea. + @} + +@end example +The syllables themselves are separated by spaces. You can get syllable +extenders by entering `@code{__}', and centered hyphens with +`@code{-}@code{-}'. We enter the syllables as if they are all quarter notes +in length (hence the @code{4}), and use a feature to align the +syllables to the music (which obviously isn't all quarter notes.) +@example + + accompaniment =\chords @{ + +@end example +We'll put chords over the music. There is a special mode (analogous +to @code{\lyrics} and @code{\notes} mode) where you can give the names +of the chords you want, instead of the notes comprising the chord. +@example + + r8 + +@end example +There is no accompaniment during the anacrusis.@example + + c2-3- f-3-.7 + +@end example +A chord is started by the tonic of the chord. The +first one lasts a half note. An unadorned note creates a major +triad, while a minor triad is wanted. @code{3-} modifies the third to +be small. @code{7} modifies (adds) a seventh, which is small by default +to create the @code{f a c es} chord. Multiple modifiers must be +separated by a dot.@example + + d-min es4 c8-min r8 + +@end example +Some modifiers have predefined names, eg. @code{min} is the same as +@code{3-}, so @code{d-min} is a minor @code{d} chord.@example + + c2-min f-min7 g-7^3.5 c-min @} + +@end example +A named modifier @code{min} and a normal modifier @code{7} do not have +to be separated by a dot. Tones from a chord are removed with chord +subtractions. Subtractions are started with a caret, and they are +also separated by dots. In this example, @code{g-7^3.5} produces a +minor seventh. The brace ends the sequential music. @example + + \score @{ + \simultaneous @{ + +@end example +We assemble the music in the @code{\score} block. Melody, lyrics and +accompaniment have to sound at the same time, so they should be +@code{\simultaneous}.@example + + %\accompaniment + +@end example +Chord mode generates notes grouped in @code{\simultaneous} music. If +you remove the comment sign, you can see the chords in normal +notation: they will be printed as note heads on a separate +staff. @example + + \context ChordNames \accompaniment + +@end example +Normally, the notes that you enter are transformed into note heads. +The note heads alone make no sense, they need surrounding information: +a key signature, a clef, staff lines, etc. They need @emph{context}. In +LilyPond, these symbols are created by objects called `interpretation +context'. Interpretation contexts only exist during a run of +LilyPond. Interpretation contexts that are for printing music (as +opposed to playing music) are called `notation context'. + +By default, LilyPond will create a Staff contexts for you. If you +would remove the @code{%} sign in the previous line, you can see that +mechanism in action. + +We don't want default contexts here, because we want names, not note +heads. An interpretation context can also created upon explicit +request. The keyword for such a request is @code{\context}. It takes +two arguments. The first is the name of a interpretation context. +The name is a string, it can be quoted with double quotes). The +second argument is the music that should be interpreted in this +context. For the previous line, we could have written @code{\context +Staff \accompaniment}, and get the same effect.@example + + \addlyrics + +@end example +The lyrics need to be aligned with the melody. This is done by +combining both with @code{\addlyrics}. @code{\addlyrics} takes two +pieces of music (usually a melody and lyrics, in that order) and +aligns the syllables of the second piece under the notes of the +first piece. If you would reverse the order, the notes would be +aligned on the lyrics, which is not very useful. (Besides, it looks +silly.)@example + + \context Staff = mel @{ + +@end example +This is the argument of @code{\addlyrics}. We instantiate a +@code{Staff} context explicitly: should you chose to remove comment +before the ``note heads'' version of the accompaniment, the +accompaniment will be on a nameless staff. The melody has to be on a +different staff as the accompaniment. This is accomplished by giving +the melody staff a different name.@example + + \property Staff.noAutoBeaming = "1" + +@end example +An interpretation context has variables that tune its behaviour. One +of the variables is @code{noAutoBeaming}. If set and non-zero (i.e., +true) LilyPond will not try to put automatic beaming on the current +staff.@example + + \property Staff.automaticMelismata = "1" + +@end example +Similarly, we don't want to print a syllable when there is +a slur. This sets up the Staff context to signal slurs while +@code{\addlyrics} is processed. @example + + \melody + @} + +@end example +Finally, we put the melody on the current staff. Note that the +@code{\property} directives and @code{\melody} are grouped in sequential +music, so the property settings are done before the melody is +processed. @example + + \context Lyrics \text + +@end example +The second argument of @code{\addlyrics} is the text. The text also +should not land on a Staff, but on a interpretation context for +syllables, extenders, hyphens etc. This context is called +Lyrics.@example + + @} + +@end example +This ends @code{\simultaneous}.@example + + \midi @{ @} + +@end example +This makes the music go to a MIDI file. MIDI is great for +checking music you enter. You listen to the MIDI file: if you hear +something unexpected, it's probably a typing error. @code{\midi} is an +`output definition', a declaration that specifies how to output music +analogous to @code{\paper @{ @}}.@example + + \paper @{ linewidth = 10.0\cm; @} + +@end example +We also want notation output. The linewidth is short so the piece +will be set in two lines. @example + + @} + +@end example +End the score block. + +@node Piano music, , , Tutorial +@section Piano music + +Our third subject is a piece piano music. The fragment in the input +file is a piano reduction of the G major Sinfonia by Giovanni Battista +Sammartini. It was composed around 1740. + +@mudela[verbatim] + +\include "paper16.ly"; + +viola = \notes \relative c' \context Voice = viola { + + \property Voice.verticalDirection = \down g'8. b,16 + s1 s2. r4 + g +} + +oboes = \notes \relative c'' \context Voice = oboe { + \stemup s4 g8. b,16 c8 r + \grace \times 2/3 { } + < + { \times 2/3 { a8 g c } \! c2 } + \context Voice = oboeTwo { + \stemdown + \grace { + \property Grace.verticalDirection = \down + [f,16 g] } + f8 e e2 + } > + \stemboth + \grace <)b8. d8.-\trill> | + [ < )f8. a>] <)b,8 d> r [ ] r | + [ < )e8. g>] +} + +hoomPah = \notes \transpose c' { + c8 \translator Staff = top \stemdown + c'8 \translator Staff = bottom \stemup } + +hoomPahHoomPah = { [\hoomPah \hoomPah] } + +bassvoices = \notes \relative c' { + c4 g8. b,16 + \hoomPahHoomPah \hoomPahHoomPah \hoomPahHoomPah \hoomPahHoomPah + \stemdown [c8 c'8] r4 + r4 + < {\stemup r2 } + \context Voice = reallyLow {\stemdown g2 ~ | g4 c8 } > +} + +\score { + \context PianoStaff \notes < + \context Staff = top < \time 2/2; + \context Voice = viola \viola + \oboes + > + \context Staff = bottom < \time 2/2; \clef bass; + \bassvoices + > + > + \midi { } + \paper { + indent = 0.0; + linewidth = 15.0 \cm; } +} +@end mudela + +If it looks like incomprehensible gibberish to you@dots{} Then you are +right. The author has doctored this example to have as many quirks in +one system as possible.@example +viola = \notes \relative c' \context Voice = viola @{ +@end example +In this example, you can see multiple parts on a staff. Each part is +associated with one notation context. This notation context handles +stems and dynamics (among others). The name of this context is +@code{Voice}. For each part we have to make sure that there is +precisely one Voice context@footnote{If @code{\context} would not +have been specified explicitly, three @code{Voice} contexts would be +created: one for each note in the first chord.}.@example + +@end example +@code{<} and @code{>} are short hands for @code{\simultaneous @{} and +@code{@}}. So the expression enclosed in @code{<} and @code{>} is a +chord. @code{\f} places a forte symbol under the chord.@example +\property Voice.verticalDirection = \down +@end example +@code{verticalDirection} is a property of the voice context. It +controls the directions of stems, articulations marks and other +symbols. + If @code{verticalDirection} is set to @code{\down} +(identifier for the integer -1) the stems go down, +@code{\up} (identifier for the integer 1) makes the stems go up.@example + g'8. b,16 +@end example +Relative octaves work a little differently with chords. The starting +point for the note following a chord is the first note of the chord. So +the @code{g} gets an octave up quote: it is a fifth above the starting +note of the previous chord (the central C). + +@example +s1 s2. r4 +@end example +@code{s} is a `spacer' rest. It does not print anything, but it does +have the duration of a rest. @example +oboes = \notes \relative c'' \context Voice = oboe @{ +@end example +Now comes a part for two oboes. They play homophonically, so we +print the notes as one voice that makes chords. Again, we insure that +these notes are indeed processed by precisely one context with +@code{\context}.@example +\stemup s4 g8. b,16 c8 r +@end example +@code{\stemup} is an identifier reference. It is shorthand for +@code{\property Voice.verticalDirection = \up}. If possible, you +should use predefined identifiers like these for setting properties. +Your input will be less dependent upon the implementation of LilyPond. +@example +\grace < )d4 f> +@end example +@code{\grace} introduces grace notes. It takes one argument, in this +case a chord. The slur started on the @code{e} of the chord +will be attached to the next note.@footnote{LilyPond will squirm +about unended Slurs. In this case, you can ignore the warning}. +@example +\times 2/3 +@end example +Tuplets are made with the @code{\times} keyword. It takes two +arguments: a fraction and a piece of music. The duration of the +second argument is multiplied by the first argument. Triplets make +notes occupy 2/3 of their notated duration, so in this case the +fraction is 2/3. @example +@{ @} +@end example +The piece of music to be `tripletted' is sequential music containing +three notes. On the first chord (the @code{d}), a crescendo is started +with @code{\<}.@example +< +@end example +At this point, the homophonic music splits into two rhythmically +different parts. We can't use a sequence of chords to enter this, so +we make a `chord' of sequences to do it. We start with the upper +voice, which continues with upward stems: @example + @{ \times 2/3 @{ a8 g c @} \! c2 @} +@end example +The crescendo is ended at the half note by the escaped exclamation +mark `@code{\!}'. @example +\context Voice = oboeTwo @{ +\stemdown +@end example +We can't share stems with the other voice, so we have to create a new +@code{Voice} context. We give it the name @code{oboeTwo} to distinguish +it from the other context. Stems go down in this voice. @example +\grace @{ +@end example +When a grace section is processed, a @code{Grace} context is +created. This context acts like a miniature score of its own. It has +its own time bookkeeping, and you can make notes, beams, slurs +etc. Here fiddle with a property and make a beam. The argument of +@code{\grace} is sequential music.@example +\property Grace.verticalDirection = \down +[f,16 g] @} +@end example +Normally, grace notes are always stem up, but in this case, the upper +voice interferes. We set the stems down here. + +As far as relative mode is concerned, the previous note is the +@code{c'''2} of the upper voice, so we have to go an octave down for +the @code{f}. +@example + + f8 e e2 +@} > +@end example +This ends the two-part section. @example +\stemboth +\grace <)b8. d8.-\trill> | +@end example +@code{\stemboth} ends the forced stem directions. From here, stems are +positioned as if it were single part music. + +The bass has a little hoom-pah melody to demonstrate parts switching +between staffs. Since it is repetitive, we use identifiers:@example +hoomPah = \notes \transpose c' @{ +@end example +Transposing can be done with @code{\transpose}. It takes two +arguments; the first specifies what central C should be transposed to. +The second is the to-be-transposed music. As you can see, in this +case, the transposition is a no-op. Central C is transposed to +central C. + +The purpose of this no-op is circumventing relative mode. Relative +mode can not be used in conjunction with transposition, so relative +mode will leave the contents of @code{\hoomPah} alone. We can use it +without having to worry about getting the motive in a wrong +octave@footnote{@code{hoomPah = \relative @dots{}} would be more +intuitive to use, but that would not let me plug @code{\transpose} +:-).}.@example +c8 \translator Staff = top \stemdown +@end example +We assume that the first note will be put in the lower staff. After +that note we switch to the upper staff with @code{\translator}. To be +precise, this @code{\translator} entry switches the current voice to a +@code{Staff} named @code{top}. So we have to name the upper staff +`@code{top}'. Stem directions are set to avoid interfering with the +oboe voices. @example +c'8 \translator Staff = bottom \stemup @} +@end example +Then a note is put on the upper staff, and we switch again. We have +to name the lower staff `@code{bottom}'. @example +hoomPahHoomPah = @{ [\hoomPah \hoomPah] @} +@end example +Put two of these fragments in sequence, and beam them.@example +bassvoices = \notes \relative c' @{ +c4 g8. b,16 +\hoomPahHoomPah \hoomPahHoomPah \hoomPahHoomPah +\hoomPahHoomPah +@end example +Entering the bass part is easy: the hoomPahHoomPah variable is +referenced four times.@example +\context Voice = reallyLow @{\stemdown g2 ~ | g4 c8 @} > +@end example +After skipping some lines, we see @code{~}. This mark makes ties.@example +\context PianoStaff +@end example +For piano music, a special context is needed to get cross staff +beaming right. It is called @code{PianoStaff}.@example +\context Staff = bottom < \time 2/2; \clef bass; +@end example +The bottom staff must have a different clef.@example +indent = 0.0; +@end example +To make some more room on the line, the first (in this case the only) +line is not indented. The line still looks is very cramped, but that is due +to the format of this tutorial. + +This example shows a lot of features, but the organisation isn't +perfect. For example, it would be less confusing to use a chord +containing sequential music than a sequence of chords for the oboe +parts. + +[TODO: demonstrate Hara-Kiri with scores and part extraction.] + +@node end of tutorial, , , Tutorial +@section The end + +That's all folks. From here, you can either try fiddling with input +files, or you can read the reference manual. diff --git a/INSTALL.txt b/INSTALL.txt index 537df8e33a..78a0ef5974 100644 --- a/INSTALL.txt +++ b/INSTALL.txt @@ -6,8 +6,6 @@ INSTALL - compiling and installing GNU LilyPond Abstract ======== - TODO: document xdeltas - This document explains what you need to install LilyPond, and what you should do. If you are going to compile and install LilyPond often, e.g. when doing development, you might want to check out the @@ -26,6 +24,15 @@ for mirror sites. _If you upgrade by patching do remember to rerun autoconf after applying the patch_. + If you do not want to download the entire archive for each version, +the safest method for upgrading is to use `xdelta', see +`ftp://ftp.xcf.berkeley.edu/pub/xdelta/' + + The following command produces `lilypond-1.1.55.tar.gz' from +`lilypond-1.1.54' identical (up to compression dates) to the .55 on the +FTP site. + xdelta patch lilypond-1.1.54-1.1.55.xd lilypond-1.1.54.tar.gz + Prerequisites ============= @@ -39,14 +46,13 @@ Prerequisites compile if you use debugging information. If you are short on disk-space run configure with `--disable-debugging'. - Although we recommend to use Unix, LilyPond is known to run on + * Although we recommend to use Unix, LilyPond is known to run on Windows NT/95/98 as well. See Section Windows NT/95,es. - * EGCS 1.1 or newer. Check out ftp://ftp.gnu.org/pub/gcc/ - (ftp://ftp.gnu.org/pub/gcc/) + * EGCS 1.1 or newer. Check out `ftp://ftp.gnu.org/pub/gcc/'. - * Python 1.5, Check out ftp://ftp.python.org (ftp://ftp.python.org) - or ftp://ftp.cwi.nl/pub/python (ftp://ftp.cwi.nl/pub/python). + * Python 1.5, Check out `ftp://ftp.python.org' or + `ftp://ftp.cwi.nl/pub/python'. * GUILE 1.3, check out http://www.gnu.org/software/guile/guile.html (http://www.gnu.org/software/guile/guile.html). @@ -157,9 +163,6 @@ additional conversion tools. * Doc++ (optional) to read the source code. - You also have to install `buildscripts/out/ps-to-gifs' in a -directory that is in the path. - configuring and compiling ========================= @@ -179,6 +182,9 @@ configuring and compiling /usr/local/man/man1/lilypond.1 /usr/local/bin/lilypond /usr/local/bin/mi2mu + /usr/local/bin/convert-mudela + /usr/local/bin/mudela-book + /usr/local/bin/abc2ly /usr/local/share/lilypond/* /usr/local/share/locale/{it,nl}/LC_MESSAGES/lilypond.mo @@ -271,15 +277,6 @@ Installing `.pk' and `.tfm' files of the fonts. A script has been provided to do the work for you, see `bin/clean-fonts.sh'. -CAVEATS -======= - - * The -O2 option triggers bugs on various platforms (PowerPC, - Alpha). If you experience problems, you should first try - turning off this. - - * On PPC you need at least EGCS-1.1.2f. - Redhat linux ============ @@ -323,12 +320,106 @@ Windows NT/95 Separate instructions on building for W32 are available; See file README-W32, included with the sources. -Bugs -==== +Problems +======== + + For help and questions use and +. Please consult the faq before mailing +your problems. + + If you find bugs, please send bug reports to . + + Known bugs that are LilyPond's fault are listed in `TODO', or +demonstrated in `input/bugs/'. + + Known bugs that are not LilyPond's fault are documented here. + +All platforms +************* + +*GUILE 1.3.2 + Guile 1.3.2 is buggy in several respects. Do not use it for + LilyPond. + +LinuxPPC Bugs: +************** + +*R5, egcs-1.1.2-12c + Egcs-1.1.2-12c (stock LinuxPPC R5) has a serious bug, upgrade to + fixed in egcs-1.1.2-12f or gcc-2.95-0a, + `ftp://dev.linuxppc.org/users/fsirl/R5/RPMS/ppc/' + +*R4, egcs-1.0.2 + All compiling with `-O2' is suspect, in particular guile-1.3, and + Lily herself will break. + +Linux-i386 +********** + +*SuSE6.2 and similar platforms (glibc 2.1, libstdc++ 2.9.0) + Lily will crash during parsing (which suggests a C++ library + incompatibility). Precise cause, precise platform description or + solution are not known. + + Note that this only happens on some computers with the said + platform. + +*GUILE + A binary RPM of Guile 1.3 has been distributed from the LilyPond + ftp site. This binary was made in RedHat 5.x, and it will fail if + this RPM is used with RedHat 6.x. + +*libg++ 2.7 + LilyPond occasionally crashes while parsing the initialisation + files. This is a very obscure bug, and usually entering the + commandline differently "fixes" it. + + lilypond input.ly + + and + lilypond -I. ./input.ly + makes a difference + + Typical stacktrace: + SIGSEGV + __libc_malloc (bytes=16384) + ?? () + yyFlexLexer::yy_create_buffer () + Includable_lexer::new_input (this=0x8209a00, s={strh_ = { + + This behaviour has been observed with machines that have old libg++ + versions (LinuxPPC feb '98, RedHat 4.x). + +Solaris: +******** + +*Sparc64/Solaris 2.6, GNU make-3.77 + GNU make-3.77 is buggy on this platform, upgrade to 3.78.1 or + newer. + +*Sparc64/Solaris 2.6, ld + Not yet resolved. + +AIX +*** + +*AIX 4.3 ld + The following is from the gcc install/SPECIFIC file. + Some versions of the AIX binder (linker) can fail with a + relocation overflow severe error when the -bbigtoc option + is used to link GCC-produced object files into an + executable that overflows the TOC. A fix for APAR IX75823 + (OVERFLOW DURING LINK WHEN USING GCC AND -BBIGTOC) is + available from IBM Customer Support and from its + 27service.boulder.ibm.com website as PTF U455193. + + Binutils does not support AIX 4.3 (at least through release + 2.9). GNU as and GNU ld will not work properly and one + should not configure GCC to use those GNU utilities. Use + the native AIX tools which do interoperate with GCC. - Send bug reports to bug-gnu-music@gnu.org. For help and questions -use help-gnu-music@gnu.org and gnu-music-discuss@gnu.org. Please -consult the faq before mailing your problems. + add -Wl,-bbigtoc to USER_LDFLAGS, ie: + LDFLAGS='-Wl,-bbigtoc' ./configure Authors ======= diff --git a/README.txt b/README.txt index 9f0019d9f0..b254f58698 100644 --- a/README.txt +++ b/README.txt @@ -7,7 +7,7 @@ This is the toplevel README to LilyPond using a high level description file as input. LilyPond is part of the GNU Project. -versioning +Versioning ========== LilyPond uses a versioning scheme similar to the Linux kernel. In a @@ -16,7 +16,7 @@ For development versions 'y' is odd. For using straightforward score production, please use the latest stable version. Development versions may not produce good or nice scores. -requirements +Requirements ============ For the compilation and running of LilyPond you need some additional @@ -25,13 +25,13 @@ packages. Please refer to the installation instructions. NOTE: If you downloaded a binary (.rpm or a W95/NT .zip file), then you don't have to compile LilyPond. -installation +Installation ============ For your convenience, a formatted copy of the INSTALL instructions are in the toplevel directory, as INSTALL.txt -documentation +Documentation ============= The real documentation is the directory Documentation/ @@ -51,7 +51,7 @@ documentation make -C Documentation/ -comments +Comments ======== LilyPond is a long way from finished and polished. We do appreciate @@ -59,10 +59,10 @@ criticism, comments, bugreports, patches, etc. Please send your e-mail to one of the MAILING LISTS - and _not_ to us personally. See `Documentation/links.yo' for more + and _not_ to us personally. See `Documentation/mail.texi' for more info. -windows 32 +Windows 32 ========== If you have received this file as part of a DOS/Window32 distribution @@ -73,25 +73,24 @@ package, since it might contain more documentation If you decide to build LilyPond from source, please read the INSTALL.txt document first, especially the Windows NT/95 section. -caveats +Caveats ======= - * Please read the file BUGS for some ugly bugs. - - * If you have installed a previous version, be sure to remove old -font files, eg + If you have installed a previous version, be sure to remove old font +files, eg., rm `find /var/lib/texmf/fonts -name 'feta*'` a script to do this for you is in `buildscripts/clean-fonts.sh' -bugs +Bugs ==== Send bug reports to . For help and questions -use and . Please -consult the faq before mailing your problems. +use and . Please +consult the FAQ and installation instructions before mailing your +problems. -cdrom distributions +CDROM distributions =================== if you have received LilyPond on a cdrom, chances are that diff --git a/TODO b/TODO index 2dfc2ce715..bb0eb7d535 100644 --- a/TODO +++ b/TODO @@ -1,6 +1,5 @@ -*-outline-layout:(2 (-1 -1 0 :) 0);outline-stylish-prefixes:nil -*- - * GNU LilyPond TODO Features you cannot find in the documentation as working, should be mentioned here. This is an assorted collection of stuff that will be @@ -11,11 +10,11 @@ Grep -i for TODO, FIXME and ugh/ugr/urg. .* TODO . * use Rhythmic_head::position_i () for all Staff_referenced -. * make diff and make release should leave junk in out/, not in ../test/ +. * .po -> .pot. . * setting indent to 0 with \shape fails +. * hara kiri _8 clef. . * junk -M ? . * mudela-book doco -. * Depracate Wordwrap . * rerun profile . * fix or replace feta-accordion.mf . * fix configure with CFLAGS or LDFLAGS, try: @@ -25,8 +24,6 @@ Grep -i for TODO, FIXME and ugh/ugr/urg. . * Break_req handling is silly (break_forbid () + \break fucks up.) . * script engraver -. * HaraKiriStaffContext removes bar lines and doesn't remove - staff margin text on removed staff lines. . * Chords: . * Bass/inversion pitch when not part of Chord Sometimes a series of changing chords will be blocked out over a static tone diff --git a/VERSION b/VERSION index 23ddbdd17e..124a01bd46 100644 --- a/VERSION +++ b/VERSION @@ -1,8 +1,8 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=1 MINOR_VERSION=2 -PATCH_LEVEL=12 -MY_PATCH_LEVEL=jcn2 +PATCH_LEVEL=13 +MY_PATCH_LEVEL= # use the above to send patches: MY_PATCH_LEVEL is always empty for a # released version. diff --git a/input/test/staff-size.ly b/input/test/staff-size.ly index f88298c981..0e07435b25 100644 --- a/input/test/staff-size.ly +++ b/input/test/staff-size.ly @@ -4,12 +4,12 @@ \property Staff.fontSize = "-1" \property Voice.fontSize = "-1" - \property Voice . dynamicDir = \up \stemdown + \property Voice . dynamicDirection = \up \stemdown %\key gis; c8 d [e f g a] b c \ff } -\context Staff = VB { \property Voice . dynamicDir = \down c,,4 \ff c c c } +\context Staff = VB { \property Voice . dynamicDirection = \down c,,4 \ff c c c } > \paper { linewidth = -1.; } diff --git a/input/test/stem-tremolo.ly b/input/test/stem-tremolo.ly index 8e1d54debd..d6b96591a4 100644 --- a/input/test/stem-tremolo.ly +++ b/input/test/stem-tremolo.ly @@ -20,7 +20,4 @@ } - \paper{ - castingalgorithm = \Wordwrap; - } } diff --git a/lily/auto-change-iterator.cc b/lily/auto-change-iterator.cc index 5d3537b461..4a52caeeb4 100644 --- a/lily/auto-change-iterator.cc +++ b/lily/auto-change-iterator.cc @@ -70,14 +70,14 @@ void Auto_change_iterator::do_process_and_next (Moment m) { Music_wrapper_iterator::do_process_and_next (m); - Pitch_interrogate_req spanish_inquisition; + Pitch_interrogate_req spanish_inquisition; // nobody expects it Music_iterator *it = try_music (&spanish_inquisition); if (it && spanish_inquisition.pitch_arr_.size ()) { Musical_pitch p = spanish_inquisition.pitch_arr_[0]; - Direction s = Direction (sign(p.semitone_pitch ())); + Direction s = Direction (sign(p.steps ())); if (s && s != where_dir_) { where_dir_ = s; diff --git a/lily/engraver.cc b/lily/engraver.cc index d5e82fd1a4..f8ed5e5d6a 100644 --- a/lily/engraver.cc +++ b/lily/engraver.cc @@ -12,7 +12,6 @@ #include "engraver-group-engraver.hh" #include "debug.hh" #include "paper-def.hh" -#include "score-element.hh" void Engraver::fill_staff_info (Staff_info&) @@ -24,12 +23,6 @@ void Engraver::announce_element (Score_element_info i) { i.origin_trans_l_arr_.push (this); - Score_element *s = i.elem_l_; - if (s->self_scm_ == SCM_EOL) - { - scm_protect_object (s->smobify_self ()); - } - daddy_grav_l()->announce_element (i); } diff --git a/lily/include/score-element.hh b/lily/include/score-element.hh index 69ac3526fd..af9b484faa 100644 --- a/lily/include/score-element.hh +++ b/lily/include/score-element.hh @@ -144,14 +144,6 @@ protected: virtual Link_array get_extra_dependencies () const; static Interval dim_cache_callback (Dimension_cache*); -public: - SCM smobify_self (); - static SCM mark_smob (SCM); - static scm_sizet free_smob (SCM s); - static int print_smob (SCM s, SCM p, scm_print_state*); - static long smob_tag; - static void init_smobs(); - SCM self_scm_; }; diff --git a/lily/include/word-wrap.hh b/lily/include/word-wrap.hh deleted file mode 100644 index b81751e20a..0000000000 --- a/lily/include/word-wrap.hh +++ /dev/null @@ -1,20 +0,0 @@ -/* - word-wrap.hh -- declare Word_wrap - - source file of the GNU LilyPond music typesetter - - (c) 1997--1999 Han-Wen Nienhuys -*/ - - -#ifndef WORD_WRAP_HH -#define WORD_WRAP_HH - -#include "break.hh" - -/// wordwrap type algorithm: move to next line if current is optimal. -struct Word_wrap : Break_algorithm { - virtual Array do_solve() const; -}; - -#endif // WORD_WRAP_HH diff --git a/lily/lily-guile.cc b/lily/lily-guile.cc index 311397cdd8..b2017c27af 100644 --- a/lily/lily-guile.cc +++ b/lily/lily-guile.cc @@ -169,13 +169,10 @@ init_functions () } extern void init_symbols (); -extern void init_smobs (); // guh -> .hh - void init_lily_guile () { init_symbols(); init_functions (); - init_smobs (); } diff --git a/lily/paper-score.cc b/lily/paper-score.cc index 8769502ec9..0d7cbfdddf 100644 --- a/lily/paper-score.cc +++ b/lily/paper-score.cc @@ -16,7 +16,6 @@ #include "paper-score.hh" #include "paper-column.hh" #include "scope.hh" -#include "word-wrap.hh" #include "gourlay-breaking.hh" #include "paper-stream.hh" #include "paper-outputter.hh" @@ -57,10 +56,9 @@ Paper_score::typeset_element (Score_element * elem_p) elem_p->pscore_l_ = this; // take over protection. - assert (elem_p->self_scm_ != SCM_EOL); - SCM_CDR(protected_scms_) = gh_cons (elem_p->self_scm_, + SCM_CDR(protected_scms_) = gh_cons (elem_p->element_property_alist_, SCM_CDR (protected_scms_)); - scm_unprotect_object (elem_p->self_scm_); + scm_unprotect_object (elem_p->element_property_alist_); SCM p = elem_p->remove_elt_property (break_helper_only_scm_sym); if (p != SCM_BOOL_F) @@ -119,27 +117,12 @@ Paper_score::calc_breaking () { Break_algorithm *algorithm_p=0; Array sol; - bool try_wrap = !paper_l_->get_var ("castingalgorithm"); - if (!try_wrap) - { - algorithm_p = new Gourlay_breaking ; - algorithm_p->set_pscore (this); - sol = algorithm_p->solve (); - delete algorithm_p; - if (! sol.size ()) - { - warning (_ ("Can't solve this casting problem exactly; reverting to Word_wrap")); - try_wrap = true; - } - } - if (try_wrap) - { - algorithm_p = new Word_wrap; - algorithm_p->set_pscore (this); - sol = algorithm_p->solve (); - delete algorithm_p; - } + algorithm_p = new Gourlay_breaking ; + algorithm_p->set_pscore (this); + sol = algorithm_p->solve (); + delete algorithm_p; + return sol; } diff --git a/lily/repeat-engraver.cc b/lily/repeat-engraver.cc index 6a92623f1c..c716bb1243 100644 --- a/lily/repeat-engraver.cc +++ b/lily/repeat-engraver.cc @@ -101,8 +101,19 @@ Repeat_engraver::queue_events () becel.append (c); last_number = volta_number; volta_number ++; + Scalar l (get_property ("voltaSpannerDuration", 0)); + if (l.length_i ()) // voltaSpannerDuration OK? + { + + Moment vSD_mom = l.to_rat(); + if ( vSD_mom < i->car_->length_mom() ) // terminate volta early ? + { + vSD_mom += walk_mom; + c->last_b_ = true; + becel.append (new Bar_create_event (vSD_mom, "stop")); + } + } } - // should think about voltaSpannerDuration walk_mom += i->car_->length_mom(); if (i->next_) diff --git a/lily/score-element.cc b/lily/score-element.cc index 5f7c890e76..bdb4f4bd30 100644 --- a/lily/score-element.cc +++ b/lily/score-element.cc @@ -44,7 +44,6 @@ Score_element::Score_element() pscore_l_=0; lookup_l_ =0; status_i_ = 0; - self_scm_ = SCM_EOL; original_l_ = 0; element_property_alist_ = scm_protect_object (gh_cons (gh_cons (void_scm_sym, SCM_BOOL_T) , SCM_EOL)); } @@ -52,7 +51,6 @@ Score_element::Score_element() Score_element::Score_element (Score_element const&s) : Graphical_element (s) { - self_scm_ = SCM_EOL; used_b_ = true; original_l_ =(Score_element*) &s; element_property_alist_ = scm_protect_object (scm_list_copy (s.element_property_alist_)); @@ -426,60 +424,3 @@ Score_element::find_broken_piece (Line_of_score*) const { return 0; } - -static scm_smobfuns score_elt_funs = { - Score_element::mark_smob, Score_element::free_smob, - Score_element::print_smob, 0, -}; - - -SCM -Score_element::smobify_self () -{ - if (self_scm_ != SCM_EOL) - return self_scm_; - - SCM s; - SCM_NEWCELL(s); - SCM_SETCAR(s,smob_tag); - SCM_SETCDR(s,this); - self_scm_ = s; - scm_unprotect_object (element_property_alist_); // ugh - return s; -} - -SCM -Score_element::mark_smob (SCM ses) -{ - Score_element * s = (Score_element*) SCM_CDR(ses); - scm_gc_mark (s->self_scm_); - return s->element_property_alist_; -} - -scm_sizet -Score_element::free_smob (SCM ses) -{ - Score_element * s = (Score_element*) SCM_CDR(ses); - delete s; - return 0; -} - -int -Score_element::print_smob (SCM s, SCM p, scm_print_state *) -{ - return 0; -} - -long Score_element::smob_tag; - -void -Score_element::init_smobs () -{ - smob_tag = scm_newsmob (&score_elt_funs); -} - -void -init_smobs() -{ - Score_element::init_smobs (); -} diff --git a/lily/word-wrap.cc b/lily/word-wrap.cc deleted file mode 100644 index cf6a95e9fe..0000000000 --- a/lily/word-wrap.cc +++ /dev/null @@ -1,128 +0,0 @@ -/* - word-wrap.cc -- implement Word_wrap - - source file of the LilyPond music typesetter - - (c) 1997--1999 Han-Wen Nienhuys -*/ - -#include "word-wrap.hh" -#include "paper-def.hh" -#include "paper-score.hh" -#include "debug.hh" -#include "paper-column.hh" -#include "line-spacer.hh" - - -/** El stupido. Add a measure until we're past the optimum. - - - A Dynamic Programming type of algorithm - similar to TeX's is in Gourlay_breaking - - UGH. Should think about pre/post break columns. - */ -Array -Word_wrap::do_solve () const -{ - problem_OK (); - - Line_of_cols &allcols (pscore_l_->col_l_arr_); - int curcol_idx = 0; - - Array breaking; - Line_of_cols breakpoints (find_breaks ()); - assert (breakpoints.size ()>=2); - - int break_idx=0; - while (break_idx < breakpoints.size () -1) - { - Column_x_positions minimum; - Column_x_positions current; - - - // do another line - - Item *post = breakpoints[break_idx]->find_broken_piece (RIGHT); - Paper_column *postcol =dynamic_cast(post); - - int start_break_idx = break_idx; - current.add_paper_column (postcol); - curcol_idx++; // skip the breakable. - break_idx++; - - while (break_idx < breakpoints.size ()) - { - // add another measure. - while (breakpoints[break_idx] != allcols[curcol_idx]) - { - current.add_paper_column (allcols[curcol_idx]); - curcol_idx++; - } - - Item * pre = breakpoints[break_idx]->find_broken_piece (LEFT); - Paper_column* precol = dynamic_cast(pre); - current.add_paper_column (precol); - - current.spacer_l_ = generate_spacing_problem (current.cols_, - pscore_l_->paper_l_->line_dimensions_int (breaking.size ())); - - // try to solve - if (!feasible (current.cols_)) - { - if (!minimum.cols_.size ()) - { - warning (_f ("Ugh, this measure is too long, breakpoint: %d", - break_idx)); - warning (_ ("Generating stupido solution")); - current.stupid_solution (); - current.energy_f_ = - 1; // make sure we break out. - } - else - current.energy_f_ = infinity_f; // make sure we go back - } - else - { - current.solve_line (); - current.print (); - } - - delete current.spacer_l_; - current.spacer_l_ =0; - - if (!current.satisfies_constraints_b_ && start_break_idx == break_idx - 1) - { - warning ( _ ("I don't fit; put me on Montignac")); - minimum = current; - break; - } - - /* - UGR! bug! - */ - if (current.energy_f_ < minimum.energy_f_ || current.energy_f_ < 0) - { - minimum = current; - } - else - { // we're one col too far. - break_idx--; - while (allcols[curcol_idx] != breakpoints[break_idx]) - curcol_idx --; - break; // do the next line. - } - - - // add nobreak version of breakable column - current.cols_.top ()=breakpoints[break_idx]; - curcol_idx ++; - break_idx++; - } - - *mlog << "[" << break_idx << "]" << flush; - breaking.push (minimum); - } - *mlog << endl; - return breaking; -} - diff --git a/ly/params.ly b/ly/params.ly index 354779e019..71f1f66b1e 100644 --- a/ly/params.ly +++ b/ly/params.ly @@ -184,19 +184,10 @@ rulethickness = \staffline; gourlay_energybound = 100000.; %{ Maximum number of measures per line to try when using Gourlay -method. Decreasing this greatly reduces computation time. +method. %} gourlay_maxmeasures = 10.; -%{ -Gourlay is a better, TeX like algorithm for breaking lines. Wordwrap is faster, but leaves -really spaced out lines at the end -%} - -Gourlay = 1.0; -Wordwrap = 0.0; - -castingalgorithm = \Gourlay; %{ Ross. page 151 lists these values, but we think that thick lines and kernings are too thick. @@ -282,8 +273,10 @@ stem_default_neutral_direction = 1.0; % in interline articulation_script_padding_default = 1.0; -% 1.0 -> faster. -simple_spacing_solver = 1.0; +% Backward compatibility -- has no function; +Gourlay = 0.0; +Wordwrap =0.0; + \include "engraver.ly"; diff --git a/make/generic-vars.make b/make/generic-vars.make index 207156e1d7..1581a6e768 100644 --- a/make/generic-vars.make +++ b/make/generic-vars.make @@ -28,7 +28,7 @@ LILYPOND_INCLUDES = $(include-lib) $(depth)/lib/$(outdir) $(include-flower) $(de # installed by 'make installextradoc' EXTRA_DOC_FILES = \ - ANNOUNCEMENT ANNOUNCE-0.1 AUTHORS.txt BUGS COPYING DEDICATION INSTALL.txt NEWS PATCHES.txt README.txt TODO \ + ANNOUNCEMENT ANNOUNCE-0.1 AUTHORS.txt COPYING DEDICATION INSTALL.txt NEWS PATCHES.txt README.txt TODO \ Documentation/out/*.txt\ Documentation/tex/*.doc\ Documentation/tex/*.bib\ diff --git a/make/mudela-rules.make b/make/mudela-rules.make index b6c04a5e48..fa170d1698 100644 --- a/make/mudela-rules.make +++ b/make/mudela-rules.make @@ -2,12 +2,12 @@ .SUFFIXES: .doc .dvi .mudtex .tely .texi +SUBST_TEXI_DEPS=sed 's! \.\./! !g' < $(basename $@).dep > $(outdir)/temp.dep ; mv $(outdir)/temp.dep $(basename $@).dep + $(outdir)/%.latex: %.doc - cd $(outdir); $(PYTHON) $(depth)/../scripts/mudela-book.py -I .. -I $(depth)/../input/test/ --dependencies ../$< -# sed 's! \.\./! !g'< $(basename $@).dep > $(outdir)/temp.dep -# sed 's!^\(.*\):!'$(outdir)'/\1:!g' < $(outdir)/temp.dep > $(basename $@).dep -# rm $(outdir)/temp.dep + cd $(outdir); $(PYTHON) $(depth)/../scripts/mudela-book.py -I .. -I $(depth)/../input/test/ --dependencies --dep-prefix=$(outdir)/ ../$< + $(SUBST_TEXI_DEPS) $(outdir)/%.texi: %.tely - cd $(outdir); $(PYTHON) $(depth)/../scripts/mudela-book.py -I .. -I $(depth)/../input/test/ --dependencies --format=texi ../$< - + cd $(outdir); $(PYTHON) $(depth)/../scripts/mudela-book.py -I .. -I $(depth)/../input/test/ --dependencies --dep-prefix=$(outdir)/ --format=texi ../$< + $(SUBST_TEXI_DEPS) diff --git a/make/out/lilypond.lsm b/make/out/lilypond.lsm index 1143a171d8..b0ca93def7 100644 --- a/make/out/lilypond.lsm +++ b/make/out/lilypond.lsm @@ -1,7 +1,7 @@ Begin3 Title: LilyPond -Version: 1.2.12 -Entered-date: 04OCT99 +Version: 1.2.13 +Entered-date: 11OCT99 Description: LilyPond is a music typesetter. It produces beautiful sheet music using a high level description file as input. LilyPond is part of @@ -11,8 +11,8 @@ Author: hanwen@cs.uu.nl (Han-Wen Nienhuys) janneke@gnu.org (Jan Nieuwenhuizen) Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys) Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert - 1000k lilypond-1.2.12.tar.gz + 1000k lilypond-1.2.13.tar.gz Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/ - 1000k lilypond-1.2.12.tar.gz + 1000k lilypond-1.2.13.tar.gz Copying-policy: GPL End diff --git a/make/out/lilypond.spec b/make/out/lilypond.spec index 4f35bebb1b..1ab0547bec 100644 --- a/make/out/lilypond.spec +++ b/make/out/lilypond.spec @@ -1,9 +1,9 @@ Name: lilypond -Version: 1.2.12 +Version: 1.2.13 Release: 1 Copyright: GPL Group: Applications/Publishing -Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.2.12.tar.gz +Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.2.13.tar.gz Summary: A program for printing sheet music. URL: http://www.cs.uu.nl/~hanwen/lilypond Packager: Han-Wen Nienhuys diff --git a/make/toplevel.make.in b/make/toplevel.make.in index 3d3173dd03..9dce8fb503 100644 --- a/make/toplevel.make.in +++ b/make/toplevel.make.in @@ -14,9 +14,9 @@ SUBDIRS = scripts buildscripts flower lib lily mf midi2ly po debian \ # SCRIPTS = configure aclocal.m4 -README_FILES = BUGS DEDICATION ANNOUNCE-0.1 ANNOUNCE-1.0 ANNOUNCE-1.2 \ +README_FILES = DEDICATION ANNOUNCE-0.1 ANNOUNCE-1.0 ANNOUNCE-1.2 \ COPYING NEWS-0.1 NEWS-1.0 NEWS-0.0 NEWS-1.1 NEWS TODO AIMS CHANGES -README_TXT_FILES = README.txt AUTHORS.txt INSTALL.txt +README_TXT_FILES = README.txt AUTHORS.txt INSTALL.txt IN_FILES := $(wildcard *.in) EXTRA_DIST_FILES = dstreamrc mudela-mode.el vimrc VERSION $(README_FILES) $(SCRIPTS) $(IN_FILES) NON_ESSENTIAL_DIST_FILES = $(README_TXT_FILES) @@ -32,10 +32,11 @@ website: fonts htmldoc examples doc++ fonts: $(MAKE) -C $(depth)/mf + examples: $(MAKE) CONFIGSUFFIX='www' -C input WWW $(MAKE) CONFIGSUFFIX='www' -C mutopia WWW - $(footify) `$(FIND) . -name '*.html' -print` + $(footify-all-command) tar --exclude='*.dvi' --exclude='*.tex' --exclude='*.ps' --exclude='*.ppm' -czf $(outdir)/examples.tar.gz `find input mutopia -type d -name 'out-www' -print` localinstall: @@ -46,5 +47,3 @@ localinstall: local-WWW-clean: $(depth)/buildscripts/out/clean-fonts -footify: - $(footify) `$(FIND) . -name '*.html' -print` diff --git a/mutopia/F.Schubert/standchen.ly b/mutopia/F.Schubert/standchen.ly index cca8558307..51b3ba5798 100644 --- a/mutopia/F.Schubert/standchen.ly +++ b/mutopia/F.Schubert/standchen.ly @@ -19,7 +19,7 @@ Note: Original key F. \version "1.2.0"; vocalVerse = \notes\relative c''{ - \property Voice.dynamicDir=1 + \property Voice.dynamicDirection=1 \times 2/3 { [ g8( )as] g } c4. g8 | \times 2/3 { [ f8( )g] f } c'4 f,8 r | g4.-> f8 \times 2/3 { [ f( )es] d } | @@ -48,7 +48,7 @@ vocalVerse = \notes\relative c''{ } vocalThrough = \notes\relative c{ - \property Voice.dynamicDir=1 + \property Voice.dynamicDirection=1 g''8. g16 b8. b16 d8. d16 | c4 b r | g4. b8 d8. c16 | @@ -215,7 +215,7 @@ trebleThrough = \notes \relative c'{ } bassIntro = \notes\relative c{ - \property Voice.dynamicDir=1 + \property Voice.dynamicDirection=1 %1 r4 | r4 | @@ -225,7 +225,7 @@ bassIntro = \notes\relative c{ bassVerseOne = \notes\relative c{ % \clef bass; - \property Voice.dynamicDir=1 + \property Voice.dynamicDirection=1 %5 r4 | r4 | @@ -256,7 +256,7 @@ bassVerseOne = \notes\relative c{ } bassEentje = \notes\relative c{ - \property Voice.dynamicDir=1 + \property Voice.dynamicDirection=1 [ ] | c,8 [ ] | [ ] | @@ -268,7 +268,7 @@ bassEentje = \notes\relative c{ } bassThrough = \notes\relative c{ - \property Voice.dynamicDir=1 + \property Voice.dynamicDirection=1 %61 [ b-> d->> ] | [ b-> d->> ] | @@ -326,7 +326,7 @@ vocals = \notes{ \property Voice.noAutoBeaming = "1" \property Staff.automaticMelismata=1 - \property Voice.dynamicDir = \up + \property Voice.dynamicDirection = \up \skip 4 * 12; \vocalVerse \skip 4 * 24; diff --git a/mutopia/N.W.Gade/score.ly b/mutopia/N.W.Gade/score.ly index 67ace5a781..9daff0680a 100644 --- a/mutopia/N.W.Gade/score.ly +++ b/mutopia/N.W.Gade/score.ly @@ -56,12 +56,12 @@ copyright = "Mats Bengtsson, 1999. Free circulation permitted and " + \property Staff.instr = "Cor." \context Voice = corI < \globalNoKey - \stemup \property Voice.dynamicDir = \up + \stemup \property Voice.dynamicDirection = \up \property Voice.articulationScriptVerticalDirection = \up \corI > \context Voice = corII { - \stemdown \property Voice.dynamicDir = \down + \stemdown \property Voice.dynamicDirection = \down \property Voice.articulationScriptVerticalDirection = \down \corII } @@ -71,12 +71,12 @@ copyright = "Mats Bengtsson, 1999. Free circulation permitted and " + \property Staff.instr = "Trp." \context Voice = trpI < \globalNoKey - \stemup \property Voice.dynamicDir = \up + \stemup \property Voice.dynamicDirection = \up \property Voice.articulationScriptVerticalDirection = \up \trpI > \context Voice = trpII { - \stemdown \property Voice.dynamicDir = \down + \stemdown \property Voice.dynamicDirection = \down \property Voice.articulationScriptVerticalDirection = \down \trpII } diff --git a/scripts/abc2ly.py b/scripts/abc2ly.py index 2fb57404e6..4a5cb5d446 100644 --- a/scripts/abc2ly.py +++ b/scripts/abc2ly.py @@ -505,12 +505,13 @@ def try_parse_header_line (ln, state): if g == 'K': # KEY a = check_clef(a) if a: - __main__.global_key =compute_key (a)# ugh. m = re.match ('^([^ \t]*) *(.*)$', a) # seperate clef info if m: + __main__.global_key =compute_key (m.group(1))# ugh. voices_append ('\\key %s;' % lily_key(m.group(1))) check_clef(m.group(2)) else: + __main__.global_key =compute_key (a)# ugh. voices_append ('\\key %s;' % lily_key(a)) if g == 'O': # Origin header ['origin'] = a diff --git a/scripts/mudela-book.py b/scripts/mudela-book.py index 4f1fa430a9..97ca4acb05 100644 --- a/scripts/mudela-book.py +++ b/scripts/mudela-book.py @@ -7,12 +7,13 @@ import getopt import sys import __main__ -outdir = 'out' + initfile = '' program_version = '@TOPLEVEL_VERSION@' cwd = os.getcwd () include_path = [cwd] +dep_prefix = '' # TODO: Figure out clean set of options. @@ -52,7 +53,8 @@ options = [ ('', 'M', 'dependencies', 'write dependencies'), ('', 'n', 'no-lily', 'don\'t run lilypond'), ('FILE', 'o', 'outname', 'prefix for filenames'), - ('', 'v', 'version', 'print version information' ) + ('', 'v', 'version', 'print version information' ), + ('PREF', '', 'dep-prefix', 'prepend PREF before each -M dependency') ] format = '' @@ -174,7 +176,7 @@ def bounding_box_dimensions(fname): fd = open(fname) except IOError: error ("Error opening `%s'" % fname) - str = fd.read (-1) + str = fd.read () s = re.search('%%BoundingBox: ([0-9]+) ([0-9]+) ([0-9]+) ([0-9]+)', str) if s: return (int(s.group(3))-int(s.group(1)), @@ -183,15 +185,25 @@ def bounding_box_dimensions(fname): return (0,0) + +read_files = [] def find_file (name): + f = None for a in include_path: try: nm = os.path.join (a, name) f = open (nm) - return nm + __main__.read_files.append (nm) + break except IOError: pass - return '' + + + if f: + return f.read () + else: + error ("File not found `%s'\n" % name) + return '' def error (str): sys.stderr.write (str + "\n Exiting ... \n\n") @@ -273,7 +285,8 @@ def find_inclusion_chunks (regex, surround, str): chunks.append (('input', str[: m.start (0)])) chunks.append (('input', surround)) - chunks = chunks + read_doc_file (m.group (1)) + chunks = chunks + read_doc_file (m.group (1)) + chunks.append (('input', surround)) str = str [m.end (0):] @@ -288,18 +301,7 @@ def find_input_chunks (str): def read_doc_file (filename): """Read the input file, substituting for \input, \include, \mudela{} and \mudelafile""" str = '' - for ext in ['', '.tex', '.doc', '.tely']: - try: - f = open(filename+ ext) - str = f.read (-1) - except: - pass - - - if not str: - error ("File not found `%s'\n" % filename) - - retdeps = [filename] + str = find_file(filename) if __main__.format == '': latex = re.search ('\\\\document', str[:200]) @@ -317,8 +319,7 @@ def read_doc_file (filename): newchunks = [] for c in chunks: if c[0] == 'input': - ch = func (c[1]) - newchunks = newchunks + ch + newchunks = newchunks + func (c[1]) else: newchunks.append (c) chunks = newchunks @@ -371,6 +372,7 @@ def completize_preamble (str): def find_verbatim_chunks (str): """Chop STR into a list of tagged chunks, ie. tuples of form (TYPE_STR, CONTENT_STR), where TYPE_STR is one of 'input' and 'verbatim' + """ chunks = [] @@ -385,7 +387,7 @@ def find_verbatim_chunks (str): str = str [m.end(0):] - return chunks + return chunks def find_verb_chunks (str): @@ -419,14 +421,7 @@ def find_mudela_shorthands (b): def mudela_file (match): "Find \mudelafile, and substitute appropriate \begin / \end blocks." - d = [] #, d = retdeps - full_path = find_file (match.group (2)) - if not full_path: - error("error: can't find file `%s'\n" % match.group(2)) - - d.append (full_path) - f = open (full_path) - str = f.read (-1) + str = find_file (match.group (2)) opts = match.group (1) if opts: opts = opts[1:-1] @@ -596,6 +591,7 @@ def print_chunks (ch): def transform_input_file (in_filename, out_filename): """Read the input, and deliver a list of chunks ready for writing. + """ chunks = read_doc_file (in_filename) @@ -804,16 +800,18 @@ Han-Wen Nienhuys sys.exit (0) -def write_deps (fn, target, deps): +def write_deps (fn, target): sys.stdout.write('writing `%s\'\n' % fn) f = open (fn, 'w') - target = target + '.latex' - f.write ('%s: %s\n'% (target, string.join (deps, ' '))) + f.write ('%s%s: ' % (dep_prefix, target)) + for d in __main__.read_files: + f.write ('%s ' % d) + f.write ('\n') f.close () + __main__.read_files = [] - def identify(): sys.stdout.write ('mudela-book (GNU LilyPond) %s\n' % program_version) @@ -825,72 +823,67 @@ NO WARRANTY. """) -def main(): - global outdir, initfile, defined_mudela_cmd, defined_mudela_cmd_re - outname = '' - try: - (sh, long) = getopt_args (__main__.options) - (options, files) = getopt.getopt(sys.argv[1:], sh, long) - except getopt.error, msg: - sys.stderr.write("error: %s" % msg) - sys.exit(1) - - do_deps = 0 - for opt in options: - o = opt[0] - a = opt[1] - - if o == '--include' or o == '-I': - include_path.append (a) - elif o == '--version': - print_version () - sys.exit (0) - - elif o == '--format' or o == '-o': - __main__.format = a - elif o == '--outname' or o == '-o': - if len(files) > 1: - #HACK - sys.stderr.write("Mudela-book is confused by --outname on multiple files") - sys.exit(1) - outname = a - elif o == '--outdir' or o == '-d': - outdir = a - elif o == '--help' or o == '-h': - help () - elif o == '--no-lily' or o == '-n': - __main__.run_lilypond = 0 - elif o == '--dependencies': - do_deps = 1 - elif o == '--default-mudela-fontsize': - default_music_fontsize = string.atoi (a) - elif o == '--init': - initfile = a - - identify() - - for input_filename in files: - file_settings = {} - if outname: - my_outname = outname - else: - my_outname = os.path.basename(os.path.splitext(input_filename)[0]) - my_depname = my_outname + '.dep' +outname = '' +try: + (sh, long) = getopt_args (__main__.options) + (options, files) = getopt.getopt(sys.argv[1:], sh, long) +except getopt.error, msg: + sys.stderr.write("error: %s" % msg) + sys.exit(1) + +do_deps = 0 +for opt in options: + o = opt[0] + a = opt[1] + + if o == '--include' or o == '-I': + include_path.append (a) + elif o == '--version': + print_version () + sys.exit (0) + + elif o == '--format' or o == '-o': + __main__.format = a + elif o == '--outname' or o == '-o': + if len(files) > 1: + #HACK + sys.stderr.write("Mudela-book is confused by --outname on multiple files") + sys.exit(1) + outname = a + elif o == '--help' or o == '-h': + help () + elif o == '--no-lily' or o == '-n': + __main__.run_lilypond = 0 + elif o == '--dependencies': + do_deps = 1 + elif o == '--default-mudela-fontsize': + default_music_fontsize = string.atoi (a) + elif o == '--init': + initfile = a + elif o == '--dep-prefix': + dep_prefix = a + +identify() + +for input_filename in files: + file_settings = {} + if outname: + my_outname = outname + else: + my_outname = os.path.basename(os.path.splitext(input_filename)[0]) + my_depname = my_outname + '.dep' - chunks = transform_input_file (input_filename, my_outname) - - foutn = my_outname + '.' + format - sys.stderr.write ("Writing `%s'\n" % foutn) - fout = open (foutn, 'w') - for c in chunks: - fout.write (c[1]) - fout.close () + chunks = transform_input_file (input_filename, my_outname) - if do_deps: - # write_deps (my_depname, my_outname, deps) - sys.stderr.write ("--dependencies broken") + foutn = my_outname + '.' + format + sys.stderr.write ("Writing `%s'\n" % foutn) + fout = open (foutn, 'w') + for c in chunks: + fout.write (c[1]) + fout.close () -main() + if do_deps: + write_deps (my_depname, foutn) diff --git a/stepmake/bin/ls-latex.py b/stepmake/bin/ls-latex.py index bf170fba55..2f88134be4 100644 --- a/stepmake/bin/ls-latex.py +++ b/stepmake/bin/ls-latex.py @@ -18,16 +18,18 @@ import glob import re +format_names = {'ps.gz': 'Compressed PostScript', + 'html' : 'HTML' + } + class Latex_head: def __init__ (self): self.author = '' self.title = '' self.date = '' self.format = '' - -def read_latex_header (fn): - s = gulp_file (fn) +def read_latex_header (s): header = Latex_head() m = re.search(r'\\author{([^}]+)}', s) if m: @@ -36,81 +38,69 @@ def read_latex_header (fn): m = re.search (r'\\title{([^}]+)}',s ) if m: header.title = m.group (1) - else: - header.title = 'No title' - - header.outfile = fn - header.outfile = re.sub ('\.latex$', '.ps.gz', header.outfile) - header.outfile = re.sub ('\.tex$', '.ps.gz', header.outfile) - header.outfile = re.sub ('\.doc$', '.ps.gz', header.outfile) - header.format = 'gzipped postscript' + + header.formats = ['ps.gz'] return header -def bib_header (fn): - s = gulp_file (fn) - m = re.search ('% *AUTHOR *= *(.*)$',s) - header = Latex_head() +def read_bib_header (s): + + m = re.search ('% *AUTHOR *= *(.*)\n',s) + + header = Latex_head() + if m: header.author = m.group (1) - - m = re.search ('% *TITLE *= *(.*)$',s ) + m = re.search ('% *TITLE *= *(.*)\n',s ) if m: header.title = m.group (1) - else: - header.title = '(bibliography without title)' - header.outfile = re.sub ( '\.bib$', '.html' , fn) - header.format = 'HTML' + header.formats = ['html'] return header -def read_pod_header (fn): +def read_pod_header (s): header = Latex_head () - s = gulp_file (fn) + i = re.search( '[^\n \t]', s) s = s[i:] i = re.search( '\n\n', s) s = s[i+2:] - if i < 0: - sys.stderr.write ('gulped file: ' + fn + '\n') - raise 'huh?' i = re.search( '\n\n', s) header.title = s[:i] - header.filename = fn - header.outfile = re.sub ('\.pod$', '.html', fn) + return header -def read_texinfo_header (fn): +def read_texinfo_header (s): header = Latex_head () - s = gulp_file (fn) - m = re.search( '@settitle (.*$)', s) - if m: - header.title = m.group (1) - header.filename = fn - header.outfile = re.sub ('\.tely', '.html', fn) - header.format = 'HTML' - return header -def read_tely_header (fn): - header = Latex_head () - s = gulp_file (fn) m = re.search( '@settitle (.*$)', s) if m: header.title = m.group (1) - header.filename = fn - header.outfile = re.sub ('\.tely', '.html', fn) - header.format = 'HTML' + + header.formats = ['html', 'ps.gz'] return header + def print_html_head (l,o,h): pre =o - l.write ('
  • %s (%s)' % (pre + h.outfile, h.title, h.format )) + + fn = pre + h.basename + + t = h.filename + if h.title : + t = t + ': '+ h.title + + l.write ('
  • %s ' % t) + if h.author: l.write ('

    by %s

    ' % h.author) + + for f in h.formats: + l.write ('(%s)' % (fn, f, format_names [f])) l.write ('
  • \n') def help (): @@ -149,19 +139,28 @@ l.write (r"""%s """ % (title, title)) +read_header_funcs = { + 'pod' : read_pod_header, + 'tex' : read_latex_header, + 'doc' : read_latex_header, + 'bib': read_bib_header, + 'latex' : read_latex_header, + 'tely' : read_texinfo_header, + 'texi': read_texinfo_header, +} + + for x in files: - if re.search ('\\.bib$', x) : - head = bib_header (x) - elif re.search ('\\.pod$', x) : - head = read_pod_header (x) - elif re.search ('\\.texinfo$', x) : - head = read_texinfo_header (x) - elif re.search ('\\.tely$', x): - head = read_tely_header (x) - else: - head = read_latex_header (x) - if head.title == '': - head.title = head.filename + m = re.search ('\\.([^.]*)$', x) + if m == None: + continue + + s = gulp_file (x) + head = read_header_funcs [m.group(1)] (s) + + head.filename = x + head.basename = re.sub ("\\.[^.]+", '', x) + print_html_head (l, pre, head) l.write ('') diff --git a/stepmake/stepmake/documentation-vars.make b/stepmake/stepmake/documentation-vars.make index dfe32198c6..82861d8227 100644 --- a/stepmake/stepmake/documentation-vars.make +++ b/stepmake/stepmake/documentation-vars.make @@ -5,6 +5,8 @@ at-ext = .in footify=$(PYTHON) $(step-bindir)/add-html-footer.py --name $(PACKAGE_NAME) --version $(TOPLEVEL_VERSION) --footer $(depth)/Documentation/footer.html.in +footify-all-command=$(footify) `$(FIND) . -name '*.html' -print` + # YO_FILES := $(wildcard *.yo) POD_FILES := $(wildcard *.pod) diff --git a/stepmake/stepmake/texinfo-rules.make b/stepmake/stepmake/texinfo-rules.make index f85d601f80..8879351964 100644 --- a/stepmake/stepmake/texinfo-rules.make +++ b/stepmake/stepmake/texinfo-rules.make @@ -7,7 +7,6 @@ $(outdir)/%.info: $(outdir)/%.texi $(outdir)/%.html: $(outdir)/%.texi -makeinfo --force --output=$@ --html --no-headers $< - $(footify) $@ $(outdir)/%.dvi: $(outdir)/%.texi # --clean only in >= 3.12s diff --git a/stepmake/stepmake/yolily-toplevel-targets.make b/stepmake/stepmake/yolily-toplevel-targets.make index 278d406382..72612a2cfb 100644 --- a/stepmake/stepmake/yolily-toplevel-targets.make +++ b/stepmake/stepmake/yolily-toplevel-targets.make @@ -16,9 +16,8 @@ htmldoc: $(MAKE) CONFIGSUFFIX='www' local-WWW $(MAKE) CONFIGSUFFIX='www' -C Documentation WWW rm -f `find . -name \*.html~ -print` - $(footify) + $(footify-all-command) find `find Documentation -type d -name 'out-www'` -not -name '*dvi' -not -name '*ly' -not -name '*tex' -not -name '*.ps' -not -name 'out-www' > wwwlist - tar cfz $(outdir)/htmldoc.tar.gz `cat wwwlist` `ls *.png out-www/$(distname).diff.gz $(ERRORLOG)` index.html localclean: -- 2.39.2